From b6db5b8af0af7ebfdd44cb53b09d63b819989338 Mon Sep 17 00:00:00 2001 From: Julio Reyes Date: Fri, 05 Jul 2013 14:13:11 +0000 Subject: Initial Commit --- diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..8cd5dac --- /dev/null +++ b/AUTHORS @@ -0,0 +1,14 @@ +Marco Pesenti Gritti +Dan Williams +Tomeu Vizoso +Dan Winship +Benjamin Berg +Eduardo Silva +Simon Schampijer +Bert Freudenberg +Guillaume Desmottes +Dafydd Harries +John (J5) Palmieri +Morgan Collett +Simon McVittie +Owen Williams diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..9e252af --- /dev/null +++ b/Makefile.am @@ -0,0 +1,14 @@ +SUBDIRS = bin data po src extensions + +DISTCLEANFILES = \ + intltool-extract \ + intltool-merge \ + intltool-update + +EXTRA_DIST = \ + $(bin_SCRIPTS) \ + intltool-merge.in \ + intltool-update.in \ + intltool-extract.in + +DISTCHECK_CONFIGURE_FLAGS = --disable-update-mimedb diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..d7f3a9a --- /dev/null +++ b/Makefile.in @@ -0,0 +1,740 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \ + install-sh missing py-compile +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +GZIP_ENV = --best +DIST_ARCHIVES = $(distdir).tar.bz2 +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = bin data po src extensions +DISTCLEANFILES = \ + intltool-extract \ + intltool-merge \ + intltool-update + +EXTRA_DIST = \ + $(bin_SCRIPTS) \ + intltool-merge.in \ + intltool-update.in \ + intltool-extract.in + +DISTCHECK_CONFIGURE_FLAGS = --disable-update-mimedb +all: all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/README b/README new file mode 100644 index 0000000..1f89810 --- /dev/null +++ b/README @@ -0,0 +1,44 @@ +Building +======== + +For details see: http://wiki.sugarlabs.org/go/Development_Team/Jhbuild + +Sugar-jhbuild will automatically download the latest of Sugar's +dependencies as well as Sugar itself directly from their source +repositories, rather than relying on source packages that may have +become stale. These are generic instructions on how to use jhbuild +to get up and running with Sugar. + + $ cd sugar-jhbuild + $ ./sugar-jhbuild update + $ ./sugar-jhbuild depscheck + $ ./sugar-jhbuild buildgit + +Running multiple instances on the same machine +============================================== + +You can use the SUGAR_PROFILE command line options. +For example: + +SUGAR_PROFILE=profile-1 sugar +SUGAR_PROFILE=profile-2 sugar +... + + +Emulator key bindings +===================== + +F1 Mesh zoom level +F2 Friends zoom level +F3 Home zoom level +F4 Activity zoom level + +Alt+f Show the frame +Alt+r Rotate the screen +Alt+o Toggle overlay visibility +Alt+= Open the developer console +Alt+0 Open the developer console +Alt+q Quit the emulator + +Ctrl+s Activate sketch mode in chat + diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..9bedbbf --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,2102 @@ +# generated automatically by aclocal 1.11.3 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, +# Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +dnl AM_GCONF_SOURCE_2 +dnl Defines GCONF_SCHEMA_CONFIG_SOURCE which is where you should install schemas +dnl (i.e. pass to gconftool-2 +dnl Defines GCONF_SCHEMA_FILE_DIR which is a filesystem directory where +dnl you should install foo.schemas files +dnl + +AC_DEFUN([AM_GCONF_SOURCE_2], +[ + if test "x$GCONF_SCHEMA_INSTALL_SOURCE" = "x"; then + GCONF_SCHEMA_CONFIG_SOURCE=`gconftool-2 --get-default-source` + else + GCONF_SCHEMA_CONFIG_SOURCE=$GCONF_SCHEMA_INSTALL_SOURCE + fi + + AC_ARG_WITH([gconf-source], + AC_HELP_STRING([--with-gconf-source=sourceaddress], + [Config database for installing schema files.]), + [GCONF_SCHEMA_CONFIG_SOURCE="$withval"],) + + AC_SUBST(GCONF_SCHEMA_CONFIG_SOURCE) + AC_MSG_RESULT([Using config source $GCONF_SCHEMA_CONFIG_SOURCE for schema installation]) + + if test "x$GCONF_SCHEMA_FILE_DIR" = "x"; then + GCONF_SCHEMA_FILE_DIR='$(sysconfdir)/gconf/schemas' + fi + + AC_ARG_WITH([gconf-schema-file-dir], + AC_HELP_STRING([--with-gconf-schema-file-dir=dir], + [Directory for installing schema files.]), + [GCONF_SCHEMA_FILE_DIR="$withval"],) + + AC_SUBST(GCONF_SCHEMA_FILE_DIR) + AC_MSG_RESULT([Using $GCONF_SCHEMA_FILE_DIR as install directory for schema files]) + + AC_ARG_ENABLE(schemas-install, + AC_HELP_STRING([--disable-schemas-install], + [Disable the schemas installation]), + [case ${enableval} in + yes|no) ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-schemas-install]) ;; + esac]) + AM_CONDITIONAL([GCONF_SCHEMAS_INSTALL], [test "$enable_schemas_install" != no]) +]) + +# Copyright (C) 1995-2002 Free Software Foundation, Inc. +# Copyright (C) 2001-2003,2004 Red Hat, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# +# Macro to add for using GNU gettext. +# Ulrich Drepper , 1995, 1996 +# +# Modified to never use included libintl. +# Owen Taylor , 12/15/1998 +# +# Major rework to remove unused code +# Owen Taylor , 12/11/2002 +# +# Added better handling of ALL_LINGUAS from GNU gettext version +# written by Bruno Haible, Owen Taylor 5/30/3002 +# +# Modified to require ngettext +# Matthias Clasen 08/06/2004 +# +# We need this here as well, since someone might use autoconf-2.5x +# to configure GLib then an older version to configure a package +# using AM_GLIB_GNU_GETTEXT +AC_PREREQ(2.53) + +dnl +dnl We go to great lengths to make sure that aclocal won't +dnl try to pull in the installed version of these macros +dnl when running aclocal in the glib directory. +dnl +m4_copy([AC_DEFUN],[glib_DEFUN]) +m4_copy([AC_REQUIRE],[glib_REQUIRE]) +dnl +dnl At the end, if we're not within glib, we'll define the public +dnl definitions in terms of our private definitions. +dnl + +# GLIB_LC_MESSAGES +#-------------------- +glib_DEFUN([GLIB_LC_MESSAGES], + [AC_CHECK_HEADERS([locale.h]) + if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your file defines LC_MESSAGES.]) + fi + fi]) + +# GLIB_PATH_PROG_WITH_TEST +#---------------------------- +dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], +[# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + /*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) + +# GLIB_WITH_NLS +#----------------- +glib_DEFUN([GLIB_WITH_NLS], + dnl NLS is obligatory + [USE_NLS=yes + AC_SUBST(USE_NLS) + + gt_cv_have_gettext=no + + CATOBJEXT=NONE + XGETTEXT=: + INTLLIBS= + + AC_CHECK_HEADER(libintl.h, + [gt_cv_func_dgettext_libintl="no" + libintl_extra_libs="" + + # + # First check in libc + # + AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, + [AC_TRY_LINK([ +#include +], + [return !ngettext ("","", 1)], + gt_cv_func_ngettext_libc=yes, + gt_cv_func_ngettext_libc=no) + ]) + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, + [AC_TRY_LINK([ +#include +], + [return !dgettext ("","")], + gt_cv_func_dgettext_libc=yes, + gt_cv_func_dgettext_libc=no) + ]) + fi + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + AC_CHECK_FUNCS(bind_textdomain_codeset) + fi + + # + # If we don't have everything we want, check in libintl + # + if test "$gt_cv_func_dgettext_libc" != "yes" \ + || test "$gt_cv_func_ngettext_libc" != "yes" \ + || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then + + AC_CHECK_LIB(intl, bindtextdomain, + [AC_CHECK_LIB(intl, ngettext, + [AC_CHECK_LIB(intl, dgettext, + gt_cv_func_dgettext_libintl=yes)])]) + + if test "$gt_cv_func_dgettext_libintl" != "yes" ; then + AC_MSG_CHECKING([if -liconv is needed to use gettext]) + AC_MSG_RESULT([]) + AC_CHECK_LIB(intl, ngettext, + [AC_CHECK_LIB(intl, dcgettext, + [gt_cv_func_dgettext_libintl=yes + libintl_extra_libs=-liconv], + :,-liconv)], + :,-liconv) + fi + + # + # If we found libintl, then check in it for bind_textdomain_codeset(); + # we'll prefer libc if neither have bind_textdomain_codeset(), + # and both have dgettext and ngettext + # + if test "$gt_cv_func_dgettext_libintl" = "yes" ; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $libintl_extra_libs" + unset ac_cv_func_bind_textdomain_codeset + AC_CHECK_FUNCS(bind_textdomain_codeset) + LIBS="$glib_save_LIBS" + + if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then + gt_cv_func_dgettext_libc=no + else + if test "$gt_cv_func_dgettext_libc" = "yes" \ + && test "$gt_cv_func_ngettext_libc" = "yes"; then + gt_cv_func_dgettext_libintl=no + fi + fi + fi + fi + + if test "$gt_cv_func_dgettext_libc" = "yes" \ + || test "$gt_cv_func_dgettext_libintl" = "yes"; then + gt_cv_have_gettext=yes + fi + + if test "$gt_cv_func_dgettext_libintl" = "yes"; then + INTLLIBS="-lintl $libintl_extra_libs" + fi + + if test "$gt_cv_have_gettext" = "yes"; then + AC_DEFINE(HAVE_GETTEXT,1, + [Define if the GNU gettext() function is already present or preinstalled.]) + GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl + if test "$MSGFMT" != "no"; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + AC_CHECK_FUNCS(dcgettext) + MSGFMT_OPTS= + AC_MSG_CHECKING([if msgfmt accepts -c]) + GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: test 1.0\n" +"PO-Revision-Date: 2007-02-15 12:01+0100\n" +"Last-Translator: test \n" +"Language-Team: C \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) + AC_SUBST(MSGFMT_OPTS) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr], + [CATOBJEXT=.gmo + DATADIRNAME=share], + [case $host in + *-*-solaris*) + dnl On Solaris, if bind_textdomain_codeset is in libc, + dnl GNU format message catalog is always supported, + dnl since both are added to the libc all together. + dnl Hence, we'd like to go with DATADIRNAME=share and + dnl and CATOBJEXT=.gmo in this case. + AC_CHECK_FUNC(bind_textdomain_codeset, + [CATOBJEXT=.gmo + DATADIRNAME=share], + [CATOBJEXT=.mo + DATADIRNAME=lib]) + ;; + *-*-openbsd*) + CATOBJEXT=.mo + DATADIRNAME=share + ;; + *) + CATOBJEXT=.mo + DATADIRNAME=lib + ;; + esac]) + LIBS="$glib_save_LIBS" + INSTOBJEXT=.mo + else + gt_cv_have_gettext=no + fi + fi + ]) + + if test "$gt_cv_have_gettext" = "yes" ; then + AC_DEFINE(ENABLE_NLS, 1, + [always defined to indicate that i18n is enabled]) + fi + + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is not GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + + AC_OUTPUT_COMMANDS( + [case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac]) + + dnl These rules are solely for the distribution goal. While doing this + dnl we only have to keep exactly one list of the available catalogs + dnl in configure.ac. + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + dnl Make all variables we use known to autoconf. + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(DATADIRNAME) + AC_SUBST(GMOFILES) + AC_SUBST(INSTOBJEXT) + AC_SUBST(INTLLIBS) + AC_SUBST(PO_IN_DATADIR_TRUE) + AC_SUBST(PO_IN_DATADIR_FALSE) + AC_SUBST(POFILES) + AC_SUBST(POSUB) + ]) + +# AM_GLIB_GNU_GETTEXT +# ------------------- +# Do checks necessary for use of gettext. If a suitable implementation +# of gettext is found in either in libintl or in the C library, +# it will set INTLLIBS to the libraries needed for use of gettext +# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable +# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() +# on various variables needed by the Makefile.in.in installed by +# glib-gettextize. +dnl +glib_DEFUN([GLIB_GNU_GETTEXT], + [AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + + GLIB_LC_MESSAGES + GLIB_WITH_NLS + + if test "$gt_cv_have_gettext" = "yes"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + AC_MSG_RESULT($LINGUAS) + fi + + dnl Construct list of names of catalog files to be constructed. + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but ($top_srcdir). + dnl Try to locate is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) + + dnl Generate list of files to be processed by xgettext which will + dnl be included in po/Makefile. + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + ]) + +# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) +# ------------------------------- +# Define VARIABLE to the location where catalog files will +# be installed by po/Makefile. +glib_DEFUN([GLIB_DEFINE_LOCALEDIR], +[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl +glib_save_prefix="$prefix" +glib_save_exec_prefix="$exec_prefix" +glib_save_datarootdir="$datarootdir" +test "x$prefix" = xNONE && prefix=$ac_default_prefix +test "x$exec_prefix" = xNONE && exec_prefix=$prefix +datarootdir=`eval echo "${datarootdir}"` +if test "x$CATOBJEXT" = "x.mo" ; then + localedir=`eval echo "${libdir}/locale"` +else + localedir=`eval echo "${datadir}/locale"` +fi +prefix="$glib_save_prefix" +exec_prefix="$glib_save_exec_prefix" +datarootdir="$glib_save_datarootdir" +AC_DEFINE_UNQUOTED($1, "$localedir", + [Define the location where the catalogs will be installed]) +]) + +dnl +dnl Now the definitions that aclocal will find +dnl +ifdef(glib_configure_ac,[],[ +AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) +AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) +])dnl + +# GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) +# +# Create a temporary file with TEST-FILE as its contents and pass the +# file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with +# 0 and perform ACTION-IF-FAIL for any other exit status. +AC_DEFUN([GLIB_RUN_PROG], +[cat >conftest.foo <<_ACEOF +$2 +_ACEOF +if AC_RUN_LOG([$1 conftest.foo]); then + m4_ifval([$3], [$3], [:]) +m4_ifvaln([$4], [else $4])dnl +echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD +sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD +fi]) + + + +dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) +# serial 42 IT_PROG_INTLTOOL +AC_DEFUN([IT_PROG_INTLTOOL], [ +AC_PREREQ([2.50])dnl +AC_REQUIRE([AM_NLS])dnl + +case "$am__api_version" in + 1.[01234]) + AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) + ;; + *) + ;; +esac + +INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` +INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` +INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` +if test -n "$1"; then + AC_MSG_CHECKING([for intltool >= $1]) + AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) + test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || + AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) +fi + +AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) +AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) +AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) +if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then + AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) +fi + +if test -z "$AM_DEFAULT_VERBOSITY"; then + AM_DEFAULT_VERBOSITY=1 +fi +AC_SUBST([AM_DEFAULT_VERBOSITY]) + +INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' +INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' +INTLTOOL__v_MERGE_0='@echo " ITMRG " [$]@;' +AC_SUBST(INTLTOOL_V_MERGE) +AC_SUBST(INTLTOOL__v_MERGE_) +AC_SUBST(INTLTOOL__v_MERGE_0) + +INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' +intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' +intltool__v_merge_options_0='-q' +AC_SUBST(INTLTOOL_V_MERGE_OPTIONS) +AC_SUBST(intltool__v_merge_options_) +AC_SUBST(intltool__v_merge_options_0) + + INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' +INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< [$]@' + INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' +INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' +if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then + INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< [$]@' +else + INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.[$][$]RANDOM && mkdir [$][$]_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u [$][$]_it_tmp_dir $< [$]@ && rmdir [$][$]_it_tmp_dir' +fi + INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' + +_IT_SUBST(INTLTOOL_DESKTOP_RULE) +_IT_SUBST(INTLTOOL_DIRECTORY_RULE) +_IT_SUBST(INTLTOOL_KEYS_RULE) +_IT_SUBST(INTLTOOL_PROP_RULE) +_IT_SUBST(INTLTOOL_OAF_RULE) +_IT_SUBST(INTLTOOL_PONG_RULE) +_IT_SUBST(INTLTOOL_SERVER_RULE) +_IT_SUBST(INTLTOOL_SHEET_RULE) +_IT_SUBST(INTLTOOL_SOUNDLIST_RULE) +_IT_SUBST(INTLTOOL_UI_RULE) +_IT_SUBST(INTLTOOL_XAM_RULE) +_IT_SUBST(INTLTOOL_KBD_RULE) +_IT_SUBST(INTLTOOL_XML_RULE) +_IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) +_IT_SUBST(INTLTOOL_CAVES_RULE) +_IT_SUBST(INTLTOOL_SCHEMAS_RULE) +_IT_SUBST(INTLTOOL_THEME_RULE) +_IT_SUBST(INTLTOOL_SERVICE_RULE) +_IT_SUBST(INTLTOOL_POLICY_RULE) + +# Check the gettext tools to make sure they are GNU +AC_PATH_PROG(XGETTEXT, xgettext) +AC_PATH_PROG(MSGMERGE, msgmerge) +AC_PATH_PROG(MSGFMT, msgfmt) +AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) +if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then + AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) +fi +xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" +mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" +mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" +if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then + AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) +fi + +AC_PATH_PROG(INTLTOOL_PERL, perl) +if test -z "$INTLTOOL_PERL"; then + AC_MSG_ERROR([perl not found]) +fi +AC_MSG_CHECKING([for perl >= 5.8.1]) +$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 +if test $? -ne 0; then + AC_MSG_ERROR([perl 5.8.1 is required for intltool]) +else + IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` + AC_MSG_RESULT([$IT_PERL_VERSION]) +fi +if test "x$2" != "xno-xml"; then + AC_MSG_CHECKING([for XML::Parser]) + if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then + AC_MSG_RESULT([ok]) + else + AC_MSG_ERROR([XML::Parser perl module is required for intltool]) + fi +fi + +# Substitute ALL_LINGUAS so we can use it in po/Makefile +AC_SUBST(ALL_LINGUAS) + +# Set DATADIRNAME correctly if it is not set yet +# (copied from glib-gettext.m4) +if test -z "$DATADIRNAME"; then + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[]], + [[extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr]])], + [DATADIRNAME=share], + [case $host in + *-*-solaris*) + dnl On Solaris, if bind_textdomain_codeset is in libc, + dnl GNU format message catalog is always supported, + dnl since both are added to the libc all together. + dnl Hence, we'd like to go with DATADIRNAME=share + dnl in this case. + AC_CHECK_FUNC(bind_textdomain_codeset, + [DATADIRNAME=share], [DATADIRNAME=lib]) + ;; + *) + [DATADIRNAME=lib] + ;; + esac]) +fi +AC_SUBST(DATADIRNAME) + +IT_PO_SUBDIR([po]) + +]) + + +# IT_PO_SUBDIR(DIRNAME) +# --------------------- +# All po subdirs have to be declared with this macro; the subdir "po" is +# declared by IT_PROG_INTLTOOL. +# +AC_DEFUN([IT_PO_SUBDIR], +[AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. +dnl +dnl The following CONFIG_COMMANDS should be executed at the very end +dnl of config.status. +AC_CONFIG_COMMANDS_PRE([ + AC_CONFIG_COMMANDS([$1/stamp-it], [ + if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then + AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) + fi + rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" + >"$1/stamp-it.tmp" + [sed '/^#/d + s/^[[].*] *// + /^[ ]*$/d + '"s|^| $ac_top_srcdir/|" \ + "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" + ] + [sed '/^POTFILES =/,/[^\\]$/ { + /^POTFILES =/!d + r $1/POTFILES + } + ' "$1/Makefile.in" >"$1/Makefile"] + rm -f "$1/Makefile.tmp" + mv "$1/stamp-it.tmp" "$1/stamp-it" + ]) +])dnl +]) + +# _IT_SUBST(VARIABLE) +# ------------------- +# Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST +# +AC_DEFUN([_IT_SUBST], +[ +AC_SUBST([$1]) +m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) +] +) + +# deprecated macros +AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) +# A hint is needed for aclocal from Automake <= 1.9.4: +# AC_DEFUN([AC_PROG_INTLTOOL], ...) + + +# nls.m4 serial 5 (gettext-0.18) +dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ([2.50]) + +AC_DEFUN([AM_NLS], +[ + AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE([nls], + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT([$USE_NLS]) + AC_SUBST([USE_NLS]) +]) + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT]) + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .]) + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software +# Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.3], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.3])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, +# 2010, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 12 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, +# Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, +# 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, +# Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software +# Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009, +# 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------- +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. +# +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. +# +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). +# +# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. +AC_DEFUN([AM_PATH_PYTHON], + [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], +[python python2 python3 python3.2 python3.1 python3.0 python2.7 dnl + python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0]) + + AC_ARG_VAR([PYTHON], [the Python interpreter]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) + + +# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# --------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalent (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). +AC_DEFUN([AM_PYTHON_CHECK_VERSION], + [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + diff --git a/bin/Makefile.am b/bin/Makefile.am new file mode 100644 index 0000000..8fc5692 --- /dev/null +++ b/bin/Makefile.am @@ -0,0 +1,13 @@ +python_scripts = \ + sugar-control-panel \ + sugar-emulator \ + sugar-install-bundle \ + sugar-launch \ + sugar-session \ + sugar-ui-check + +bin_SCRIPTS = \ + sugar \ + $(python_scripts) + +EXTRA_DIST = $(python_scripts) sugar.in diff --git a/bin/Makefile.in b/bin/Makefile.in new file mode 100644 index 0000000..7035d24 --- /dev/null +++ b/bin/Makefile.in @@ -0,0 +1,448 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = bin +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/sugar.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = sugar +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(bindir)" +SCRIPTS = $(bin_SCRIPTS) +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +python_scripts = \ + sugar-control-panel \ + sugar-emulator \ + sugar-install-bundle \ + sugar-launch \ + sugar-session \ + sugar-ui-check + +bin_SCRIPTS = \ + sugar \ + $(python_scripts) + +EXTRA_DIST = $(python_scripts) sugar.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bin/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign bin/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +sugar: $(top_builddir)/config.status $(srcdir)/sugar.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binSCRIPTS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-binSCRIPTS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-binSCRIPTS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/bin/sugar-control-panel b/bin/sugar-control-panel new file mode 100644 index 0000000..a97e3c0 --- /dev/null +++ b/bin/sugar-control-panel @@ -0,0 +1,28 @@ +#!/usr/bin/env python +# Copyright (C) 2008, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import sys + +from jarabe import config + +sys.path.append(config.ext_path) + +from jarabe.controlpanel.cmd import main + +main() + + diff --git a/bin/sugar-emulator b/bin/sugar-emulator new file mode 100755 index 0000000..308aac7 --- /dev/null +++ b/bin/sugar-emulator @@ -0,0 +1,14 @@ +#!/bin/sh + +if [ "$(id -u)" -eq 0 -o "$(id -ru)" -eq 0 ] ; then + echo Refusing to run as root. + exit 3 +fi + +# Source debug definitions +if [ -f ~/.sugar/debug ]; then + . ~/.sugar/debug +fi + +# Start emulator +python -c "import sys; from jarabe.util import emulator; sys.argv[0]='$0'; emulator.main()" "$@" diff --git a/bin/sugar-install-bundle b/bin/sugar-install-bundle new file mode 100644 index 0000000..52deada --- /dev/null +++ b/bin/sugar-install-bundle @@ -0,0 +1,20 @@ +#!/usr/bin/env python +import sys + +from sugar.bundle.activitybundle import ActivityBundle + +from dbus.mainloop.glib import DBusGMainLoop +DBusGMainLoop(set_as_default=True) + +def cmd_help(): + print 'Usage: sugar-install-bundle [ bundlename ] \n\n\ + Install an activity bundle (.xo). \n' + +if len(sys.argv) != 2: + cmd_help() + sys.exit(2) + +bundle = ActivityBundle(sys.argv[1]) +bundle.install() + +print "%s: '%s' installed." % (sys.argv[0], sys.argv[1]) diff --git a/bin/sugar-launch b/bin/sugar-launch new file mode 100644 index 0000000..7297a8e --- /dev/null +++ b/bin/sugar-launch @@ -0,0 +1,89 @@ +#!/usr/bin/env python + +# Copyright (C) 2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import sys +import dbus +from optparse import OptionParser + +from sugar.activity import activityfactory +from sugar.bundle.activitybundle import ActivityBundle + +usage = "usage: %prog [options] activity" +parser = OptionParser(usage) +parser.add_option("-d", "--debug", action="store_true", dest="debug", + help="launch activity inside gdb") +(options, args) = parser.parse_args() + +if len(args) == 0: + print 'You need to specify the activity bundle_id.' + sys.exit(1) + +bus = dbus.SessionBus() +proxy = bus.get_object('org.laptop.Shell', '/org/laptop/Shell') +path = dbus.Interface(proxy, 'org.laptop.Shell').GetBundlePath(args[0]) +if not path: + print 'Cannot find %s bundle.' % args[0] + sys.exit(1) + +activity = ActivityBundle(path) +cmd_args = activityfactory.get_command(activity) + +def _which(exec_file): + if 'PATH' in os.environ: + envpath = os.environ['PATH'] + else: + return None + + for path in envpath.split(os.pathsep): + fullname = os.path.join(path, exec_file) + if os.path.exists(fullname): + return fullname + + return None + +def _get_interpreter(exec_file): + if os.path.exists(exec_file): + abs_path = exec_file + else: + abs_path = _which(exec_file) + if not abs_path: + return exec_file + + f = open(abs_path) + line = f.readline(100) + if line.startswith('#!'): + cmds = line[2:].strip().split(' ') + cmds.append(abs_path) + + if '/usr/bin/env' in cmds: + cmds.remove('/usr/bin/env') + + return cmds + + return exec_file + +if options.debug: + act_args = cmd_args + cmd_args = ['gdb', '--args'] + cmd_args.extend(_get_interpreter(act_args.pop(0))) + cmd_args.extend(act_args) + +os.chdir(str(activity.get_path())) +os.execvpe(cmd_args[0], cmd_args, activityfactory.get_environment(activity)) + diff --git a/bin/sugar-session b/bin/sugar-session new file mode 100755 index 0000000..e9c8d50 --- /dev/null +++ b/bin/sugar-session @@ -0,0 +1,293 @@ +#!/usr/bin/env python +# Copyright (C) 2006, Red Hat, Inc. +# Copyright (C) 2009, One Laptop Per Child Association Inc +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import sys +import time +import subprocess +import shutil + +if os.environ.get('SUGAR_LOGGER_LEVEL', '') == 'debug': + print '%r STARTUP: Starting the shell' % time.time() + sys.stdout.flush() + +import gettext +import logging + +import gconf +import gtk +import gobject +import dbus.glib +import wnck + +try: + import xklavier +except ImportError: + logging.debug('Could not load xklavier for keyboard configuration') + +gtk.gdk.threads_init() +dbus.glib.threads_init() + +def cleanup_logs(logs_dir): + """Clean up the log directory, moving old logs into a numbered backup + directory. We only keep `_MAX_BACKUP_DIRS` of these backup directories + around; the rest are removed.""" + if not os.path.isdir(logs_dir): + os.makedirs(logs_dir) + + backup_logs = [] + backup_dirs = [] + for f in os.listdir(logs_dir): + path = os.path.join(logs_dir, f) + if os.path.isfile(path): + backup_logs.append(f) + elif os.path.isdir(path): + backup_dirs.append(path) + + if len(backup_dirs) > 3: + backup_dirs.sort() + root = backup_dirs[0] + for f in os.listdir(root): + os.remove(os.path.join(root, f)) + os.rmdir(root) + + if len(backup_logs) > 0: + name = str(int(time.time())) + backup_dir = os.path.join(logs_dir, name) + os.mkdir(backup_dir) + for log in backup_logs: + source_path = os.path.join(logs_dir, log) + dest_path = os.path.join(backup_dir, log) + os.rename(source_path, dest_path) + +def start_ui_service(): + from jarabe.view.service import UIService + + ui_service = UIService() + +def start_session_manager(): + from jarabe.model.session import get_session_manager + + session_manager = get_session_manager() + session_manager.start() + +def unfreeze_dcon_cb(): + logging.debug('STARTUP: unfreeze_dcon_cb') + from jarabe.model import screen + + screen.set_dcon_freeze(0) + +def setup_frame_cb(): + logging.debug('STARTUP: setup_frame_cb') + from jarabe import frame + frame.get_view() + +def setup_keyhandler_cb(): + logging.debug('STARTUP: setup_keyhandler_cb') + from jarabe.view import keyhandler + from jarabe import frame + keyhandler.setup(frame.get_view()) + +def setup_journal_cb(): + logging.debug('STARTUP: setup_journal_cb') + from jarabe.journal import journalactivity + journalactivity.start() + +def show_software_updates_cb(): + logging.debug('STARTUP: show_software_updates_cb') + if os.path.isfile(os.path.expanduser('~/.sugar-update')): + from jarabe.desktop import homewindow + home_window = homewindow.get_instance() + home_window.get_home_box().show_software_updates_alert() + +def setup_notification_service_cb(): + from jarabe.model import notifications + notifications.init() + +def setup_file_transfer_cb(): + from jarabe.model import filetransfer + filetransfer.init() + +def setup_keyboard_cb(): + logging.debug('STARTUP: setup_keyboard_cb') + + gconf_client = gconf.client_get_default() + have_config = False + + try: + display = gtk.gdk.display_get_default() + if display is not None: + engine = xklavier.Engine(display) + else: + logging.debug('setup_keyboard_cb: Could not get default display.') + return + + configrec = xklavier.ConfigRec() + configrec.get_from_server(engine) + + layouts = gconf_client.get_list(\ + '/desktop/sugar/peripherals/keyboard/layouts', gconf.VALUE_STRING) + layouts_list = [] + variants_list = [] + for layout in layouts: + layouts_list.append(layout.split('(')[0]) + variants_list.append(layout.split('(')[1][:-1]) + + if layouts_list and variants_list: + have_config = True + configrec.set_layouts(layouts_list) + configrec.set_variants(variants_list) + + model = gconf_client.get_string(\ + '/desktop/sugar/peripherals/keyboard/model') + if model: + have_config = True + configrec.set_model(model) + + options = gconf_client.get_list(\ + '/desktop/sugar/peripherals/keyboard/options', gconf.VALUE_STRING) + if options: + have_config = True + configrec.set_options(options) + + if have_config: + configrec.activate(engine) + except Exception: + logging.exception('Error during keyboard configuration') + +def setup_window_manager(): + logging.debug('STARTUP: window_manager') + + # have to reset cursor(metacity sets it on startup) + if subprocess.call('echo $DISPLAY; xsetroot -cursor_name left_ptr', shell=True): + logging.warning('Can not reset cursor') + + if subprocess.call('metacity-message disable-keybindings', + shell=True): + logging.warning('Can not disable metacity keybindings') + + if subprocess.call('metacity-message disable-mouse-button-modifiers', + shell=True): + logging.warning('Can not disable metacity mouse button modifiers') + +def bootstrap(): + setup_window_manager() + + from jarabe.view import launcher + launcher.setup() + + gobject.idle_add(setup_frame_cb) + gobject.idle_add(setup_keyhandler_cb) + gobject.idle_add(setup_journal_cb) + gobject.idle_add(setup_notification_service_cb) + gobject.idle_add(setup_file_transfer_cb) + gobject.idle_add(show_software_updates_cb) + + if sys.modules.has_key('xklavier'): + gobject.idle_add(setup_keyboard_cb) + +def set_fonts(): + client = gconf.client_get_default() + face = client.get_string('/desktop/sugar/font/default_face') + size = client.get_float('/desktop/sugar/font/default_size') + settings = gtk.settings_get_default() + settings.set_property("gtk-font-name", "%s %f" % (face, size)) + +def main(): + try: + from sugar import env + # Remove temporary files. See http://bugs.sugarlabs.org/ticket/1876 + data_dir = os.path.join(env.get_profile_path(), 'data') + shutil.rmtree(data_dir, ignore_errors=True) + os.makedirs(data_dir) + cleanup_logs(env.get_logs_path()) + except OSError, e: + # logs cleanup is not critical; it should not prevent sugar from + # starting if (for example) the disk is full or read-only. + print 'logs cleanup failed: %s' % e + + from sugar import logger + # NOTE: This needs to happen so early because some modules register translatable + # strings in the module scope. + from jarabe import config + gettext.bindtextdomain('sugar', config.locale_path) + gettext.bindtextdomain('sugar-toolkit', config.locale_path) + gettext.textdomain('sugar') + + from jarabe.desktop import homewindow + from jarabe.model import sound + from jarabe import intro + + logger.start('shell') + + client = gconf.client_get_default() + client.set_string('/apps/metacity/general/mouse_button_modifier', + '') + + timezone = client.get_string('/desktop/sugar/date/timezone') + if timezone is not None and timezone: + os.environ['TZ'] = timezone + + set_fonts() + + # this must be added early, so that it executes and unfreezes the screen + # even when we initially get blocked on the intro screen + gobject.idle_add(unfreeze_dcon_cb) + + # make sure we have the correct cursor in the intro screen + # TODO #3204 + if subprocess.call('echo $DISPLAY; xsetroot -cursor_name left_ptr', shell=True): + logging.warning('Can not reset cursor') + intro.check_profile() + + start_ui_service() + start_session_manager() + + sound.restore() + + sys.path.append(config.ext_path) + + icons_path = os.path.join(config.data_path, 'icons') + gtk.icon_theme_get_default().append_search_path(icons_path) + + # open homewindow before window_manager to let desktop appear fast + home_window = homewindow.get_instance() + home_window.show() + + screen = wnck.screen_get_default() + screen.connect('window-manager-changed', __window_manager_changed_cb) + _check_for_window_manager(screen) + + try: + gtk.main() + except KeyboardInterrupt: + print 'Ctrl+C pressed, exiting...' + + +def __window_manager_changed_cb(screen): + _check_for_window_manager(screen) + + +def _check_for_window_manager(screen): + wm_name = screen.get_window_manager_name() + if wm_name is not None: + screen.disconnect_by_func(__window_manager_changed_cb) + bootstrap() + + +main() diff --git a/bin/sugar-ui-check b/bin/sugar-ui-check new file mode 100644 index 0000000..4d71796 --- /dev/null +++ b/bin/sugar-ui-check @@ -0,0 +1,161 @@ +#!/usr/bin/env python +# Copyright (C) 2008, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +import os +import sys +import subprocess +import time + +import dbus +import gobject +import gtk +import wnck + +from sugar import wm + +from jarabe.model.shell import get_sugar_window_type +from sugar.bundle.activitybundle import ActivityBundle +from jarabe import config + +checks_queue = [] +checks_failed = [] +checks_succeeded = [] + +def get_dbus_version(): + p = subprocess.Popen(['dbus-daemon', '--version'], stdout=subprocess.PIPE) + + output = p.communicate()[0] + first_line = output.split('\n')[0] + + return first_line.split(' ')[-1] + +class Check(object): + def __init__(self): + self.name = None + self.succeeded = False + self.start_time = None + self.max_time = None + self.timeout = None + + def start(self): + logging.info('Start %s check.' % self.name) + + self.start_time = time.time() + + def get_failed(self): + if self.max_time and self.start_time: + if time.time() - self.start_time > self.max_time: + return True + return False + + failed = property(get_failed) + +class ShellCheck(Check): + def __init__(self): + Check.__init__(self) + + self.name = 'Shell' + self.max_time = 30 + + def start(self): + Check.start(self) + + screen = wnck.screen_get_default() + screen.connect('window-opened', self._window_opened_cb) + + def _window_opened_cb(self, screen, window): + if window.get_window_type() == wnck.WINDOW_DESKTOP: + self.succeeded = True + +class ActivityCheck(Check): + def __init__(self, bundle_id): + Check.__init__(self) + + self.name = bundle_id + self.max_time = 120 + + def start(self): + Check.start(self) + + self.launch_activity() + + screen = wnck.screen_get_default() + screen.connect('window-opened', self._window_opened_cb) + + def launch_activity(self): + from sugar.activity import activityfactory + + bus = dbus.SessionBus() + proxy = bus.get_object('org.laptop.Shell', '/org/laptop/Shell') + iface = dbus.Interface(proxy, 'org.laptop.Shell') + path = iface.GetBundlePath(self.name) + + if path: + activityfactory.create(ActivityBundle(path)) + else: + logging.error('Cannot find activity %s.' % self.name) + + def _window_opened_cb(self, screen, window): + if wm.get_bundle_id(window) == self.name and \ + get_sugar_window_type(window) != 'launcher': + self.succeeded = True + +def _timeout_cb(): + check = checks_queue[0] + if check.failed: + logging.info('%s check failed.' % (check.name)) + checks_failed.append(checks_queue.pop(0)) + elif check.succeeded: + logging.info('%s check succeeded.' % (check.name)) + checks_succeeded.append(checks_queue.pop(0)) + else: + return True + + if len(checks_queue) > 0: + checks_queue[0].start() + else: + gtk.main_quit() + + return True + +def main(): + os.environ['GTK2_RC_FILES'] = os.path.join(config.data_path, 'sugar-100.gtkrc') + + logging.basicConfig(level=logging.INFO, + format='%(asctime)s %(levelname)s %(message)s') + + checks_queue.append(ShellCheck()) + + if get_dbus_version() >= '1.2.1': + # FIXME needs to get a list of the installed activities + checks_queue.append(ActivityCheck('org.laptop.Log')) + checks_queue.append(ActivityCheck('org.laptop.Chat')) + checks_queue.append(ActivityCheck('org.laptop.WebActivity')) + checks_queue.append(ActivityCheck('org.laptop.Pippy')) + checks_queue.append(ActivityCheck('org.laptop.Terminal')) + checks_queue.append(ActivityCheck('org.laptop.AbiWordActivity')) + + checks_queue[0].start() + gobject.timeout_add(500, _timeout_cb) + + gtk.main() + + if len(checks_failed) > 0: + sys.exit(1) + +main() diff --git a/bin/sugar.in b/bin/sugar.in new file mode 100644 index 0000000..12098db --- /dev/null +++ b/bin/sugar.in @@ -0,0 +1,82 @@ +#!/bin/sh + +if [ "$(id -u)" -eq 0 -o "$(id -ru)" -eq 0 ] ; then + echo Refusing to run as root. + exit 3 +fi + +usage() { + cat </dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='Sugar' +PACKAGE_TARNAME='sugar' +PACKAGE_VERSION='0.96.3' +PACKAGE_STRING='Sugar 0.96.3' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_unique_file="configure.ac" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +GCONF_SCHEMAS_INSTALL_FALSE +GCONF_SCHEMAS_INSTALL_TRUE +GCONF_SCHEMA_FILE_DIR +GCONF_SCHEMA_CONFIG_SOURCE +GCONFTOOL +ENABLE_UPDATE_MIMEDB_FALSE +ENABLE_UPDATE_MIMEDB_TRUE +MKINSTALLDIRS +POSUB +POFILES +PO_IN_DATADIR_FALSE +PO_IN_DATADIR_TRUE +INTLLIBS +INSTOBJEXT +GMOFILES +CATOBJEXT +CATALOGS +MSGFMT_OPTS +EGREP +GREP +CPP +GETTEXT_PACKAGE +DATADIRNAME +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +ALL_LINGUAS +INTLTOOL_PERL +GMSGFMT +MSGFMT +MSGMERGE +XGETTEXT +INTLTOOL_POLICY_RULE +INTLTOOL_SERVICE_RULE +INTLTOOL_THEME_RULE +INTLTOOL_SCHEMAS_RULE +INTLTOOL_CAVES_RULE +INTLTOOL_XML_NOMERGE_RULE +INTLTOOL_XML_RULE +INTLTOOL_KBD_RULE +INTLTOOL_XAM_RULE +INTLTOOL_UI_RULE +INTLTOOL_SOUNDLIST_RULE +INTLTOOL_SHEET_RULE +INTLTOOL_SERVER_RULE +INTLTOOL_PONG_RULE +INTLTOOL_OAF_RULE +INTLTOOL_PROP_RULE +INTLTOOL_KEYS_RULE +INTLTOOL_DIRECTORY_RULE +INTLTOOL_DESKTOP_RULE +intltool__v_merge_options_0 +intltool__v_merge_options_ +INTLTOOL_V_MERGE_OPTIONS +INTLTOOL__v_MERGE_0 +INTLTOOL__v_MERGE_ +INTLTOOL_V_MERGE +AM_DEFAULT_VERBOSITY +INTLTOOL_EXTRACT +INTLTOOL_MERGE +INTLTOOL_UPDATE +USE_NLS +SHELL_LIBS +SHELL_CFLAGS +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +SUCROSE_VERSION +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +enable_nls +enable_dependency_tracking +enable_update_mimedb +with_gconf_source +with_gconf_schema_file_dir +enable_schemas_install +' + ac_precious_vars='build_alias +host_alias +target_alias +PYTHON +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +SHELL_CFLAGS +SHELL_LIBS +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures Sugar 0.96.3 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/sugar] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of Sugar 0.96.3:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --disable-nls do not use Native Language Support + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --disable-update-mimedb disable the update-mime-database after install + [default=no] + --disable-schemas-install + Disable the schemas installation + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gconf-source=sourceaddress + Config database for installing schema files. + --with-gconf-schema-file-dir=dir + Directory for installing schema files. + +Some influential environment variables: + PYTHON the Python interpreter + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + SHELL_CFLAGS + C compiler flags for SHELL, overriding pkg-config + SHELL_LIBS linker flags for SHELL, overriding pkg-config + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +Sugar configure 0.96.3 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by Sugar $as_me 0.96.3, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + +SUCROSE_VERSION="0.96.2" + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='sugar' + VERSION='0.96.3' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + + + + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if ${am_cv_python_platform+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if ${am_cv_python_pythondir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if ${am_cv_python_pyexecdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SHELL" >&5 +$as_echo_n "checking for SHELL... " >&6; } + +if test -n "$SHELL_CFLAGS"; then + pkg_cv_SHELL_CFLAGS="$SHELL_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygtk-2.0 gtk+-2.0 gconf-2.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygtk-2.0 gtk+-2.0 gconf-2.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SHELL_CFLAGS=`$PKG_CONFIG --cflags "pygtk-2.0 gtk+-2.0 gconf-2.0" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$SHELL_LIBS"; then + pkg_cv_SHELL_LIBS="$SHELL_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pygtk-2.0 gtk+-2.0 gconf-2.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "pygtk-2.0 gtk+-2.0 gconf-2.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SHELL_LIBS=`$PKG_CONFIG --libs "pygtk-2.0 gtk+-2.0 gconf-2.0" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + SHELL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "pygtk-2.0 gtk+-2.0 gconf-2.0" 2>&1` + else + SHELL_PKG_ERRORS=`$PKG_CONFIG --print-errors "pygtk-2.0 gtk+-2.0 gconf-2.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$SHELL_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (pygtk-2.0 gtk+-2.0 gconf-2.0) were not met: + +$SHELL_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables SHELL_CFLAGS +and SHELL_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables SHELL_CFLAGS +and SHELL_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } + +else + SHELL_CFLAGS=$pkg_cv_SHELL_CFLAGS + SHELL_LIBS=$pkg_cv_SHELL_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + +# Setup GETTEXT +# +ALL_LINGUAS="af am ar aym bg bi bn_IN bn ca cs da de dz el en es fa_AF fa ff fil fr gu ha he hi ht hu id ig is it ja km ko kos mg mi mk ml mn mr ms mvo nb ne nl pa pap pl ps pt_BR pt quz ro ru rw sd si sk sl sq sv sw ta te th tr tvl tzo ug ur vi wa yo zh_CN zh_TW" + +GETTEXT_PACKAGE=sugar + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } + # Check whether --enable-nls was given. +if test "${enable_nls+set}" = set; then : + enableval=$enable_nls; USE_NLS=$enableval +else + USE_NLS=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + + + +case "$am__api_version" in + 1.01234) + as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 + ;; + *) + ;; +esac + +INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.33 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` +INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` +INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` +if test -n "0.33"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.33" >&5 +$as_echo_n "checking for intltool >= 0.33... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 +$as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } + test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || + as_fn_error $? "Your intltool is too old. You need intltool 0.33 or later." "$LINENO" 5 +fi + +# Extract the first word of "intltool-update", so it can be a program name with args. +set dummy intltool-update; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $INTLTOOL_UPDATE in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE +if test -n "$INTLTOOL_UPDATE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 +$as_echo "$INTLTOOL_UPDATE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "intltool-merge", so it can be a program name with args. +set dummy intltool-merge; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_INTLTOOL_MERGE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $INTLTOOL_MERGE in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE +if test -n "$INTLTOOL_MERGE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 +$as_echo "$INTLTOOL_MERGE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "intltool-extract", so it can be a program name with args. +set dummy intltool-extract; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $INTLTOOL_EXTRACT in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT +if test -n "$INTLTOOL_EXTRACT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 +$as_echo "$INTLTOOL_EXTRACT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then + as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5 +fi + +if test -z "$AM_DEFAULT_VERBOSITY"; then + AM_DEFAULT_VERBOSITY=1 +fi + + +INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' +INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' +INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;' + + + + +INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' +intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' +intltool__v_merge_options_0='-q' + + + + + INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' +INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@' + INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' +INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' +if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then + INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@' +else + INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir' +fi + INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# Check the gettext tools to make sure they are GNU +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XGETTEXT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $XGETTEXT in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +XGETTEXT=$ac_cv_path_XGETTEXT +if test -n "$XGETTEXT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGMERGE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MSGMERGE in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MSGMERGE=$ac_cv_path_MSGMERGE +if test -n "$MSGMERGE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MSGFMT=$ac_cv_path_MSGFMT +if test -n "$MSGFMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GMSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then + as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 +fi +xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" +mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" +mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" +if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then + as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 +fi + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_INTLTOOL_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $INTLTOOL_PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL +if test -n "$INTLTOOL_PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5 +$as_echo "$INTLTOOL_PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test -z "$INTLTOOL_PERL"; then + as_fn_error $? "perl not found" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5 +$as_echo_n "checking for perl >= 5.8.1... " >&6; } +$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 +if test $? -ne 0; then + as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5 +else + IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5 +$as_echo "$IT_PERL_VERSION" >&6; } +fi +if test "x" != "xno-xml"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5 +$as_echo_n "checking for XML::Parser... " >&6; } + if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + else + as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5 + fi +fi + +# Substitute ALL_LINGUAS so we can use it in po/Makefile + + +# Set DATADIRNAME correctly if it is not set yet +# (copied from glib-gettext.m4) +if test -z "$DATADIRNAME"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + DATADIRNAME=share +else + case $host in + *-*-solaris*) + ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" +if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : + DATADIRNAME=share +else + DATADIRNAME=lib +fi + + ;; + *) + DATADIRNAME=lib + ;; + esac +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + + + + + + + +cat >>confdefs.h <<_ACEOF +#define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" +_ACEOF + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + for ac_header in locale.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" +if test "x$ac_cv_header_locale_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LOCALE_H 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_locale_h = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 +$as_echo_n "checking for LC_MESSAGES... " >&6; } +if ${am_cv_val_LC_MESSAGES+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +return LC_MESSAGES + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_val_LC_MESSAGES=yes +else + am_cv_val_LC_MESSAGES=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 +$as_echo "$am_cv_val_LC_MESSAGES" >&6; } + if test $am_cv_val_LC_MESSAGES = yes; then + +$as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h + + fi + fi + USE_NLS=yes + + + gt_cv_have_gettext=no + + CATOBJEXT=NONE + XGETTEXT=: + INTLLIBS= + + ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" +if test "x$ac_cv_header_libintl_h" = xyes; then : + gt_cv_func_dgettext_libintl="no" + libintl_extra_libs="" + + # + # First check in libc + # + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 +$as_echo_n "checking for ngettext in libc... " >&6; } +if ${gt_cv_func_ngettext_libc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +int +main () +{ +return !ngettext ("","", 1) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_ngettext_libc=yes +else + gt_cv_func_ngettext_libc=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 +$as_echo "$gt_cv_func_ngettext_libc" >&6; } + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 +$as_echo_n "checking for dgettext in libc... " >&6; } +if ${gt_cv_func_dgettext_libc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +int +main () +{ +return !dgettext ("","") + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_dgettext_libc=yes +else + gt_cv_func_dgettext_libc=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 +$as_echo "$gt_cv_func_dgettext_libc" >&6; } + fi + + if test "$gt_cv_func_ngettext_libc" = "yes" ; then + for ac_func in bind_textdomain_codeset +do : + ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" +if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_BIND_TEXTDOMAIN_CODESET 1 +_ACEOF + +fi +done + + fi + + # + # If we don't have everything we want, check in libintl + # + if test "$gt_cv_func_dgettext_libc" != "yes" \ + || test "$gt_cv_func_ngettext_libc" != "yes" \ + || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 +$as_echo_n "checking for bindtextdomain in -lintl... " >&6; } +if ${ac_cv_lib_intl_bindtextdomain+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char bindtextdomain (); +int +main () +{ +return bindtextdomain (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_intl_bindtextdomain=yes +else + ac_cv_lib_intl_bindtextdomain=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 +$as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } +if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 +$as_echo_n "checking for ngettext in -lintl... " >&6; } +if ${ac_cv_lib_intl_ngettext+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ngettext (); +int +main () +{ +return ngettext (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_intl_ngettext=yes +else + ac_cv_lib_intl_ngettext=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 +$as_echo "$ac_cv_lib_intl_ngettext" >&6; } +if test "x$ac_cv_lib_intl_ngettext" = xyes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 +$as_echo_n "checking for dgettext in -lintl... " >&6; } +if ${ac_cv_lib_intl_dgettext+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dgettext (); +int +main () +{ +return dgettext (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_intl_dgettext=yes +else + ac_cv_lib_intl_dgettext=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 +$as_echo "$ac_cv_lib_intl_dgettext" >&6; } +if test "x$ac_cv_lib_intl_dgettext" = xyes; then : + gt_cv_func_dgettext_libintl=yes +fi + +fi + +fi + + + if test "$gt_cv_func_dgettext_libintl" != "yes" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 +$as_echo_n "checking if -liconv is needed to use gettext... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 +$as_echo_n "checking for ngettext in -lintl... " >&6; } +if ${ac_cv_lib_intl_ngettext+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl -liconv $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ngettext (); +int +main () +{ +return ngettext (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_intl_ngettext=yes +else + ac_cv_lib_intl_ngettext=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 +$as_echo "$ac_cv_lib_intl_ngettext" >&6; } +if test "x$ac_cv_lib_intl_ngettext" = xyes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 +$as_echo_n "checking for dcgettext in -lintl... " >&6; } +if ${ac_cv_lib_intl_dcgettext+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl -liconv $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dcgettext (); +int +main () +{ +return dcgettext (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_intl_dcgettext=yes +else + ac_cv_lib_intl_dcgettext=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 +$as_echo "$ac_cv_lib_intl_dcgettext" >&6; } +if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : + gt_cv_func_dgettext_libintl=yes + libintl_extra_libs=-liconv +else + : +fi + +else + : +fi + + fi + + # + # If we found libintl, then check in it for bind_textdomain_codeset(); + # we'll prefer libc if neither have bind_textdomain_codeset(), + # and both have dgettext and ngettext + # + if test "$gt_cv_func_dgettext_libintl" = "yes" ; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $libintl_extra_libs" + unset ac_cv_func_bind_textdomain_codeset + for ac_func in bind_textdomain_codeset +do : + ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" +if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_BIND_TEXTDOMAIN_CODESET 1 +_ACEOF + +fi +done + + LIBS="$glib_save_LIBS" + + if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then + gt_cv_func_dgettext_libc=no + else + if test "$gt_cv_func_dgettext_libc" = "yes" \ + && test "$gt_cv_func_ngettext_libc" = "yes"; then + gt_cv_func_dgettext_libintl=no + fi + fi + fi + fi + + if test "$gt_cv_func_dgettext_libc" = "yes" \ + || test "$gt_cv_func_dgettext_libintl" = "yes"; then + gt_cv_have_gettext=yes + fi + + if test "$gt_cv_func_dgettext_libintl" = "yes"; then + INTLLIBS="-lintl $libintl_extra_libs" + fi + + if test "$gt_cv_have_gettext" = "yes"; then + +$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h + + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGFMT" in + /*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "$MSGFMT" != "no"; then + glib_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + for ac_func in dcgettext +do : + ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" +if test "x$ac_cv_func_dcgettext" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DCGETTEXT 1 +_ACEOF + +fi +done + + MSGFMT_OPTS= + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 +$as_echo_n "checking if msgfmt accepts -c... " >&6; } + cat >conftest.foo <<_ACEOF + +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: test 1.0\n" +"PO-Revision-Date: 2007-02-15 12:01+0100\n" +"Last-Translator: test \n" +"Language-Team: C \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" + +_ACEOF +if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 + ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +echo "$as_me: failed input was:" >&5 +sed 's/^/| /' conftest.foo >&5 +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GMSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XGETTEXT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + CATOBJEXT=.gmo + DATADIRNAME=share +else + case $host in + *-*-solaris*) + ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" +if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : + CATOBJEXT=.gmo + DATADIRNAME=share +else + CATOBJEXT=.mo + DATADIRNAME=lib +fi + + ;; + *-*-openbsd*) + CATOBJEXT=.mo + DATADIRNAME=share + ;; + *) + CATOBJEXT=.mo + DATADIRNAME=lib + ;; + esac +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$glib_save_LIBS" + INSTOBJEXT=.mo + else + gt_cv_have_gettext=no + fi + fi + +fi + + + + if test "$gt_cv_have_gettext" = "yes" ; then + +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + + fi + + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 +$as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + + ac_config_commands="$ac_config_commands default-1" + + + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + + + + + + + + + + + + + if test "$gt_cv_have_gettext" = "yes"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 +$as_echo_n "checking for catalogs to be installed... " >&6; } + NEW_LINGUAS= + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + NEW_LINGUAS="$NEW_LINGUAS $presentlang" + fi + done + LINGUAS=$NEW_LINGUAS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 +$as_echo "$LINGUAS" >&6; } + fi + + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + + + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + + +# Check whether --enable-update-mimedb was given. +if test "${enable_update_mimedb+set}" = set; then : + enableval=$enable_update_mimedb; +else + enable_update_mimedb=yes +fi + + if test x$enable_update_mimedb = xyes; then + ENABLE_UPDATE_MIMEDB_TRUE= + ENABLE_UPDATE_MIMEDB_FALSE='#' +else + ENABLE_UPDATE_MIMEDB_TRUE='#' + ENABLE_UPDATE_MIMEDB_FALSE= +fi + + +# Verify that gconftool is installed +# +# Extract the first word of "gconftool-2", so it can be a program name with args. +set dummy gconftool-2; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GCONFTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GCONFTOOL in + [\\/]* | ?:[\\/]*) + ac_cv_path_GCONFTOOL="$GCONFTOOL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GCONFTOOL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GCONFTOOL" && ac_cv_path_GCONFTOOL="no" + ;; +esac +fi +GCONFTOOL=$ac_cv_path_GCONFTOOL +if test -n "$GCONFTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCONFTOOL" >&5 +$as_echo "$GCONFTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +if test "$GCONFTOOL" = no; then + as_fn_error $? "gconftool-2 executable not found in your path - should be installed with GConf" "$LINENO" 5 +fi + + + if test "x$GCONF_SCHEMA_INSTALL_SOURCE" = "x"; then + GCONF_SCHEMA_CONFIG_SOURCE=`gconftool-2 --get-default-source` + else + GCONF_SCHEMA_CONFIG_SOURCE=$GCONF_SCHEMA_INSTALL_SOURCE + fi + + +# Check whether --with-gconf-source was given. +if test "${with_gconf_source+set}" = set; then : + withval=$with_gconf_source; GCONF_SCHEMA_CONFIG_SOURCE="$withval" +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using config source $GCONF_SCHEMA_CONFIG_SOURCE for schema installation" >&5 +$as_echo "Using config source $GCONF_SCHEMA_CONFIG_SOURCE for schema installation" >&6; } + + if test "x$GCONF_SCHEMA_FILE_DIR" = "x"; then + GCONF_SCHEMA_FILE_DIR='$(sysconfdir)/gconf/schemas' + fi + + +# Check whether --with-gconf-schema-file-dir was given. +if test "${with_gconf_schema_file_dir+set}" = set; then : + withval=$with_gconf_schema_file_dir; GCONF_SCHEMA_FILE_DIR="$withval" +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using $GCONF_SCHEMA_FILE_DIR as install directory for schema files" >&5 +$as_echo "Using $GCONF_SCHEMA_FILE_DIR as install directory for schema files" >&6; } + + # Check whether --enable-schemas-install was given. +if test "${enable_schemas_install+set}" = set; then : + enableval=$enable_schemas_install; case ${enableval} in + yes|no) ;; + *) as_fn_error $? "bad value ${enableval} for --enable-schemas-install" "$LINENO" 5 ;; + esac +fi + + if test "$enable_schemas_install" != no; then + GCONF_SCHEMAS_INSTALL_TRUE= + GCONF_SCHEMAS_INSTALL_FALSE='#' +else + GCONF_SCHEMAS_INSTALL_TRUE='#' + GCONF_SCHEMAS_INSTALL_FALSE= +fi + + + + +ac_config_files="$ac_config_files bin/Makefile bin/sugar data/icons/Makefile data/Makefile data/sugar-emulator.desktop extensions/cpsection/aboutcomputer/Makefile extensions/cpsection/aboutme/Makefile extensions/cpsection/datetime/Makefile extensions/cpsection/frame/Makefile extensions/cpsection/keyboard/Makefile extensions/cpsection/language/Makefile extensions/cpsection/modemconfiguration/Makefile extensions/cpsection/Makefile extensions/cpsection/network/Makefile extensions/cpsection/power/Makefile extensions/cpsection/updater/backends/Makefile extensions/cpsection/updater/Makefile extensions/deviceicon/Makefile extensions/globalkey/Makefile extensions/Makefile Makefile po/Makefile.in src/jarabe/config.py src/jarabe/controlpanel/Makefile src/jarabe/desktop/Makefile src/jarabe/frame/Makefile src/jarabe/intro/Makefile src/jarabe/journal/Makefile src/jarabe/Makefile src/jarabe/model/Makefile src/jarabe/util/Makefile src/jarabe/util/telepathy/Makefile src/jarabe/view/Makefile src/Makefile" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + + ac_config_commands="$ac_config_commands po/stamp-it" + + +if test -z "${ENABLE_UPDATE_MIMEDB_TRUE}" && test -z "${ENABLE_UPDATE_MIMEDB_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_UPDATE_MIMEDB\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GCONF_SCHEMAS_INSTALL_TRUE}" && test -z "${GCONF_SCHEMAS_INSTALL_FALSE}"; then + as_fn_error $? "conditional \"GCONF_SCHEMAS_INSTALL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by Sugar $as_me 0.96.3, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +Sugar config.status 0.96.3 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "bin/Makefile") CONFIG_FILES="$CONFIG_FILES bin/Makefile" ;; + "bin/sugar") CONFIG_FILES="$CONFIG_FILES bin/sugar" ;; + "data/icons/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/Makefile" ;; + "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; + "data/sugar-emulator.desktop") CONFIG_FILES="$CONFIG_FILES data/sugar-emulator.desktop" ;; + "extensions/cpsection/aboutcomputer/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/cpsection/aboutcomputer/Makefile" ;; + "extensions/cpsection/aboutme/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/cpsection/aboutme/Makefile" ;; + "extensions/cpsection/datetime/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/cpsection/datetime/Makefile" ;; + "extensions/cpsection/frame/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/cpsection/frame/Makefile" ;; + "extensions/cpsection/keyboard/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/cpsection/keyboard/Makefile" ;; + "extensions/cpsection/language/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/cpsection/language/Makefile" ;; + "extensions/cpsection/modemconfiguration/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/cpsection/modemconfiguration/Makefile" ;; + "extensions/cpsection/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/cpsection/Makefile" ;; + "extensions/cpsection/network/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/cpsection/network/Makefile" ;; + "extensions/cpsection/power/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/cpsection/power/Makefile" ;; + "extensions/cpsection/updater/backends/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/cpsection/updater/backends/Makefile" ;; + "extensions/cpsection/updater/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/cpsection/updater/Makefile" ;; + "extensions/deviceicon/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/deviceicon/Makefile" ;; + "extensions/globalkey/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/globalkey/Makefile" ;; + "extensions/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Makefile" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "src/jarabe/config.py") CONFIG_FILES="$CONFIG_FILES src/jarabe/config.py" ;; + "src/jarabe/controlpanel/Makefile") CONFIG_FILES="$CONFIG_FILES src/jarabe/controlpanel/Makefile" ;; + "src/jarabe/desktop/Makefile") CONFIG_FILES="$CONFIG_FILES src/jarabe/desktop/Makefile" ;; + "src/jarabe/frame/Makefile") CONFIG_FILES="$CONFIG_FILES src/jarabe/frame/Makefile" ;; + "src/jarabe/intro/Makefile") CONFIG_FILES="$CONFIG_FILES src/jarabe/intro/Makefile" ;; + "src/jarabe/journal/Makefile") CONFIG_FILES="$CONFIG_FILES src/jarabe/journal/Makefile" ;; + "src/jarabe/Makefile") CONFIG_FILES="$CONFIG_FILES src/jarabe/Makefile" ;; + "src/jarabe/model/Makefile") CONFIG_FILES="$CONFIG_FILES src/jarabe/model/Makefile" ;; + "src/jarabe/util/Makefile") CONFIG_FILES="$CONFIG_FILES src/jarabe/util/Makefile" ;; + "src/jarabe/util/telepathy/Makefile") CONFIG_FILES="$CONFIG_FILES src/jarabe/util/telepathy/Makefile" ;; + "src/jarabe/view/Makefile") CONFIG_FILES="$CONFIG_FILES src/jarabe/view/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac ;; + "po/stamp-it":C) + if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then + as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 + fi + rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" + >"po/stamp-it.tmp" + sed '/^#/d + s/^[[].*] *// + /^[ ]*$/d + '"s|^| $ac_top_srcdir/|" \ + "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" + + sed '/^POTFILES =/,/[^\\]$/ { + /^POTFILES =/!d + r po/POTFILES + } + ' "po/Makefile.in" >"po/Makefile" + rm -f "po/Makefile.tmp" + mv "po/stamp-it.tmp" "po/stamp-it" + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..f444409 --- /dev/null +++ b/configure.ac @@ -0,0 +1,84 @@ +AC_INIT([Sugar],[0.96.3],[],[sugar]) + +AC_PREREQ([2.59]) + +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_SRCDIR([configure.ac]) + +SUCROSE_VERSION="0.96.2" +AC_SUBST(SUCROSE_VERSION) + +AM_INIT_AUTOMAKE([1.9 foreign dist-bzip2 no-dist-gzip]) + +AM_MAINTAINER_MODE + +AM_PATH_PYTHON + +PKG_CHECK_MODULES(SHELL, pygtk-2.0 gtk+-2.0 gconf-2.0) + +# Setup GETTEXT +# +ALL_LINGUAS="af am ar aym bg bi bn_IN bn ca cs da de dz el en es fa_AF fa ff fil fr gu ha he hi ht hu id ig is it ja km ko kos mg mi mk ml mn mr ms mvo nb ne nl pa pap pl ps pt_BR pt quz ro ru rw sd si sk sl sq sv sw ta te th tr tvl tzo ug ur vi wa yo zh_CN zh_TW" + +GETTEXT_PACKAGE=sugar +AC_PROG_INTLTOOL([0.33]) +AC_SUBST(GETTEXT_PACKAGE) +AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package]) +AM_GLIB_GNU_GETTEXT + +AC_ARG_ENABLE(update-mimedb, + AC_HELP_STRING([--disable-update-mimedb], + [disable the update-mime-database after install [default=no]]),, + enable_update_mimedb=yes) +AM_CONDITIONAL(ENABLE_UPDATE_MIMEDB, test x$enable_update_mimedb = xyes) + +# Verify that gconftool is installed +# +AC_PATH_PROG(GCONFTOOL, gconftool-2, no) + +if test "$GCONFTOOL" = no; then + AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf]) +fi + +AM_GCONF_SOURCE_2 + + +AC_CONFIG_FILES([ +bin/Makefile +bin/sugar +data/icons/Makefile +data/Makefile +data/sugar-emulator.desktop +extensions/cpsection/aboutcomputer/Makefile +extensions/cpsection/aboutme/Makefile +extensions/cpsection/datetime/Makefile +extensions/cpsection/frame/Makefile +extensions/cpsection/keyboard/Makefile +extensions/cpsection/language/Makefile +extensions/cpsection/modemconfiguration/Makefile +extensions/cpsection/Makefile +extensions/cpsection/network/Makefile +extensions/cpsection/power/Makefile +extensions/cpsection/updater/backends/Makefile +extensions/cpsection/updater/Makefile +extensions/deviceicon/Makefile +extensions/globalkey/Makefile +extensions/Makefile +Makefile +po/Makefile.in +src/jarabe/config.py +src/jarabe/controlpanel/Makefile +src/jarabe/desktop/Makefile +src/jarabe/frame/Makefile +src/jarabe/intro/Makefile +src/jarabe/journal/Makefile +src/jarabe/Makefile +src/jarabe/model/Makefile +src/jarabe/util/Makefile +src/jarabe/util/telepathy/Makefile +src/jarabe/view/Makefile +src/Makefile +]) + +AC_OUTPUT + diff --git a/data/GPLv2 b/data/GPLv2 new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/data/GPLv2 @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/data/Makefile.am b/data/Makefile.am new file mode 100644 index 0000000..6a62d23 --- /dev/null +++ b/data/Makefile.am @@ -0,0 +1,68 @@ +SUBDIRS = icons + +sugar-72.gtkrc: gtkrc.em + $(srcdir)/em.py -D scaling=\'72\' $(srcdir)/gtkrc.em > \ + $(top_builddir)/data/sugar-72.gtkrc + +sugar-100.gtkrc: gtkrc.em + $(srcdir)/em.py -D scaling=\'100\' $(srcdir)/gtkrc.em > \ + $(top_builddir)/data/sugar-100.gtkrc + +sugardir = $(pkgdatadir)/data +sugar_DATA = \ + activities.defaults \ + kbdconfig \ + mime.defaults \ + GPLv2 \ + $(GTKRC_FILES) + +GTKRC_FILES = \ + sugar-72.gtkrc \ + sugar-100.gtkrc + +xsessionsdir = $(datadir)/xsessions +xsessions_DATA = sugar.desktop + +applicationsdir = $(datadir)/applications +applications_DATA = sugar-emulator.desktop + +mime_xml_in_files = sugar.xml.in +mime_xml_files = $(mime_xml_in_files:.xml.in=.xml) +@INTLTOOL_XML_RULE@ + +mimedir = $(datadir)/mime/packages +mime_DATA = $(mime_xml_files) + +nmservicedir = $(sysconfdir)/dbus-1/system.d/ +nmservice_DATA = nm-user-settings.conf + +install-data-hook: +if ENABLE_UPDATE_MIMEDB + if [ -z "$$DESTDIR" ]; then \ + update-mime-database "$(datadir)/mime"; \ + fi +endif + +uninstall-hook: +if ENABLE_UPDATE_MIMEDB + if [ -z "$$DESTDIR" ]; then \ + update-mime-database "$(datadir)/mime"; \ + fi +endif + +@INTLTOOL_SCHEMAS_RULE@ + +schemadir = $(GCONF_SCHEMA_FILE_DIR) +schema_in_files = sugar.schemas.in +schema_DATA = $(schema_in_files:.schemas.in=.schemas) + +install-data-local: $(schema_DATA) +if GCONF_SCHEMAS_INSTALL + GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule sugar.schemas 2>&1 > /dev/null +endif + +icondir = $(datadir)/icons/hicolor/scalable/apps +icon_DATA = sugar-xo.svg + +EXTRA_DIST = $(sugar_DATA) $(xsessions_DATA) $(nmservice_DATA) $(mime_xml_in_files) em.py gtkrc.em $(schema_in_files) $(icon_DATA) +CLEANFILES = $(GTKRC_FILES) $(mime_xml_files) $(schema_DATA) diff --git a/data/Makefile.in b/data/Makefile.in new file mode 100644 index 0000000..34f4ff5 --- /dev/null +++ b/data/Makefile.in @@ -0,0 +1,805 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = data +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/sugar-emulator.desktop.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = sugar-emulator.desktop +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(applicationsdir)" \ + "$(DESTDIR)$(icondir)" "$(DESTDIR)$(mimedir)" \ + "$(DESTDIR)$(nmservicedir)" "$(DESTDIR)$(schemadir)" \ + "$(DESTDIR)$(sugardir)" "$(DESTDIR)$(xsessionsdir)" +DATA = $(applications_DATA) $(icon_DATA) $(mime_DATA) \ + $(nmservice_DATA) $(schema_DATA) $(sugar_DATA) \ + $(xsessions_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = icons +sugardir = $(pkgdatadir)/data +sugar_DATA = \ + activities.defaults \ + kbdconfig \ + mime.defaults \ + GPLv2 \ + $(GTKRC_FILES) + +GTKRC_FILES = \ + sugar-72.gtkrc \ + sugar-100.gtkrc + +xsessionsdir = $(datadir)/xsessions +xsessions_DATA = sugar.desktop +applicationsdir = $(datadir)/applications +applications_DATA = sugar-emulator.desktop +mime_xml_in_files = sugar.xml.in +mime_xml_files = $(mime_xml_in_files:.xml.in=.xml) +mimedir = $(datadir)/mime/packages +mime_DATA = $(mime_xml_files) +nmservicedir = $(sysconfdir)/dbus-1/system.d/ +nmservice_DATA = nm-user-settings.conf +schemadir = $(GCONF_SCHEMA_FILE_DIR) +schema_in_files = sugar.schemas.in +schema_DATA = $(schema_in_files:.schemas.in=.schemas) +icondir = $(datadir)/icons/hicolor/scalable/apps +icon_DATA = sugar-xo.svg +EXTRA_DIST = $(sugar_DATA) $(xsessions_DATA) $(nmservice_DATA) $(mime_xml_in_files) em.py gtkrc.em $(schema_in_files) $(icon_DATA) +CLEANFILES = $(GTKRC_FILES) $(mime_xml_files) $(schema_DATA) +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign data/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +sugar-emulator.desktop: $(top_builddir)/config.status $(srcdir)/sugar-emulator.desktop.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-applicationsDATA: $(applications_DATA) + @$(NORMAL_INSTALL) + test -z "$(applicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(applicationsdir)" + @list='$(applications_DATA)'; test -n "$(applicationsdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(applicationsdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(applicationsdir)" || exit $$?; \ + done + +uninstall-applicationsDATA: + @$(NORMAL_UNINSTALL) + @list='$(applications_DATA)'; test -n "$(applicationsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(applicationsdir)'; $(am__uninstall_files_from_dir) +install-iconDATA: $(icon_DATA) + @$(NORMAL_INSTALL) + test -z "$(icondir)" || $(MKDIR_P) "$(DESTDIR)$(icondir)" + @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ + done + +uninstall-iconDATA: + @$(NORMAL_UNINSTALL) + @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) +install-mimeDATA: $(mime_DATA) + @$(NORMAL_INSTALL) + test -z "$(mimedir)" || $(MKDIR_P) "$(DESTDIR)$(mimedir)" + @list='$(mime_DATA)'; test -n "$(mimedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimedir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(mimedir)" || exit $$?; \ + done + +uninstall-mimeDATA: + @$(NORMAL_UNINSTALL) + @list='$(mime_DATA)'; test -n "$(mimedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(mimedir)'; $(am__uninstall_files_from_dir) +install-nmserviceDATA: $(nmservice_DATA) + @$(NORMAL_INSTALL) + test -z "$(nmservicedir)" || $(MKDIR_P) "$(DESTDIR)$(nmservicedir)" + @list='$(nmservice_DATA)'; test -n "$(nmservicedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nmservicedir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(nmservicedir)" || exit $$?; \ + done + +uninstall-nmserviceDATA: + @$(NORMAL_UNINSTALL) + @list='$(nmservice_DATA)'; test -n "$(nmservicedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(nmservicedir)'; $(am__uninstall_files_from_dir) +install-schemaDATA: $(schema_DATA) + @$(NORMAL_INSTALL) + test -z "$(schemadir)" || $(MKDIR_P) "$(DESTDIR)$(schemadir)" + @list='$(schema_DATA)'; test -n "$(schemadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(schemadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(schemadir)" || exit $$?; \ + done + +uninstall-schemaDATA: + @$(NORMAL_UNINSTALL) + @list='$(schema_DATA)'; test -n "$(schemadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(schemadir)'; $(am__uninstall_files_from_dir) +install-sugarDATA: $(sugar_DATA) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_DATA)'; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done + +uninstall-sugarDATA: + @$(NORMAL_UNINSTALL) + @list='$(sugar_DATA)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(sugardir)'; $(am__uninstall_files_from_dir) +install-xsessionsDATA: $(xsessions_DATA) + @$(NORMAL_INSTALL) + test -z "$(xsessionsdir)" || $(MKDIR_P) "$(DESTDIR)$(xsessionsdir)" + @list='$(xsessions_DATA)'; test -n "$(xsessionsdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(xsessionsdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(xsessionsdir)" || exit $$?; \ + done + +uninstall-xsessionsDATA: + @$(NORMAL_UNINSTALL) + @list='$(xsessions_DATA)'; test -n "$(xsessionsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(xsessionsdir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(applicationsdir)" "$(DESTDIR)$(icondir)" "$(DESTDIR)$(mimedir)" "$(DESTDIR)$(nmservicedir)" "$(DESTDIR)$(schemadir)" "$(DESTDIR)$(sugardir)" "$(DESTDIR)$(xsessionsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-applicationsDATA install-data-local \ + install-iconDATA install-mimeDATA install-nmserviceDATA \ + install-schemaDATA install-sugarDATA install-xsessionsDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-applicationsDATA uninstall-iconDATA \ + uninstall-mimeDATA uninstall-nmserviceDATA \ + uninstall-schemaDATA uninstall-sugarDATA \ + uninstall-xsessionsDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-data-am install-strip tags-recursive \ + uninstall-am + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-applicationsDATA install-data \ + install-data-am install-data-hook install-data-local \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-iconDATA install-info \ + install-info-am install-man install-mimeDATA \ + install-nmserviceDATA install-pdf install-pdf-am install-ps \ + install-ps-am install-schemaDATA install-strip \ + install-sugarDATA install-xsessionsDATA installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-applicationsDATA uninstall-hook uninstall-iconDATA \ + uninstall-mimeDATA uninstall-nmserviceDATA \ + uninstall-schemaDATA uninstall-sugarDATA \ + uninstall-xsessionsDATA + + +sugar-72.gtkrc: gtkrc.em + $(srcdir)/em.py -D scaling=\'72\' $(srcdir)/gtkrc.em > \ + $(top_builddir)/data/sugar-72.gtkrc + +sugar-100.gtkrc: gtkrc.em + $(srcdir)/em.py -D scaling=\'100\' $(srcdir)/gtkrc.em > \ + $(top_builddir)/data/sugar-100.gtkrc +@INTLTOOL_XML_RULE@ + +install-data-hook: +@ENABLE_UPDATE_MIMEDB_TRUE@ if [ -z "$$DESTDIR" ]; then \ +@ENABLE_UPDATE_MIMEDB_TRUE@ update-mime-database "$(datadir)/mime"; \ +@ENABLE_UPDATE_MIMEDB_TRUE@ fi + +uninstall-hook: +@ENABLE_UPDATE_MIMEDB_TRUE@ if [ -z "$$DESTDIR" ]; then \ +@ENABLE_UPDATE_MIMEDB_TRUE@ update-mime-database "$(datadir)/mime"; \ +@ENABLE_UPDATE_MIMEDB_TRUE@ fi + +@INTLTOOL_SCHEMAS_RULE@ + +install-data-local: $(schema_DATA) +@GCONF_SCHEMAS_INSTALL_TRUE@ GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule sugar.schemas 2>&1 > /dev/null + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/data/activities.defaults b/data/activities.defaults new file mode 100644 index 0000000..c294b99 --- /dev/null +++ b/data/activities.defaults @@ -0,0 +1,28 @@ +# Activities to be automatically added to the ring after an upgrade + +com.garycmartin.Moon +com.jotaro.ImplodeActivity +com.laptop.Ruler +edu.mit.media.ScratchActivity +org.laptop.AbiWordActivity +org.laptop.AcousticMeasure +org.laptop.Analyze +org.laptop.Calculate +org.laptop.Chat +org.laptop.HelpActivity +org.laptop.MeasureActivity +org.laptop.Memorize +org.laptop.Oficina +org.laptop.Pippy +org.laptop.RecordActivity +org.laptop.TamTamEdit +org.laptop.TamTamJam +org.laptop.TamTamMini +org.laptop.TamTamSynthLab +org.laptop.TurtleArtActivity +org.laptop.WebActivity +org.laptop.WikipediaActivityEN +org.laptop.sugar.ReadActivity +org.vpri.EtoysActivity +vu.lux.olpc.Maze +vu.lux.olpc.Speak diff --git a/data/em.py b/data/em.py new file mode 100755 index 0000000..165d29e --- /dev/null +++ b/data/em.py @@ -0,0 +1,3302 @@ +#!/usr/bin/env python +# +# $Id: //projects/empy/em.py#146 $ $Date: 2003/10/27 $ + +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +""" +A system for processing Python as markup embedded in text. +""" + + +__program__ = 'empy' +__version__ = '3.3' +__url__ = 'http://www.alcyone.com/software/empy/' +__author__ = 'Erik Max Francis ' +__copyright__ = 'Copyright (C) 2002-2003 Erik Max Francis' +__license__ = 'LGPL' + + +import copy +import getopt +import os +import re +import string +import sys +import types + +try: + # The equivalent of import cStringIO as StringIO. + import cStringIO + StringIO = cStringIO + del cStringIO +except ImportError: + import StringIO + +# For backward compatibility, we can't assume these are defined. +False, True = 0, 1 + +# Some basic defaults. +FAILURE_CODE = 1 +DEFAULT_PREFIX = '@' +DEFAULT_PSEUDOMODULE_NAME = 'empy' +DEFAULT_SCRIPT_NAME = '?' +SIGNIFICATOR_RE_SUFFIX = r"%(\S+)\s*(.*)\s*$" +SIGNIFICATOR_RE_STRING = DEFAULT_PREFIX + SIGNIFICATOR_RE_SUFFIX +BANGPATH = '#!' +DEFAULT_CHUNK_SIZE = 8192 +DEFAULT_ERRORS = 'strict' + +# Character information. +IDENTIFIER_FIRST_CHARS = '_abcdefghijklmnopqrstuvwxyz' \ + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +IDENTIFIER_CHARS = IDENTIFIER_FIRST_CHARS + '0123456789.' +ENDING_CHARS = {'(': ')', '[': ']', '{': '}'} + +# Environment variable names. +OPTIONS_ENV = 'EMPY_OPTIONS' +PREFIX_ENV = 'EMPY_PREFIX' +PSEUDO_ENV = 'EMPY_PSEUDO' +FLATTEN_ENV = 'EMPY_FLATTEN' +RAW_ENV = 'EMPY_RAW_ERRORS' +INTERACTIVE_ENV = 'EMPY_INTERACTIVE' +BUFFERED_ENV = 'EMPY_BUFFERED_OUTPUT' +NO_OVERRIDE_ENV = 'EMPY_NO_OVERRIDE' +UNICODE_ENV = 'EMPY_UNICODE' +INPUT_ENCODING_ENV = 'EMPY_UNICODE_INPUT_ENCODING' +OUTPUT_ENCODING_ENV = 'EMPY_UNICODE_OUTPUT_ENCODING' +INPUT_ERRORS_ENV = 'EMPY_UNICODE_INPUT_ERRORS' +OUTPUT_ERRORS_ENV = 'EMPY_UNICODE_OUTPUT_ERRORS' + +# Interpreter options. +BANGPATH_OPT = 'processBangpaths' # process bangpaths as comments? +BUFFERED_OPT = 'bufferedOutput' # fully buffered output? +RAW_OPT = 'rawErrors' # raw errors? +EXIT_OPT = 'exitOnError' # exit on error? +FLATTEN_OPT = 'flatten' # flatten pseudomodule namespace? +OVERRIDE_OPT = 'override' # override sys.stdout with proxy? +CALLBACK_OPT = 'noCallbackError' # is no custom callback an error? + +# Usage info. +OPTION_INFO = [ +("-V --version", "Print version and exit"), +("-h --help", "Print usage and exit"), +("-H --extended-help", "Print extended usage and exit"), +("-k --suppress-errors", "Do not exit on errors; go interactive"), +("-p --prefix=", "Change prefix to something other than @"), +(" --no-prefix", "Do not do any markup processing at all"), +("-m --module=", "Change the internal pseudomodule name"), +("-f --flatten", "Flatten the members of pseudmodule to start"), +("-r --raw-errors", "Show raw Python errors"), +("-i --interactive", "Go into interactive mode after processing"), +("-n --no-override-stdout", "Do not override sys.stdout with proxy"), +("-o --output=", "Specify file for output as write"), +("-a --append=", "Specify file for output as append"), +("-b --buffered-output", "Fully buffer output including open"), +(" --binary", "Treat the file as a binary"), +(" --chunk-size=", "Use this chunk size for reading binaries"), +("-P --preprocess=", "Interpret EmPy file before main processing"), +("-I --import=", "Import Python modules before processing"), +("-D --define=", "Execute Python assignment statement"), +("-E --execute=", "Execute Python statement before processing"), +("-F --execute-file=", "Execute Python file before processing"), +(" --pause-at-end", "Prompt at the ending of processing"), +(" --relative-path", "Add path of EmPy script to sys.path"), +(" --no-callback-error", "Custom markup without callback is error"), +(" --no-bangpath-processing", "Suppress bangpaths as comments"), +("-u --unicode", "Enable Unicode subsystem (Python 2+ only)"), +(" --unicode-encoding=", "Set both input and output encodings"), +(" --unicode-input-encoding=", "Set input encoding"), +(" --unicode-output-encoding=", "Set output encoding"), +(" --unicode-errors=", "Set both input and output error handler"), +(" --unicode-input-errors=", "Set input error handler"), +(" --unicode-output-errors=", "Set output error handler"), +] + +USAGE_NOTES = """\ +Notes: Whitespace immediately inside parentheses of @(...) are +ignored. Whitespace immediately inside braces of @{...} are ignored, +unless ... spans multiple lines. Use @{ ... }@ to suppress newline +following expansion. Simple expressions ignore trailing dots; `@x.' +means `@(x).'. A #! at the start of a file is treated as a @# +comment.""" + +MARKUP_INFO = [ +("@# ... NL", "Comment; remove everything up to newline"), +("@? NAME NL", "Set the current context name"), +("@! INTEGER NL", "Set the current context line number"), +("@ WHITESPACE", "Remove following whitespace; line continuation"), +("@\\ ESCAPE_CODE", "A C-style escape sequence"), +("@@", "Literal @; @ is escaped (duplicated prefix)"), +("@), @], @}", "Literal close parenthesis, bracket, brace"), +("@ STRING_LITERAL", "Replace with string literal contents"), +("@( EXPRESSION )", "Evaluate expression and substitute with str"), +("@( TEST [? THEN [! ELSE]] )", "If test is true, evaluate then, otherwise else"), +("@( TRY $ CATCH )", "Expand try expression, or catch if it raises"), +("@ SIMPLE_EXPRESSION", "Evaluate simple expression and substitute;\n" + "e.g., @x, @x.y, @f(a, b), @l[i], etc."), +("@` EXPRESSION `", "Evaluate expression and substitute with repr"), +("@: EXPRESSION : [DUMMY] :", "Evaluates to @:...:expansion:"), +("@{ STATEMENTS }", "Statements are executed for side effects"), +("@[ CONTROL ]", "Control markups: if E; elif E; for N in E;\n" + "while E; try; except E, N; finally; continue;\n" + "break; end X"), +("@%% KEY WHITESPACE VALUE NL", "Significator form of __KEY__ = VALUE"), +("@< CONTENTS >", "Custom markup; meaning provided by user"), +] + +ESCAPE_INFO = [ +("@\\0", "NUL, null"), +("@\\a", "BEL, bell"), +("@\\b", "BS, backspace"), +("@\\dDDD", "three-digit decimal code DDD"), +("@\\e", "ESC, escape"), +("@\\f", "FF, form feed"), +("@\\h", "DEL, delete"), +("@\\n", "LF, linefeed, newline"), +("@\\N{NAME}", "Unicode character named NAME"), +("@\\oOOO", "three-digit octal code OOO"), +("@\\qQQQQ", "four-digit quaternary code QQQQ"), +("@\\r", "CR, carriage return"), +("@\\s", "SP, space"), +("@\\t", "HT, horizontal tab"), +("@\\uHHHH", "16-bit hexadecimal Unicode HHHH"), +("@\\UHHHHHHHH", "32-bit hexadecimal Unicode HHHHHHHH"), +("@\\v", "VT, vertical tab"), +("@\\xHH", "two-digit hexadecimal code HH"), +("@\\z", "EOT, end of transmission"), +] + +PSEUDOMODULE_INFO = [ +("VERSION", "String representing EmPy version"), +("SIGNIFICATOR_RE_STRING", "Regular expression matching significators"), +("SIGNIFICATOR_RE_SUFFIX", "The above stub, lacking the prefix"), +("interpreter", "Currently-executing interpreter instance"), +("argv", "The EmPy script name and command line arguments"), +("args", "The command line arguments only"), +("identify()", "Identify top context as name, line"), +("setContextName(name)", "Set the name of the current context"), +("setContextLine(line)", "Set the line number of the current context"), +("atExit(callable)", "Invoke no-argument function at shutdown"), +("getGlobals()", "Retrieve this interpreter's globals"), +("setGlobals(dict)", "Set this interpreter's globals"), +("updateGlobals(dict)", "Merge dictionary into interpreter's globals"), +("clearGlobals()", "Start globals over anew"), +("saveGlobals([deep])", "Save a copy of the globals"), +("restoreGlobals([pop])", "Restore the most recently saved globals"), +("defined(name, [loc])", "Find if the name is defined"), +("evaluate(expression, [loc])", "Evaluate the expression"), +("serialize(expression, [loc])", "Evaluate and serialize the expression"), +("execute(statements, [loc])", "Execute the statements"), +("single(source, [loc])", "Execute the 'single' object"), +("atomic(name, value, [loc])", "Perform an atomic assignment"), +("assign(name, value, [loc])", "Perform an arbitrary assignment"), +("significate(key, [value])", "Significate the given key, value pair"), +("include(file, [loc])", "Include filename or file-like object"), +("expand(string, [loc])", "Explicitly expand string and return"), +("string(data, [name], [loc])", "Process string-like object"), +("quote(string)", "Quote prefixes in provided string and return"), +("flatten([keys])", "Flatten module contents into globals namespace"), +("getPrefix()", "Get current prefix"), +("setPrefix(char)", "Set new prefix"), +("stopDiverting()", "Stop diverting; data sent directly to output"), +("createDiversion(name)", "Create a diversion but do not divert to it"), +("retrieveDiversion(name)", "Retrieve the actual named diversion object"), +("startDiversion(name)", "Start diverting to given diversion"), +("playDiversion(name)", "Recall diversion and then eliminate it"), +("replayDiversion(name)", "Recall diversion but retain it"), +("purgeDiversion(name)", "Erase diversion"), +("playAllDiversions()", "Stop diverting and play all diversions in order"), +("replayAllDiversions()", "Stop diverting and replay all diversions"), +("purgeAllDiversions()", "Stop diverting and purge all diversions"), +("getFilter()", "Get current filter"), +("resetFilter()", "Reset filter; no filtering"), +("nullFilter()", "Install null filter"), +("setFilter(shortcut)", "Install new filter or filter chain"), +("attachFilter(shortcut)", "Attach single filter to end of current chain"), +("areHooksEnabled()", "Return whether or not hooks are enabled"), +("enableHooks()", "Enable hooks (default)"), +("disableHooks()", "Disable hook invocation"), +("getHooks()", "Get all the hooks"), +("clearHooks()", "Clear all hooks"), +("addHook(hook, [i])", "Register the hook (optionally insert)"), +("removeHook(hook)", "Remove an already-registered hook from name"), +("invokeHook(name_, ...)", "Manually invoke hook"), +("getCallback()", "Get interpreter callback"), +("registerCallback(callback)", "Register callback with interpreter"), +("deregisterCallback()", "Deregister callback from interpreter"), +("invokeCallback(contents)", "Invoke the callback directly"), +("Interpreter", "The interpreter class"), +] + +ENVIRONMENT_INFO = [ +(OPTIONS_ENV, "Specified options will be included"), +(PREFIX_ENV, "Specify the default prefix: -p "), +(PSEUDO_ENV, "Specify name of pseudomodule: -m "), +(FLATTEN_ENV, "Flatten empy pseudomodule if defined: -f"), +(RAW_ENV, "Show raw errors if defined: -r"), +(INTERACTIVE_ENV, "Enter interactive mode if defined: -i"), +(BUFFERED_ENV, "Fully buffered output if defined: -b"), +(NO_OVERRIDE_ENV, "Do not override sys.stdout if defined: -n"), +(UNICODE_ENV, "Enable Unicode subsystem: -n"), +(INPUT_ENCODING_ENV, "Unicode input encoding"), +(OUTPUT_ENCODING_ENV, "Unicode output encoding"), +(INPUT_ERRORS_ENV, "Unicode input error handler"), +(OUTPUT_ERRORS_ENV, "Unicode output error handler"), +] + +class Error(Exception): + """The base class for all EmPy errors.""" + pass + +EmpyError = EmPyError = Error # DEPRECATED + +class DiversionError(Error): + """An error related to diversions.""" + pass + +class FilterError(Error): + """An error related to filters.""" + pass + +class StackUnderflowError(Error): + """A stack underflow.""" + pass + +class SubsystemError(Error): + """An error associated with the Unicode subsystem.""" + pass + +class FlowError(Error): + """An exception related to control flow.""" + pass + +class ContinueFlow(FlowError): + """A continue control flow.""" + pass + +class BreakFlow(FlowError): + """A break control flow.""" + pass + +class ParseError(Error): + """A parse error occurred.""" + pass + +class TransientParseError(ParseError): + """A parse error occurred which may be resolved by feeding more data. + Such an error reaching the toplevel is an unexpected EOF error.""" + pass + + +class MetaError(Exception): + + """A wrapper around a real Python exception for including a copy of + the context.""" + + def __init__(self, contexts, exc): + Exception.__init__(self, exc) + self.contexts = contexts + self.exc = exc + + def __str__(self): + backtrace = map(lambda x: str(x), self.contexts) + return "%s: %s (%s)" % (self.exc.__class__, self.exc, \ + (string.join(backtrace, ', '))) + + +class Subsystem: + + """The subsystem class defers file creation so that it can create + Unicode-wrapped files if desired (and possible).""" + + def __init__(self): + self.useUnicode = False + self.inputEncoding = None + self.outputEncoding = None + self.errors = None + + def initialize(self, inputEncoding=None, outputEncoding=None, \ + inputErrors=None, outputErrors=None): + self.useUnicode = True + try: + unicode + import codecs + except (NameError, ImportError): + raise SubsystemError, "Unicode subsystem unavailable" + defaultEncoding = sys.getdefaultencoding() + if inputEncoding is None: + inputEncoding = defaultEncoding + self.inputEncoding = inputEncoding + if outputEncoding is None: + outputEncoding = defaultEncoding + self.outputEncoding = outputEncoding + if inputErrors is None: + inputErrors = DEFAULT_ERRORS + self.inputErrors = inputErrors + if outputErrors is None: + outputErrors = DEFAULT_ERRORS + self.outputErrors = outputErrors + + def assertUnicode(self): + if not self.useUnicode: + raise SubsystemError, "Unicode subsystem unavailable" + + def open(self, name, mode=None): + if self.useUnicode: + return self.unicodeOpen(name, mode) + else: + return self.defaultOpen(name, mode) + + def defaultOpen(self, name, mode=None): + if mode is None: + mode = 'r' + return open(name, mode) + + def unicodeOpen(self, name, mode=None): + import codecs + if mode is None: + mode = 'rb' + if mode.find('w') >= 0 or mode.find('a') >= 0: + encoding = self.outputEncoding + errors = self.outputErrors + else: + encoding = self.inputEncoding + errors = self.inputErrors + return codecs.open(name, mode, encoding, errors) + +theSubsystem = Subsystem() + + +class Stack: + + """A simple stack that behaves as a sequence (with 0 being the top + of the stack, not the bottom).""" + + def __init__(self, seq=None): + if seq is None: + seq = [] + self.data = seq + + def top(self): + """Access the top element on the stack.""" + try: + return self.data[-1] + except IndexError: + raise StackUnderflowError, "stack is empty for top" + + def pop(self): + """Pop the top element off the stack and return it.""" + try: + return self.data.pop() + except IndexError: + raise StackUnderflowError, "stack is empty for pop" + + def push(self, object): + """Push an element onto the top of the stack.""" + self.data.append(object) + + def filter(self, function): + """Filter the elements of the stack through the function.""" + self.data = filter(function, self.data) + + def purge(self): + """Purge the stack.""" + self.data = [] + + def clone(self): + """Create a duplicate of this stack.""" + return self.__class__(self.data[:]) + + def __nonzero__(self): return len(self.data) != 0 + def __len__(self): return len(self.data) + def __getitem__(self, index): return self.data[-(index + 1)] + + def __repr__(self): + return '<%s instance at 0x%x [%s]>' % \ + (self.__class__, id(self), \ + string.join(map(repr, self.data), ', ')) + + +class AbstractFile: + + """An abstracted file that, when buffered, will totally buffer the + file, including even the file open.""" + + def __init__(self, filename, mode='w', buffered=False): + # The calls below might throw, so start off by marking this + # file as "done." This way destruction of a not-completely- + # initialized AbstractFile will generate no further errors. + self.done = True + self.filename = filename + self.mode = mode + self.buffered = buffered + if buffered: + self.bufferFile = StringIO.StringIO() + else: + self.bufferFile = theSubsystem.open(filename, mode) + # Okay, we got this far, so the AbstractFile is initialized. + # Flag it as "not done." + self.done = False + + def __del__(self): + self.close() + + def write(self, data): + self.bufferFile.write(data) + + def writelines(self, data): + self.bufferFile.writelines(data) + + def flush(self): + self.bufferFile.flush() + + def close(self): + if not self.done: + self.commit() + self.done = True + + def commit(self): + if self.buffered: + file = theSubsystem.open(self.filename, self.mode) + file.write(self.bufferFile.getvalue()) + file.close() + else: + self.bufferFile.close() + + def abort(self): + if self.buffered: + self.bufferFile = None + else: + self.bufferFile.close() + self.bufferFile = None + self.done = True + + +class Diversion: + + """The representation of an active diversion. Diversions act as + (writable) file objects, and then can be recalled either as pure + strings or (readable) file objects.""" + + def __init__(self): + self.file = StringIO.StringIO() + + # These methods define the writable file-like interface for the + # diversion. + + def write(self, data): + self.file.write(data) + + def writelines(self, lines): + for line in lines: + self.write(line) + + def flush(self): + self.file.flush() + + def close(self): + self.file.close() + + # These methods are specific to diversions. + + def asString(self): + """Return the diversion as a string.""" + return self.file.getvalue() + + def asFile(self): + """Return the diversion as a file.""" + return StringIO.StringIO(self.file.getvalue()) + + +class Stream: + + """A wrapper around an (output) file object which supports + diversions and filtering.""" + + def __init__(self, file): + self.file = file + self.currentDiversion = None + self.diversions = {} + self.filter = file + self.done = False + + def write(self, data): + if self.currentDiversion is None: + self.filter.write(data) + else: + self.diversions[self.currentDiversion].write(data) + + def writelines(self, lines): + for line in lines: + self.write(line) + + def flush(self): + self.filter.flush() + + def close(self): + if not self.done: + self.undivertAll(True) + self.filter.close() + self.done = True + + def shortcut(self, shortcut): + """Take a filter shortcut and translate it into a filter, returning + it. Sequences don't count here; these should be detected + independently.""" + if shortcut == 0: + return NullFilter() + elif type(shortcut) is types.FunctionType or \ + type(shortcut) is types.BuiltinFunctionType or \ + type(shortcut) is types.BuiltinMethodType or \ + type(shortcut) is types.LambdaType: + return FunctionFilter(shortcut) + elif type(shortcut) is types.StringType: + return StringFilter(filter) + elif type(shortcut) is types.DictType: + raise NotImplementedError, "mapping filters not yet supported" + else: + # Presume it's a plain old filter. + return shortcut + + def last(self): + """Find the last filter in the current filter chain, or None if + there are no filters installed.""" + if self.filter is None: + return None + thisFilter, lastFilter = self.filter, None + while thisFilter is not None and thisFilter is not self.file: + lastFilter = thisFilter + thisFilter = thisFilter.next() + return lastFilter + + def install(self, shortcut=None): + """Install a new filter; None means no filter. Handle all the + special shortcuts for filters here.""" + # Before starting, execute a flush. + self.filter.flush() + if shortcut is None or shortcut == [] or shortcut == (): + # Shortcuts for "no filter." + self.filter = self.file + else: + if type(shortcut) in (types.ListType, types.TupleType): + shortcuts = list(shortcut) + else: + shortcuts = [shortcut] + # Run through the shortcut filter names, replacing them with + # full-fledged instances of Filter. + filters = [] + for shortcut in shortcuts: + filters.append(self.shortcut(shortcut)) + if len(filters) > 1: + # If there's more than one filter provided, chain them + # together. + lastFilter = None + for filter in filters: + if lastFilter is not None: + lastFilter.attach(filter) + lastFilter = filter + lastFilter.attach(self.file) + self.filter = filters[0] + else: + # If there's only one filter, assume that it's alone or it's + # part of a chain that has already been manually chained; + # just find the end. + filter = filters[0] + lastFilter = filter.last() + lastFilter.attach(self.file) + self.filter = filter + + def attach(self, shortcut): + """Attached a solitary filter (no sequences allowed here) at the + end of the current filter chain.""" + lastFilter = self.last() + if lastFilter is None: + # Just install it from scratch if there is no active filter. + self.install(shortcut) + else: + # Attach the last filter to this one, and this one to the file. + filter = self.shortcut(shortcut) + lastFilter.attach(filter) + filter.attach(self.file) + + def revert(self): + """Reset any current diversions.""" + self.currentDiversion = None + + def create(self, name): + """Create a diversion if one does not already exist, but do not + divert to it yet.""" + if name is None: + raise DiversionError, "diversion name must be non-None" + if not self.diversions.has_key(name): + self.diversions[name] = Diversion() + + def retrieve(self, name): + """Retrieve the given diversion.""" + if name is None: + raise DiversionError, "diversion name must be non-None" + if self.diversions.has_key(name): + return self.diversions[name] + else: + raise DiversionError, "nonexistent diversion: %s" % name + + def divert(self, name): + """Start diverting.""" + if name is None: + raise DiversionError, "diversion name must be non-None" + self.create(name) + self.currentDiversion = name + + def undivert(self, name, purgeAfterwards=False): + """Undivert a particular diversion.""" + if name is None: + raise DiversionError, "diversion name must be non-None" + if self.diversions.has_key(name): + diversion = self.diversions[name] + self.filter.write(diversion.asString()) + if purgeAfterwards: + self.purge(name) + else: + raise DiversionError, "nonexistent diversion: %s" % name + + def purge(self, name): + """Purge the specified diversion.""" + if name is None: + raise DiversionError, "diversion name must be non-None" + if self.diversions.has_key(name): + del self.diversions[name] + if self.currentDiversion == name: + self.currentDiversion = None + + def undivertAll(self, purgeAfterwards=True): + """Undivert all pending diversions.""" + if self.diversions: + self.revert() # revert before undiverting! + names = self.diversions.keys() + names.sort() + for name in names: + self.undivert(name) + if purgeAfterwards: + self.purge(name) + + def purgeAll(self): + """Eliminate all existing diversions.""" + if self.diversions: + self.diversions = {} + self.currentDiversion = None + + +class NullFile: + + """A simple class that supports all the file-like object methods + but simply does nothing at all.""" + + def __init__(self): pass + def write(self, data): pass + def writelines(self, lines): pass + def flush(self): pass + def close(self): pass + + +class UncloseableFile: + + """A simple class which wraps around a delegate file-like object + and lets everything through except close calls.""" + + def __init__(self, delegate): + self.delegate = delegate + + def write(self, data): + self.delegate.write(data) + + def writelines(self, lines): + self.delegate.writelines(data) + + def flush(self): + self.delegate.flush() + + def close(self): + """Eat this one.""" + pass + + +class ProxyFile: + + """The proxy file object that is intended to take the place of + sys.stdout. The proxy can manage a stack of file objects it is + writing to, and an underlying raw file object.""" + + def __init__(self, bottom): + self.stack = Stack() + self.bottom = bottom + + def current(self): + """Get the current stream to write to.""" + if self.stack: + return self.stack[-1][1] + else: + return self.bottom + + def push(self, interpreter): + self.stack.push((interpreter, interpreter.stream())) + + def pop(self, interpreter): + result = self.stack.pop() + assert interpreter is result[0] + + def clear(self, interpreter): + self.stack.filter(lambda x, i=interpreter: x[0] is not i) + + def write(self, data): + self.current().write(data) + + def writelines(self, lines): + self.current().writelines(lines) + + def flush(self): + self.current().flush() + + def close(self): + """Close the current file. If the current file is the bottom, then + close it and dispose of it.""" + current = self.current() + if current is self.bottom: + self.bottom = None + current.close() + + def _testProxy(self): pass + + +class Filter: + + """An abstract filter.""" + + def __init__(self): + if self.__class__ is Filter: + raise NotImplementedError + self.sink = None + + def next(self): + """Return the next filter/file-like object in the sequence, or None.""" + return self.sink + + def write(self, data): + """The standard write method; this must be overridden in subclasses.""" + raise NotImplementedError + + def writelines(self, lines): + """Standard writelines wrapper.""" + for line in lines: + self.write(line) + + def _flush(self): + """The _flush method should always flush the sink and should not + be overridden.""" + self.sink.flush() + + def flush(self): + """The flush method can be overridden.""" + self._flush() + + def close(self): + """Close the filter. Do an explicit flush first, then close the + sink.""" + self.flush() + self.sink.close() + + def attach(self, filter): + """Attach a filter to this one.""" + if self.sink is not None: + # If it's already attached, detach it first. + self.detach() + self.sink = filter + + def detach(self): + """Detach a filter from its sink.""" + self.flush() + self._flush() # do a guaranteed flush to just to be safe + self.sink = None + + def last(self): + """Find the last filter in this chain.""" + this, last = self, self + while this is not None: + last = this + this = this.next() + return last + +class NullFilter(Filter): + + """A filter that never sends any output to its sink.""" + + def write(self, data): pass + +class FunctionFilter(Filter): + + """A filter that works simply by pumping its input through a + function which maps strings into strings.""" + + def __init__(self, function): + Filter.__init__(self) + self.function = function + + def write(self, data): + self.sink.write(self.function(data)) + +class StringFilter(Filter): + + """A filter that takes a translation string (256 characters) and + filters any incoming data through it.""" + + def __init__(self, table): + if not (type(table) == types.StringType and len(table) == 256): + raise FilterError, "table must be 256-character string" + Filter.__init__(self) + self.table = table + + def write(self, data): + self.sink.write(string.translate(data, self.table)) + +class BufferedFilter(Filter): + + """A buffered filter is one that doesn't modify the source data + sent to the sink, but instead holds it for a time. The standard + variety only sends the data along when it receives a flush + command.""" + + def __init__(self): + Filter.__init__(self) + self.buffer = '' + + def write(self, data): + self.buffer = self.buffer + data + + def flush(self): + if self.buffer: + self.sink.write(self.buffer) + self._flush() + +class SizeBufferedFilter(BufferedFilter): + + """A size-buffered filter only in fixed size chunks (excepting the + final chunk).""" + + def __init__(self, bufferSize): + BufferedFilter.__init__(self) + self.bufferSize = bufferSize + + def write(self, data): + BufferedFilter.write(self, data) + while len(self.buffer) > self.bufferSize: + chunk, self.buffer = \ + self.buffer[:self.bufferSize], self.buffer[self.bufferSize:] + self.sink.write(chunk) + +class LineBufferedFilter(BufferedFilter): + + """A line-buffered filter only lets data through when it sees + whole lines.""" + + def __init__(self): + BufferedFilter.__init__(self) + + def write(self, data): + BufferedFilter.write(self, data) + chunks = string.split(self.buffer, '\n') + for chunk in chunks[:-1]: + self.sink.write(chunk + '\n') + self.buffer = chunks[-1] + +class MaximallyBufferedFilter(BufferedFilter): + + """A maximally-buffered filter only lets its data through on the final + close. It ignores flushes.""" + + def __init__(self): + BufferedFilter.__init__(self) + + def flush(self): pass + + def close(self): + if self.buffer: + BufferedFilter.flush(self) + self.sink.close() + + +class Context: + + """An interpreter context, which encapsulates a name, an input + file object, and a parser object.""" + + DEFAULT_UNIT = 'lines' + + def __init__(self, name, line=0, units=DEFAULT_UNIT): + self.name = name + self.line = line + self.units = units + self.pause = False + + def bump(self, quantity=1): + if self.pause: + self.pause = False + else: + self.line = self.line + quantity + + def identify(self): + return self.name, self.line + + def __str__(self): + if self.units == self.DEFAULT_UNIT: + return "%s:%s" % (self.name, self.line) + else: + return "%s:%s[%s]" % (self.name, self.line, self.units) + + +class Hook: + + """The base class for implementing hooks.""" + + def __init__(self): + self.interpreter = None + + def register(self, interpreter): + self.interpreter = interpreter + + def deregister(self, interpreter): + if interpreter is not self.interpreter: + raise Error, "hook not associated with this interpreter" + self.interpreter = None + + def push(self): + self.interpreter.push() + + def pop(self): + self.interpreter.pop() + + def null(self): pass + + def atStartup(self): pass + def atReady(self): pass + def atFinalize(self): pass + def atShutdown(self): pass + def atParse(self, scanner, locals): pass + def atToken(self, token): pass + def atHandle(self, meta): pass + def atInteract(self): pass + + def beforeInclude(self, name, file, locals): pass + def afterInclude(self): pass + + def beforeExpand(self, string, locals): pass + def afterExpand(self, result): pass + + def beforeFile(self, name, file, locals): pass + def afterFile(self): pass + + def beforeBinary(self, name, file, chunkSize, locals): pass + def afterBinary(self): pass + + def beforeString(self, name, string, locals): pass + def afterString(self): pass + + def beforeQuote(self, string): pass + def afterQuote(self, result): pass + + def beforeEscape(self, string, more): pass + def afterEscape(self, result): pass + + def beforeControl(self, type, rest, locals): pass + def afterControl(self): pass + + def beforeSignificate(self, key, value, locals): pass + def afterSignificate(self): pass + + def beforeAtomic(self, name, value, locals): pass + def afterAtomic(self): pass + + def beforeMulti(self, name, values, locals): pass + def afterMulti(self): pass + + def beforeImport(self, name, locals): pass + def afterImport(self): pass + + def beforeClause(self, catch, locals): pass + def afterClause(self, exception, variable): pass + + def beforeSerialize(self, expression, locals): pass + def afterSerialize(self): pass + + def beforeDefined(self, name, locals): pass + def afterDefined(self, result): pass + + def beforeLiteral(self, text): pass + def afterLiteral(self): pass + + def beforeEvaluate(self, expression, locals): pass + def afterEvaluate(self, result): pass + + def beforeExecute(self, statements, locals): pass + def afterExecute(self): pass + + def beforeSingle(self, source, locals): pass + def afterSingle(self): pass + +class VerboseHook(Hook): + + """A verbose hook that reports all information received by the + hook interface. This class dynamically scans the Hook base class + to ensure that all hook methods are properly represented.""" + + EXEMPT_ATTRIBUTES = ['register', 'deregister', 'push', 'pop'] + + def __init__(self, output=sys.stderr): + Hook.__init__(self) + self.output = output + self.indent = 0 + + class FakeMethod: + """This is a proxy method-like object.""" + def __init__(self, hook, name): + self.hook = hook + self.name = name + + def __call__(self, **keywords): + self.hook.output.write("%s%s: %s\n" % \ + (' ' * self.hook.indent, \ + self.name, repr(keywords))) + + for attribute in dir(Hook): + if attribute[:1] != '_' and \ + attribute not in self.EXEMPT_ATTRIBUTES: + self.__dict__[attribute] = FakeMethod(self, attribute) + + +class Token: + + """An element of expansion.""" + + def run(self, interpreter, locals): + raise NotImplementedError + + def string(self): + raise NotImplementedError + + def __str__(self): return self.string() + +class NullToken(Token): + """A chunk of data not containing markups.""" + def __init__(self, data): + self.data = data + + def run(self, interpreter, locals): + interpreter.write(self.data) + + def string(self): + return self.data + +class ExpansionToken(Token): + """A token that involves an expansion.""" + def __init__(self, prefix, first): + self.prefix = prefix + self.first = first + + def scan(self, scanner): + pass + + def run(self, interpreter, locals): + pass + +class WhitespaceToken(ExpansionToken): + """A whitespace markup.""" + def string(self): + return '%s%s' % (self.prefix, self.first) + +class LiteralToken(ExpansionToken): + """A literal markup.""" + def run(self, interpreter, locals): + interpreter.write(self.first) + + def string(self): + return '%s%s' % (self.prefix, self.first) + +class PrefixToken(ExpansionToken): + """A prefix markup.""" + def run(self, interpreter, locals): + interpreter.write(interpreter.prefix) + + def string(self): + return self.prefix * 2 + +class CommentToken(ExpansionToken): + """A comment markup.""" + def scan(self, scanner): + loc = scanner.find('\n') + if loc >= 0: + self.comment = scanner.chop(loc, 1) + else: + raise TransientParseError, "comment expects newline" + + def string(self): + return '%s#%s\n' % (self.prefix, self.comment) + +class ContextNameToken(ExpansionToken): + """A context name change markup.""" + def scan(self, scanner): + loc = scanner.find('\n') + if loc >= 0: + self.name = string.strip(scanner.chop(loc, 1)) + else: + raise TransientParseError, "context name expects newline" + + def run(self, interpreter, locals): + context = interpreter.context() + context.name = self.name + +class ContextLineToken(ExpansionToken): + """A context line change markup.""" + def scan(self, scanner): + loc = scanner.find('\n') + if loc >= 0: + try: + self.line = int(scanner.chop(loc, 1)) + except ValueError: + raise ParseError, "context line requires integer" + else: + raise TransientParseError, "context line expects newline" + + def run(self, interpreter, locals): + context = interpreter.context() + context.line = self.line + context.pause = True + +class EscapeToken(ExpansionToken): + """An escape markup.""" + def scan(self, scanner): + try: + code = scanner.chop(1) + result = None + if code in '()[]{}\'\"\\': # literals + result = code + elif code == '0': # NUL + result = '\x00' + elif code == 'a': # BEL + result = '\x07' + elif code == 'b': # BS + result = '\x08' + elif code == 'd': # decimal code + decimalCode = scanner.chop(3) + result = chr(string.atoi(decimalCode, 10)) + elif code == 'e': # ESC + result = '\x1b' + elif code == 'f': # FF + result = '\x0c' + elif code == 'h': # DEL + result = '\x7f' + elif code == 'n': # LF (newline) + result = '\x0a' + elif code == 'N': # Unicode character name + theSubsystem.assertUnicode() + import unicodedata + if scanner.chop(1) != '{': + raise ParseError, r"Unicode name escape should be \N{...}" + i = scanner.find('}') + name = scanner.chop(i, 1) + try: + result = unicodedata.lookup(name) + except KeyError: + raise SubsystemError, \ + "unknown Unicode character name: %s" % name + elif code == 'o': # octal code + octalCode = scanner.chop(3) + result = chr(string.atoi(octalCode, 8)) + elif code == 'q': # quaternary code + quaternaryCode = scanner.chop(4) + result = chr(string.atoi(quaternaryCode, 4)) + elif code == 'r': # CR + result = '\x0d' + elif code in 's ': # SP + result = ' ' + elif code == 't': # HT + result = '\x09' + elif code in 'u': # Unicode 16-bit hex literal + theSubsystem.assertUnicode() + hexCode = scanner.chop(4) + result = unichr(string.atoi(hexCode, 16)) + elif code in 'U': # Unicode 32-bit hex literal + theSubsystem.assertUnicode() + hexCode = scanner.chop(8) + result = unichr(string.atoi(hexCode, 16)) + elif code == 'v': # VT + result = '\x0b' + elif code == 'x': # hexadecimal code + hexCode = scanner.chop(2) + result = chr(string.atoi(hexCode, 16)) + elif code == 'z': # EOT + result = '\x04' + elif code == '^': # control character + controlCode = string.upper(scanner.chop(1)) + if controlCode >= '@' and controlCode <= '`': + result = chr(ord(controlCode) - ord('@')) + elif controlCode == '?': + result = '\x7f' + else: + raise ParseError, "invalid escape control code" + else: + raise ParseError, "unrecognized escape code" + assert result is not None + self.code = result + except ValueError: + raise ParseError, "invalid numeric escape code" + + def run(self, interpreter, locals): + interpreter.write(self.code) + + def string(self): + return '%s\\x%02x' % (self.prefix, ord(self.code)) + +class SignificatorToken(ExpansionToken): + """A significator markup.""" + def scan(self, scanner): + loc = scanner.find('\n') + if loc >= 0: + line = scanner.chop(loc, 1) + if not line: + raise ParseError, "significator must have nonblank key" + if line[0] in ' \t\v\n': + raise ParseError, "no whitespace between % and key" + # Work around a subtle CPython-Jython difference by stripping + # the string before splitting it: 'a '.split(None, 1) has two + # elements in Jython 2.1). + fields = string.split(string.strip(line), None, 1) + if len(fields) == 2 and fields[1] == '': + fields.pop() + self.key = fields[0] + if len(fields) < 2: + fields.append(None) + self.key, self.valueCode = fields + else: + raise TransientParseError, "significator expects newline" + + def run(self, interpreter, locals): + value = self.valueCode + if value is not None: + value = interpreter.evaluate(string.strip(value), locals) + interpreter.significate(self.key, value) + + def string(self): + if self.valueCode is None: + return '%s%%%s\n' % (self.prefix, self.key) + else: + return '%s%%%s %s\n' % (self.prefix, self.key, self.valueCode) + +class ExpressionToken(ExpansionToken): + """An expression markup.""" + def scan(self, scanner): + z = scanner.complex('(', ')', 0) + try: + q = scanner.next('$', 0, z, True) + except ParseError: + q = z + try: + i = scanner.next('?', 0, q, True) + try: + j = scanner.next('!', i, q, True) + except ParseError: + try: + j = scanner.next(':', i, q, True) # DEPRECATED + except ParseError: + j = q + except ParseError: + i = j = q + code = scanner.chop(z, 1) + self.testCode = code[:i] + self.thenCode = code[i + 1:j] + self.elseCode = code[j + 1:q] + self.exceptCode = code[q + 1:z] + + def run(self, interpreter, locals): + try: + result = interpreter.evaluate(self.testCode, locals) + if self.thenCode: + if result: + result = interpreter.evaluate(self.thenCode, locals) + else: + if self.elseCode: + result = interpreter.evaluate(self.elseCode, locals) + else: + result = None + except SyntaxError: + # Don't catch syntax errors; let them through. + raise + except: + if self.exceptCode: + result = interpreter.evaluate(self.exceptCode, locals) + else: + raise + if result is not None: + interpreter.write(str(result)) + + def string(self): + result = self.testCode + if self.thenCode: + result = result + '?' + self.thenCode + if self.elseCode: + result = result + '!' + self.elseCode + if self.exceptCode: + result = result + '$' + self.exceptCode + return '%s(%s)' % (self.prefix, result) + +class StringLiteralToken(ExpansionToken): + """A string token markup.""" + def scan(self, scanner): + scanner.retreat() + assert scanner[0] == self.first + i = scanner.quote() + self.literal = scanner.chop(i) + + def run(self, interpreter, locals): + interpreter.literal(self.literal) + + def string(self): + return '%s%s' % (self.prefix, self.literal) + +class SimpleExpressionToken(ExpansionToken): + """A simple expression markup.""" + def scan(self, scanner): + i = scanner.simple() + self.code = self.first + scanner.chop(i) + + def run(self, interpreter, locals): + interpreter.serialize(self.code, locals) + + def string(self): + return '%s%s' % (self.prefix, self.code) + +class ReprToken(ExpansionToken): + """A repr markup.""" + def scan(self, scanner): + i = scanner.next('`', 0) + self.code = scanner.chop(i, 1) + + def run(self, interpreter, locals): + interpreter.write(repr(interpreter.evaluate(self.code, locals))) + + def string(self): + return '%s`%s`' % (self.prefix, self.code) + +class InPlaceToken(ExpansionToken): + """An in-place markup.""" + def scan(self, scanner): + i = scanner.next(':', 0) + j = scanner.next(':', i + 1) + self.code = scanner.chop(i, j - i + 1) + + def run(self, interpreter, locals): + interpreter.write("%s:%s:" % (interpreter.prefix, self.code)) + try: + interpreter.serialize(self.code, locals) + finally: + interpreter.write(":") + + def string(self): + return '%s:%s::' % (self.prefix, self.code) + +class StatementToken(ExpansionToken): + """A statement markup.""" + def scan(self, scanner): + i = scanner.complex('{', '}', 0) + self.code = scanner.chop(i, 1) + + def run(self, interpreter, locals): + interpreter.execute(self.code, locals) + + def string(self): + return '%s{%s}' % (self.prefix, self.code) + +class CustomToken(ExpansionToken): + """A custom markup.""" + def scan(self, scanner): + i = scanner.complex('<', '>', 0) + self.contents = scanner.chop(i, 1) + + def run(self, interpreter, locals): + interpreter.invokeCallback(self.contents) + + def string(self): + return '%s<%s>' % (self.prefix, self.contents) + +class ControlToken(ExpansionToken): + + """A control token.""" + + PRIMARY_TYPES = ['if', 'for', 'while', 'try', 'def'] + SECONDARY_TYPES = ['elif', 'else', 'except', 'finally'] + TERTIARY_TYPES = ['continue', 'break'] + GREEDY_TYPES = ['if', 'elif', 'for', 'while', 'def', 'end'] + END_TYPES = ['end'] + + IN_RE = re.compile(r"\bin\b") + + def scan(self, scanner): + scanner.acquire() + i = scanner.complex('[', ']', 0) + self.contents = scanner.chop(i, 1) + fields = string.split(string.strip(self.contents), ' ', 1) + if len(fields) > 1: + self.type, self.rest = fields + else: + self.type = fields[0] + self.rest = None + self.subtokens = [] + if self.type in self.GREEDY_TYPES and self.rest is None: + raise ParseError, "control '%s' needs arguments" % self.type + if self.type in self.PRIMARY_TYPES: + self.subscan(scanner, self.type) + self.kind = 'primary' + elif self.type in self.SECONDARY_TYPES: + self.kind = 'secondary' + elif self.type in self.TERTIARY_TYPES: + self.kind = 'tertiary' + elif self.type in self.END_TYPES: + self.kind = 'end' + else: + raise ParseError, "unknown control markup: '%s'" % self.type + scanner.release() + + def subscan(self, scanner, primary): + """Do a subscan for contained tokens.""" + while True: + token = scanner.one() + if token is None: + raise TransientParseError, \ + "control '%s' needs more tokens" % primary + if isinstance(token, ControlToken) and \ + token.type in self.END_TYPES: + if token.rest != primary: + raise ParseError, \ + "control must end with 'end %s'" % primary + break + self.subtokens.append(token) + + def build(self, allowed=None): + """Process the list of subtokens and divide it into a list of + 2-tuples, consisting of the dividing tokens and the list of + subtokens that follow them. If allowed is specified, it will + represent the list of the only secondary markup types which + are allowed.""" + if allowed is None: + allowed = SECONDARY_TYPES + result = [] + latest = [] + result.append((self, latest)) + for subtoken in self.subtokens: + if isinstance(subtoken, ControlToken) and \ + subtoken.kind == 'secondary': + if subtoken.type not in allowed: + raise ParseError, \ + "control unexpected secondary: '%s'" % subtoken.type + latest = [] + result.append((subtoken, latest)) + else: + latest.append(subtoken) + return result + + def run(self, interpreter, locals): + interpreter.invoke('beforeControl', type=self.type, rest=self.rest, \ + locals=locals) + if self.type == 'if': + info = self.build(['elif', 'else']) + elseTokens = None + if info[-1][0].type == 'else': + elseTokens = info.pop()[1] + for secondary, subtokens in info: + if secondary.type not in ('if', 'elif'): + raise ParseError, \ + "control 'if' unexpected secondary: '%s'" % secondary.type + if interpreter.evaluate(secondary.rest, locals): + self.subrun(subtokens, interpreter, locals) + break + else: + if elseTokens: + self.subrun(elseTokens, interpreter, locals) + elif self.type == 'for': + sides = self.IN_RE.split(self.rest, 1) + if len(sides) != 2: + raise ParseError, "control expected 'for x in seq'" + iterator, sequenceCode = sides + info = self.build(['else']) + elseTokens = None + if info[-1][0].type == 'else': + elseTokens = info.pop()[1] + if len(info) != 1: + raise ParseError, "control 'for' expects at most one 'else'" + sequence = interpreter.evaluate(sequenceCode, locals) + for element in sequence: + try: + interpreter.assign(iterator, element, locals) + self.subrun(info[0][1], interpreter, locals) + except ContinueFlow: + continue + except BreakFlow: + break + else: + if elseTokens: + self.subrun(elseTokens, interpreter, locals) + elif self.type == 'while': + testCode = self.rest + info = self.build(['else']) + elseTokens = None + if info[-1][0].type == 'else': + elseTokens = info.pop()[1] + if len(info) != 1: + raise ParseError, "control 'while' expects at most one 'else'" + atLeastOnce = False + while True: + try: + if not interpreter.evaluate(testCode, locals): + break + atLeastOnce = True + self.subrun(info[0][1], interpreter, locals) + except ContinueFlow: + continue + except BreakFlow: + break + if not atLeastOnce and elseTokens: + self.subrun(elseTokens, interpreter, locals) + elif self.type == 'try': + info = self.build(['except', 'finally']) + if len(info) == 1: + raise ParseError, "control 'try' needs 'except' or 'finally'" + type = info[-1][0].type + if type == 'except': + for secondary, _tokens in info[1:]: + if secondary.type != 'except': + raise ParseError, \ + "control 'try' cannot have 'except' and 'finally'" + else: + assert type == 'finally' + if len(info) != 2: + raise ParseError, \ + "control 'try' can only have one 'finally'" + if type == 'except': + try: + self.subrun(info[0][1], interpreter, locals) + except FlowError: + raise + except Exception, e: + for secondary, tokens in info[1:]: + exception, variable = interpreter.clause(secondary.rest) + if variable is not None: + interpreter.assign(variable, e) + if isinstance(e, exception): + self.subrun(tokens, interpreter, locals) + break + else: + raise + else: + try: + self.subrun(info[0][1], interpreter, locals) + finally: + self.subrun(info[1][1], interpreter, locals) + elif self.type == 'continue': + raise ContinueFlow, "control 'continue' without 'for', 'while'" + elif self.type == 'break': + raise BreakFlow, "control 'break' without 'for', 'while'" + elif self.type == 'def': + signature = self.rest + definition = self.substring() + code = 'def %s:\n' \ + ' r"""%s"""\n' \ + ' return %s.expand(r"""%s""", locals())\n' % \ + (signature, definition, interpreter.pseudo, definition) + interpreter.execute(code, locals) + elif self.type == 'end': + raise ParseError, "control 'end' requires primary markup" + else: + raise ParseError, \ + "control '%s' cannot be at this level" % self.type + interpreter.invoke('afterControl') + + def subrun(self, tokens, interpreter, locals): + """Execute a sequence of tokens.""" + for token in tokens: + token.run(interpreter, locals) + + def substring(self): + return string.join(map(str, self.subtokens), '') + + def string(self): + if self.kind == 'primary': + return '%s[%s]%s%s[end %s]' % \ + (self.prefix, self.contents, self.substring(), \ + self.prefix, self.type) + else: + return '%s[%s]' % (self.prefix, self.contents) + + +class Scanner: + + """A scanner holds a buffer for lookahead parsing and has the + ability to scan for special symbols and indicators in that + buffer.""" + + # This is the token mapping table that maps first characters to + # token classes. + TOKEN_MAP = [ + (None, PrefixToken), + (' \t\v\r\n', WhitespaceToken), + (')]}', LiteralToken), + ('\\', EscapeToken), + ('#', CommentToken), + ('?', ContextNameToken), + ('!', ContextLineToken), + ('%', SignificatorToken), + ('(', ExpressionToken), + (IDENTIFIER_FIRST_CHARS, SimpleExpressionToken), + ('\'\"', StringLiteralToken), + ('`', ReprToken), + (':', InPlaceToken), + ('[', ControlToken), + ('{', StatementToken), + ('<', CustomToken), + ] + + def __init__(self, prefix, data=''): + self.prefix = prefix + self.pointer = 0 + self.buffer = data + self.lock = 0 + + def __nonzero__(self): return self.pointer < len(self.buffer) + def __len__(self): return len(self.buffer) - self.pointer + def __getitem__(self, index): return self.buffer[self.pointer + index] + + def __getslice__(self, start, stop): + if stop > len(self): + stop = len(self) + return self.buffer[self.pointer + start:self.pointer + stop] + + def advance(self, count=1): + """Advance the pointer count characters.""" + self.pointer = self.pointer + count + + def retreat(self, count=1): + self.pointer = self.pointer - count + if self.pointer < 0: + raise ParseError, "can't retreat back over synced out chars" + + def set(self, data): + """Start the scanner digesting a new batch of data; start the pointer + over from scratch.""" + self.pointer = 0 + self.buffer = data + + def feed(self, data): + """Feed some more data to the scanner.""" + self.buffer = self.buffer + data + + def chop(self, count=None, slop=0): + """Chop the first count + slop characters off the front, and return + the first count. If count is not specified, then return + everything.""" + if count is None: + assert slop == 0 + count = len(self) + if count > len(self): + raise TransientParseError, "not enough data to read" + result = self[:count] + self.advance(count + slop) + return result + + def acquire(self): + """Lock the scanner so it doesn't destroy data on sync.""" + self.lock = self.lock + 1 + + def release(self): + """Unlock the scanner.""" + self.lock = self.lock - 1 + + def sync(self): + """Sync up the buffer with the read head.""" + if self.lock == 0 and self.pointer != 0: + self.buffer = self.buffer[self.pointer:] + self.pointer = 0 + + def unsync(self): + """Undo changes; reset the read head.""" + if self.pointer != 0: + self.lock = 0 + self.pointer = 0 + + def rest(self): + """Get the remainder of the buffer.""" + return self[:] + + def read(self, i=0, count=1): + """Read count chars starting from i; raise a transient error if + there aren't enough characters remaining.""" + if len(self) < i + count: + raise TransientParseError, "need more data to read" + else: + return self[i:i + count] + + def check(self, i, archetype=None): + """Scan for the next single or triple quote, with the specified + archetype. Return the found quote or None.""" + quote = None + if self[i] in '\'\"': + quote = self[i] + if len(self) - i < 3: + for j in range(i, len(self)): + if self[i] == quote: + return quote + else: + raise TransientParseError, "need to scan for rest of quote" + if self[i + 1] == self[i + 2] == quote: + quote = quote * 3 + if quote is not None: + if archetype is None: + return quote + else: + if archetype == quote: + return quote + elif len(archetype) < len(quote) and archetype[0] == quote[0]: + return archetype + else: + return None + else: + return None + + def find(self, sub, start=0, end=None): + """Find the next occurrence of the character, or return -1.""" + if end is not None: + return string.find(self.rest(), sub, start, end) + else: + return string.find(self.rest(), sub, start) + + def last(self, char, start=0, end=None): + """Find the first character that is _not_ the specified character.""" + if end is None: + end = len(self) + i = start + while i < end: + if self[i] != char: + return i + i = i + 1 + else: + raise TransientParseError, "expecting other than %s" % char + + def next(self, target, start=0, end=None, mandatory=False): + """Scan for the next occurrence of one of the characters in + the target string; optionally, make the scan mandatory.""" + if mandatory: + assert end is not None + quote = None + if end is None: + end = len(self) + i = start + while i < end: + newQuote = self.check(i, quote) + if newQuote: + if newQuote == quote: + quote = None + else: + quote = newQuote + i = i + len(newQuote) + else: + c = self[i] + if quote: + if c == '\\': + i = i + 1 + else: + if c in target: + return i + i = i + 1 + else: + if mandatory: + raise ParseError, "expecting %s, not found" % target + else: + raise TransientParseError, "expecting ending character" + + def quote(self, start=0, end=None, mandatory=False): + """Scan for the end of the next quote.""" + assert self[start] in '\'\"' + quote = self.check(start) + if end is None: + end = len(self) + i = start + len(quote) + while i < end: + newQuote = self.check(i, quote) + if newQuote: + i = i + len(newQuote) + if newQuote == quote: + return i + else: + c = self[i] + if c == '\\': + i = i + 1 + i = i + 1 + else: + if mandatory: + raise ParseError, "expecting end of string literal" + else: + raise TransientParseError, "expecting end of string literal" + + def nested(self, enter, exit, start=0, end=None): + """Scan from i for an ending sequence, respecting entries and exits + only.""" + depth = 0 + if end is None: + end = len(self) + i = start + while i < end: + c = self[i] + if c == enter: + depth = depth + 1 + elif c == exit: + depth = depth - 1 + if depth < 0: + return i + i = i + 1 + else: + raise TransientParseError, "expecting end of complex expression" + + def complex(self, enter, exit, start=0, end=None, skip=None): + """Scan from i for an ending sequence, respecting quotes, + entries and exits.""" + quote = None + depth = 0 + if end is None: + end = len(self) + last = None + i = start + while i < end: + newQuote = self.check(i, quote) + if newQuote: + if newQuote == quote: + quote = None + else: + quote = newQuote + i = i + len(newQuote) + else: + c = self[i] + if quote: + if c == '\\': + i = i + 1 + else: + if skip is None or last != skip: + if c == enter: + depth = depth + 1 + elif c == exit: + depth = depth - 1 + if depth < 0: + return i + last = c + i = i + 1 + else: + raise TransientParseError, "expecting end of complex expression" + + def word(self, start=0): + """Scan from i for a simple word.""" + length = len(self) + i = start + while i < length: + if not self[i] in IDENTIFIER_CHARS: + return i + i = i + 1 + else: + raise TransientParseError, "expecting end of word" + + def phrase(self, start=0): + """Scan from i for a phrase (e.g., 'word', 'f(a, b, c)', 'a[i]', or + combinations like 'x[i](a)'.""" + # Find the word. + i = self.word(start) + while i < len(self) and self[i] in '([{': + enter = self[i] + if enter == '{': + raise ParseError, "curly braces can't open simple expressions" + exit = ENDING_CHARS[enter] + i = self.complex(enter, exit, i + 1) + 1 + return i + + def simple(self, start=0): + """Scan from i for a simple expression, which consists of one + more phrases separated by dots.""" + i = self.phrase(start) + length = len(self) + while i < length and self[i] == '.': + i = self.phrase(i) + # Make sure we don't end with a trailing dot. + while i > 0 and self[i - 1] == '.': + i = i - 1 + return i + + def one(self): + """Parse and return one token, or None if the scanner is empty.""" + if not self: + return None + if not self.prefix: + loc = -1 + else: + loc = self.find(self.prefix) + if loc < 0: + # If there's no prefix in the buffer, then set the location to + # the end so the whole thing gets processed. + loc = len(self) + if loc == 0: + # If there's a prefix at the beginning of the buffer, process + # an expansion. + prefix = self.chop(1) + assert prefix == self.prefix + first = self.chop(1) + if first == self.prefix: + first = None + for firsts, factory in self.TOKEN_MAP: + if firsts is None: + if first is None: + break + elif first in firsts: + break + else: + raise ParseError, "unknown markup: %s%s" % (self.prefix, first) + token = factory(self.prefix, first) + try: + token.scan(self) + except TransientParseError: + # If a transient parse error occurs, reset the buffer pointer + # so we can (conceivably) try again later. + self.unsync() + raise + else: + # Process everything up to loc as a null token. + data = self.chop(loc) + token = NullToken(data) + self.sync() + return token + + +class Interpreter: + + """An interpreter can process chunks of EmPy code.""" + + # Constants. + + VERSION = __version__ + SIGNIFICATOR_RE_SUFFIX = SIGNIFICATOR_RE_SUFFIX + SIGNIFICATOR_RE_STRING = None + + # Types. + + Interpreter = None # define this below to prevent a circular reference + Hook = Hook # DEPRECATED + Filter = Filter # DEPRECATED + NullFilter = NullFilter # DEPRECATED + FunctionFilter = FunctionFilter # DEPRECATED + StringFilter = StringFilter # DEPRECATED + BufferedFilter = BufferedFilter # DEPRECATED + SizeBufferedFilter = SizeBufferedFilter # DEPRECATED + LineBufferedFilter = LineBufferedFilter # DEPRECATED + MaximallyBufferedFilter = MaximallyBufferedFilter # DEPRECATED + + # Tables. + + ESCAPE_CODES = {0x00: '0', 0x07: 'a', 0x08: 'b', 0x1b: 'e', 0x0c: 'f', \ + 0x7f: 'h', 0x0a: 'n', 0x0d: 'r', 0x09: 't', 0x0b: 'v', \ + 0x04: 'z'} + + ASSIGN_TOKEN_RE = re.compile(r"[_a-zA-Z][_a-zA-Z0-9]*|\(|\)|,") + + DEFAULT_OPTIONS = {BANGPATH_OPT: True, + BUFFERED_OPT: False, + RAW_OPT: False, + EXIT_OPT: True, + FLATTEN_OPT: False, + OVERRIDE_OPT: True, + CALLBACK_OPT: False} + + _wasProxyInstalled = False # was a proxy installed? + + # Construction, initialization, destruction. + + def __init__(self, output=None, argv=None, prefix=DEFAULT_PREFIX, \ + pseudo=None, options=None, globals=None, hooks=None): + self.interpreter = self # DEPRECATED + # Set up the stream. + if output is None: + output = UncloseableFile(sys.__stdout__) + self.output = output + self.prefix = prefix + if pseudo is None: + pseudo = DEFAULT_PSEUDOMODULE_NAME + self.pseudo = pseudo + if argv is None: + argv = [DEFAULT_SCRIPT_NAME] + self.argv = argv + self.args = argv[1:] + if options is None: + options = {} + self.options = options + # Initialize any hooks. + self.hooksEnabled = None # special sentinel meaning "false until added" + self.hooks = [] + if hooks is None: + hooks = [] + for hook in hooks: + self.register(hook) + # Initialize callback. + self.callback = None + # Finalizers. + self.finals = [] + # The interpreter stacks. + self.contexts = Stack() + self.streams = Stack() + # Now set up the globals. + self.globals = globals + self.fix() + self.history = Stack() + # Install a proxy stdout if one hasn't been already. + self.installProxy() + # Finally, reset the state of all the stacks. + self.reset() + # Okay, now flatten the namespaces if that option has been set. + if self.options.get(FLATTEN_OPT, False): + self.flatten() + # Set up old pseudomodule attributes. + if prefix is None: + self.SIGNIFICATOR_RE_STRING = None + else: + self.SIGNIFICATOR_RE_STRING = prefix + self.SIGNIFICATOR_RE_SUFFIX + self.Interpreter = self.__class__ + # Done. Now declare that we've started up. + self.invoke('atStartup') + + def __del__(self): + self.shutdown() + + def __repr__(self): + return '<%s pseudomodule/interpreter at 0x%x>' % \ + (self.pseudo, id(self)) + + def ready(self): + """Declare the interpreter ready for normal operations.""" + self.invoke('atReady') + + def fix(self): + """Reset the globals, stamping in the pseudomodule.""" + if self.globals is None: + self.globals = {} + # Make sure that there is no collision between two interpreters' + # globals. + if self.globals.has_key(self.pseudo): + if self.globals[self.pseudo] is not self: + raise Error, "interpreter globals collision" + self.globals[self.pseudo] = self + + def unfix(self): + """Remove the pseudomodule (if present) from the globals.""" + UNWANTED_KEYS = [self.pseudo, '__builtins__'] + for unwantedKey in UNWANTED_KEYS: + if self.globals.has_key(unwantedKey): + del self.globals[unwantedKey] + + def update(self, other): + """Update the current globals dictionary with another dictionary.""" + self.globals.update(other) + self.fix() + + def clear(self): + """Clear out the globals dictionary with a brand new one.""" + self.globals = {} + self.fix() + + def save(self, deep=True): + if deep: + copyMethod = copy.deepcopy + else: + copyMethod = copy.copy + """Save a copy of the current globals on the history stack.""" + self.unfix() + self.history.push(copyMethod(self.globals)) + self.fix() + + def restore(self, destructive=True): + """Restore the topmost historic globals.""" + if destructive: + fetchMethod = self.history.pop + else: + fetchMethod = self.history.top + self.unfix() + self.globals = fetchMethod() + self.fix() + + def shutdown(self): + """Declare this interpreting session over; close the stream file + object. This method is idempotent.""" + if self.streams is not None: + try: + self.finalize() + self.invoke('atShutdown') + while self.streams: + stream = self.streams.pop() + stream.close() + finally: + self.streams = None + + def ok(self): + """Is the interpreter still active?""" + return self.streams is not None + + # Writeable file-like methods. + + def write(self, data): + self.stream().write(data) + + def writelines(self, stuff): + self.stream().writelines(stuff) + + def flush(self): + self.stream().flush() + + def close(self): + self.shutdown() + + # Stack-related activity. + + def context(self): + return self.contexts.top() + + def stream(self): + return self.streams.top() + + def reset(self): + self.contexts.purge() + self.streams.purge() + self.streams.push(Stream(self.output)) + if self.options.get(OVERRIDE_OPT, True): + sys.stdout.clear(self) + + def push(self): + if self.options.get(OVERRIDE_OPT, True): + sys.stdout.push(self) + + def pop(self): + if self.options.get(OVERRIDE_OPT, True): + sys.stdout.pop(self) + + # Higher-level operations. + + def include(self, fileOrFilename, locals=None): + """Do an include pass on a file or filename.""" + if type(fileOrFilename) is types.StringType: + # Either it's a string representing a filename ... + filename = fileOrFilename + name = filename + file = theSubsystem.open(filename, 'r') + else: + # ... or a file object. + file = fileOrFilename + name = "<%s>" % str(file.__class__) + self.invoke('beforeInclude', name=name, file=file, locals=locals) + self.file(file, name, locals) + self.invoke('afterInclude') + + def expand(self, data, locals=None): + """Do an explicit expansion on a subordinate stream.""" + outFile = StringIO.StringIO() + stream = Stream(outFile) + self.invoke('beforeExpand', string=data, locals=locals) + self.streams.push(stream) + try: + self.string(data, '', locals) + stream.flush() + expansion = outFile.getvalue() + self.invoke('afterExpand', result=expansion) + return expansion + finally: + self.streams.pop() + + def quote(self, data): + """Quote the given string so that if it were expanded it would + evaluate to the original.""" + self.invoke('beforeQuote', string=data) + scanner = Scanner(self.prefix, data) + result = [] + i = 0 + try: + j = scanner.next(self.prefix, i) + result.append(data[i:j]) + result.append(self.prefix * 2) + i = j + 1 + except TransientParseError: + pass + result.append(data[i:]) + result = string.join(result, '') + self.invoke('afterQuote', result=result) + return result + + def escape(self, data, more=''): + """Escape a string so that nonprintable characters are replaced + with compatible EmPy expansions.""" + self.invoke('beforeEscape', string=data, more=more) + result = [] + for char in data: + if char < ' ' or char > '~': + charOrd = ord(char) + if Interpreter.ESCAPE_CODES.has_key(charOrd): + result.append(self.prefix + '\\' + \ + Interpreter.ESCAPE_CODES[charOrd]) + else: + result.append(self.prefix + '\\x%02x' % charOrd) + elif char in more: + result.append(self.prefix + '\\' + char) + else: + result.append(char) + result = string.join(result, '') + self.invoke('afterEscape', result=result) + return result + + # Processing. + + def wrap(self, callable, args): + """Wrap around an application of a callable and handle errors. + Return whether no error occurred.""" + try: + apply(callable, args) + self.reset() + return True + except KeyboardInterrupt, e: + # Handle keyboard interrupts specially: we should always exit + # from these. + self.fail(e, True) + except Exception, e: + # A standard exception (other than a keyboard interrupt). + self.fail(e) + except: + # If we get here, then either it's an exception not derived from + # Exception or it's a string exception, so get the error type + # from the sys module. + e = sys.exc_type + self.fail(e) + # An error occurred if we leak through to here, so do cleanup. + self.reset() + return False + + def interact(self): + """Perform interaction.""" + self.invoke('atInteract') + done = False + while not done: + result = self.wrap(self.file, (sys.stdin, '')) + if self.options.get(EXIT_OPT, True): + done = True + else: + if result: + done = True + else: + self.reset() + + def fail(self, error, fatal=False): + """Handle an actual error that occurred.""" + if self.options.get(BUFFERED_OPT, False): + try: + self.output.abort() + except AttributeError: + # If the output file object doesn't have an abort method, + # something got mismatched, but it's too late to do + # anything about it now anyway, so just ignore it. + pass + meta = self.meta(error) + self.handle(meta) + if self.options.get(RAW_OPT, False): + raise + if fatal or self.options.get(EXIT_OPT, True): + sys.exit(FAILURE_CODE) + + def file(self, file, name='', locals=None): + """Parse the entire contents of a file-like object, line by line.""" + context = Context(name) + self.contexts.push(context) + self.invoke('beforeFile', name=name, file=file, locals=locals) + scanner = Scanner(self.prefix) + first = True + done = False + while not done: + self.context().bump() + line = file.readline() + if first: + if self.options.get(BANGPATH_OPT, True) and self.prefix: + # Replace a bangpath at the beginning of the first line + # with an EmPy comment. + if string.find(line, BANGPATH) == 0: + line = self.prefix + '#' + line[2:] + first = False + if line: + scanner.feed(line) + else: + done = True + self.safe(scanner, done, locals) + self.invoke('afterFile') + self.contexts.pop() + + def binary(self, file, name='', chunkSize=0, locals=None): + """Parse the entire contents of a file-like object, in chunks.""" + if chunkSize <= 0: + chunkSize = DEFAULT_CHUNK_SIZE + context = Context(name, units='bytes') + self.contexts.push(context) + self.invoke('beforeBinary', name=name, file=file, \ + chunkSize=chunkSize, locals=locals) + scanner = Scanner(self.prefix) + done = False + while not done: + chunk = file.read(chunkSize) + if chunk: + scanner.feed(chunk) + else: + done = True + self.safe(scanner, done, locals) + self.context().bump(len(chunk)) + self.invoke('afterBinary') + self.contexts.pop() + + def string(self, data, name='', locals=None): + """Parse a string.""" + context = Context(name) + self.contexts.push(context) + self.invoke('beforeString', name=name, string=data, locals=locals) + context.bump() + scanner = Scanner(self.prefix, data) + self.safe(scanner, True, locals) + self.invoke('afterString') + self.contexts.pop() + + def safe(self, scanner, final=False, locals=None): + """Do a protected parse. Catch transient parse errors; if + final is true, then make a final pass with a terminator, + otherwise ignore the transient parse error (more data is + pending).""" + try: + self.parse(scanner, locals) + except TransientParseError: + if final: + # If the buffer doesn't end with a newline, try tacking on + # a dummy terminator. + buffer = scanner.rest() + if buffer and buffer[-1] != '\n': + scanner.feed(self.prefix + '\n') + # A TransientParseError thrown from here is a real parse + # error. + self.parse(scanner, locals) + + def parse(self, scanner, locals=None): + """Parse and run as much from this scanner as possible.""" + self.invoke('atParse', scanner=scanner, locals=locals) + while True: + token = scanner.one() + if token is None: + break + self.invoke('atToken', token=token) + token.run(self, locals) + + # Medium-level evaluation and execution. + + def tokenize(self, name): + """Take an lvalue string and return a name or a (possibly recursive) + list of names.""" + result = [] + stack = [result] + for garbage in self.ASSIGN_TOKEN_RE.split(name): + garbage = string.strip(garbage) + if garbage: + raise ParseError, "unexpected assignment token: '%s'" % garbage + tokens = self.ASSIGN_TOKEN_RE.findall(name) + # While processing, put a None token at the start of any list in which + # commas actually appear. + for token in tokens: + if token == '(': + stack.append([]) + elif token == ')': + top = stack.pop() + if len(top) == 1: + top = top[0] # no None token means that it's not a 1-tuple + elif top[0] is None: + del top[0] # remove the None token for real tuples + stack[-1].append(top) + elif token == ',': + if len(stack[-1]) == 1: + stack[-1].insert(0, None) + else: + stack[-1].append(token) + # If it's a 1-tuple at the top level, turn it into a real subsequence. + if result and result[0] is None: + result = [result[1:]] + if len(result) == 1: + return result[0] + else: + return result + + def significate(self, key, value=None, locals=None): + """Declare a significator.""" + self.invoke('beforeSignificate', key=key, value=value, locals=locals) + name = '__%s__' % key + self.atomic(name, value, locals) + self.invoke('afterSignificate') + + def atomic(self, name, value, locals=None): + """Do an atomic assignment.""" + self.invoke('beforeAtomic', name=name, value=value, locals=locals) + if locals is None: + self.globals[name] = value + else: + locals[name] = value + self.invoke('afterAtomic') + + def multi(self, names, values, locals=None): + """Do a (potentially recursive) assignment.""" + self.invoke('beforeMulti', names=names, values=values, locals=locals) + # No zip in 1.5, so we have to do it manually. + i = 0 + try: + values = tuple(values) + except TypeError: + raise TypeError, "unpack non-sequence" + if len(names) != len(values): + raise ValueError, "unpack tuple of wrong size" + for i in range(len(names)): + name = names[i] + if type(name) is types.StringType: + self.atomic(name, values[i], locals) + else: + self.multi(name, values[i], locals) + self.invoke('afterMulti') + + def assign(self, name, value, locals=None): + """Do a potentially complex (including tuple unpacking) assignment.""" + left = self.tokenize(name) + # The return value of tokenize can either be a string or a list of + # (lists of) strings. + if type(left) is types.StringType: + self.atomic(left, value, locals) + else: + self.multi(left, value, locals) + + def import_(self, name, locals=None): + """Do an import.""" + self.invoke('beforeImport', name=name, locals=locals) + self.execute('import %s' % name, locals) + self.invoke('afterImport') + + def clause(self, catch, locals=None): + """Given the string representation of an except clause, turn it into + a 2-tuple consisting of the class name, and either a variable name + or None.""" + self.invoke('beforeClause', catch=catch, locals=locals) + if catch is None: + exceptionCode, variable = None, None + elif string.find(catch, ',') >= 0: + exceptionCode, variable = string.split(string.strip(catch), ',', 1) + variable = string.strip(variable) + else: + exceptionCode, variable = string.strip(catch), None + if not exceptionCode: + exception = Exception + else: + exception = self.evaluate(exceptionCode, locals) + self.invoke('afterClause', exception=exception, variable=variable) + return exception, variable + + def serialize(self, expression, locals=None): + """Do an expansion, involving evaluating an expression, then + converting it to a string and writing that string to the + output if the evaluation is not None.""" + self.invoke('beforeSerialize', expression=expression, locals=locals) + result = self.evaluate(expression, locals) + if result is not None: + self.write(str(result)) + self.invoke('afterSerialize') + + def defined(self, name, locals=None): + """Return a Boolean indicating whether or not the name is + defined either in the locals or the globals.""" + self.invoke('beforeDefined', name=name, local=local) + if locals is not None: + if locals.has_key(name): + result = True + else: + result = False + elif self.globals.has_key(name): + result = True + else: + result = False + self.invoke('afterDefined', result=result) + + def literal(self, text): + """Process a string literal.""" + self.invoke('beforeLiteral', text=text) + self.serialize(text) + self.invoke('afterLiteral') + + # Low-level evaluation and execution. + + def evaluate(self, expression, locals=None): + """Evaluate an expression.""" + if expression in ('1', 'True'): return True + if expression in ('0', 'False'): return False + self.push() + try: + self.invoke('beforeEvaluate', \ + expression=expression, locals=locals) + if locals is not None: + result = eval(expression, self.globals, locals) + else: + result = eval(expression, self.globals) + self.invoke('afterEvaluate', result=result) + return result + finally: + self.pop() + + def execute(self, statements, locals=None): + """Execute a statement.""" + # If there are any carriage returns (as opposed to linefeeds/newlines) + # in the statements code, then remove them. Even on DOS/Windows + # platforms, + if string.find(statements, '\r') >= 0: + statements = string.replace(statements, '\r', '') + # If there are no newlines in the statements code, then strip any + # leading or trailing whitespace. + if string.find(statements, '\n') < 0: + statements = string.strip(statements) + self.push() + try: + self.invoke('beforeExecute', \ + statements=statements, locals=locals) + if locals is not None: + exec statements in self.globals, locals + else: + exec statements in self.globals + self.invoke('afterExecute') + finally: + self.pop() + + def single(self, source, locals=None): + """Execute an expression or statement, just as if it were + entered into the Python interactive interpreter.""" + self.push() + try: + self.invoke('beforeSingle', \ + source=source, locals=locals) + code = compile(source, '', 'single') + if locals is not None: + exec code in self.globals, locals + else: + exec code in self.globals + self.invoke('afterSingle') + finally: + self.pop() + + # Hooks. + + def register(self, hook, prepend=False): + """Register the provided hook.""" + hook.register(self) + if self.hooksEnabled is None: + # A special optimization so that hooks can be effectively + # disabled until one is added or they are explicitly turned on. + self.hooksEnabled = True + if prepend: + self.hooks.insert(0, hook) + else: + self.hooks.append(hook) + + def deregister(self, hook): + """Remove an already registered hook.""" + hook.deregister(self) + self.hooks.remove(hook) + + def invoke(self, _name, **keywords): + """Invoke the hook(s) associated with the hook name, should they + exist.""" + if self.hooksEnabled: + for hook in self.hooks: + hook.push() + try: + method = getattr(hook, _name) + apply(method, (), keywords) + finally: + hook.pop() + + def finalize(self): + """Execute any remaining final routines.""" + self.push() + self.invoke('atFinalize') + try: + # Pop them off one at a time so they get executed in reverse + # order and we remove them as they're executed in case something + # bad happens. + while self.finals: + final = self.finals.pop() + final() + finally: + self.pop() + + # Error handling. + + def meta(self, exc=None): + """Construct a MetaError for the interpreter's current state.""" + return MetaError(self.contexts.clone(), exc) + + def handle(self, meta): + """Handle a MetaError.""" + first = True + self.invoke('atHandle', meta=meta) + for context in meta.contexts: + if first: + if meta.exc is not None: + desc = "error: %s: %s" % (meta.exc.__class__, meta.exc) + else: + desc = "error" + else: + desc = "from this context" + first = False + sys.stderr.write('%s: %s\n' % (context, desc)) + + def installProxy(self): + """Install a proxy if necessary.""" + # Unfortunately, there's no surefire way to make sure that installing + # a sys.stdout proxy is idempotent, what with different interpreters + # running from different modules. The best we can do here is to try + # manipulating the proxy's test function ... + try: + sys.stdout._testProxy() + except AttributeError: + # ... if the current stdout object doesn't have one, then check + # to see if we think _this_ particularly Interpreter class has + # installed it before ... + if Interpreter._wasProxyInstalled: + # ... and if so, we have a proxy problem. + raise Error, "interpreter stdout proxy lost" + else: + # Otherwise, install the proxy and set the flag. + sys.stdout = ProxyFile(sys.stdout) + Interpreter._wasProxyInstalled = True + + # + # Pseudomodule routines. + # + + # Identification. + + def identify(self): + """Identify the topmost context with a 2-tuple of the name and + line number.""" + return self.context().identify() + + def atExit(self, callable): + """Register a function to be called at exit.""" + self.finals.append(callable) + + # Context manipulation. + + def pushContext(self, name='', line=0): + """Create a new context and push it.""" + self.contexts.push(Context(name, line)) + + def popContext(self): + """Pop the top context.""" + self.contexts.pop() + + def setContextName(self, name): + """Set the name of the topmost context.""" + context = self.context() + context.name = name + + def setContextLine(self, line): + """Set the name of the topmost context.""" + context = self.context() + context.line = line + + setName = setContextName # DEPRECATED + setLine = setContextLine # DEPRECATED + + # Globals manipulation. + + def getGlobals(self): + """Retrieve the globals.""" + return self.globals + + def setGlobals(self, globals): + """Set the globals to the specified dictionary.""" + self.globals = globals + self.fix() + + def updateGlobals(self, otherGlobals): + """Merge another mapping object into this interpreter's globals.""" + self.update(otherGlobals) + + def clearGlobals(self): + """Clear out the globals with a brand new dictionary.""" + self.clear() + + def saveGlobals(self, deep=True): + """Save a copy of the globals off onto the history stack.""" + self.save(deep) + + def restoreGlobals(self, destructive=True): + """Restore the most recently saved copy of the globals.""" + self.restore(destructive) + + # Hook support. + + def areHooksEnabled(self): + """Return whether or not hooks are presently enabled.""" + if self.hooksEnabled is None: + return True + else: + return self.hooksEnabled + + def enableHooks(self): + """Enable hooks.""" + self.hooksEnabled = True + + def disableHooks(self): + """Disable hooks.""" + self.hooksEnabled = False + + def getHooks(self): + """Get the current hooks.""" + return self.hooks[:] + + def clearHooks(self): + """Clear all hooks.""" + self.hooks = [] + + def addHook(self, hook, prepend=False): + """Add a new hook; optionally insert it rather than appending it.""" + self.register(hook, prepend) + + def removeHook(self, hook): + """Remove a preexisting hook.""" + self.deregister(hook) + + def invokeHook(self, _name, **keywords): + """Manually invoke a hook.""" + apply(self.invoke, (_name,), keywords) + + # Callbacks. + + def getCallback(self): + """Get the callback registered with this interpreter, or None.""" + return self.callback + + def registerCallback(self, callback): + """Register a custom markup callback with this interpreter.""" + self.callback = callback + + def deregisterCallback(self): + """Remove any previously registered callback with this interpreter.""" + self.callback = None + + def invokeCallback(self, contents): + """Invoke the callback.""" + if self.callback is None: + if self.options.get(CALLBACK_OPT, False): + raise Error, "custom markup invoked with no defined callback" + else: + self.callback(contents) + + # Pseudomodule manipulation. + + def flatten(self, keys=None): + """Flatten the contents of the pseudo-module into the globals + namespace.""" + if keys is None: + keys = self.__dict__.keys() + self.__class__.__dict__.keys() + dict = {} + for key in keys: + # The pseudomodule is really a class instance, so we need to + # fumble use getattr instead of simply fumbling through the + # instance's __dict__. + dict[key] = getattr(self, key) + # Stomp everything into the globals namespace. + self.globals.update(dict) + + # Prefix. + + def getPrefix(self): + """Get the current prefix.""" + return self.prefix + + def setPrefix(self, prefix): + """Set the prefix.""" + self.prefix = prefix + + # Diversions. + + def stopDiverting(self): + """Stop any diverting.""" + self.stream().revert() + + def createDiversion(self, name): + """Create a diversion (but do not divert to it) if it does not + already exist.""" + self.stream().create(name) + + def retrieveDiversion(self, name): + """Retrieve the diversion object associated with the name.""" + return self.stream().retrieve(name) + + def startDiversion(self, name): + """Start diverting to the given diversion name.""" + self.stream().divert(name) + + def playDiversion(self, name): + """Play the given diversion and then purge it.""" + self.stream().undivert(name, True) + + def replayDiversion(self, name): + """Replay the diversion without purging it.""" + self.stream().undivert(name, False) + + def purgeDiversion(self, name): + """Eliminate the given diversion.""" + self.stream().purge(name) + + def playAllDiversions(self): + """Play all existing diversions and then purge them.""" + self.stream().undivertAll(True) + + def replayAllDiversions(self): + """Replay all existing diversions without purging them.""" + self.stream().undivertAll(False) + + def purgeAllDiversions(self): + """Purge all existing diversions.""" + self.stream().purgeAll() + + def getCurrentDiversion(self): + """Get the name of the current diversion.""" + return self.stream().currentDiversion + + def getAllDiversions(self): + """Get the names of all existing diversions.""" + names = self.stream().diversions.keys() + names.sort() + return names + + # Filter. + + def resetFilter(self): + """Reset the filter so that it does no filtering.""" + self.stream().install(None) + + def nullFilter(self): + """Install a filter that will consume all text.""" + self.stream().install(0) + + def getFilter(self): + """Get the current filter.""" + filter = self.stream().filter + if filter is self.stream().file: + return None + else: + return filter + + def setFilter(self, shortcut): + """Set the filter.""" + self.stream().install(shortcut) + + def attachFilter(self, shortcut): + """Attach a single filter to the end of the current filter chain.""" + self.stream().attach(shortcut) + + +class Document: + + """A representation of an individual EmPy document, as used by a + processor.""" + + def __init__(self, ID, filename): + self.ID = ID + self.filename = filename + self.significators = {} + + +class Processor: + + """An entity which is capable of processing a hierarchy of EmPy + files and building a dictionary of document objects associated + with them describing their significator contents.""" + + DEFAULT_EMPY_EXTENSIONS = ('.em',) + SIGNIFICATOR_RE = re.compile(SIGNIFICATOR_RE_STRING) + + def __init__(self, factory=Document): + self.factory = factory + self.documents = {} + + def identifier(self, pathname, filename): return filename + + def clear(self): + self.documents = {} + + def scan(self, basename, extensions=DEFAULT_EMPY_EXTENSIONS): + if type(extensions) is types.StringType: + extensions = (extensions,) + def _noCriteria(x): + return True + def _extensionsCriteria(pathname, extensions=extensions): + if extensions: + for extension in extensions: + if pathname[-len(extension):] == extension: + return True + return False + else: + return True + self.directory(basename, _noCriteria, _extensionsCriteria, None) + self.postprocess() + + def postprocess(self): + pass + + def directory(self, basename, dirCriteria, fileCriteria, depth=None): + if depth is not None: + if depth <= 0: + return + else: + depth = depth - 1 + filenames = os.listdir(basename) + for filename in filenames: + pathname = os.path.join(basename, filename) + if os.path.isdir(pathname): + if dirCriteria(pathname): + self.directory(pathname, dirCriteria, fileCriteria, depth) + elif os.path.isfile(pathname): + if fileCriteria(pathname): + documentID = self.identifier(pathname, filename) + document = self.factory(documentID, pathname) + self.file(document, open(pathname)) + self.documents[documentID] = document + + def file(self, document, file): + while True: + line = file.readline() + if not line: + break + self.line(document, line) + + def line(self, document, line): + match = self.SIGNIFICATOR_RE.search(line) + if match: + key, valueS = match.groups() + valueS = string.strip(valueS) + if valueS: + value = eval(valueS) + else: + value = None + document.significators[key] = value + + +def expand(_data, _globals=None, \ + _argv=None, _prefix=DEFAULT_PREFIX, _pseudo=None, _options=None, \ + **_locals): + """Do an atomic expansion of the given source data, creating and + shutting down an interpreter dedicated to the task. The sys.stdout + object is saved off and then replaced before this function + returns.""" + if len(_locals) == 0: + # If there were no keyword arguments specified, don't use a locals + # dictionary at all. + _locals = None + output = NullFile() + interpreter = Interpreter(output, argv=_argv, prefix=_prefix, \ + pseudo=_pseudo, options=_options, \ + globals=_globals) + if interpreter.options.get(OVERRIDE_OPT, True): + oldStdout = sys.stdout + try: + result = interpreter.expand(_data, _locals) + finally: + interpreter.shutdown() + if _globals is not None: + interpreter.unfix() # remove pseudomodule to prevent clashes + if interpreter.options.get(OVERRIDE_OPT, True): + sys.stdout = oldStdout + return result + +def environment(name, default=None): + """Get data from the current environment. If the default is True + or False, then presume that we're only interested in the existence + or non-existence of the environment variable.""" + if os.environ.has_key(name): + # Do the True/False test by value for future compatibility. + if default == False or default == True: + return True + else: + return os.environ[name] + else: + return default + +def info(table): + DEFAULT_LEFT = 28 + maxLeft = 0 + maxRight = 0 + for left, right in table: + if len(left) > maxLeft: + maxLeft = len(left) + if len(right) > maxRight: + maxRight = len(right) + FORMAT = ' %%-%ds %%s\n' % max(maxLeft, DEFAULT_LEFT) + for left, right in table: + if right.find('\n') >= 0: + for right in right.split('\n'): + sys.stderr.write(FORMAT % (left, right)) + left = '' + else: + sys.stderr.write(FORMAT % (left, right)) + +def usage(verbose=True): + """Print usage information.""" + programName = sys.argv[0] + def warn(line=''): + sys.stderr.write("%s\n" % line) + warn("""\ +Usage: %s [options] [ [...]] +Welcome to EmPy version %s.""" % (programName, __version__)) + warn() + warn("Valid options:") + info(OPTION_INFO) + if verbose: + warn() + warn("The following markups are supported:") + info(MARKUP_INFO) + warn() + warn("Valid escape sequences are:") + info(ESCAPE_INFO) + warn() + warn("The %s pseudomodule contains the following attributes:" % \ + DEFAULT_PSEUDOMODULE_NAME) + info(PSEUDOMODULE_INFO) + warn() + warn("The following environment variables are recognized:") + info(ENVIRONMENT_INFO) + warn() + warn(USAGE_NOTES) + else: + warn() + warn("Type %s -H for more extensive help." % programName) + +def invoke(args): + """Run a standalone instance of an EmPy interpeter.""" + # Initialize the options. + _output = None + _options = {BUFFERED_OPT: environment(BUFFERED_ENV, False), + RAW_OPT: environment(RAW_ENV, False), + EXIT_OPT: True, + FLATTEN_OPT: environment(FLATTEN_ENV, False), + OVERRIDE_OPT: not environment(NO_OVERRIDE_ENV, False), + CALLBACK_OPT: False} + _preprocessing = [] + _prefix = environment(PREFIX_ENV, DEFAULT_PREFIX) + _pseudo = environment(PSEUDO_ENV, None) + _interactive = environment(INTERACTIVE_ENV, False) + _extraArguments = environment(OPTIONS_ENV) + _binary = -1 # negative for not, 0 for default size, positive for size + _unicode = environment(UNICODE_ENV, False) + _unicodeInputEncoding = environment(INPUT_ENCODING_ENV, None) + _unicodeOutputEncoding = environment(OUTPUT_ENCODING_ENV, None) + _unicodeInputErrors = environment(INPUT_ERRORS_ENV, None) + _unicodeOutputErrors = environment(OUTPUT_ERRORS_ENV, None) + _hooks = [] + _pauseAtEnd = False + _relativePath = False + if _extraArguments is not None: + _extraArguments = string.split(_extraArguments) + args = _extraArguments + args + # Parse the arguments. + pairs, remainder = getopt.getopt(args, 'VhHvkp:m:frino:a:buBP:I:D:E:F:', ['version', 'help', 'extended-help', 'verbose', 'null-hook', 'suppress-errors', 'prefix=', 'no-prefix', 'module=', 'flatten', 'raw-errors', 'interactive', 'no-override-stdout', 'binary', 'chunk-size=', 'output=' 'append=', 'preprocess=', 'import=', 'define=', 'execute=', 'execute-file=', 'buffered-output', 'pause-at-end', 'relative-path', 'no-callback-error', 'no-bangpath-processing', 'unicode', 'unicode-encoding=', 'unicode-input-encoding=', 'unicode-output-encoding=', 'unicode-errors=', 'unicode-input-errors=', 'unicode-output-errors=']) + for option, argument in pairs: + if option in ('-V', '--version'): + sys.stderr.write("%s version %s\n" % (__program__, __version__)) + return + elif option in ('-h', '--help'): + usage(False) + return + elif option in ('-H', '--extended-help'): + usage(True) + return + elif option in ('-v', '--verbose'): + _hooks.append(VerboseHook()) + elif option in ('--null-hook',): + _hooks.append(Hook()) + elif option in ('-k', '--suppress-errors'): + _options[EXIT_OPT] = False + _interactive = True # suppress errors implies interactive mode + elif option in ('-m', '--module'): + _pseudo = argument + elif option in ('-f', '--flatten'): + _options[FLATTEN_OPT] = True + elif option in ('-p', '--prefix'): + _prefix = argument + elif option in ('--no-prefix',): + _prefix = None + elif option in ('-r', '--raw-errors'): + _options[RAW_OPT] = True + elif option in ('-i', '--interactive'): + _interactive = True + elif option in ('-n', '--no-override-stdout'): + _options[OVERRIDE_OPT] = False + elif option in ('-o', '--output'): + _output = argument, 'w', _options[BUFFERED_OPT] + elif option in ('-a', '--append'): + _output = argument, 'a', _options[BUFFERED_OPT] + elif option in ('-b', '--buffered-output'): + _options[BUFFERED_OPT] = True + elif option in ('-B',): # DEPRECATED + _options[BUFFERED_OPT] = True + elif option in ('--binary',): + _binary = 0 + elif option in ('--chunk-size',): + _binary = int(argument) + elif option in ('-P', '--preprocess'): + _preprocessing.append(('pre', argument)) + elif option in ('-I', '--import'): + for module in string.split(argument, ','): + module = string.strip(module) + _preprocessing.append(('import', module)) + elif option in ('-D', '--define'): + _preprocessing.append(('define', argument)) + elif option in ('-E', '--execute'): + _preprocessing.append(('exec', argument)) + elif option in ('-F', '--execute-file'): + _preprocessing.append(('file', argument)) + elif option in ('-u', '--unicode'): + _unicode = True + elif option in ('--pause-at-end',): + _pauseAtEnd = True + elif option in ('--relative-path',): + _relativePath = True + elif option in ('--no-callback-error',): + _options[CALLBACK_OPT] = True + elif option in ('--no-bangpath-processing',): + _options[BANGPATH_OPT] = False + elif option in ('--unicode-encoding',): + _unicodeInputEncoding = _unicodeOutputEncoding = argument + elif option in ('--unicode-input-encoding',): + _unicodeInputEncoding = argument + elif option in ('--unicode-output-encoding',): + _unicodeOutputEncoding = argument + elif option in ('--unicode-errors',): + _unicodeInputErrors = _unicodeOutputErrors = argument + elif option in ('--unicode-input-errors',): + _unicodeInputErrors = argument + elif option in ('--unicode-output-errors',): + _unicodeOutputErrors = argument + # Set up the Unicode subsystem if required. + if _unicode or \ + _unicodeInputEncoding or _unicodeOutputEncoding or \ + _unicodeInputErrors or _unicodeOutputErrors: + theSubsystem.initialize(_unicodeInputEncoding, \ + _unicodeOutputEncoding, \ + _unicodeInputErrors, _unicodeOutputErrors) + # Now initialize the output file if something has already been selected. + if _output is not None: + _output = apply(AbstractFile, _output) + # Set up the main filename and the argument. + if not remainder: + remainder.append('-') + filename, arguments = remainder[0], remainder[1:] + # Set up the interpreter. + if _options[BUFFERED_OPT] and _output is None: + raise ValueError, "-b only makes sense with -o or -a arguments" + if _prefix == 'None': + _prefix = None + if _prefix and type(_prefix) is types.StringType and len(_prefix) != 1: + raise Error, "prefix must be single-character string" + interpreter = Interpreter(output=_output, \ + argv=remainder, \ + prefix=_prefix, \ + pseudo=_pseudo, \ + options=_options, \ + hooks=_hooks) + try: + # Execute command-line statements. + i = 0 + for which, thing in _preprocessing: + if which == 'pre': + command = interpreter.file + target = theSubsystem.open(thing, 'r') + name = thing + elif which == 'define': + command = interpreter.string + if string.find(thing, '=') >= 0: + target = '%s{%s}' % (_prefix, thing) + else: + target = '%s{%s = None}' % (_prefix, thing) + name = '' % i + elif which == 'exec': + command = interpreter.string + target = '%s{%s}' % (_prefix, thing) + name = '' % i + elif which == 'file': + command = interpreter.string + name = '' % (i, thing) + target = '%s{execfile("""%s""")}' % (_prefix, thing) + elif which == 'import': + command = interpreter.string + name = '' % i + target = '%s{import %s}' % (_prefix, thing) + else: + assert 0 + interpreter.wrap(command, (target, name)) + i = i + 1 + # Now process the primary file. + interpreter.ready() + if filename == '-': + if not _interactive: + name = '' + path = '' + file = sys.stdin + else: + name, file = None, None + else: + name = filename + file = theSubsystem.open(filename, 'r') + path = os.path.split(filename)[0] + if _relativePath: + sys.path.insert(0, path) + if file is not None: + if _binary < 0: + interpreter.wrap(interpreter.file, (file, name)) + else: + chunkSize = _binary + interpreter.wrap(interpreter.binary, (file, name, chunkSize)) + # If we're supposed to go interactive afterwards, do it. + if _interactive: + interpreter.interact() + finally: + interpreter.shutdown() + # Finally, if we should pause at the end, do it. + if _pauseAtEnd: + try: + raw_input() + except EOFError: + pass + +def main(): + invoke(sys.argv[1:]) + +if __name__ == '__main__': main() diff --git a/data/gtkrc.em b/data/gtkrc.em new file mode 100644 index 0000000..d4e1a7c --- /dev/null +++ b/data/gtkrc.em @@ -0,0 +1,12 @@ +@{ +if scaling == '72': + icon_sizes = 'gtk-large-toolbar=40,40' +else: + icon_sizes = 'gtk-large-toolbar=55,55' +}@ +gtk-theme-name = "sugar-@scaling" +gtk-icon-theme-name = "sugar" +gtk-cursor-theme-name = "sugar" +gtk-toolbar-style = GTK_TOOLBAR_ICONS +gtk-icon-sizes = "@icon_sizes" +gtk-cursor-blink-timeout = 3 diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am new file mode 100644 index 0000000..a35643a --- /dev/null +++ b/data/icons/Makefile.am @@ -0,0 +1,15 @@ +sugardir = $(pkgdatadir)/data/icons + +sugar_DATA = \ + module-about_me.svg \ + module-about_my_computer.svg \ + module-date_and_time.svg \ + module-frame.svg \ + module-keyboard.svg \ + module-language.svg \ + module-modemconfiguration.svg \ + module-network.svg \ + module-power.svg \ + module-updater.svg + +EXTRA_DIST = $(sugar_DATA) diff --git a/data/icons/Makefile.in b/data/icons/Makefile.in new file mode 100644 index 0000000..44b4c0f --- /dev/null +++ b/data/icons/Makefile.in @@ -0,0 +1,432 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = data/icons +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(sugardir)" +DATA = $(sugar_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/data/icons +sugar_DATA = \ + module-about_me.svg \ + module-about_my_computer.svg \ + module-date_and_time.svg \ + module-frame.svg \ + module-keyboard.svg \ + module-language.svg \ + module-modemconfiguration.svg \ + module-network.svg \ + module-power.svg \ + module-updater.svg + +EXTRA_DIST = $(sugar_DATA) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/icons/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign data/icons/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarDATA: $(sugar_DATA) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_DATA)'; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done + +uninstall-sugarDATA: + @$(NORMAL_UNINSTALL) + @list='$(sugar_DATA)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(sugardir)'; $(am__uninstall_files_from_dir) +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarDATA installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/data/icons/module-about_me.svg b/data/icons/module-about_me.svg new file mode 100644 index 0000000..7abe926 --- /dev/null +++ b/data/icons/module-about_me.svg @@ -0,0 +1,7 @@ + + +]> + + + \ No newline at end of file diff --git a/data/icons/module-about_my_computer.svg b/data/icons/module-about_my_computer.svg new file mode 100644 index 0000000..cf3528e --- /dev/null +++ b/data/icons/module-about_my_computer.svg @@ -0,0 +1,6 @@ + + +]> + + \ No newline at end of file diff --git a/data/icons/module-date_and_time.svg b/data/icons/module-date_and_time.svg new file mode 100644 index 0000000..605dbeb --- /dev/null +++ b/data/icons/module-date_and_time.svg @@ -0,0 +1,19 @@ + + +]> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/icons/module-frame.svg b/data/icons/module-frame.svg new file mode 100644 index 0000000..11ccee4 --- /dev/null +++ b/data/icons/module-frame.svg @@ -0,0 +1,13 @@ + + +]> + + + + + + + + + diff --git a/data/icons/module-keyboard.svg b/data/icons/module-keyboard.svg new file mode 100644 index 0000000..43bbc57 --- /dev/null +++ b/data/icons/module-keyboard.svg @@ -0,0 +1,134 @@ + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/icons/module-language.svg b/data/icons/module-language.svg new file mode 100644 index 0000000..ce04cb4 --- /dev/null +++ b/data/icons/module-language.svg @@ -0,0 +1,59 @@ + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/icons/module-modemconfiguration.svg b/data/icons/module-modemconfiguration.svg new file mode 100644 index 0000000..02ccc81 --- /dev/null +++ b/data/icons/module-modemconfiguration.svg @@ -0,0 +1,11 @@ + + +]> + + + + + + + diff --git a/data/icons/module-network.svg b/data/icons/module-network.svg new file mode 100644 index 0000000..a750a38 --- /dev/null +++ b/data/icons/module-network.svg @@ -0,0 +1,32 @@ + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/icons/module-power.svg b/data/icons/module-power.svg new file mode 100644 index 0000000..4db57ea --- /dev/null +++ b/data/icons/module-power.svg @@ -0,0 +1,13 @@ + + +]> + + + + + + + + + \ No newline at end of file diff --git a/data/icons/module-updater.svg b/data/icons/module-updater.svg new file mode 100644 index 0000000..a521f61 --- /dev/null +++ b/data/icons/module-updater.svg @@ -0,0 +1,16 @@ + + +]> + + + + + + + + + + + + diff --git a/data/kbdconfig b/data/kbdconfig new file mode 100644 index 0000000..03c288a --- /dev/null +++ b/data/kbdconfig @@ -0,0 +1,3 @@ +# This is the sugar keyboard configuration for matchbox + +return=fullscreen diff --git a/data/mime.defaults b/data/mime.defaults new file mode 100644 index 0000000..f07e22c --- /dev/null +++ b/data/mime.defaults @@ -0,0 +1,24 @@ +# MIME Activity service name + +application/pdf org.laptop.sugar.ReadActivity + +text/rtf org.laptop.AbiWordActivity +text/plain org.laptop.AbiWordActivity +application/x-abiword org.laptop.AbiWordActivity +text/x-xml-abiword org.laptop.AbiWordActivity +application/msword org.laptop.AbiWordActivity +application/rtf org.laptop.AbiWordActivity + +image/png org.laptop.ImageViewerActivity +image/gif org.laptop.ImageViewerActivity +image/jpeg org.laptop.ImageViewerActivity +text/html org.laptop.WebActivity +application/xhtml+xml org.laptop.WebActivity +application/xml org.laptop.WebActivity +application/rss+xml org.laptop.WebActivity +application/ogg org.laptop.sugar.Jukebox +audio/ogg org.laptop.sugar.Jukebox +video/ogg org.laptop.sugar.Jukebox + +text/x-python org.laptop.PippyActivity + diff --git a/data/nm-user-settings.conf b/data/nm-user-settings.conf new file mode 100644 index 0000000..16e71e4 --- /dev/null +++ b/data/nm-user-settings.conf @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + 512 + + diff --git a/data/sugar-100.gtkrc b/data/sugar-100.gtkrc new file mode 100644 index 0000000..1304ebe --- /dev/null +++ b/data/sugar-100.gtkrc @@ -0,0 +1,6 @@ +gtk-theme-name = "sugar-100" +gtk-icon-theme-name = "sugar" +gtk-cursor-theme-name = "sugar" +gtk-toolbar-style = GTK_TOOLBAR_ICONS +gtk-icon-sizes = "gtk-large-toolbar=55,55" +gtk-cursor-blink-timeout = 3 diff --git a/data/sugar-72.gtkrc b/data/sugar-72.gtkrc new file mode 100644 index 0000000..668b19e --- /dev/null +++ b/data/sugar-72.gtkrc @@ -0,0 +1,6 @@ +gtk-theme-name = "sugar-72" +gtk-icon-theme-name = "sugar" +gtk-cursor-theme-name = "sugar" +gtk-toolbar-style = GTK_TOOLBAR_ICONS +gtk-icon-sizes = "gtk-large-toolbar=40,40" +gtk-cursor-blink-timeout = 3 diff --git a/data/sugar-emulator.desktop.in b/data/sugar-emulator.desktop.in new file mode 100644 index 0000000..6247bd7 --- /dev/null +++ b/data/sugar-emulator.desktop.in @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Sugar +GenericName=Sugar Emulator +Comment=The emulator for the Sugar Desktop Environment +Exec=@prefix@/bin/sugar-emulator +Terminal=false +Type=Application +Icon=sugar-xo +Categories=Education;Teaching; diff --git a/data/sugar-xo.svg b/data/sugar-xo.svg new file mode 100644 index 0000000..b673179 --- /dev/null +++ b/data/sugar-xo.svg @@ -0,0 +1,7 @@ + + +]> + + + \ No newline at end of file diff --git a/data/sugar.desktop b/data/sugar.desktop new file mode 100644 index 0000000..2d7133f --- /dev/null +++ b/data/sugar.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Sugar +GenericName=Sugar +Exec=sugar +Type=Application diff --git a/data/sugar.schemas.in b/data/sugar.schemas.in new file mode 100644 index 0000000..579d24b --- /dev/null +++ b/data/sugar.schemas.in @@ -0,0 +1,384 @@ + + + + + /schemas/desktop/sugar/user/nick + /desktop/sugar/user/nick + sugar + string + + + User Name + User name that is used throughout the desktop. + + + + /schemas/desktop/sugar/user/default_nick + /desktop/sugar/user/default_nick + sugar + string + system + + Default nick + "disabled" to ask nick on initialization; "system" to reuse UNIX account long name. + + + + /schemas/desktop/sugar/user/color + /desktop/sugar/user/color + sugar + string + + + User Color + 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 + + + + + + /schemas/desktop/sugar/sound/volume + /desktop/sugar/sound/volume + sugar + int + 80 + + Volume Level + Volume level for the sound device. + + + + /schemas/desktop/sugar/sound/mute + /desktop/sugar/sound/mute + sugar + bool + false + + Sound Muted + Setting for muting the sound device. + + + + + /schemas/desktop/sugar/backup_url + /desktop/sugar/backup_url + sugar + string + + + Backup URL + URL where the backup is saved to. + + + + + /schemas/desktop/sugar/date/timezone + /desktop/sugar/date/timezone + sugar + string + + + Timezone + Timezone setting for the system. + + + + + /schemas/desktop/sugar/desktop/favorites_layout + /desktop/sugar/desktop/favorites_layout + sugar + string + ring-layout + + Favorites Layout + Layout of the favorites view. + + + + + /schemas/desktop/sugar/desktop/favorites_mode + /desktop/sugar/desktop/favorites_mode + sugar + bool + false + + Favorites resume mode + When in resume mode, clicking on a favorite icon will cause the last entry for that activity to be resumed. + + + + + /schemas/desktop/sugar/frame/edge_delay + /desktop/sugar/frame/edge_delay + sugar + int + 1000 + + Edge Delay + Delay for the activation of the frame using the edges. + + + + /schemas/desktop/sugar/frame/corner_delay + /desktop/sugar/frame/corner_delay + sugar + int + 0 + + Corner Delay + Delay for the activation of the frame using the corners. + + + + + /schemas/desktop/sugar/collaboration/jabber_server + /desktop/sugar/collaboration/jabber_server + sugar + string + jabber.sugarlabs.org + + Jabber Server + URL of the jabber server to use. + + + + + /schemas/desktop/sugar/power/automatic + /desktop/sugar/power/automatic + sugar + bool + false + + Power Automatic + Automatic power management (increases battery life) + + + + /schemas/desktop/sugar/power/extreme + /desktop/sugar/power/extreme + sugar + bool + false + + Power Extreme + Extreme power management (disables wireless radio, increases battery life) + + + + + /schemas/desktop/sugar/collaboration/publish_gadget + /desktop/sugar/collaboration/publish_gadget + sugar + bool + true + + Publish to Gadget + If TRUE, Sugar will make us searchable for the other users of the Jabber server. + + + + + /schemas/desktop/sugar/show_logout + /desktop/sugar/show_logout + sugar + bool + true + + Show Log out + If TRUE, Sugar will show a "Log out" option. + + + + + /schemas/desktop/sugar/show_restart + /desktop/sugar/show_restart + sugar + bool + true + + Show Restart + If TRUE, Sugar will show a "Restart" option. + + + + + /schemas/desktop/sugar/peripherals/keyboard/layouts + /desktop/sugar/peripherals/keyboard/layouts + sugar + list + string + + Keyboard layouts + List of keyboard layouts. Each entry should be in the form layout(variant) + + + + + /schemas/desktop/sugar/peripherals/keyboard/options + /desktop/sugar/peripherals/keyboard/options + sugar + list + string + + Keyboard options + List of keyboard options. + + + + + /schemas/desktop/sugar/peripherals/keyboard/model + /desktop/sugar/peripherals/keyboard/model + sugar + string + + Keyboard model + The keyboard model to be used + + + + + /schemas/desktop/sugar/font/default_face + /desktop/sugar/font/default_face + sugar + string + Sans Serif + + Default font face + Font face that is used throughout the desktop. + + + + /schemas/desktop/sugar/font/default_size + /desktop/sugar/font/default_size + sugar + float + 10 + + Default font size + Font size that is used throughout the desktop. + + + + + /schemas/desktop/sugar/network/gsm/username + /desktop/sugar/network/gsm/username + sugar + string + + + GSM network username (DEPRECATED/UNUSED) + GSM network username configuration (DEPRECATED/UNUSED) + + + + /schemas/desktop/sugar/network/gsm/password + /desktop/sugar/network/gsm/password + sugar + string + + + GSM network password (DEPRECATED/UNUSED) + GSM network password configuration (DEPRECATED/UNUSED) + + + + /schemas/desktop/sugar/network/gsm/number + /desktop/sugar/network/gsm/number + sugar + string + *99# + + GSM network number (DEPRECATED/UNUSED) + GSM network telephone number configuration (DEPRECATED/UNUSED) + + + + /schemas/desktop/sugar/network/gsm/apn + /desktop/sugar/network/gsm/apn + sugar + string + + + GSM network APN (DEPRECATED/UNUSED) + GSM network access point name configuration (DEPRECATED/UNUSED) + + + + /schemas/desktop/sugar/network/gsm/pin + /desktop/sugar/network/gsm/pin + sugar + string + + + GSM network PIN (DEPRECATED/UNUSED) + GSM network personal identification number configuration (DEPRECATED/UNUSED) + + + + /schemas/desktop/sugar/network/gsm/puk + /desktop/sugar/network/gsm/puk + sugar + string + + + GSM network PUK (DEPRECATED/UNUSED) + GSM network personal unlock key configuration (DEPRECATED/UNUSED) + + + + + /schemas/desktop/sugar/network/adhoc + /desktop/sugar/network/adhoc + sugar + bool + true + + Show Sugar Ad-hoc networks + 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. + + + + + /schemas/desktop/sugar/protected_activities + /desktop/sugar/protected_activities + sugar + list + string + [] + + Bundle IDs of protected activities + Users will not be allowed to erase these + activities through the list view. + + + + + /schemas/desktop/sugar/speech/pitch + /desktop/sugar/speech/pitch + sugar + int + 0 + + Pitch value for the speech sugar service + Pitch value used by the speech service in Sugar + + + + + /schemas/desktop/sugar/speech/rate + /desktop/sugar/speech/rate + sugar + int + 0 + + Rate value for the speech sugar service + Rate value used by the speech service in Sugar + + + + + diff --git a/data/sugar.xml.in b/data/sugar.xml.in new file mode 100644 index 0000000..9300a45 --- /dev/null +++ b/data/sugar.xml.in @@ -0,0 +1,15 @@ + + + + <_comment>Sugar activity bundle + + + + <_comment>Sugar content bundle + + + + <_comment>Sugar Journal entry bundle + + + diff --git a/extensions/Makefile.am b/extensions/Makefile.am new file mode 100644 index 0000000..d4ab534 --- /dev/null +++ b/extensions/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = cpsection deviceicon globalkey diff --git a/extensions/Makefile.in b/extensions/Makefile.in new file mode 100644 index 0000000..462ffb0 --- /dev/null +++ b/extensions/Makefile.in @@ -0,0 +1,569 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = cpsection deviceicon globalkey +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/Makefile.am b/extensions/cpsection/Makefile.am new file mode 100644 index 0000000..a92b5dd --- /dev/null +++ b/extensions/cpsection/Makefile.am @@ -0,0 +1,5 @@ +SUBDIRS = aboutme aboutcomputer datetime frame keyboard language \ + modemconfiguration network power updater + +sugardir = $(pkgdatadir)/extensions/cpsection +sugar_PYTHON = __init__.py diff --git a/extensions/cpsection/Makefile.in b/extensions/cpsection/Makefile.in new file mode 100644 index 0000000..45b11e2 --- /dev/null +++ b/extensions/cpsection/Makefile.in @@ -0,0 +1,643 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/cpsection +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = aboutme aboutcomputer datetime frame keyboard language \ + modemconfiguration network power updater + +sugardir = $(pkgdatadir)/extensions/cpsection +sugar_PYTHON = __init__.py +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/cpsection/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/cpsection/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/__init__.py b/extensions/cpsection/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/extensions/cpsection/__init__.py diff --git a/extensions/cpsection/aboutcomputer/Makefile.am b/extensions/cpsection/aboutcomputer/Makefile.am new file mode 100644 index 0000000..a3bdec8 --- /dev/null +++ b/extensions/cpsection/aboutcomputer/Makefile.am @@ -0,0 +1,6 @@ +sugardir = $(pkgdatadir)/extensions/cpsection/aboutcomputer + +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py diff --git a/extensions/cpsection/aboutcomputer/Makefile.in b/extensions/cpsection/aboutcomputer/Makefile.in new file mode 100644 index 0000000..7d25501 --- /dev/null +++ b/extensions/cpsection/aboutcomputer/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/cpsection/aboutcomputer +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/extensions/cpsection/aboutcomputer +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/cpsection/aboutcomputer/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/cpsection/aboutcomputer/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/aboutcomputer/__init__.py b/extensions/cpsection/aboutcomputer/__init__.py new file mode 100644 index 0000000..faf814d --- /dev/null +++ b/extensions/cpsection/aboutcomputer/__init__.py @@ -0,0 +1,21 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ + +CLASS = 'AboutComputer' +ICON = 'module-about_my_computer' +TITLE = _('About my Computer') diff --git a/extensions/cpsection/aboutcomputer/model.py b/extensions/cpsection/aboutcomputer/model.py new file mode 100644 index 0000000..86d2e3f --- /dev/null +++ b/extensions/cpsection/aboutcomputer/model.py @@ -0,0 +1,228 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +import os +import logging +import re +import subprocess +from gettext import gettext as _ +import errno + +import dbus + +from jarabe import config + + +_NM_SERVICE = 'org.freedesktop.NetworkManager' +_NM_PATH = '/org/freedesktop/NetworkManager' +_NM_IFACE = 'org.freedesktop.NetworkManager' +_NM_DEVICE_IFACE = 'org.freedesktop.NetworkManager.Device' +_NM_DEVICE_TYPE_WIFI = 2 + +_OFW_TREE = '/ofw' +_PROC_TREE = '/proc/device-tree' +_DMI_DIRECTORY = '/sys/class/dmi/id' +_SN = 'serial-number' +_MODEL = 'openprom/model' + +_logger = logging.getLogger('ControlPanel - AboutComputer') +_not_available = _('Not available') + + +def get_aboutcomputer(): + msg = 'Serial Number: %s \nBuild Number: %s \nFirmware Number: %s \n' \ + % (get_serial_number(), get_build_number(), get_firmware_number()) + return msg + + +def print_aboutcomputer(): + print get_aboutcomputer() + + +def get_serial_number(): + serial_no = None + if os.path.exists(os.path.join(_OFW_TREE, _SN)): + serial_no = _read_file(os.path.join(_OFW_TREE, _SN)) + elif os.path.exists(os.path.join(_PROC_TREE, _SN)): + serial_no = _read_file(os.path.join(_PROC_TREE, _SN)) + if serial_no is None: + serial_no = _not_available + return serial_no + + +def print_serial_number(): + serial_no = get_serial_number() + if serial_no is None: + serial_no = _not_available + print serial_no + + +def get_build_number(): + build_no = _read_file('/boot/olpc_build') + + if build_no is None: + build_no = _read_file('/etc/redhat-release') + + if build_no is None: + try: + popen = subprocess.Popen(['lsb_release', '-ds'], + stdout=subprocess.PIPE) + except OSError, e: + if e.errno != errno.ENOENT: + raise + else: + build_no, stderr_ = popen.communicate() + + if build_no is None or not build_no: + build_no = _not_available + + return build_no + + +def print_build_number(): + print get_build_number() + + +def _parse_firmware_number(firmware_no): + if firmware_no is None: + firmware_no = _not_available + else: + # try to extract Open Firmware version from OLPC style version + # string, e.g. "CL2 Q4B11 Q4B" + if firmware_no.startswith('CL'): + firmware_no = firmware_no[6:13] + return firmware_no + + +def get_firmware_number(): + firmware_no = None + if os.path.exists(os.path.join(_OFW_TREE, _MODEL)): + firmware_no = _read_file(os.path.join(_OFW_TREE, _MODEL)) + firmware_no = _parse_firmware_number(firmware_no) + elif os.path.exists(os.path.join(_PROC_TREE, _MODEL)): + firmware_no = _read_file(os.path.join(_PROC_TREE, _MODEL)) + firmware_no = _parse_firmware_number(firmware_no) + elif os.path.exists(os.path.join(_DMI_DIRECTORY, 'bios_version')): + firmware_no = _read_file(os.path.join(_DMI_DIRECTORY, 'bios_version')) + if firmware_no is None: + firmware_no = _not_available + return firmware_no + + +def print_firmware_number(): + print get_firmware_number() + + +def _get_wireless_interfaces(): + try: + bus = dbus.SystemBus() + manager_object = bus.get_object(_NM_SERVICE, _NM_PATH) + network_manager = dbus.Interface(manager_object, _NM_IFACE) + except dbus.DBusException: + _logger.warning('Cannot connect to NetworkManager, falling back to' + ' static list of devices') + return ['wlan0', 'eth0'] + + interfaces = [] + for device_path in network_manager.GetDevices(): + device_object = bus.get_object(_NM_SERVICE, device_path) + properties = dbus.Interface(device_object, + 'org.freedesktop.DBus.Properties') + device_type = properties.Get(_NM_DEVICE_IFACE, 'DeviceType') + if device_type != _NM_DEVICE_TYPE_WIFI: + continue + + interfaces.append(properties.Get(_NM_DEVICE_IFACE, 'Interface')) + + return interfaces + + +def get_wireless_firmware(): + environment = os.environ.copy() + environment['PATH'] = '%s:/usr/sbin' % (environment['PATH'], ) + firmware_info = {} + for interface in _get_wireless_interfaces(): + try: + output = subprocess.Popen(['ethtool', '-i', interface], + stdout=subprocess.PIPE, + env=environment).stdout.readlines() + except OSError: + _logger.exception('Error running ethtool for %r', interface) + continue + + try: + version = ([line for line in output + if line.startswith('firmware')][0].split()[1]) + except IndexError: + _logger.exception('Error parsing ethtool output for %r', + interface) + continue + + firmware_info[interface] = version + + if not firmware_info: + return _not_available + + if len(firmware_info) == 1: + return firmware_info.values()[0] + + return ', '.join(['%(interface)s: %(version)s' % + {'interface': interface, 'version': version} + for interface, version in firmware_info.items()]) + + +def print_wireless_firmware(): + print get_wireless_firmware() + + +def _read_file(path): + if os.access(path, os.R_OK) == 0: + return None + + fd = open(path, 'r') + value = fd.read() + fd.close() + if value: + value = value.strip('\n') + return value + else: + _logger.debug('No information in file or directory: %s', path) + return None + + +def get_license(): + license_file = os.path.join(config.data_path, 'GPLv2') + lang = os.environ['LANG'] + if lang.endswith('UTF-8'): + lang = lang[:-6] + + try_file = license_file + '.' + lang + if os.path.isfile(try_file): + license_file = try_file + else: + try_file = license_file + '.' + lang.split('_')[0] + if os.path.isfile(try_file): + license_file = try_file + + try: + fd = open(license_file) + # remove 0x0c page breaks which can't be rendered in text views + license_text = fd.read().replace('\x0c', '') + fd.close() + except IOError: + license_text = _not_available + return license_text diff --git a/extensions/cpsection/aboutcomputer/view.py b/extensions/cpsection/aboutcomputer/view.py new file mode 100644 index 0000000..6b16005 --- /dev/null +++ b/extensions/cpsection/aboutcomputer/view.py @@ -0,0 +1,215 @@ +# coding=utf-8 +# Copyright (C) 2008, OLPC +# Copyright (C) 2009 Simon Schampijer +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ + +import gtk + +from sugar.graphics import style + +from jarabe import config +from jarabe.controlpanel.sectionview import SectionView + + +class AboutComputer(SectionView): + def __init__(self, model, alerts=None): + SectionView.__init__(self) + + self._model = model + + self.set_border_width(style.DEFAULT_SPACING * 2) + self.set_spacing(style.DEFAULT_SPACING) + + self._group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + + scrollwindow = gtk.ScrolledWindow() + scrollwindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + self.pack_start(scrollwindow, expand=True) + scrollwindow.show() + + self._vbox = gtk.VBox() + scrollwindow.add_with_viewport(self._vbox) + self._vbox.show() + + self._setup_identity() + + self._setup_software() + self._setup_copyright() + + def _setup_identity(self): + separator_identity = gtk.HSeparator() + self._vbox.pack_start(separator_identity, expand=False) + separator_identity.show() + + label_identity = gtk.Label(_('Identity')) + label_identity.set_alignment(0, 0) + self._vbox.pack_start(label_identity, expand=False) + label_identity.show() + vbox_identity = gtk.VBox() + vbox_identity.set_border_width(style.DEFAULT_SPACING * 2) + vbox_identity.set_spacing(style.DEFAULT_SPACING) + + box_identity = gtk.HBox(spacing=style.DEFAULT_SPACING) + label_serial = gtk.Label(_('Serial Number:')) + label_serial.set_alignment(1, 0) + label_serial.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + box_identity.pack_start(label_serial, expand=False) + self._group.add_widget(label_serial) + label_serial.show() + label_serial_no = gtk.Label(self._model.get_serial_number()) + label_serial_no.set_alignment(0, 0) + box_identity.pack_start(label_serial_no, expand=False) + label_serial_no.show() + vbox_identity.pack_start(box_identity, expand=False) + box_identity.show() + + self._vbox.pack_start(vbox_identity, expand=False) + vbox_identity.show() + + def _setup_software(self): + separator_software = gtk.HSeparator() + self._vbox.pack_start(separator_software, expand=False) + separator_software.show() + + label_software = gtk.Label(_('Software')) + label_software.set_alignment(0, 0) + self._vbox.pack_start(label_software, expand=False) + label_software.show() + box_software = gtk.VBox() + box_software.set_border_width(style.DEFAULT_SPACING * 2) + box_software.set_spacing(style.DEFAULT_SPACING) + + box_build = gtk.HBox(spacing=style.DEFAULT_SPACING) + label_build = gtk.Label(_('Build:')) + label_build.set_alignment(1, 0) + label_build.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + box_build.pack_start(label_build, expand=False) + self._group.add_widget(label_build) + label_build.show() + label_build_no = gtk.Label(self._model.get_build_number()) + label_build_no.set_alignment(0, 0) + box_build.pack_start(label_build_no, expand=False) + label_build_no.show() + box_software.pack_start(box_build, expand=False) + box_build.show() + + box_sugar = gtk.HBox(spacing=style.DEFAULT_SPACING) + label_sugar = gtk.Label(_('Sugar:')) + label_sugar.set_alignment(1, 0) + label_sugar.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + box_sugar.pack_start(label_sugar, expand=False) + self._group.add_widget(label_sugar) + label_sugar.show() + label_sugar_ver = gtk.Label(config.version) + label_sugar_ver.set_alignment(0, 0) + box_sugar.pack_start(label_sugar_ver, expand=False) + label_sugar_ver.show() + box_software.pack_start(box_sugar, expand=False) + box_sugar.show() + + box_firmware = gtk.HBox(spacing=style.DEFAULT_SPACING) + label_firmware = gtk.Label(_('Firmware:')) + label_firmware.set_alignment(1, 0) + label_firmware.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + box_firmware.pack_start(label_firmware, expand=False) + self._group.add_widget(label_firmware) + label_firmware.show() + label_firmware_no = gtk.Label(self._model.get_firmware_number()) + label_firmware_no.set_alignment(0, 0) + box_firmware.pack_start(label_firmware_no, expand=False) + label_firmware_no.show() + box_software.pack_start(box_firmware, expand=False) + box_firmware.show() + + box_wireless_fw = gtk.HBox(spacing=style.DEFAULT_SPACING) + label_wireless_fw = gtk.Label(_('Wireless Firmware:')) + label_wireless_fw.set_alignment(1, 0) + label_wireless_fw.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + box_wireless_fw.pack_start(label_wireless_fw, expand=False) + self._group.add_widget(label_wireless_fw) + label_wireless_fw.show() + wireless_fw_no = self._model.get_wireless_firmware() + label_wireless_fw_no = gtk.Label(wireless_fw_no) + label_wireless_fw_no.set_alignment(0, 0) + box_wireless_fw.pack_start(label_wireless_fw_no, expand=False) + label_wireless_fw_no.show() + box_software.pack_start(box_wireless_fw, expand=False) + box_wireless_fw.show() + + self._vbox.pack_start(box_software, expand=False) + box_software.show() + + def _setup_copyright(self): + separator_copyright = gtk.HSeparator() + self._vbox.pack_start(separator_copyright, expand=False) + separator_copyright.show() + + label_copyright = gtk.Label(_('Copyright and License')) + label_copyright.set_alignment(0, 0) + self._vbox.pack_start(label_copyright, expand=False) + label_copyright.show() + vbox_copyright = gtk.VBox() + vbox_copyright.set_border_width(style.DEFAULT_SPACING * 2) + vbox_copyright.set_spacing(style.DEFAULT_SPACING) + + copyright_text = '© 2006-2012 One Laptop per Child Association Inc,' \ + ' Sugar Labs Inc, Red Hat Inc, Collabora Ltd and' \ + ' Contributors.' + label_copyright = gtk.Label(copyright_text) + label_copyright.set_alignment(0, 0) + label_copyright.set_size_request(gtk.gdk.screen_width() / 2, -1) + label_copyright.set_line_wrap(True) + label_copyright.show() + vbox_copyright.pack_start(label_copyright, expand=False) + + info_text = _('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.') + label_info = gtk.Label(info_text) + label_info.set_alignment(0, 0) + label_info.set_line_wrap(True) + label_info.set_size_request(gtk.gdk.screen_width() / 2, -1) + label_info.show() + vbox_copyright.pack_start(label_info, expand=False) + + expander = gtk.Expander(_('Full license:')) + expander.connect('notify::expanded', self.license_expander_cb) + expander.show() + vbox_copyright.pack_start(expander, expand=True) + + self._vbox.pack_start(vbox_copyright, expand=True) + vbox_copyright.show() + + def license_expander_cb(self, expander, param_spec): + # load/destroy the license viewer on-demand, to avoid storing the + # GPL in memory at all times + if expander.get_expanded(): + view_license = gtk.TextView() + view_license.set_editable(False) + view_license.get_buffer().set_text(self._model.get_license()) + view_license.show() + expander.add(view_license) + else: + expander.get_child().destroy() diff --git a/extensions/cpsection/aboutme/Makefile.am b/extensions/cpsection/aboutme/Makefile.am new file mode 100644 index 0000000..9ca91d2 --- /dev/null +++ b/extensions/cpsection/aboutme/Makefile.am @@ -0,0 +1,6 @@ +sugardir = $(pkgdatadir)/extensions/cpsection/aboutme + +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py diff --git a/extensions/cpsection/aboutme/Makefile.in b/extensions/cpsection/aboutme/Makefile.in new file mode 100644 index 0000000..f8ea8cd --- /dev/null +++ b/extensions/cpsection/aboutme/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/cpsection/aboutme +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/extensions/cpsection/aboutme +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/cpsection/aboutme/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/cpsection/aboutme/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/aboutme/__init__.py b/extensions/cpsection/aboutme/__init__.py new file mode 100644 index 0000000..7ded428 --- /dev/null +++ b/extensions/cpsection/aboutme/__init__.py @@ -0,0 +1,26 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +import gconf + +from sugar.graphics.xocolor import XoColor + +CLASS = 'AboutMe' +ICON = 'module-about_me' +TITLE = _('About Me') +client = gconf.client_get_default() +COLOR = XoColor(client.get_string('/desktop/sugar/user/color')) diff --git a/extensions/cpsection/aboutme/model.py b/extensions/cpsection/aboutme/model.py new file mode 100644 index 0000000..fb4c2f1 --- /dev/null +++ b/extensions/cpsection/aboutme/model.py @@ -0,0 +1,125 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +from gettext import gettext as _ +import gconf + + +_COLORS = { + 'red': {'dark': '#b20008', 'medium': '#e6000a', 'light': '#ffadce'}, + 'orange': {'dark': '#9a5200', 'medium': '#c97e00', 'light': '#ffc169'}, + 'yellow': {'dark': '#807500', 'medium': '#be9e00', 'light': '#fffa00'}, + 'green': {'dark': '#008009', 'medium': '#00b20d', 'light': '#8bff7a'}, + 'blue': {'dark': '#00588c', 'medium': '#005fe4', 'light': '#bccdff'}, + 'purple': {'dark': '#5e008c', 'medium': '#7f00bf', 'light': '#d1a3ff'}, +} + +_MODIFIERS = ('dark', 'medium', 'light') + + +def get_nick(): + client = gconf.client_get_default() + return client.get_string('/desktop/sugar/user/nick') + + +def print_nick(): + print get_nick() + + +def set_nick(nick): + """Set the nickname. + nick : e.g. 'walter' + """ + if not nick: + raise ValueError(_('You must enter a name.')) + if not isinstance(nick, unicode): + nick = unicode(nick, 'utf-8') + client = gconf.client_get_default() + client.set_string('/desktop/sugar/user/nick', nick) + return 1 + + +def get_color(): + client = gconf.client_get_default() + return client.get_string('/desktop/sugar/user/color') + + +def print_color(): + color_string = get_color() + tmp = color_string.split(',') + + stroke_tuple = None + fill_tuple = None + for color in _COLORS: + for hue in _COLORS[color]: + if _COLORS[color][hue] == tmp[0]: + stroke_tuple = (color, hue) + if _COLORS[color][hue] == tmp[1]: + fill_tuple = (color, hue) + + if stroke_tuple is not None: + print _('stroke: color=%s hue=%s') % (stroke_tuple[0], + stroke_tuple[1]) + else: + print _('stroke: %s') % (tmp[0]) + if fill_tuple is not None: + print _('fill: color=%s hue=%s') % (fill_tuple[0], fill_tuple[1]) + else: + print _('fill: %s') % (tmp[1]) + + +def set_color(stroke, fill, stroke_modifier='medium', fill_modifier='medium'): + """Set the system color by setting a fill and stroke color. + fill : [red, orange, yellow, blue, green, purple] + stroke : [red, orange, yellow, blue, green, purple] + hue stroke : [dark, medium, light] (optional) + hue fill : [dark, medium, light] (optional) + """ + + if stroke_modifier not in _MODIFIERS or fill_modifier not in _MODIFIERS: + print (_('Error in specified color modifiers.')) + return + if stroke not in _COLORS or fill not in _COLORS: + print (_('Error in specified colors.')) + return + + if stroke_modifier == fill_modifier: + if fill_modifier == 'medium': + fill_modifier = 'light' + else: + fill_modifier = 'medium' + + color = _COLORS[stroke][stroke_modifier] + ',' \ + + _COLORS[fill][fill_modifier] + + client = gconf.client_get_default() + client.set_string('/desktop/sugar/user/color', color) + return 1 + + +def get_color_xo(): + client = gconf.client_get_default() + return client.get_string('/desktop/sugar/user/color') + + +def set_color_xo(color): + """Set a color with an XoColor + This method is used by the graphical user interface + """ + client = gconf.client_get_default() + client.set_string('/desktop/sugar/user/color', color) + return 1 diff --git a/extensions/cpsection/aboutme/view.py b/extensions/cpsection/aboutme/view.py new file mode 100644 index 0000000..84daec7 --- /dev/null +++ b/extensions/cpsection/aboutme/view.py @@ -0,0 +1,340 @@ +# Copyright (C) 2008, OLPC +# Copyright (C) 2010, Sugar Labs +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +import gobject +from gettext import gettext as _ + +from sugar.graphics.icon import Icon +from sugar.graphics import style +from sugar.graphics.xocolor import XoColor, colors + +from jarabe.controlpanel.sectionview import SectionView +from jarabe.controlpanel.inlinealert import InlineAlert + +_STROKE_COLOR = 0 +_FILL_COLOR = 1 + + +def _get_next_stroke_color(color): + """ Return the next color pair in the list that shares the same fill + as color. """ + current_index = _get_current_index(color) + if current_index == -1: + return '%s,%s' % (color.stroke, color.fill) + next_index = _next_index(current_index) + while(colors[next_index][_FILL_COLOR] != \ + colors[current_index][_FILL_COLOR]): + next_index = _next_index(next_index) + return '%s,%s' % (colors[next_index][_STROKE_COLOR], + colors[next_index][_FILL_COLOR]) + + +def _get_previous_stroke_color(color): + """ Return the previous color pair in the list that shares the same fill + as color. """ + current_index = _get_current_index(color) + if current_index == -1: + return '%s,%s' % (color.stroke, color.fill) + previous_index = _previous_index(current_index) + while (colors[previous_index][_FILL_COLOR] != \ + colors[current_index][_FILL_COLOR]): + previous_index = _previous_index(previous_index) + return '%s,%s' % (colors[previous_index][_STROKE_COLOR], + colors[previous_index][_FILL_COLOR]) + + +def _get_next_fill_color(color): + """ Return the next color pair in the list that shares the same stroke + as color. """ + current_index = _get_current_index(color) + if current_index == -1: + return '%s,%s' % (color.stroke, color.fill) + next_index = _next_index(current_index) + while (colors[next_index][_STROKE_COLOR] != \ + colors[current_index][_STROKE_COLOR]): + next_index = _next_index(next_index) + return '%s,%s' % (colors[next_index][_STROKE_COLOR], + colors[next_index][_FILL_COLOR]) + + +def _get_previous_fill_color(color): + """ Return the previous color pair in the list that shares the same stroke + as color. """ + current_index = _get_current_index(color) + if current_index == -1: + return '%s,%s' % (color.stroke, color.fill) + previous_index = _previous_index(current_index) + while (colors[previous_index][_STROKE_COLOR] != \ + colors[current_index][_STROKE_COLOR]): + previous_index = _previous_index(previous_index) + return '%s,%s' % (colors[previous_index][_STROKE_COLOR], + colors[previous_index][_FILL_COLOR]) + + +def _next_index(current_index): + next_index = current_index + 1 + if next_index == len(colors): + next_index = 0 + return next_index + + +def _previous_index(current_index): + previous_index = current_index - 1 + if previous_index < 0: + previous_index = len(colors) - 1 + return previous_index + + +def _get_current_index(color): + return colors.index([color.stroke, color.fill]) + + +_PREVIOUS_FILL_COLOR = 0 +_NEXT_FILL_COLOR = 1 +_CURRENT_COLOR = 2 +_NEXT_STROKE_COLOR = 3 +_PREVIOUS_STROKE_COLOR = 4 + + +class EventIcon(gtk.EventBox): + __gtype_name__ = 'SugarEventIcon' + + def __init__(self, **kwargs): + gtk.EventBox.__init__(self) + + self.icon = Icon(pixel_size=style.XLARGE_ICON_SIZE, **kwargs) + + self.set_visible_window(False) + self.set_app_paintable(True) + self.set_events(gtk.gdk.BUTTON_PRESS_MASK) + + self.add(self.icon) + self.icon.show() + + +class ColorPicker(EventIcon): + __gsignals__ = { + 'color-changed': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([object])), + } + + def __init__(self, picker): + EventIcon.__init__(self) + + self.icon.props.icon_name = 'computer-xo' + self._picker = picker + self._color = None + + self.icon.props.pixel_size = style.XLARGE_ICON_SIZE + + self.connect('button_press_event', self.__pressed_cb, picker) + + def update(self, color): + if self._picker == _PREVIOUS_FILL_COLOR: + self._color = XoColor(_get_previous_fill_color(color)) + elif self._picker == _PREVIOUS_STROKE_COLOR: + self._color = XoColor(_get_previous_stroke_color(color)) + elif self._picker == _NEXT_FILL_COLOR: + self._color = XoColor(_get_next_fill_color(color)) + elif self._picker == _NEXT_STROKE_COLOR: + self._color = XoColor(_get_next_stroke_color(color)) + else: + self._color = color + self.icon.props.xo_color = self._color + + def __pressed_cb(self, button, event, picker): + if picker != _CURRENT_COLOR: + self.emit('color-changed', self._color) + + +class AboutMe(SectionView): + + def __init__(self, model, alerts): + SectionView.__init__(self) + + self._model = model + self.restart_alerts = alerts + self._nick_sid = 0 + self._color_valid = True + self._nick_valid = True + + self.set_border_width(style.DEFAULT_SPACING * 2) + self.set_spacing(style.DEFAULT_SPACING) + self._group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + + self._color_label = gtk.HBox(spacing=style.DEFAULT_SPACING) + self._color_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + self._color_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + self._color_alert = None + + self._pickers = { + _PREVIOUS_FILL_COLOR: ColorPicker(_PREVIOUS_FILL_COLOR), + _NEXT_FILL_COLOR: ColorPicker(_NEXT_FILL_COLOR), + _CURRENT_COLOR: ColorPicker(_CURRENT_COLOR), + _NEXT_STROKE_COLOR: ColorPicker(_NEXT_STROKE_COLOR), + _PREVIOUS_STROKE_COLOR: ColorPicker(_PREVIOUS_STROKE_COLOR), + } + + self._setup_color() + initial_color = XoColor(self._model.get_color_xo()) + self._update_pickers(initial_color) + + self._nick_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + self._nick_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + self._nick_entry = None + self._nick_alert = None + self._setup_nick() + self.setup() + + def _setup_nick(self): + self._nick_entry = gtk.Entry() + self._nick_entry.modify_bg(gtk.STATE_INSENSITIVE, + style.COLOR_WHITE.get_gdk_color()) + self._nick_entry.modify_base(gtk.STATE_INSENSITIVE, + style.COLOR_WHITE.get_gdk_color()) + self._nick_entry.set_width_chars(25) + self._nick_box.pack_start(self._nick_entry, expand=False) + self._nick_entry.show() + + label_entry_error = gtk.Label() + self._group.add_widget(label_entry_error) + self._nick_alert_box.pack_start(label_entry_error, expand=False) + label_entry_error.show() + + self._nick_alert = InlineAlert() + self._nick_alert_box.pack_start(self._nick_alert) + if 'nick' in self.restart_alerts: + self._nick_alert.props.msg = self.restart_msg + self._nick_alert.show() + + self._center_in_panel = gtk.Alignment(0.5) + self._center_in_panel.add(self._nick_box) + self.pack_start(self._center_in_panel, False) + self.pack_start(self._nick_alert_box, False) + self._nick_box.show() + self._nick_alert_box.show() + self._center_in_panel.show() + + def _setup_color(self): + label_color = gtk.Label(_('Click to change your color:')) + label_color.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + self._group.add_widget(label_color) + self._color_label.pack_start(label_color, expand=False) + label_color.show() + + for picker_index in sorted(self._pickers.keys()): + if picker_index == _CURRENT_COLOR: + left_separator = gtk.SeparatorToolItem() + left_separator.show() + self._color_box.pack_start(left_separator, expand=False) + + picker = self._pickers[picker_index] + picker.show() + self._color_box.pack_start(picker, expand=False) + + if picker_index == _CURRENT_COLOR: + right_separator = gtk.SeparatorToolItem() + right_separator.show() + self._color_box.pack_start(right_separator, expand=False) + + label_color_error = gtk.Label() + self._group.add_widget(label_color_error) + self._color_alert_box.pack_start(label_color_error, expand=False) + label_color_error.show() + + self._color_alert = InlineAlert() + self._color_alert_box.pack_start(self._color_alert) + if 'color' in self.restart_alerts: + self._color_alert.props.msg = self.restart_msg + self._color_alert.show() + + self._center_in_panel = gtk.Alignment(0.5) + self._center_in_panel.add(self._color_box) + self.pack_start(self._color_label, False) + self.pack_start(self._center_in_panel, False) + self.pack_start(self._color_alert_box, False) + self._color_label.show() + self._color_box.show() + self._color_alert_box.show() + self._center_in_panel.show() + + def setup(self): + self._nick_entry.set_text(self._model.get_nick()) + self._color_valid = True + self._nick_valid = True + self.needs_restart = False + + self._nick_entry.connect('changed', self.__nick_changed_cb) + for picker in self._pickers.values(): + picker.connect('color-changed', self.__color_changed_cb) + + def undo(self): + self._model.undo() + self._nick_alert.hide() + self._color_alert.hide() + + def _update_pickers(self, color): + for picker in self._pickers.values(): + picker.update(color) + + def _validate(self): + if self._nick_valid and self._color_valid: + self.props.is_valid = True + else: + self.props.is_valid = False + + def __nick_changed_cb(self, widget, data=None): + if self._nick_sid: + gobject.source_remove(self._nick_sid) + self._nick_sid = gobject.timeout_add(self._APPLY_TIMEOUT, + self.__nick_timeout_cb, widget) + + def __nick_timeout_cb(self, widget): + self._nick_sid = 0 + + if widget.get_text() == self._model.get_nick(): + return False + try: + self._model.set_nick(widget.get_text()) + except ValueError, detail: + self._nick_alert.props.msg = detail + self._nick_valid = False + else: + self._nick_alert.props.msg = self.restart_msg + self._nick_valid = True + self.needs_restart = True + self.restart_alerts.append('nick') + self._validate() + self._nick_alert.show() + return False + + def __color_changed_cb(self, colorpicker, color): + self._model.set_color_xo(color.to_string()) + self.needs_restart = True + self._color_alert.props.msg = self.restart_msg + self._color_valid = True + self.restart_alerts.append('color') + + self._validate() + self._color_alert.show() + + self._update_pickers(color) + + return False diff --git a/extensions/cpsection/datetime/Makefile.am b/extensions/cpsection/datetime/Makefile.am new file mode 100644 index 0000000..b5b518e --- /dev/null +++ b/extensions/cpsection/datetime/Makefile.am @@ -0,0 +1,6 @@ +sugardir = $(pkgdatadir)/extensions/cpsection/datetime + +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py diff --git a/extensions/cpsection/datetime/Makefile.in b/extensions/cpsection/datetime/Makefile.in new file mode 100644 index 0000000..d8b2cc1 --- /dev/null +++ b/extensions/cpsection/datetime/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/cpsection/datetime +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/extensions/cpsection/datetime +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/cpsection/datetime/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/cpsection/datetime/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/datetime/__init__.py b/extensions/cpsection/datetime/__init__.py new file mode 100644 index 0000000..fc9be45 --- /dev/null +++ b/extensions/cpsection/datetime/__init__.py @@ -0,0 +1,21 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ + +CLASS = 'TimeZone' +ICON = 'module-date_and_time' +TITLE = _('Date & Time') diff --git a/extensions/cpsection/datetime/model.py b/extensions/cpsection/datetime/model.py new file mode 100644 index 0000000..84e1259 --- /dev/null +++ b/extensions/cpsection/datetime/model.py @@ -0,0 +1,96 @@ +# Copyright (C) 2007, 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +# +# The timezone config is based on the system-config-date +# (http://fedoraproject.org/wiki/SystemConfig/date) tool. +# Parts of the code were reused. +# + +import os +from gettext import gettext as _ +import gconf + +_zone_tab = '/usr/share/zoneinfo/zone.tab' + + +def _initialize(): + """Initialize the docstring of the set function""" + if set_timezone.__doc__ is None: + # when running under 'python -OO', all __doc__ fields are None, + # so += would fail -- and this function would be unnecessary anyway. + return + timezones = read_all_timezones() + for timezone in timezones: + set_timezone.__doc__ += timezone + '\n' + + +def read_all_timezones(fn=_zone_tab): + fd = open(fn, 'r') + lines = fd.readlines() + fd.close() + timezones = [] + for line in lines: + if line.startswith('#'): + continue + line = line.split() + if len(line) > 1: + timezones.append(line[2]) + timezones.sort() + + for offset in xrange(-12, 13): + if offset < 0: + tz = 'GMT%d' % offset + elif offset > 0: + tz = 'GMT+%d' % offset + else: + tz = 'GMT' + timezones.append(tz) + for offset in xrange(-12, 13): + if offset < 0: + tz = 'UTC%d' % offset + elif offset > 0: + tz = 'UTC+%d' % offset + else: + tz = 'UTC' + timezones.append(tz) + return timezones + + +def get_timezone(): + client = gconf.client_get_default() + return client.get_string('/desktop/sugar/date/timezone') + + +def print_timezone(): + print get_timezone() + + +def set_timezone(timezone): + """Set the system timezone + timezone : e.g. 'America/Los_Angeles' + """ + timezones = read_all_timezones() + if timezone in timezones: + os.environ['TZ'] = timezone + client = gconf.client_get_default() + client.set_string('/desktop/sugar/date/timezone', timezone) + else: + raise ValueError(_('Error timezone does not exist.')) + return 1 + +# inilialize the docstrings for the timezone +_initialize() diff --git a/extensions/cpsection/datetime/view.py b/extensions/cpsection/datetime/view.py new file mode 100644 index 0000000..1cef78f --- /dev/null +++ b/extensions/cpsection/datetime/view.py @@ -0,0 +1,140 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +import gobject +from gettext import gettext as _ + +from sugar.graphics import style +from sugar.graphics import iconentry + +from jarabe.controlpanel.sectionview import SectionView +from jarabe.controlpanel.inlinealert import InlineAlert + + +class TimeZone(SectionView): + def __init__(self, model, alerts): + SectionView.__init__(self) + + self._model = model + self.restart_alerts = alerts + self._zone_sid = 0 + self._cursor_change_handler = None + + self.set_border_width(style.DEFAULT_SPACING * 2) + self.set_spacing(style.DEFAULT_SPACING) + + self.connect('realize', self.__realize_cb) + + self._entry = iconentry.IconEntry() + self._entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, + 'system-search') + self._entry.add_clear_button() + self._entry.modify_bg(gtk.STATE_INSENSITIVE, + style.COLOR_WHITE.get_gdk_color()) + self._entry.modify_base(gtk.STATE_INSENSITIVE, + style.COLOR_WHITE.get_gdk_color()) + self.pack_start(self._entry, False) + self._entry.show() + + self._scrolled_window = gtk.ScrolledWindow() + self._scrolled_window.set_policy(gtk.POLICY_NEVER, + gtk.POLICY_AUTOMATIC) + self._scrolled_window.set_shadow_type(gtk.SHADOW_IN) + + self._store = gtk.ListStore(gobject.TYPE_STRING) + zones = model.read_all_timezones() + for zone in zones: + self._store.append([zone]) + + self._treeview = gtk.TreeView(self._store) + self._treeview.set_search_entry(self._entry) + self._treeview.set_search_equal_func(self._search) + self._treeview.set_search_column(0) + self._scrolled_window.add(self._treeview) + self._treeview.show() + + self._timezone_column = gtk.TreeViewColumn(_('Timezone')) + self._cell = gtk.CellRendererText() + self._timezone_column.pack_start(self._cell, True) + self._timezone_column.add_attribute(self._cell, 'text', 0) + self._timezone_column.set_sort_column_id(0) + self._treeview.append_column(self._timezone_column) + + self.pack_start(self._scrolled_window) + self._scrolled_window.show() + + self._zone_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + self.pack_start(self._zone_alert_box, False) + + self._zone_alert = InlineAlert() + self._zone_alert_box.pack_start(self._zone_alert) + if 'zone' in self.restart_alerts: + self._zone_alert.props.msg = self.restart_msg + self._zone_alert.show() + self._zone_alert_box.show() + + self.setup() + + def setup(self): + zone = self._model.get_timezone() + for row in self._store: + if zone == row[0]: + self._treeview.set_cursor(row.path, self._timezone_column, + False) + self._treeview.scroll_to_cell(row.path, self._timezone_column, + True, 0.5, 0.5) + break + + self.needs_restart = False + self._cursor_change_handler = self._treeview.connect( \ + 'cursor-changed', self.__zone_changed_cd) + + def undo(self): + self._treeview.disconnect(self._cursor_change_handler) + self._model.undo() + self._zone_alert.hide() + + def __realize_cb(self, widget): + self._entry.grab_focus() + + def _search(self, model, column, key, iterator, data=None): + value = model.get_value(iterator, column) + if key.lower() in value.lower(): + return False + return True + + def __zone_changed_cd(self, treeview, data=None): + list_, row = treeview.get_selection().get_selected() + if not row: + return False + if self._model.get_timezone() == self._store.get_value(row, 0): + return False + + if self._zone_sid: + gobject.source_remove(self._zone_sid) + self._zone_sid = gobject.timeout_add(self._APPLY_TIMEOUT, + self.__zone_timeout_cb, row) + return True + + def __zone_timeout_cb(self, row): + self._zone_sid = 0 + self._model.set_timezone(self._store.get_value(row, 0)) + self.restart_alerts.append('zone') + self.needs_restart = True + self._zone_alert.props.msg = self.restart_msg + self._zone_alert.show() + return False diff --git a/extensions/cpsection/frame/Makefile.am b/extensions/cpsection/frame/Makefile.am new file mode 100644 index 0000000..1e09c04 --- /dev/null +++ b/extensions/cpsection/frame/Makefile.am @@ -0,0 +1,6 @@ +sugardir = $(pkgdatadir)/extensions/cpsection/frame + +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py diff --git a/extensions/cpsection/frame/Makefile.in b/extensions/cpsection/frame/Makefile.in new file mode 100644 index 0000000..1a7d880 --- /dev/null +++ b/extensions/cpsection/frame/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/cpsection/frame +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/extensions/cpsection/frame +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/cpsection/frame/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/cpsection/frame/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/frame/__init__.py b/extensions/cpsection/frame/__init__.py new file mode 100644 index 0000000..a93f9c7 --- /dev/null +++ b/extensions/cpsection/frame/__init__.py @@ -0,0 +1,21 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ + +CLASS = 'Frame' +ICON = 'module-frame' +TITLE = _('Frame') diff --git a/extensions/cpsection/frame/model.py b/extensions/cpsection/frame/model.py new file mode 100644 index 0000000..4796062 --- /dev/null +++ b/extensions/cpsection/frame/model.py @@ -0,0 +1,69 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +from gettext import gettext as _ +import gconf + + +def get_corner_delay(): + client = gconf.client_get_default() + corner_delay = client.get_int('/desktop/sugar/frame/corner_delay') + return corner_delay + + +def print_corner_delay(): + print get_corner_delay() + + +def set_corner_delay(delay): + """Set a delay for the activation of the frame using hot corners. + instantaneous: 0 (0 milliseconds) + delay: 100 (100 milliseconds) + never: 1000 (disable activation) + """ + try: + int(delay) + except ValueError: + raise ValueError(_('Value must be an integer.')) + client = gconf.client_get_default() + client.set_int('/desktop/sugar/frame/corner_delay', int(delay)) + return 0 + + +def get_edge_delay(): + client = gconf.client_get_default() + edge_delay = client.get_int('/desktop/sugar/frame/edge_delay') + return edge_delay + + +def print_edge_delay(): + print get_edge_delay() + + +def set_edge_delay(delay): + """Set a delay for the activation of the frame using warm edges. + instantaneous: 0 (0 milliseconds) + delay: 100 (100 milliseconds) + never: 1000 (disable activation) + """ + try: + int(delay) + except ValueError: + raise ValueError(_('Value must be an integer.')) + client = gconf.client_get_default() + client.set_int('/desktop/sugar/frame/edge_delay', int(delay)) + return 0 diff --git a/extensions/cpsection/frame/view.py b/extensions/cpsection/frame/view.py new file mode 100644 index 0000000..8b4ab83 --- /dev/null +++ b/extensions/cpsection/frame/view.py @@ -0,0 +1,234 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +import gobject +from gettext import gettext as _ + +from sugar.graphics import style + +from jarabe.controlpanel.sectionview import SectionView +from jarabe.controlpanel.inlinealert import InlineAlert + + +_never = _('never') +_instantaneous = _('instantaneous') +_seconds_label = _('%s seconds') +_MAX_DELAY = 1000 + + +class Frame(SectionView): + def __init__(self, model, alerts): + SectionView.__init__(self) + + self._model = model + self._corner_delay_sid = 0 + self._corner_delay_is_valid = True + self._corner_delay_change_handler = None + self._edge_delay_sid = 0 + self._edge_delay_is_valid = True + self._edge_delay_change_handler = None + self.restart_alerts = alerts + + self.set_border_width(style.DEFAULT_SPACING * 2) + self.set_spacing(style.DEFAULT_SPACING) + self._group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + + separator = gtk.HSeparator() + self.pack_start(separator, expand=False) + separator.show() + + label_activation = gtk.Label(_('Activation Delay')) + label_activation.set_alignment(0, 0) + self.pack_start(label_activation, expand=False) + label_activation.show() + + self._box_sliders = gtk.VBox() + self._box_sliders.set_border_width(style.DEFAULT_SPACING * 2) + self._box_sliders.set_spacing(style.DEFAULT_SPACING) + + self._corner_delay_slider = None + self._corner_delay_alert = None + self._setup_corner() + + self._edge_delay_slider = None + self._edge_delay_alert = None + self._setup_edge() + + self.pack_start(self._box_sliders, expand=False) + self._box_sliders.show() + + self.setup() + + def _setup_corner(self): + box_delay = gtk.HBox(spacing=style.DEFAULT_SPACING) + label_delay = gtk.Label(_('Corner')) + label_delay.set_alignment(1, 0.75) + label_delay.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + box_delay.pack_start(label_delay, expand=False) + self._group.add_widget(label_delay) + label_delay.show() + + adj = gtk.Adjustment(value=100, lower=0, upper=_MAX_DELAY, + step_incr=100, page_incr=100, page_size=0) + self._corner_delay_slider = gtk.HScale(adj) + self._corner_delay_slider.set_digits(0) + self._corner_delay_slider.connect('format-value', + self.__corner_delay_format_cb) + box_delay.pack_start(self._corner_delay_slider) + self._corner_delay_slider.show() + self._box_sliders.pack_start(box_delay, expand=False) + box_delay.show() + + self._corner_delay_alert = InlineAlert() + label_delay_error = gtk.Label() + self._group.add_widget(label_delay_error) + + delay_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + delay_alert_box.pack_start(label_delay_error, expand=False) + label_delay_error.show() + delay_alert_box.pack_start(self._corner_delay_alert, expand=False) + self._box_sliders.pack_start(delay_alert_box, expand=False) + delay_alert_box.show() + if 'corner_delay' in self.restart_alerts: + self._corner_delay_alert.props.msg = self.restart_msg + self._corner_delay_alert.show() + + def _setup_edge(self): + box_delay = gtk.HBox(spacing=style.DEFAULT_SPACING) + label_delay = gtk.Label(_('Edge')) + label_delay.set_alignment(1, 0.75) + label_delay.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + box_delay.pack_start(label_delay, expand=False) + self._group.add_widget(label_delay) + label_delay.show() + + adj = gtk.Adjustment(value=100, lower=0, upper=_MAX_DELAY, + step_incr=100, page_incr=100, page_size=0) + self._edge_delay_slider = gtk.HScale(adj) + self._edge_delay_slider.set_digits(0) + self._edge_delay_slider.connect('format-value', + self.__edge_delay_format_cb) + box_delay.pack_start(self._edge_delay_slider) + self._edge_delay_slider.show() + self._box_sliders.pack_start(box_delay, expand=False) + box_delay.show() + + self._edge_delay_alert = InlineAlert() + label_delay_error = gtk.Label() + self._group.add_widget(label_delay_error) + + delay_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + delay_alert_box.pack_start(label_delay_error, expand=False) + label_delay_error.show() + delay_alert_box.pack_start(self._edge_delay_alert, expand=False) + self._box_sliders.pack_start(delay_alert_box, expand=False) + delay_alert_box.show() + if 'edge_delay' in self.restart_alerts: + self._edge_delay_alert.props.msg = self.restart_msg + self._edge_delay_alert.show() + + def setup(self): + self._corner_delay_slider.set_value(self._model.get_corner_delay()) + self._edge_delay_slider.set_value(self._model.get_edge_delay()) + self._corner_delay_is_valid = True + self._edge_delay_is_valid = True + self.needs_restart = False + self._corner_delay_change_handler = self._corner_delay_slider.connect( + 'value-changed', self.__corner_delay_changed_cb) + self._edge_delay_change_handler = self._edge_delay_slider.connect( + 'value-changed', self.__edge_delay_changed_cb) + + def undo(self): + self._corner_delay_slider.disconnect(self._corner_delay_change_handler) + self._edge_delay_slider.disconnect(self._edge_delay_change_handler) + self._model.undo() + self._corner_delay_alert.hide() + self._edge_delay_alert.hide() + + def _validate(self): + if self._edge_delay_is_valid and self._corner_delay_is_valid: + self.props.is_valid = True + else: + self.props.is_valid = False + + def __corner_delay_changed_cb(self, scale, data=None): + if self._corner_delay_sid: + gobject.source_remove(self._corner_delay_sid) + self._corner_delay_sid = gobject.timeout_add( \ + self._APPLY_TIMEOUT, self.__corner_delay_timeout_cb, scale) + + def __corner_delay_timeout_cb(self, scale): + self._corner_delay_sid = 0 + if scale.get_value() == self._model.get_corner_delay(): + return + try: + self._model.set_corner_delay(scale.get_value()) + except ValueError, detail: + self._corner_delay_alert.props.msg = detail + self._corner_delay_is_valid = False + else: + self._corner_delay_alert.props.msg = self.restart_msg + self._corner_delay_is_valid = True + self.needs_restart = True + self.restart_alerts.append('corner_delay') + + self._validate() + self._corner_delay_alert.show() + return False + + def __corner_delay_format_cb(self, scale, value): + if value == _MAX_DELAY: + return _never + elif value == 0: + return _instantaneous + else: + return _seconds_label % (value / _MAX_DELAY) + + def __edge_delay_changed_cb(self, scale, data=None): + if self._edge_delay_sid: + gobject.source_remove(self._edge_delay_sid) + self._edge_delay_sid = gobject.timeout_add( \ + self._APPLY_TIMEOUT, self.__edge_delay_timeout_cb, scale) + + def __edge_delay_timeout_cb(self, scale): + self._edge_delay_sid = 0 + if scale.get_value() == self._model.get_edge_delay(): + return + try: + self._model.set_edge_delay(scale.get_value()) + except ValueError, detail: + self._edge_delay_alert.props.msg = detail + self._edge_delay_is_valid = False + else: + self._edge_delay_alert.props.msg = self.restart_msg + self._edge_delay_is_valid = True + self.needs_restart = True + self.restart_alerts.append('edge_delay') + + self._validate() + self._edge_delay_alert.show() + return False + + def __edge_delay_format_cb(self, scale, value): + if value == _MAX_DELAY: + return _never + elif value == 0: + return _instantaneous + else: + return _seconds_label % (value / _MAX_DELAY) diff --git a/extensions/cpsection/keyboard/Makefile.am b/extensions/cpsection/keyboard/Makefile.am new file mode 100644 index 0000000..7a95da5 --- /dev/null +++ b/extensions/cpsection/keyboard/Makefile.am @@ -0,0 +1,6 @@ +sugardir = $(pkgdatadir)/extensions/cpsection/keyboard + +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py diff --git a/extensions/cpsection/keyboard/Makefile.in b/extensions/cpsection/keyboard/Makefile.in new file mode 100644 index 0000000..08f36cd --- /dev/null +++ b/extensions/cpsection/keyboard/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/cpsection/keyboard +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/extensions/cpsection/keyboard +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/cpsection/keyboard/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/cpsection/keyboard/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/keyboard/__init__.py b/extensions/cpsection/keyboard/__init__.py new file mode 100644 index 0000000..065086c --- /dev/null +++ b/extensions/cpsection/keyboard/__init__.py @@ -0,0 +1,21 @@ +# Copyright (C) 2009, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ + +CLASS = 'Keyboard' +ICON = 'module-keyboard' +TITLE = _('Keyboard') diff --git a/extensions/cpsection/keyboard/model.py b/extensions/cpsection/keyboard/model.py new file mode 100644 index 0000000..1f92973 --- /dev/null +++ b/extensions/cpsection/keyboard/model.py @@ -0,0 +1,169 @@ +# Copyright (C) 2009 OLPC +# Author: Sayamindu Dasgupta +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +import xklavier +import gconf + + +_GROUP_NAME = 'grp' # The XKB name for group switch options + +_LAYOUTS_KEY = '/desktop/sugar/peripherals/keyboard/layouts' +_OPTIONS_KEY = '/desktop/sugar/peripherals/keyboard/options' +_MODEL_KEY = '/desktop/sugar/peripherals/keyboard/model' + + +class KeyboardManager(object): + def __init__(self, display): + self._engine = xklavier.Engine(display) + self._configregistry = xklavier.ConfigRegistry(self._engine) + self._configregistry.load(False) + self._configrec = xklavier.ConfigRec() + self._configrec.get_from_server(self._engine) + + self._gconf_client = gconf.client_get_default() + + def _populate_one(self, config_registry, item, store): + store.append([item.get_description(), item.get_name()]) + + def _populate_two(self, config_registry, item, subitem, store): + layout = item.get_name() + if subitem: + description = '%s, %s' % (subitem.get_description(), \ + item.get_description()) + variant = subitem.get_name() + else: + description = 'Default layout, %s' % item.get_description() + variant = '' + + store.append([description, ('%s(%s)' % (layout, variant))]) + + def get_models(self): + """Return list of supported keyboard models""" + models = [] + self._configregistry.foreach_model(self._populate_one, models) + models.sort() + return models + + def get_languages(self): + """Return list of supported keyboard languages""" + languages = [] + self._configregistry.foreach_language(self._populate_one, languages) + languages.sort() + return languages + + def get_layouts_for_language(self, language): + """Return list of supported keyboard layouts for a given language""" + layouts = [] + self._configregistry.foreach_language_variant(language, \ + self._populate_two, layouts) + layouts.sort() + return layouts + + def get_options_group(self): + """Return list of supported options for switching keyboard group""" + options = [] + self._configregistry.foreach_option(_GROUP_NAME, self._populate_one, + options) + options.sort() + return options + + def get_current_model(self): + """Return the enabled keyboard model""" + model = self._gconf_client.get_string(_MODEL_KEY) + if model: + return model + else: + model = self._configrec.get_model() + self.set_model(model) + return model + + def get_current_layouts(self): + """Return the enabled keyboard layouts with variants""" + layouts = self._gconf_client.get_list(_LAYOUTS_KEY, gconf.VALUE_STRING) + if layouts: + return layouts + + layouts = self._configrec.get_layouts() + variants = self._configrec.get_variants() + + layout_list = [] + i = 0 + for layout in layouts: + if len(variants) <= i or variants[i] == '': + layout_list.append('%s(%s)' % (layout, '')) + else: + layout_list.append('%s(%s)' % (layout, variants[i])) + i += 1 + + self.set_layouts(layout_list) + + return layout_list + + def get_current_option_group(self): + """Return the enabled option for switching keyboard group""" + options = self._gconf_client.get_list(_OPTIONS_KEY, gconf.VALUE_STRING) + + if not options: + options = self._configrec.get_options() + self.set_option_group(options) + + for option in options: + if option.startswith(_GROUP_NAME): + return option + + return None + + def get_max_layouts(self): + """Return the maximum number of layouts supported simultaneously""" + return self._engine.get_max_num_groups() + + def set_model(self, model): + """Sets the supplied keyboard model""" + if model is None or not model: + return + self._gconf_client.set_string(_MODEL_KEY, model) + self._configrec.set_model(model) + self._configrec.activate(self._engine) + + def set_option_group(self, option_group): + """Sets the supplied option for switching keyboard group""" + #XXX: Merge, not overwrite previous options + if not option_group: + options = [''] + elif isinstance(option_group, list): + options = option_group + else: + options = [option_group] + self._gconf_client.set_list(_OPTIONS_KEY, gconf.VALUE_STRING, options) + self._configrec.set_options(options) + self._configrec.activate(self._engine) + + def set_layouts(self, layouts): + """Sets the supplied keyboard layouts (with variants)""" + if layouts is None or not layouts: + return + self._gconf_client.set_list(_LAYOUTS_KEY, gconf.VALUE_STRING, layouts) + layouts_list = [] + variants_list = [] + for layout in layouts: + layouts_list.append(layout.split('(')[0]) + variants_list.append(layout.split('(')[1][:-1]) + + self._configrec.set_layouts(layouts_list) + self._configrec.set_variants(variants_list) + self._configrec.activate(self._engine) diff --git a/extensions/cpsection/keyboard/view.py b/extensions/cpsection/keyboard/view.py new file mode 100644 index 0000000..e349255 --- /dev/null +++ b/extensions/cpsection/keyboard/view.py @@ -0,0 +1,425 @@ +# Copyright (C) 2009, OLPC +# Author: Sayamindu Dasgupta +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +import gobject +import pango +import logging +from gettext import gettext as _ + +from sugar.graphics import style +from sugar.graphics.icon import Icon + +from jarabe.controlpanel.sectionview import SectionView + + +CLASS = 'Language' +ICON = 'module-keyboard' +TITLE = _('Keyboard') + +_APPLY_TIMEOUT = 500 + +#TODO: This cpsection adds checks for xklavier in bin/sugar-session and +# src/jarabe/controlpanel/gui.py. We should get rid of these checks +# once python-xklavier has been packaged for all major distributions +# For more information, see: http://dev.sugarlabs.org/ticket/407 + + +class LayoutCombo(gtk.HBox): + + """ + Custom GTK widget with two comboboxes side by side, one for layout, and + the other for variants for the selected layout. + """ + + __gsignals__ = { + 'selection-changed': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, + (gobject.TYPE_STRING, gobject.TYPE_INT)), + } + + def __init__(self, keyboard_manager, n): + gtk.HBox.__init__(self) + self._keyboard_manager = keyboard_manager + self._index = n + + self.set_border_width(style.DEFAULT_SPACING) + self.set_spacing(style.DEFAULT_SPACING) + + label = gtk.Label(' %s ' % str(n + 1)) + label.set_use_markup(True) + label.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + label.set_alignment(0.5, 0.5) + self.pack_start(label, expand=False) + + self._klang_store = gtk.ListStore(gobject.TYPE_STRING, \ + gobject.TYPE_STRING) + for description, name in self._keyboard_manager.get_languages(): + self._klang_store.append([name, description]) + + self._klang_combo = gtk.ComboBox(model=self._klang_store) + self._klang_combo_changed_id = \ + self._klang_combo.connect('changed', self._klang_combo_changed_cb) + cell = gtk.CellRendererText() + cell.props.ellipsize = pango.ELLIPSIZE_MIDDLE + cell.props.ellipsize_set = True + self._klang_combo.pack_start(cell) + self._klang_combo.add_attribute(cell, 'text', 1) + self.pack_start(self._klang_combo, expand=True, fill=True) + + self._kvariant_store = None + self._kvariant_combo = gtk.ComboBox(model=None) + self._kvariant_combo_changed_id = \ + self._kvariant_combo.connect('changed', \ + self._kvariant_combo_changed_cb) + cell = gtk.CellRendererText() + cell.props.ellipsize = pango.ELLIPSIZE_MIDDLE + cell.props.ellipsize_set = True + self._kvariant_combo.pack_start(cell) + self._kvariant_combo.add_attribute(cell, 'text', 1) + self.pack_start(self._kvariant_combo, expand=True, fill=True) + + self._klang_combo.set_active(self._index) + + def select_layout(self, layout): + """Select a given keyboard layout and show appropriate variants""" + self._kvariant_combo.handler_block(self._kvariant_combo_changed_id) + for i in range(0, len(self._klang_store)): + self._klang_combo.set_active(i) + for j in range(0, len(self._kvariant_store)): + if self._kvariant_store[j][0] == layout: + self._kvariant_combo.set_active(j) + self._kvariant_combo.handler_unblock(\ + self._kvariant_combo_changed_id) + return True + + self._kvariant_combo.handler_unblock(self._kvariant_combo_changed_id) + self._klang_combo.set_active(0) + return False + + def get_layout(self): + """Gets the selected layout (with variant)""" + it = self._kvariant_combo.get_active_iter() + model = self._kvariant_combo.get_model() + return model.get(it, 0)[0] + + def _set_kvariant_store(self, lang): + self._kvariant_store = gtk.ListStore(gobject.TYPE_STRING, \ + gobject.TYPE_STRING) + layouts = self._keyboard_manager.get_layouts_for_language(lang) + for description, name in layouts: + self._kvariant_store.append([name, description]) + self._kvariant_combo.set_model(self._kvariant_store) + self._kvariant_combo.set_active(0) + + def _klang_combo_changed_cb(self, combobox): + it = combobox.get_active_iter() + model = combobox.get_model() + lang = model.get(it, 0)[0] + self._set_kvariant_store(lang) + + def _kvariant_combo_changed_cb(self, combobox): + it = combobox.get_active_iter() + model = combobox.get_model() + layout = model.get(it, 0)[0] + self.emit('selection-changed', layout, self._index) + + +class Keyboard(SectionView): + def __init__(self, model, alerts): + SectionView.__init__(self) + + self._model = model + + self._kmodel = None + self._selected_kmodel = None + + self._klayouts = [] + self._selected_klayouts = [] + + self._group_switch_option = None + self._selected_group_switch_option = None + + self.set_border_width(style.DEFAULT_SPACING * 2) + self.set_spacing(style.DEFAULT_SPACING) + + self._layout_table = gtk.Table(rows=4, columns=2, homogeneous=False) + + self._keyboard_manager = model.KeyboardManager(self.get_display()) + self._layout_combo_list = [] + self._layout_addremovebox_list = [] + + scrollwindow = gtk.ScrolledWindow() + scrollwindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + self.pack_start(scrollwindow, expand=True) + scrollwindow.show() + + self._vbox = gtk.VBox() + scrollwindow.add_with_viewport(self._vbox) + + self.__kmodel_sid = None + self.__layout_sid = None + self.__group_switch_sid = None + + self._setup_kmodel() + self._setup_layouts() + self._setup_group_switch_option() + + self._vbox.show() + + def _setup_kmodel(self): + """Adds the controls for changing the keyboard model""" + separator_kmodel = gtk.HSeparator() + self._vbox.pack_start(separator_kmodel, expand=False) + separator_kmodel.show_all() + + label_kmodel = gtk.Label(_('Keyboard Model')) + label_kmodel.set_alignment(0, 0) + self._vbox.pack_start(label_kmodel, expand=False) + label_kmodel.show_all() + + box_kmodel = gtk.VBox() + box_kmodel.set_border_width(style.DEFAULT_SPACING * 2) + box_kmodel.set_spacing(style.DEFAULT_SPACING) + + kmodel_store = gtk.ListStore(gobject.TYPE_STRING, \ + gobject.TYPE_STRING) + for description, name in self._keyboard_manager.get_models(): + kmodel_store.append([name, description]) + + kmodel_combo = gtk.ComboBox(model=kmodel_store) + cell = gtk.CellRendererText() + cell.props.ellipsize = pango.ELLIPSIZE_MIDDLE + cell.props.ellipsize_set = True + kmodel_combo.pack_start(cell) + kmodel_combo.add_attribute(cell, 'text', 1) + + self._kmodel = self._keyboard_manager.get_current_model() + if self._kmodel is not None: + for row in kmodel_store: + if self._kmodel in row[0]: + kmodel_combo.set_active_iter(row.iter) + break + + box_kmodel.pack_start(kmodel_combo, expand=False) + self._vbox.pack_start(box_kmodel, expand=False) + box_kmodel.show_all() + + kmodel_combo.connect('changed', self.__kmodel_changed_cb) + + def __kmodel_changed_cb(self, combobox): + if self.__kmodel_sid is not None: + gobject.source_remove(self.__kmodel_sid) + self.__kmodel_sid = gobject.timeout_add(_APPLY_TIMEOUT, + self.__kmodel_timeout_cb, combobox) + + def __kmodel_timeout_cb(self, combobox): + it = combobox.get_active_iter() + model = combobox.get_model() + self._selected_kmodel = model.get(it, 0)[0] + if self._selected_kmodel == self._keyboard_manager.get_current_model(): + return + try: + self._keyboard_manager.set_model(self._selected_kmodel) + except Exception: + logging.exception('Could not set new keyboard model') + + return False + + def _setup_group_switch_option(self): + """Adds the controls for changing the group switch option of keyboard + """ + separator_group_option = gtk.HSeparator() + self._vbox.pack_start(separator_group_option, expand=False) + separator_group_option.show_all() + + label_group_option = gtk.Label(_('Key(s) to change layout')) + label_group_option.set_alignment(0, 0) + self._vbox.pack_start(label_group_option, expand=False) + label_group_option.show_all() + + box_group_option = gtk.VBox() + box_group_option.set_border_width(style.DEFAULT_SPACING * 2) + box_group_option.set_spacing(style.DEFAULT_SPACING) + + group_option_store = gtk.ListStore(gobject.TYPE_STRING, \ + gobject.TYPE_STRING) + for description, name in self._keyboard_manager.get_options_group(): + group_option_store.append([name, description]) + + group_option_combo = gtk.ComboBox(model=group_option_store) + cell = gtk.CellRendererText() + cell.props.ellipsize = pango.ELLIPSIZE_MIDDLE + cell.props.ellipsize_set = True + group_option_combo.pack_start(cell) + group_option_combo.add_attribute(cell, 'text', 1) + + self._group_switch_option = \ + self._keyboard_manager.get_current_option_group() + if not self._group_switch_option: + group_option_combo.set_active(0) + else: + found = False + for row in group_option_store: + if self._group_switch_option in row[0]: + group_option_combo.set_active_iter(row.iter) + found = True + break + if not found: + group_option_combo.set_active(0) + + box_group_option.pack_start(group_option_combo, expand=False) + self._vbox.pack_start(box_group_option, expand=False) + box_group_option.show_all() + + group_option_combo.connect('changed', \ + self.__group_switch_changed_cb) + + def __group_switch_changed_cb(self, combobox): + if self.__group_switch_sid is not None: + gobject.source_remove(self.__group_switch_sid) + self.__group_switch_sid = gobject.timeout_add(_APPLY_TIMEOUT, + self.__group_switch_timeout_cb, combobox) + + def __group_switch_timeout_cb(self, combobox): + it = combobox.get_active_iter() + model = combobox.get_model() + self._selected_group_switch_option = model.get(it, 0)[0] + if self._selected_group_switch_option == \ + self._keyboard_manager.get_current_option_group(): + return + try: + self._keyboard_manager.set_option_group(\ + self._selected_group_switch_option) + except Exception: + logging.exception('Could not set new keyboard group switch option') + + return False + + def _setup_layouts(self): + """Adds the controls for changing the keyboard layouts""" + separator_klayout = gtk.HSeparator() + self._vbox.pack_start(separator_klayout, expand=False) + separator_klayout.show_all() + + label_klayout = gtk.Label(_('Keyboard Layout(s)')) + label_klayout.set_alignment(0, 0) + label_klayout.show_all() + self._vbox.pack_start(label_klayout, expand=False) + + self._klayouts = self._keyboard_manager.get_current_layouts() + for i in range(0, self._keyboard_manager.get_max_layouts()): + add_remove_box = self.__create_add_remove_box() + self._layout_addremovebox_list.append(add_remove_box) + self._layout_table.attach(add_remove_box, 1, 2, i, i + 1) + + layout_combo = LayoutCombo(self._keyboard_manager, i) + layout_combo.connect('selection-changed', \ + self.__layout_combo_selection_changed_cb) + self._layout_combo_list.append(layout_combo) + self._layout_table.attach(layout_combo, 0, 1, i, i + 1) + + if i < len(self._klayouts): + layout_combo.show_all() + layout_combo.select_layout(self._klayouts[i]) + + self._vbox.pack_start(self._layout_table, expand=False) + self._layout_table.set_size_request(self._vbox.size_request()[0], -1) + self._layout_table.show() + self._update_klayouts() + + def __determine_add_remove_box_visibility(self): + i = 1 + for box in self._layout_addremovebox_list: + if not i == len(self._selected_klayouts): + box.props.visible = False + else: + box.show_all() + if i == 1: + # First row - no need for showing remove btn + add, remove = box.get_children() + remove.props.visible = False + if i == self._keyboard_manager.get_max_layouts(): + # Last row - no need for showing add btn + add, remove = box.get_children() + add.props.visible = False + i += 1 + + def __create_add_remove_box(self): + """Creates gtk.Hbox with add/remove buttons""" + add_icon = Icon(icon_name='list-add') + + add_button = gtk.Button() + add_button.set_image(add_icon) + add_button.connect('clicked', + self.__add_button_clicked_cb) + + remove_icon = Icon(icon_name='list-remove') + remove_button = gtk.Button() + remove_button.set_image(remove_icon) + remove_button.connect('clicked', + self.__remove_button_clicked_cb) + + add_remove_box = gtk.HButtonBox() + add_remove_box.set_layout(gtk.BUTTONBOX_START) + add_remove_box.set_spacing(10) + add_remove_box.pack_start(add_button) + add_remove_box.pack_start(remove_button) + + return add_remove_box + + def __layout_combo_selection_changed_cb(self, combo, layout, index): + self._update_klayouts() + + def __add_button_clicked_cb(self, button): + self._layout_combo_list[len(self._selected_klayouts)].show_all() + self._update_klayouts() + + def __remove_button_clicked_cb(self, button): + self._layout_combo_list[len(self._selected_klayouts) - 1].hide() + self._update_klayouts() + + def _update_klayouts(self): + """Responds to any changes in the keyboard layout options""" + self._selected_klayouts = [] + for combo in self._layout_combo_list: + if combo.props.visible: + self._selected_klayouts.append(combo.get_layout()) + + self.__determine_add_remove_box_visibility() + + if self.__layout_sid is not None: + gobject.source_remove(self.__layout_sid) + self.__layout_sid = gobject.timeout_add(_APPLY_TIMEOUT, + self.__layout_timeout_cb) + + def __layout_timeout_cb(self): + if self._selected_klayouts == \ + self._keyboard_manager.get_current_layouts(): + return + try: + self._keyboard_manager.set_layouts(self._selected_klayouts) + except Exception: + logging.exception('Could not set new keyboard layouts') + + return False + + def undo(self): + """Reverts back to the original keyboard configuration""" + self._keyboard_manager.set_model(self._kmodel) + self._keyboard_manager.set_layouts(self._klayouts) + self._keyboard_manager.set_option_group(self._group_switch_option) diff --git a/extensions/cpsection/language/Makefile.am b/extensions/cpsection/language/Makefile.am new file mode 100644 index 0000000..209fc32 --- /dev/null +++ b/extensions/cpsection/language/Makefile.am @@ -0,0 +1,6 @@ +sugardir = $(pkgdatadir)/extensions/cpsection/language + +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py diff --git a/extensions/cpsection/language/Makefile.in b/extensions/cpsection/language/Makefile.in new file mode 100644 index 0000000..9028190 --- /dev/null +++ b/extensions/cpsection/language/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/cpsection/language +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/extensions/cpsection/language +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/cpsection/language/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/cpsection/language/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/language/__init__.py b/extensions/cpsection/language/__init__.py new file mode 100644 index 0000000..c93b7d1 --- /dev/null +++ b/extensions/cpsection/language/__init__.py @@ -0,0 +1,21 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ + +CLASS = 'Language' +ICON = 'module-language' +TITLE = _('Language') diff --git a/extensions/cpsection/language/model.py b/extensions/cpsection/language/model.py new file mode 100644 index 0000000..17de6bb --- /dev/null +++ b/extensions/cpsection/language/model.py @@ -0,0 +1,164 @@ +# Copyright (C) 2007, 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +# +# The language config is based on the system-config-language +# (http://fedoraproject.org/wiki/SystemConfig/language) tool +# Parts of the code were reused. +# + +import os +import locale +from gettext import gettext as _ +import subprocess + + +_default_lang = '%s.%s' % locale.getdefaultlocale() +_standard_msg = _('Could not access ~/.i18n. Create standard settings.') + + +def read_all_languages(): + fdp = subprocess.Popen(['locale', '-av'], stdout=subprocess.PIPE) + lines = fdp.stdout.read().split('\n') + locales = [] + + for line in lines: + if line.find('locale:') != -1: + locale = line.split()[1] + elif line.find('language |') != -1: + lang = line.lstrip('language |') + elif line.find('territory |') != -1: + territory = line.lstrip('territory |') + if locale.endswith('utf8') and len(lang): + locales.append((lang, territory, locale)) + + #FIXME: This is a temporary workaround for locales that are essential to + # OLPC, but are not in Glibc yet. + locales.append(('Kreyol', 'Haiti', 'ht_HT.utf8')) + locales.append(('Dari', 'Afghanistan', 'fa_AF.utf8')) + locales.append(('Pashto', 'Afghanistan', 'ps_AF.utf8')) + + locales.sort() + return locales + + +def _initialize(): + if set_languages.__doc__ is None: + # when running under 'python -OO', all __doc__ fields are None, + # so += would fail -- and this function would be unnecessary anyway. + return + languages = read_all_languages() + set_languages.__doc__ += '\n' + for lang in languages: + set_languages.__doc__ += '%s \n' % (lang[0].replace(' ', '_') + '/' + + lang[1].replace(' ', '_')) + + +def _write_i18n(lang_env, language_env): + path = os.path.join(os.environ.get('HOME'), '.i18n') + if not os.access(path, os.W_OK): + print _standard_msg + fd = open(path, 'w') + fd.write('LANG="%s"\n' % _default_lang) + fd.write('LANGUAGE="%s"\n' % _default_lang) + fd.close() + else: + fd = open(path, 'w') + fd.write('LANG="%s"\n' % lang_env) + fd.write('LANGUAGE="%s"\n' % language_env) + fd.close() + + +def get_languages(): + path = os.path.join(os.environ.get('HOME', ''), '.i18n') + if not os.access(path, os.R_OK): + print _standard_msg + fd = open(path, 'w') + fd.write('LANG="%s"\n' % _default_lang) + fd.write('LANGUAGE="%s"\n' % _default_lang) + fd.close() + return [_default_lang] + + fd = open(path, 'r') + lines = fd.readlines() + fd.close() + + langlist = None + + for line in lines: + if line.startswith('LANGUAGE='): + lang = line[9:].replace('"', '') + lang = lang.strip() + langlist = lang.split(':') + elif line.startswith('LANG='): + lang = line[5:].replace('"', '') + + # There might be cases where .i18n may not contain a LANGUAGE field + if langlist == None: + return [lang] + else: + return langlist + + +def print_languages(): + codes = get_languages() + + languages = read_all_languages() + for code in codes: + found_lang = False + for lang in languages: + if lang[2].split('.')[0] == code.split('.')[0]: + print lang[0].replace(' ', '_') + '/' + \ + lang[1].replace(' ', '_') + found_lang = True + break + if not found_lang: + print (_('Language for code=%s could not be determined.') % code) + + +def set_languages(languages): + """Set the system language. + languages : + """ + + if isinstance(languages, list): + set_languages_list(languages) + return + + if languages.endswith('utf8'): + set_languages_list([languages]) + return 1 + else: + langs = read_all_languages() + for lang, territory, locale in langs: + code = lang.replace(' ', '_') + '/' \ + + territory.replace(' ', '_') + if code == languages: + set_languages_list([locale]) + return 1 + print (_("Sorry I do not speak \'%s\'.") % languages) + + +def set_languages_list(languages): + """Set the system language using a list of preferred languages""" + colon = ':' + language_env = colon.join(languages) + lang_env = languages[0].strip('\n') + _write_i18n(lang_env, language_env) + + +# inilialize the docstrings for the language +_initialize() diff --git a/extensions/cpsection/language/view.py b/extensions/cpsection/language/view.py new file mode 100644 index 0000000..1553959 --- /dev/null +++ b/extensions/cpsection/language/view.py @@ -0,0 +1,281 @@ +# Copyright (C) 2008, OLPC +# Copyright (C) 2009, Simon Schampijer +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +import gobject +import gettext + +from sugar.graphics import style +from sugar.graphics.icon import Icon + +from jarabe.controlpanel.sectionview import SectionView +from jarabe.controlpanel.inlinealert import InlineAlert + +_translate_language = lambda msg: gettext.dgettext('iso_639', msg) +_translate_country = lambda msg: gettext.dgettext('iso_3166', msg) + +CLASS = 'Language' +ICON = 'module-language' +TITLE = gettext.gettext('Language') + + +class Language(SectionView): + def __init__(self, model, alerts): + SectionView.__init__(self) + + self._model = model + self.restart_alerts = alerts + self._lang_sid = 0 + self._selected_lang_count = 0 + self._labels = [] + self._stores = [] + self._comboboxes = [] + self._add_remove_boxes = [] + self._changed = False + self._cursor_change_handler = None + + self._available_locales = self._model.read_all_languages() + self._selected_locales = self._model.get_languages() + + self.set_border_width(style.DEFAULT_SPACING * 2) + self.set_spacing(style.DEFAULT_SPACING) + + explanation = gettext.gettext('Add languages in the order you prefer.' + ' If a translation is not available,' + ' the next in the list will be used.') + self._text = gtk.Label(explanation) + self._text.set_width_chars(100) + self._text.set_line_wrap(True) + self._text.set_alignment(0, 0) + self.pack_start(self._text, False) + self._text.show() + + scrolled = gtk.ScrolledWindow() + scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + scrolled.show() + self.pack_start(scrolled, expand=True) + + self._table = gtk.Table(rows=1, columns=3, homogeneous=False) + self._table.set_border_width(style.DEFAULT_SPACING * 2) + self._table.show() + scrolled.add_with_viewport(self._table) + + self._lang_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + self.pack_start(self._lang_alert_box, False) + + self._lang_alert = InlineAlert() + self._lang_alert_box.pack_start(self._lang_alert) + if 'lang' in self.restart_alerts: + self._lang_alert.props.msg = self.restart_msg + self._lang_alert.show() + self._lang_alert_box.show() + + self.setup() + + def _add_row(self, locale_code=None): + """Adds a row to the table""" + + self._selected_lang_count += 1 + + self._table.resize(self._selected_lang_count, 3) + + label = gtk.Label(str=str(self._selected_lang_count)) + label.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + self._labels.append(label) + self._attach_to_table(label, 0, 1, padding=1) + label.show() + + store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) + for language, country, code in self._available_locales: + description = '%s (%s)' % (_translate_language(language), \ + _translate_country(country)) + store.append([code, description]) + + combobox = gtk.ComboBox(model=store) + cell = gtk.CellRendererText() + combobox.pack_start(cell) + combobox.add_attribute(cell, 'text', 1) + + if locale_code: + for row in store: + lang = locale_code.split('.')[0] + lang_column = row[0].split('.')[0] + if lang in lang_column: + combobox.set_active_iter(row.iter) + break + else: + combobox.set_active(1) + + combobox.connect('changed', self.__combobox_changed_cb) + + self._stores.append(store) + self._comboboxes.append(combobox) + self._attach_to_table(combobox, 1, 2, yoptions=gtk.SHRINK) + + add_remove_box = self._create_add_remove_box() + self._add_remove_boxes.append(add_remove_box) + self._attach_to_table(add_remove_box, 2, 3) + + add_remove_box.show_all() + + if self._selected_lang_count > 1: + previous_add_removes = self._add_remove_boxes[-2] + previous_add_removes.hide_all() + + self._determine_add_remove_visibility() + + combobox.show() + + def _attach_to_table(self, widget, row, column, padding=20, \ + yoptions=gtk.FILL): + self._table.attach(widget, row, column, \ + self._selected_lang_count - 1, self._selected_lang_count, \ + xoptions=gtk.FILL, yoptions=yoptions, xpadding=padding, \ + ypadding=padding) + + def _delete_last_row(self): + """Deletes the last row of the table""" + + self._selected_lang_count -= 1 + + label, add_remove_box, combobox, store_ = self._get_last_row() + + label.destroy() + add_remove_box.destroy() + combobox.destroy() + + self._table.resize(self._selected_lang_count, 3) + + self._add_remove_boxes[-1].show_all() + + def _get_last_row(self): + label = self._labels.pop() + add_remove_box = self._add_remove_boxes.pop() + combobox = self._comboboxes.pop() + store = self._stores.pop() + + return label, add_remove_box, combobox, store + + def setup(self): + for locale in self._selected_locales: + self._add_row(locale_code=locale) + + def undo(self): + self._model.undo() + self._lang_alert.hide() + + def _create_add_remove_box(self): + """Creates gtk.Hbox with add/remove buttons""" + add_icon = Icon(icon_name='list-add') + + add_button = gtk.Button() + add_button.set_image(add_icon) + add_button.connect('clicked', + self.__add_button_clicked_cb) + + remove_icon = Icon(icon_name='list-remove') + remove_button = gtk.Button() + remove_button.set_image(remove_icon) + remove_button.connect('clicked', + self.__remove_button_clicked_cb) + + add_remove_box = gtk.HButtonBox() + add_remove_box.set_layout(gtk.BUTTONBOX_START) + add_remove_box.set_spacing(10) + add_remove_box.pack_start(add_button) + add_remove_box.pack_start(remove_button) + + return add_remove_box + + def __add_button_clicked_cb(self, button): + self._add_row() + self._check_change() + + def __remove_button_clicked_cb(self, button): + self._delete_last_row() + self._check_change() + + def __combobox_changed_cb(self, button): + self._check_change() + + def _check_change(self): + selected_langs = self._get_selected_langs() + last_lang = selected_langs[-1] + + self._determine_add_remove_visibility(last_lang=last_lang) + + self._changed = (selected_langs != self._selected_locales) + + if self._changed == False: + # The user reverted back to the original config + self.needs_restart = False + if 'lang' in self.restart_alerts: + self.restart_alerts.remove('lang') + self._lang_alert.hide() + if self._lang_sid: + gobject.source_remove(self._lang_sid) + self._model.undo() + return False + + if self._lang_sid: + gobject.source_remove(self._lang_sid) + self._lang_sid = gobject.timeout_add(self._APPLY_TIMEOUT, + self.__lang_timeout_cb, + selected_langs) + + def _get_selected_langs(self): + new_codes = [] + for combobox in self._comboboxes: + it = combobox.get_active_iter() + model = combobox.get_model() + lang_code = model.get(it, 0)[0] + new_codes.append(lang_code) + + return new_codes + + def _determine_add_remove_visibility(self, last_lang=None): + # We should not let users add fallback languages for English (USA) + # This is because the software is not usually _translated_ into English + # which means that the fallback gets selected automatically + + if last_lang is None: + selected_langs = self._get_selected_langs() + last_lang = selected_langs[-1] + + add_remove_box = self._add_remove_boxes[-1] + buttons = add_remove_box.get_children() + add_button, remove_button = buttons + + if last_lang.startswith('en_US'): + add_button.props.visible = False + else: + add_button.props.visible = True + + if self._selected_lang_count == 1: + remove_button.props.visible = False + else: + remove_button.props.visible = True + + def __lang_timeout_cb(self, codes): + self._lang_sid = 0 + self._model.set_languages_list(codes) + self.restart_alerts.append('lang') + self.needs_restart = True + self._lang_alert.props.msg = self.restart_msg + self._lang_alert.show() + return False diff --git a/extensions/cpsection/modemconfiguration/Makefile.am b/extensions/cpsection/modemconfiguration/Makefile.am new file mode 100644 index 0000000..3e2613e --- /dev/null +++ b/extensions/cpsection/modemconfiguration/Makefile.am @@ -0,0 +1,6 @@ +sugardir = $(pkgdatadir)/extensions/cpsection/modemconfiguration + +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py diff --git a/extensions/cpsection/modemconfiguration/Makefile.in b/extensions/cpsection/modemconfiguration/Makefile.in new file mode 100644 index 0000000..921d5db --- /dev/null +++ b/extensions/cpsection/modemconfiguration/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/cpsection/modemconfiguration +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/extensions/cpsection/modemconfiguration +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/cpsection/modemconfiguration/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/cpsection/modemconfiguration/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/modemconfiguration/__init__.py b/extensions/cpsection/modemconfiguration/__init__.py new file mode 100644 index 0000000..61f5904 --- /dev/null +++ b/extensions/cpsection/modemconfiguration/__init__.py @@ -0,0 +1,21 @@ +# Copyright (C) 2009 Paraguay Educa, Martin Abente +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US + +from gettext import gettext as _ + +CLASS = 'ModemConfiguration' +ICON = 'module-modemconfiguration' +TITLE = _('Modem Configuration') diff --git a/extensions/cpsection/modemconfiguration/model.py b/extensions/cpsection/modemconfiguration/model.py new file mode 100755 index 0000000..969b5d9 --- /dev/null +++ b/extensions/cpsection/modemconfiguration/model.py @@ -0,0 +1,100 @@ +# Copyright (C) 2009 Paraguay Educa, Martin Abente +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US + +import logging + +import dbus +import gtk + +from jarabe.model import network + + +def get_connection(): + return network.find_gsm_connection() + + +def get_modem_settings(): + modem_settings = {} + connection = get_connection() + if not connection: + return modem_settings + + settings = connection.get_settings('gsm') + for setting in ('username', 'number', 'apn'): + modem_settings[setting] = settings.get(setting, '') + + # use mutable container for nested function control variable + secrets_call_done = [False] + + def _secrets_cb(secrets): + secrets_call_done[0] = True + if not secrets or not 'gsm' in secrets: + return + + gsm_secrets = secrets['gsm'] + modem_settings['password'] = gsm_secrets.get('password', '') + modem_settings['pin'] = gsm_secrets.get('pin', '') + + def _secrets_err_cb(err): + secrets_call_done[0] = True + if isinstance(err, dbus.exceptions.DBusException) and \ + err.get_dbus_name() == network.NM_AGENT_MANAGER_ERR_NO_SECRETS: + logging.debug('No GSM secrets present') + else: + logging.error('Error retrieving GSM secrets: %s', err) + + # must be called asynchronously as this re-enters the GTK main loop + connection.get_secrets('gsm', _secrets_cb, _secrets_err_cb) + + # wait til asynchronous execution completes + while not secrets_call_done[0]: + gtk.main_iteration() + + return modem_settings + + +def _set_or_clear(_dict, key, value): + """Update a dictionary value for a specific key. If value is None or + zero-length, but the key is present in the dictionary, delete that + dictionary entry.""" + if value: + _dict[key] = value + return + + if key in _dict: + del _dict[key] + + +def set_modem_settings(modem_settings): + username = modem_settings.get('username', '') + password = modem_settings.get('password', '') + number = modem_settings.get('number', '') + apn = modem_settings.get('apn', '') + pin = modem_settings.get('pin', '') + + connection = get_connection() + if not connection: + network.create_gsm_connection(username, password, number, apn, pin) + return + + settings = connection.get_settings() + gsm_settings = settings['gsm'] + _set_or_clear(gsm_settings, 'username', username) + _set_or_clear(gsm_settings, 'password', password) + _set_or_clear(gsm_settings, 'number', number) + _set_or_clear(gsm_settings, 'apn', apn) + _set_or_clear(gsm_settings, 'pin', pin) + connection.update_settings(settings) diff --git a/extensions/cpsection/modemconfiguration/view.py b/extensions/cpsection/modemconfiguration/view.py new file mode 100644 index 0000000..4ce6c0d --- /dev/null +++ b/extensions/cpsection/modemconfiguration/view.py @@ -0,0 +1,144 @@ +# Copyright (C) 2009 Paraguay Educa, Martin Abente +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US + +from gettext import gettext as _ +import logging + +import gtk +import gobject + +from sugar.graphics import style + +from jarabe.controlpanel.sectionview import SectionView + + +APPLY_TIMEOUT = 1000 + + +class EntryWithLabel(gtk.HBox): + __gtype_name__ = 'SugarEntryWithLabel' + + def __init__(self, label_text): + gtk.HBox.__init__(self, spacing=style.DEFAULT_SPACING) + + self.label = gtk.Label(label_text) + self.label.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + self.label.set_alignment(1, 0.5) + self.pack_start(self.label, expand=False) + self.label.show() + + self._entry = gtk.Entry(25) + self._entry.set_width_chars(25) + self.pack_start(self._entry, expand=False) + self._entry.show() + + def get_entry(self): + return self._entry + + entry = gobject.property(type=object, getter=get_entry) + + +class ModemConfiguration(SectionView): + def __init__(self, model, alerts=None): + SectionView.__init__(self) + + self._model = model + self.restart_alerts = alerts + self._timeout_sid = 0 + + self.set_border_width(style.DEFAULT_SPACING) + self.set_spacing(style.DEFAULT_SPACING) + self._group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + + explanation = _('You will need to provide the following information' + ' to set up a mobile broadband connection to a' + ' cellular (3G) network.') + self._text = gtk.Label(explanation) + self._text.set_width_chars(100) + self._text.set_line_wrap(True) + self._text.set_alignment(0, 0) + self.pack_start(self._text, False) + self._text.show() + + self._username_entry = EntryWithLabel(_('Username:')) + self._username_entry.entry.connect('changed', self.__entry_changed_cb) + self._group.add_widget(self._username_entry.label) + self.pack_start(self._username_entry, expand=False) + self._username_entry.show() + + self._password_entry = EntryWithLabel(_('Password:')) + self._password_entry.entry.connect('changed', self.__entry_changed_cb) + self._group.add_widget(self._password_entry.label) + self.pack_start(self._password_entry, expand=False) + self._password_entry.show() + + self._number_entry = EntryWithLabel(_('Number:')) + self._number_entry.entry.connect('changed', self.__entry_changed_cb) + self._group.add_widget(self._number_entry.label) + self.pack_start(self._number_entry, expand=False) + self._number_entry.show() + + self._apn_entry = EntryWithLabel(_('Access Point Name (APN):')) + self._apn_entry.entry.connect('changed', self.__entry_changed_cb) + self._group.add_widget(self._apn_entry.label) + self.pack_start(self._apn_entry, expand=False) + self._apn_entry.show() + + self._pin_entry = EntryWithLabel(_('Personal Identity Number (PIN):')) + self._pin_entry.entry.connect('changed', self.__entry_changed_cb) + self._group.add_widget(self._pin_entry.label) + self.pack_start(self._pin_entry, expand=False) + self._pin_entry.show() + + self.setup() + + def undo(self): + self._model.undo() + + def _populate_entry(self, entrywithlabel, text): + """Populate an entry with text, without triggering its 'changed' + handler.""" + entry = entrywithlabel.entry + entry.handler_block_by_func(self.__entry_changed_cb) + entry.set_text(text) + entry.handler_unblock_by_func(self.__entry_changed_cb) + + def setup(self): + settings = self._model.get_modem_settings() + self._populate_entry(self._username_entry, + settings.get('username', '')) + self._populate_entry(self._number_entry, settings.get('number', '')) + self._populate_entry(self._apn_entry, settings.get('apn', '')) + self._populate_entry(self._password_entry, + settings.get('password', '')) + self._populate_entry(self._pin_entry, settings.get('pin', '')) + + def __entry_changed_cb(self, widget, data=None): + if self._timeout_sid: + gobject.source_remove(self._timeout_sid) + self._timeout_sid = gobject.timeout_add(APPLY_TIMEOUT, + self.__timeout_cb) + + def __timeout_cb(self): + self._timeout_sid = 0 + settings = {} + settings['username'] = self._username_entry.entry.get_text() + settings['password'] = self._password_entry.entry.get_text() + settings['number'] = self._number_entry.entry.get_text() + settings['apn'] = self._apn_entry.entry.get_text() + settings['pin'] = self._pin_entry.entry.get_text() + self._model.set_modem_settings(settings) diff --git a/extensions/cpsection/network/Makefile.am b/extensions/cpsection/network/Makefile.am new file mode 100644 index 0000000..35fd27c --- /dev/null +++ b/extensions/cpsection/network/Makefile.am @@ -0,0 +1,6 @@ +sugardir = $(pkgdatadir)/extensions/cpsection/network + +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py diff --git a/extensions/cpsection/network/Makefile.in b/extensions/cpsection/network/Makefile.in new file mode 100644 index 0000000..7194a98 --- /dev/null +++ b/extensions/cpsection/network/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/cpsection/network +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/extensions/cpsection/network +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/cpsection/network/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/cpsection/network/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/network/__init__.py b/extensions/cpsection/network/__init__.py new file mode 100644 index 0000000..86546f7 --- /dev/null +++ b/extensions/cpsection/network/__init__.py @@ -0,0 +1,22 @@ +# Copyright (C) 2006-2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ + +CLASS = 'Network' +ICON = 'module-network' +TITLE = _('Network') +KEYWORDS = ['network', 'jabber', 'radio', 'server'] diff --git a/extensions/cpsection/network/model.py b/extensions/cpsection/network/model.py new file mode 100644 index 0000000..4ddab35 --- /dev/null +++ b/extensions/cpsection/network/model.py @@ -0,0 +1,156 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +import logging + +import dbus +from gettext import gettext as _ +import gconf + +from jarabe.model import network + + +_NM_SERVICE = 'org.freedesktop.NetworkManager' +_NM_PATH = '/org/freedesktop/NetworkManager' +_NM_IFACE = 'org.freedesktop.NetworkManager' + +KEYWORDS = ['network', 'jabber', 'radio', 'server'] + + +class ReadError(Exception): + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) + + +def get_jabber(): + client = gconf.client_get_default() + return client.get_string('/desktop/sugar/collaboration/jabber_server') + + +def print_jabber(): + print get_jabber() + + +def set_jabber(server): + """Set the jabber server + server : e.g. 'olpc.collabora.co.uk' + """ + client = gconf.client_get_default() + client.set_string('/desktop/sugar/collaboration/jabber_server', server) + + return 0 + + +def get_radio(): + try: + bus = dbus.SystemBus() + obj = bus.get_object(_NM_SERVICE, _NM_PATH) + nm_props = dbus.Interface(obj, dbus.PROPERTIES_IFACE) + except dbus.DBusException: + raise ReadError('%s service not available' % _NM_SERVICE) + + state = nm_props.Get(_NM_IFACE, 'WirelessEnabled') + if state in (0, 1): + return state + else: + raise ReadError(_('State is unknown.')) + + +def print_radio(): + print ('off', 'on')[get_radio()] + + +def set_radio(state): + """Turn Radio 'on' or 'off' + state : 'on/off' + """ + if state == 'on' or state == 1: + try: + bus = dbus.SystemBus() + obj = bus.get_object(_NM_SERVICE, _NM_PATH) + nm_props = dbus.Interface(obj, dbus.PROPERTIES_IFACE) + except dbus.DBusException: + raise ReadError('%s service not available' % _NM_SERVICE) + nm_props.Set(_NM_IFACE, 'WirelessEnabled', True) + elif state == 'off' or state == 0: + try: + bus = dbus.SystemBus() + obj = bus.get_object(_NM_SERVICE, _NM_PATH) + nm_props = dbus.Interface(obj, dbus.PROPERTIES_IFACE) + except dbus.DBusException: + raise ReadError('%s service not available' % _NM_SERVICE) + nm_props.Set(_NM_IFACE, 'WirelessEnabled', False) + else: + raise ValueError(_('Error in specified radio argument use on/off.')) + + return 0 + + +def clear_registration(): + """Clear the registration with the schoolserver + """ + client = gconf.client_get_default() + client.set_string('/desktop/sugar/backup_url', '') + return 1 + + +def clear_networks(): + """Clear saved passwords and network configurations. + """ + try: + connections = network.get_connections() + except dbus.DBusException: + logging.debug('NetworkManager not available') + return + connections.clear() + + +def have_networks(): + try: + connections = network.get_connections() + return len(connections.get_list()) > 0 + except dbus.DBusException: + logging.debug('NetworkManager not available') + return False + + +def get_publish_information(): + client = gconf.client_get_default() + publish = client.get_bool('/desktop/sugar/collaboration/publish_gadget') + return publish + + +def print_publish_information(): + print get_publish_information() + + +def set_publish_information(value): + """ If set to true, Sugar will make you searchable for + the other users of the Jabber server. + value: 0/1 + """ + try: + value = (False, True)[int(value)] + except: + raise ValueError(_('Error in specified argument use 0/1.')) + + client = gconf.client_get_default() + client.set_bool('/desktop/sugar/collaboration/publish_gadget', value) + return 0 diff --git a/extensions/cpsection/network/view.py b/extensions/cpsection/network/view.py new file mode 100644 index 0000000..381dcb6 --- /dev/null +++ b/extensions/cpsection/network/view.py @@ -0,0 +1,261 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +import gobject +from gettext import gettext as _ + +from sugar.graphics import style + +from jarabe.controlpanel.sectionview import SectionView +from jarabe.controlpanel.inlinealert import InlineAlert + + +CLASS = 'Network' +ICON = 'module-network' +TITLE = _('Network') + +_APPLY_TIMEOUT = 3000 + + +class Network(SectionView): + def __init__(self, model, alerts): + SectionView.__init__(self) + + self._model = model + self.restart_alerts = alerts + self._jabber_sid = 0 + self._jabber_valid = True + self._radio_valid = True + self._jabber_change_handler = None + self._radio_change_handler = None + self._network_configuration_reset_handler = None + + self.set_border_width(style.DEFAULT_SPACING * 2) + self.set_spacing(style.DEFAULT_SPACING) + group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + + self._radio_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + self._jabber_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + + workspace = gtk.VBox() + workspace.show() + + separator_wireless = gtk.HSeparator() + workspace.pack_start(separator_wireless, expand=False) + separator_wireless.show() + + label_wireless = gtk.Label(_('Wireless')) + label_wireless.set_alignment(0, 0) + workspace.pack_start(label_wireless, expand=False) + label_wireless.show() + box_wireless = gtk.VBox() + box_wireless.set_border_width(style.DEFAULT_SPACING * 2) + box_wireless.set_spacing(style.DEFAULT_SPACING) + + radio_info = gtk.Label(_('Turn off the wireless radio to save battery' + ' life')) + radio_info.set_alignment(0, 0) + radio_info.set_line_wrap(True) + radio_info.show() + box_wireless.pack_start(radio_info, expand=False) + + box_radio = gtk.HBox(spacing=style.DEFAULT_SPACING) + self._button = gtk.CheckButton() + self._button.set_alignment(0, 0) + box_radio.pack_start(self._button, expand=False) + self._button.show() + + label_radio = gtk.Label(_('Radio')) + label_radio.set_alignment(0, 0.5) + box_radio.pack_start(label_radio, expand=False) + label_radio.show() + + box_wireless.pack_start(box_radio, expand=False) + box_radio.show() + + self._radio_alert = InlineAlert() + self._radio_alert_box.pack_start(self._radio_alert, expand=False) + box_radio.pack_end(self._radio_alert_box, expand=False) + self._radio_alert_box.show() + if 'radio' in self.restart_alerts: + self._radio_alert.props.msg = self.restart_msg + self._radio_alert.show() + + history_info = gtk.Label(_('Discard network history if you have' + ' trouble connecting to the network')) + history_info.set_alignment(0, 0) + history_info.set_line_wrap(True) + history_info.show() + box_wireless.pack_start(history_info, expand=False) + + box_clear_history = gtk.HBox(spacing=style.DEFAULT_SPACING) + self._clear_history_button = gtk.Button() + self._clear_history_button.set_label(_('Discard network history')) + box_clear_history.pack_start(self._clear_history_button, expand=False) + if not self._model.have_networks(): + self._clear_history_button.set_sensitive(False) + self._clear_history_button.show() + box_wireless.pack_start(box_clear_history, expand=False) + box_clear_history.show() + + workspace.pack_start(box_wireless, expand=False) + box_wireless.show() + + separator_mesh = gtk.HSeparator() + workspace.pack_start(separator_mesh, False) + separator_mesh.show() + + label_mesh = gtk.Label(_('Collaboration')) + label_mesh.set_alignment(0, 0) + workspace.pack_start(label_mesh, expand=False) + label_mesh.show() + box_mesh = gtk.VBox() + box_mesh.set_border_width(style.DEFAULT_SPACING * 2) + box_mesh.set_spacing(style.DEFAULT_SPACING) + + server_info = gtk.Label(_("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.")) + server_info.set_alignment(0, 0) + server_info.set_line_wrap(True) + box_mesh.pack_start(server_info, expand=False) + server_info.show() + + box_server = gtk.HBox(spacing=style.DEFAULT_SPACING) + label_server = gtk.Label(_('Server:')) + label_server.set_alignment(1, 0.5) + label_server.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + box_server.pack_start(label_server, expand=False) + group.add_widget(label_server) + label_server.show() + self._entry = gtk.Entry() + self._entry.set_alignment(0) + self._entry.modify_bg(gtk.STATE_INSENSITIVE, + style.COLOR_WHITE.get_gdk_color()) + self._entry.modify_base(gtk.STATE_INSENSITIVE, + style.COLOR_WHITE.get_gdk_color()) + self._entry.set_size_request(int(gtk.gdk.screen_width() / 3), -1) + box_server.pack_start(self._entry, expand=False) + self._entry.show() + box_mesh.pack_start(box_server, expand=False) + box_server.show() + + self._jabber_alert = InlineAlert() + label_jabber_error = gtk.Label() + group.add_widget(label_jabber_error) + self._jabber_alert_box.pack_start(label_jabber_error, expand=False) + label_jabber_error.show() + self._jabber_alert_box.pack_start(self._jabber_alert, expand=False) + box_mesh.pack_end(self._jabber_alert_box, expand=False) + self._jabber_alert_box.show() + if 'jabber' in self.restart_alerts: + self._jabber_alert.props.msg = self.restart_msg + self._jabber_alert.show() + + workspace.pack_start(box_mesh, expand=False) + box_mesh.show() + + scrolled = gtk.ScrolledWindow() + scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + scrolled.add_with_viewport(workspace) + scrolled.show() + self.add(scrolled) + + self.setup() + + def setup(self): + self._entry.set_text(self._model.get_jabber()) + try: + radio_state = self._model.get_radio() + except self._model.ReadError, detail: + self._radio_alert.props.msg = detail + self._radio_alert.show() + else: + self._button.set_active(radio_state) + + self._jabber_valid = True + self._radio_valid = True + self.needs_restart = False + self._radio_change_handler = self._button.connect( \ + 'toggled', self.__radio_toggled_cb) + self._jabber_change_handler = self._entry.connect( \ + 'changed', self.__jabber_changed_cb) + self._network_configuration_reset_handler = \ + self._clear_history_button.connect( \ + 'clicked', self.__network_configuration_reset_cb) + + def undo(self): + self._button.disconnect(self._radio_change_handler) + self._entry.disconnect(self._jabber_change_handler) + self._model.undo() + self._jabber_alert.hide() + self._radio_alert.hide() + + def _validate(self): + if self._jabber_valid and self._radio_valid: + self.props.is_valid = True + else: + self.props.is_valid = False + + def __radio_toggled_cb(self, widget, data=None): + radio_state = widget.get_active() + try: + self._model.set_radio(radio_state) + except self._model.ReadError, detail: + self._radio_alert.props.msg = detail + self._radio_valid = False + else: + self._radio_valid = True + if self._model.have_networks(): + self._clear_history_button.set_sensitive(True) + + self._validate() + return False + + def __jabber_changed_cb(self, widget, data=None): + if self._jabber_sid: + gobject.source_remove(self._jabber_sid) + self._jabber_sid = gobject.timeout_add(_APPLY_TIMEOUT, + self.__jabber_timeout_cb, + widget) + + def __jabber_timeout_cb(self, widget): + self._jabber_sid = 0 + if widget.get_text() == self._model.get_jabber: + return + try: + self._model.set_jabber(widget.get_text()) + except self._model.ReadError, detail: + self._jabber_alert.props.msg = detail + self._jabber_valid = False + self._jabber_alert.show() + self.restart_alerts.append('jabber') + else: + self._jabber_valid = True + self._jabber_alert.hide() + + self._validate() + return False + + def __network_configuration_reset_cb(self, widget): + # FIXME: takes effect immediately, not after CP is closed with + # confirmation button + self._model.clear_networks() + if not self._model.have_networks(): + self._clear_history_button.set_sensitive(False) diff --git a/extensions/cpsection/power/Makefile.am b/extensions/cpsection/power/Makefile.am new file mode 100644 index 0000000..325260c --- /dev/null +++ b/extensions/cpsection/power/Makefile.am @@ -0,0 +1,6 @@ +sugardir = $(pkgdatadir)/extensions/cpsection/power + +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py diff --git a/extensions/cpsection/power/Makefile.in b/extensions/cpsection/power/Makefile.in new file mode 100644 index 0000000..52c52e5 --- /dev/null +++ b/extensions/cpsection/power/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/cpsection/power +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/extensions/cpsection/power +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/cpsection/power/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/cpsection/power/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/power/__init__.py b/extensions/cpsection/power/__init__.py new file mode 100644 index 0000000..35f7efd --- /dev/null +++ b/extensions/cpsection/power/__init__.py @@ -0,0 +1,22 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ + +CLASS = 'Power' +ICON = 'module-power' +TITLE = _('Power') +KEYWORDS = ['automatic', 'extreme', 'power', 'suspend', 'battery'] diff --git a/extensions/cpsection/power/model.py b/extensions/cpsection/power/model.py new file mode 100644 index 0000000..8b6a1d3 --- /dev/null +++ b/extensions/cpsection/power/model.py @@ -0,0 +1,94 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +import os +from gettext import gettext as _ +import logging + +import gconf +import dbus + +OHM_SERVICE_NAME = 'org.freedesktop.ohm' +OHM_SERVICE_PATH = '/org/freedesktop/ohm/Keystore' +OHM_SERVICE_IFACE = 'org.freedesktop.ohm.Keystore' + +POWERD_FLAG_DIR = '/etc/powerd/flags' +POWERD_INHIBIT_FLAG = '/etc/powerd/flags/inhibit-suspend' + +_logger = logging.getLogger('ControlPanel - Power') + + +class ReadError(Exception): + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) + + +def using_powerd(): + # directory exists if powerd running, and it's recent + # enough to be controllable. + return os.access(POWERD_FLAG_DIR, os.W_OK) + + +def get_automatic_pm(): + if using_powerd(): + return not os.access(POWERD_INHIBIT_FLAG, os.R_OK) + + # ohmd + client = gconf.client_get_default() + return client.get_bool('/desktop/sugar/power/automatic') + + +def print_automatic_pm(): + print ('off', 'on')[get_automatic_pm()] + + +def set_automatic_pm(enabled): + """Automatic suspends on/off.""" + + if using_powerd(): + # powerd + if enabled == 'off' or enabled == 0: + try: + fd = open(POWERD_INHIBIT_FLAG, 'w') + except IOError: + _logger.debug('File %s is not writeable' % POWERD_INHIBIT_FLAG) + else: + fd.close() + else: + os.unlink(POWERD_INHIBIT_FLAG) + return + + # ohmd + bus = dbus.SystemBus() + proxy = bus.get_object(OHM_SERVICE_NAME, OHM_SERVICE_PATH) + keystore = dbus.Interface(proxy, OHM_SERVICE_IFACE) + + if enabled == 'on' or enabled == 1: + keystore.SetKey('suspend.automatic_pm', 1) + enabled = True + elif enabled == 'off' or enabled == 0: + keystore.SetKey('suspend.automatic_pm', 0) + enabled = False + else: + raise ValueError(_('Error in automatic pm argument, use on/off.')) + + client = gconf.client_get_default() + client.set_bool('/desktop/sugar/power/automatic', enabled) + return diff --git a/extensions/cpsection/power/view.py b/extensions/cpsection/power/view.py new file mode 100644 index 0000000..be0815d --- /dev/null +++ b/extensions/cpsection/power/view.py @@ -0,0 +1,122 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +from gettext import gettext as _ + +from sugar.graphics import style + +from jarabe.controlpanel.sectionview import SectionView +from jarabe.controlpanel.inlinealert import InlineAlert + + +class Power(SectionView): + def __init__(self, model, alerts): + SectionView.__init__(self) + + self._model = model + self.restart_alerts = alerts + self._automatic_pm_valid = True + self._automatic_pm_change_handler = None + + self.set_border_width(style.DEFAULT_SPACING * 2) + self.set_spacing(style.DEFAULT_SPACING) + group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + + self._automatic_pm_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) + + separator_pm = gtk.HSeparator() + self.pack_start(separator_pm, expand=False) + separator_pm.show() + + label_pm = gtk.Label(_('Power management')) + label_pm.set_alignment(0, 0) + self.pack_start(label_pm, expand=False) + label_pm.show() + box_pm = gtk.VBox() + box_pm.set_border_width(style.DEFAULT_SPACING * 2) + box_pm.set_spacing(style.DEFAULT_SPACING) + + box_automatic_pm = gtk.HBox(spacing=style.DEFAULT_SPACING) + label_automatic_pm = gtk.Label( + _('Automatic power management (increases battery life)')) + label_automatic_pm.set_alignment(0, 0.5) + self._automatic_button = gtk.CheckButton() + self._automatic_button.set_alignment(0, 0) + box_automatic_pm.pack_start(self._automatic_button, expand=False) + box_automatic_pm.pack_start(label_automatic_pm, expand=False) + self._automatic_button.show() + label_automatic_pm.show() + group.add_widget(label_automatic_pm) + box_pm.pack_start(box_automatic_pm, expand=False) + box_automatic_pm.show() + + self._automatic_pm_alert = InlineAlert() + label_automatic_pm_error = gtk.Label() + group.add_widget(label_automatic_pm_error) + self._automatic_pm_alert_box.pack_start(label_automatic_pm_error, + expand=False) + label_automatic_pm_error.show() + self._automatic_pm_alert_box.pack_start(self._automatic_pm_alert, + expand=False) + box_pm.pack_end(self._automatic_pm_alert_box, expand=False) + self._automatic_pm_alert_box.show() + if 'automatic_pm' in self.restart_alerts: + self._automatic_pm_alert.props.msg = self.restart_msg + self._automatic_pm_alert.show() + + self.pack_start(box_pm, expand=False) + box_pm.show() + + self.setup() + + def setup(self): + try: + automatic_state = self._model.get_automatic_pm() + except Exception, detail: + self._automatic_pm_alert.props.msg = detail + self._automatic_pm_alert.show() + else: + self._automatic_button.set_active(automatic_state) + + self._automatic_pm_valid = True + self.needs_restart = False + self._automatic_pm_change_handler = self._automatic_button.connect( \ + 'toggled', self.__automatic_pm_toggled_cb) + + def undo(self): + self._automatic_button.disconnect(self._automatic_pm_change_handler) + self._model.undo() + self._automatic_pm_alert.hide() + + def _validate(self): + if self._automatic_pm_valid: + self.props.is_valid = True + else: + self.props.is_valid = False + + def __automatic_pm_toggled_cb(self, widget, data=None): + state = widget.get_active() + try: + self._model.set_automatic_pm(state) + except Exception, detail: + print detail + self._automatic_pm_alert.props.msg = detail + else: + self._automatic_pm_valid = True + + self._validate() + return False diff --git a/extensions/cpsection/updater/Makefile.am b/extensions/cpsection/updater/Makefile.am new file mode 100644 index 0000000..897dbf3 --- /dev/null +++ b/extensions/cpsection/updater/Makefile.am @@ -0,0 +1,8 @@ +SUBDIRS = backends + +sugardir = $(pkgdatadir)/extensions/cpsection/updater + +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py diff --git a/extensions/cpsection/updater/Makefile.in b/extensions/cpsection/updater/Makefile.in new file mode 100644 index 0000000..dd9b2ec --- /dev/null +++ b/extensions/cpsection/updater/Makefile.in @@ -0,0 +1,645 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/cpsection/updater +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = backends +sugardir = $(pkgdatadir)/extensions/cpsection/updater +sugar_PYTHON = \ + __init__.py \ + model.py \ + view.py + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/cpsection/updater/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/cpsection/updater/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/updater/__init__.py b/extensions/cpsection/updater/__init__.py new file mode 100644 index 0000000..6010615 --- /dev/null +++ b/extensions/cpsection/updater/__init__.py @@ -0,0 +1,22 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ + +CLASS = 'ActivityUpdater' +ICON = 'module-updater' +TITLE = _('Software update') +KEYWORDS = ['software', 'activity', 'update'] diff --git a/extensions/cpsection/updater/backends/Makefile.am b/extensions/cpsection/updater/backends/Makefile.am new file mode 100644 index 0000000..e280a07 --- /dev/null +++ b/extensions/cpsection/updater/backends/Makefile.am @@ -0,0 +1,5 @@ +sugardir = $(pkgdatadir)/extensions/cpsection/updater/backends + +sugar_PYTHON = \ + aslo.py \ + __init__.py diff --git a/extensions/cpsection/updater/backends/Makefile.in b/extensions/cpsection/updater/backends/Makefile.in new file mode 100644 index 0000000..49e509c --- /dev/null +++ b/extensions/cpsection/updater/backends/Makefile.in @@ -0,0 +1,441 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/cpsection/updater/backends +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/extensions/cpsection/updater/backends +sugar_PYTHON = \ + aslo.py \ + __init__.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/cpsection/updater/backends/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/cpsection/updater/backends/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/cpsection/updater/backends/__init__.py b/extensions/cpsection/updater/backends/__init__.py new file mode 100644 index 0000000..0dd0174 --- /dev/null +++ b/extensions/cpsection/updater/backends/__init__.py @@ -0,0 +1,16 @@ +#!/usr/bin/python +# Copyright (C) 2009, Sugar Labs +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/extensions/cpsection/updater/backends/aslo.py b/extensions/cpsection/updater/backends/aslo.py new file mode 100644 index 0000000..6504e9e --- /dev/null +++ b/extensions/cpsection/updater/backends/aslo.py @@ -0,0 +1,164 @@ +#!/usr/bin/python +# Copyright (C) 2009, Sugar Labs +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +"""Activity information microformat parser. + +Activity information is embedded in HTML/XHTML/XML pages using a +Resource Description Framework (RDF) http://www.w3.org/RDF/ . + +An example:: + + + + + + + + + + + + + 7 + + + {3ca105e0-2280-4897-99a0-c277d1b733d2} + 0.82 + 0.84 + http://foo.xo + 7 + sha256:816a7c43b4f1ea4769c61c03ea4.. + + + +""" + +import logging +from xml.etree.ElementTree import XML +import traceback + +import gio + +from sugar.bundle.bundleversion import NormalizedVersion +from sugar.bundle.bundleversion import InvalidVersionError + +from jarabe import config + +_FIND_DESCRIPTION = \ + './/{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description' +_FIND_VERSION = './/{http://www.mozilla.org/2004/em-rdf#}version' +_FIND_LINK = './/{http://www.mozilla.org/2004/em-rdf#}updateLink' +_FIND_SIZE = './/{http://www.mozilla.org/2004/em-rdf#}updateSize' + +_UPDATE_PATH = 'http://activities.sugarlabs.org/services/update-aslo.php' + +_fetcher = None + + +class _UpdateFetcher(object): + + _CHUNK_SIZE = 10240 + + def __init__(self, bundle, completion_cb): + # ASLO knows only about stable SP releases + major, minor = config.version.split('.')[0:2] + sp_version = '%s.%s' % (major, int(minor) + int(minor) % 2) + + url = '%s?id=%s&appVersion=%s' % \ + (_UPDATE_PATH, bundle.get_bundle_id(), sp_version) + + logging.debug('Fetch %s', url) + + self._completion_cb = completion_cb + self._file = gio.File(url) + self._stream = None + self._xml_data = '' + self._bundle = bundle + + self._file.read_async(self.__file_read_async_cb) + + def __file_read_async_cb(self, gfile, result): + try: + self._stream = self._file.read_finish(result) + except: + global _fetcher + _fetcher = None + self._completion_cb(None, None, None, None, traceback.format_exc()) + return + + self._stream.read_async(self._CHUNK_SIZE, self.__stream_read_async_cb) + + def __stream_read_async_cb(self, stream, result): + xml_data = self._stream.read_finish(result) + if xml_data is None: + global _fetcher + _fetcher = None + self._completion_cb(self._bundle, None, None, None, + 'Error reading update information for %s from ' + 'server.' % self._bundle.get_bundle_id()) + return + elif not xml_data: + self._process_result() + else: + self._xml_data += xml_data + self._stream.read_async(self._CHUNK_SIZE, + self.__stream_read_async_cb) + + def _process_result(self): + document = XML(self._xml_data) + + if document.find(_FIND_DESCRIPTION) is None: + logging.debug('Bundle %s not available in the server for the ' + 'version %s', self._bundle.get_bundle_id(), config.version) + version = None + link = None + size = None + else: + try: + version = NormalizedVersion(document.find(_FIND_VERSION).text) + except InvalidVersionError: + logging.exception('Exception occured while parsing version') + version = '0' + + link = document.find(_FIND_LINK).text + + try: + size = long(document.find(_FIND_SIZE).text) * 1024 + except ValueError: + logging.exception('Exception occured while parsing size') + size = 0 + + global _fetcher + _fetcher = None + self._completion_cb(self._bundle, version, link, size, None) + + +def fetch_update_info(bundle, completion_cb): + """Queries the server for a newer version of the ActivityBundle. + + completion_cb receives bundle, version, link, size and possibly an error + message: + + def completion_cb(bundle, version, link, size, error_message): + """ + global _fetcher + + if _fetcher is not None: + raise RuntimeError('Multiple simultaneous requests are not supported') + + _fetcher = _UpdateFetcher(bundle, completion_cb) diff --git a/extensions/cpsection/updater/model.py b/extensions/cpsection/updater/model.py new file mode 100755 index 0000000..7ea445f --- /dev/null +++ b/extensions/cpsection/updater/model.py @@ -0,0 +1,354 @@ +# Copyright (C) 2009, Sugar Labs +# Copyright (C) 2009, Tomeu Vizoso +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +"""Sugar bundle updater: model. + +This module implements the non-GUI portions of the bundle updater, including +list of installed bundls, whether updates are needed, and the URL at which to +find the bundle updated. +""" + +import os +import logging +import tempfile +from urlparse import urlparse +import traceback + +import gobject +import gio + +from sugar import env +from sugar.datastore import datastore +from sugar.bundle.activitybundle import ActivityBundle +from sugar.bundle.bundleversion import NormalizedVersion + +from jarabe.model import bundleregistry + +from backends import aslo + + +class UpdateModel(gobject.GObject): + __gtype_name__ = 'SugarUpdateModel' + + __gsignals__ = { + 'progress': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([int, str, float, int])), + } + + ACTION_CHECKING = 0 + ACTION_UPDATING = 1 + ACTION_DOWNLOADING = 2 + + def __init__(self): + gobject.GObject.__init__(self) + + self.updates = None + self._bundles_to_check = None + self._bundles_to_update = None + self._total_bundles_to_update = 0 + self._downloader = None + self._cancelling = False + + def check_updates(self): + self.updates = [] + self._bundles_to_check = list(bundleregistry.get_registry()) + self._check_next_update() + + def _check_next_update(self): + total = len(bundleregistry.get_registry()) + current = total - len(self._bundles_to_check) + + if not self._bundles_to_check: + return False + + bundle = self._bundles_to_check.pop() + self.emit('progress', UpdateModel.ACTION_CHECKING, bundle.get_name(), + current, total) + + aslo.fetch_update_info(bundle, self.__check_completed_cb) + + def __check_completed_cb(self, bundle, version, link, size, error_message): + if error_message is not None: + logging.error('Error getting update information from server:\n' + '%s' % error_message) + + if version is not None and \ + version > NormalizedVersion(bundle.get_activity_version()): + self.updates.append(BundleUpdate(bundle, version, link, size)) + + if self._cancelling: + self._cancel_checking() + elif self._bundles_to_check: + gobject.idle_add(self._check_next_update) + else: + total = len(bundleregistry.get_registry()) + if bundle is None: + name = '' + else: + name = bundle.get_name() + self.emit('progress', UpdateModel.ACTION_CHECKING, name, total, + total) + + def update(self, bundle_ids): + self._bundles_to_update = [] + for bundle_update in self.updates: + if bundle_update.bundle.get_bundle_id() in bundle_ids: + self._bundles_to_update.append(bundle_update) + + self._total_bundles_to_update = len(self._bundles_to_update) + self._download_next_update() + + def _download_next_update(self): + if self._cancelling: + self._cancel_updating() + return + + bundle_update = self._bundles_to_update.pop() + + total = self._total_bundles_to_update * 2 + current = total - len(self._bundles_to_update) * 2 - 2 + + self.emit('progress', UpdateModel.ACTION_DOWNLOADING, + bundle_update.bundle.get_name(), current, total) + + self._downloader = _Downloader(bundle_update) + self._downloader.connect('progress', self.__downloader_progress_cb) + self._downloader.connect('error', self.__downloader_error_cb) + + def __downloader_progress_cb(self, downloader, progress): + logging.debug('__downloader_progress_cb %r', progress) + + if self._cancelling: + self._cancel_updating() + return + + total = self._total_bundles_to_update * 2 + current = total - len(self._bundles_to_update) * 2 - 2 + progress + + self.emit('progress', UpdateModel.ACTION_DOWNLOADING, + self._downloader.bundle_update.bundle.get_name(), + current, total) + + if progress == 1: + self._install_update(self._downloader.bundle_update, + self._downloader.get_local_file_path()) + self._downloader = None + + def __downloader_error_cb(self, downloader, error_message): + logging.error('Error downloading update:\n%s', error_message) + + if self._cancelling: + self._cancel_updating() + return + + total = self._total_bundles_to_update + current = total - len(self._bundles_to_update) + self.emit('progress', UpdateModel.ACTION_UPDATING, '', current, total) + + if self._bundles_to_update: + # do it in idle so the UI has a chance to refresh + gobject.idle_add(self._download_next_update) + + def _install_update(self, bundle_update, local_file_path): + + total = self._total_bundles_to_update + current = total - len(self._bundles_to_update) - 0.5 + + self.emit('progress', UpdateModel.ACTION_UPDATING, + bundle_update.bundle.get_name(), + current, total) + + # TODO: Should we first expand the zip async so we can provide progress + # and only then copy to the journal? + jobject = datastore.create() + try: + title = '%s-%s' % (bundle_update.bundle.get_name(), + bundle_update.version) + jobject.metadata['title'] = title + jobject.metadata['mime_type'] = ActivityBundle.MIME_TYPE + jobject.file_path = local_file_path + datastore.write(jobject, transfer_ownership=True) + finally: + jobject.destroy() + + self.emit('progress', UpdateModel.ACTION_UPDATING, + bundle_update.bundle.get_name(), + current + 0.5, total) + + if self._bundles_to_update: + # do it in idle so the UI has a chance to refresh + gobject.idle_add(self._download_next_update) + + def cancel(self): + self._cancelling = True + + def _cancel_checking(self): + logging.debug('UpdateModel._cancel_checking') + total = len(bundleregistry.get_registry()) + current = total - len(self._bundles_to_check) + self.emit('progress', UpdateModel.ACTION_CHECKING, '', current, + current) + self._bundles_to_check = None + self._cancelling = False + + def _cancel_updating(self): + logging.debug('UpdateModel._cancel_updating') + current = (self._total_bundles_to_update - + len(self._bundles_to_update) - 1) + self.emit('progress', UpdateModel.ACTION_UPDATING, '', current, + current) + + if self._downloader is not None: + self._downloader.cancel() + file_path = self._downloader.get_local_file_path() + if file_path is not None and os.path.exists(file_path): + os.unlink(file_path) + self._downloader = None + + self._total_bundles_to_update = 0 + self._bundles_to_update = None + self._cancelling = False + + +class BundleUpdate(object): + + def __init__(self, bundle, version, link, size): + self.bundle = bundle + self.version = version + self.link = link + self.size = size + + +class _Downloader(gobject.GObject): + _CHUNK_SIZE = 10240 # 10K + __gsignals__ = { + 'progress': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([float])), + 'error': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([str])), + } + + def __init__(self, bundle_update): + gobject.GObject.__init__(self) + + self.bundle_update = bundle_update + self._input_stream = None + self._output_stream = None + self._pending_buffers = [] + self._input_file = gio.File(bundle_update.link) + self._output_file = None + self._downloaded_size = 0 + self._cancelling = False + + self._input_file.read_async(self.__file_read_async_cb) + + def cancel(self): + self._cancelling = True + + def __file_read_async_cb(self, gfile, result): + if self._cancelling: + return + + try: + self._input_stream = self._input_file.read_finish(result) + except: + self.emit('error', traceback.format_exc()) + return + + temp_file_path = self._get_temp_file_path(self.bundle_update.link) + self._output_file = gio.File(temp_file_path) + self._output_stream = self._output_file.create() + + self._input_stream.read_async(self._CHUNK_SIZE, self.__read_async_cb, + gobject.PRIORITY_LOW) + + def __read_async_cb(self, input_stream, result): + if self._cancelling: + return + + data = input_stream.read_finish(result) + + if data is None: + # TODO + pass + elif not data: + logging.debug('closing input stream') + self._input_stream.close() + self._check_if_finished_writing() + else: + self._pending_buffers.append(data) + self._input_stream.read_async(self._CHUNK_SIZE, + self.__read_async_cb, + gobject.PRIORITY_LOW) + + self._write_next_buffer() + + def __write_async_cb(self, output_stream, result, user_data): + if self._cancelling: + return + + count = output_stream.write_finish(result) + + self._downloaded_size += count + progress = self._downloaded_size / float(self.bundle_update.size) + self.emit('progress', progress) + + self._check_if_finished_writing() + + if self._pending_buffers: + self._write_next_buffer() + + def _write_next_buffer(self): + if self._pending_buffers and not self._output_stream.has_pending(): + data = self._pending_buffers.pop(0) + # TODO: we pass the buffer as user_data because of + # http://bugzilla.gnome.org/show_bug.cgi?id=564102 + self._output_stream.write_async(data, self.__write_async_cb, + gobject.PRIORITY_LOW, + user_data=data) + + def _get_temp_file_path(self, uri): + # TODO: Should we use the HTTP headers for the file name? + scheme_, netloc_, path, params_, query_, fragment_ = \ + urlparse(uri) + path = os.path.basename(path) + + if not os.path.exists(env.get_user_activities_path()): + os.makedirs(env.get_user_activities_path()) + + base_name, extension_ = os.path.splitext(path) + fd, file_path = tempfile.mkstemp(dir=env.get_user_activities_path(), + prefix=base_name, suffix='.xo') + os.close(fd) + os.unlink(file_path) + + return file_path + + def get_local_file_path(self): + return self._output_file.get_path() + + def _check_if_finished_writing(self): + if not self._pending_buffers and \ + not self._output_stream.has_pending() and \ + self._input_stream.is_closed(): + + logging.debug('closing output stream') + self._output_stream.close() + + self.emit('progress', 1.0) diff --git a/extensions/cpsection/updater/view.py b/extensions/cpsection/updater/view.py new file mode 100644 index 0000000..814658f --- /dev/null +++ b/extensions/cpsection/updater/view.py @@ -0,0 +1,391 @@ +# Copyright (C) 2008, One Laptop Per Child +# Copyright (C) 2009, Tomeu Vizoso +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +from gettext import ngettext +import locale +import logging + +import gobject +import gtk + +from sugar.graphics import style +from sugar.graphics.icon import Icon, CellRendererIcon + +from jarabe.controlpanel.sectionview import SectionView + +from model import UpdateModel + +_DEBUG_VIEW_ALL = True + + +class ActivityUpdater(SectionView): + + def __init__(self, model, alerts): + SectionView.__init__(self) + + self._model = UpdateModel() + self._model.connect('progress', self.__progress_cb) + + self.set_spacing(style.DEFAULT_SPACING) + self.set_border_width(style.DEFAULT_SPACING * 2) + + self._top_label = gtk.Label() + self._top_label.set_line_wrap(True) + self._top_label.set_justify(gtk.JUSTIFY_LEFT) + self._top_label.props.xalign = 0 + self.pack_start(self._top_label, expand=False) + self._top_label.show() + + separator = gtk.HSeparator() + self.pack_start(separator, expand=False) + separator.show() + + bottom_label = gtk.Label() + bottom_label.set_line_wrap(True) + bottom_label.set_justify(gtk.JUSTIFY_LEFT) + bottom_label.props.xalign = 0 + bottom_label.set_markup( + _('Software updates correct errors, eliminate security ' \ + 'vulnerabilities, and provide new features.')) + self.pack_start(bottom_label, expand=False) + bottom_label.show() + + self._update_box = None + self._progress_pane = None + + self._refresh() + + def _switch_to_update_box(self): + if self._update_box in self.get_children(): + return + + if self._progress_pane in self.get_children(): + self.remove(self._progress_pane) + self._progress_pane = None + + if self._update_box is None: + self._update_box = UpdateBox(self._model) + self._update_box.refresh_button.connect('clicked', + self.__refresh_button_clicked_cb) + self._update_box.install_button.connect('clicked', + self.__install_button_clicked_cb) + + self.pack_start(self._update_box, expand=True, fill=True) + self._update_box.show() + + def _switch_to_progress_pane(self): + if self._progress_pane in self.get_children(): + return + + if self._update_box in self.get_children(): + self.remove(self._update_box) + self._update_box = None + + if self._progress_pane is None: + self._progress_pane = ProgressPane() + self._progress_pane.cancel_button.connect('clicked', + self.__cancel_button_clicked_cb) + + self.pack_start(self._progress_pane, expand=True, fill=False) + self._progress_pane.show() + + def _clear_center(self): + if self._progress_pane in self.get_children(): + self.remove(self._progress_pane) + self._progress_pane = None + + if self._update_box in self.get_children(): + self.remove(self._update_box) + self._update_box = None + + def __progress_cb(self, model, action, bundle_name, current, total): + if current == total and action == UpdateModel.ACTION_CHECKING: + self._finished_checking() + return + elif current == total: + self._finished_updating(int(current)) + return + + if action == UpdateModel.ACTION_CHECKING: + message = _('Checking %s...') % bundle_name + elif action == UpdateModel.ACTION_DOWNLOADING: + message = _('Downloading %s...') % bundle_name + elif action == UpdateModel.ACTION_UPDATING: + message = _('Updating %s...') % bundle_name + + self._switch_to_progress_pane() + self._progress_pane.set_message(message) + self._progress_pane.set_progress(current / float(total)) + + def _finished_checking(self): + logging.debug('ActivityUpdater._finished_checking') + available_updates = len(self._model.updates) + if not available_updates: + top_message = _('Your software is up-to-date') + else: + top_message = ngettext('You can install %s update', + 'You can install %s updates', + available_updates) + top_message = top_message % available_updates + top_message = gobject.markup_escape_text(top_message) + + self._top_label.set_markup('%s' % top_message) + + if not available_updates: + self._clear_center() + else: + self._switch_to_update_box() + self._update_box.refresh() + + def __refresh_button_clicked_cb(self, button): + self._refresh() + + def _refresh(self): + top_message = _('Checking for updates...') + self._top_label.set_markup('%s' % top_message) + self._model.check_updates() + + def __install_button_clicked_cb(self, button): + text = '%s' % _('Installing updates...') + self._top_label.set_markup(text) + self._model.update(self._update_box.get_bundles_to_update()) + + def __cancel_button_clicked_cb(self, button): + self._model.cancel() + + def _finished_updating(self, installed_updates): + logging.debug('ActivityUpdater._finished_updating') + top_message = ngettext('%s update was installed', + '%s updates were installed', installed_updates) + top_message = top_message % installed_updates + top_message = gobject.markup_escape_text(top_message) + self._top_label.set_markup('%s' % top_message) + self._clear_center() + + def undo(self): + self._model.cancel() + + +class ProgressPane(gtk.VBox): + """Container which replaces the `ActivityPane` during refresh or + install.""" + + def __init__(self): + gtk.VBox.__init__(self) + self.set_spacing(style.DEFAULT_PADDING) + self.set_border_width(style.DEFAULT_SPACING * 2) + + self._progress = gtk.ProgressBar() + self.pack_start(self._progress) + self._progress.show() + + self._label = gtk.Label() + self._label.set_line_wrap(True) + self._label.set_property('xalign', 0.5) + self._label.modify_fg(gtk.STATE_NORMAL, + style.COLOR_BUTTON_GREY.get_gdk_color()) + self.pack_start(self._label) + self._label.show() + + alignment_box = gtk.Alignment(xalign=0.5, yalign=0.5) + self.pack_start(alignment_box) + alignment_box.show() + + self.cancel_button = gtk.Button(stock=gtk.STOCK_CANCEL) + alignment_box.add(self.cancel_button) + self.cancel_button.show() + + def set_message(self, message): + self._label.set_text(message) + + def set_progress(self, fraction): + self._progress.props.fraction = fraction + + +class UpdateBox(gtk.VBox): + + def __init__(self, model): + gtk.VBox.__init__(self) + + self._model = model + + self.set_spacing(style.DEFAULT_PADDING) + + scrolled_window = gtk.ScrolledWindow() + scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.pack_start(scrolled_window) + scrolled_window.show() + + self._update_list = UpdateList(model) + self._update_list.props.model.connect('row-changed', + self.__row_changed_cb) + scrolled_window.add(self._update_list) + self._update_list.show() + + bottom_box = gtk.HBox() + bottom_box.set_spacing(style.DEFAULT_SPACING) + self.pack_start(bottom_box, expand=False) + bottom_box.show() + + self._size_label = gtk.Label() + self._size_label.props.xalign = 0 + self._size_label.set_justify(gtk.JUSTIFY_LEFT) + bottom_box.pack_start(self._size_label, expand=True) + self._size_label.show() + + self.refresh_button = gtk.Button(stock=gtk.STOCK_REFRESH) + bottom_box.pack_start(self.refresh_button, expand=False) + self.refresh_button.show() + + self.install_button = gtk.Button(_('Install selected')) + self.install_button.props.image = Icon(icon_name='emblem-downloads', + icon_size=gtk.ICON_SIZE_BUTTON) + bottom_box.pack_start(self.install_button, expand=False) + self.install_button.show() + + self._update_total_size_label() + + def refresh(self): + self._update_list.refresh() + + def __row_changed_cb(self, list_model, path, iterator): + self._update_total_size_label() + self._update_install_button() + + def _update_total_size_label(self): + total_size = 0 + for row in self._update_list.props.model: + if row[UpdateListModel.SELECTED]: + total_size += row[UpdateListModel.SIZE] + + markup = _('Download size: %s') % _format_size(total_size) + self._size_label.set_markup(markup) + + def _update_install_button(self): + for row in self._update_list.props.model: + if row[UpdateListModel.SELECTED]: + self.install_button.props.sensitive = True + return + self.install_button.props.sensitive = False + + def get_bundles_to_update(self): + bundles_to_update = [] + for row in self._update_list.props.model: + if row[UpdateListModel.SELECTED]: + bundles_to_update.append(row[UpdateListModel.BUNDLE_ID]) + return bundles_to_update + + +class UpdateList(gtk.TreeView): + + def __init__(self, model): + list_model = UpdateListModel(model) + gtk.TreeView.__init__(self, list_model) + + self.set_reorderable(False) + self.set_enable_search(False) + self.set_headers_visible(False) + + toggle_renderer = gtk.CellRendererToggle() + toggle_renderer.props.activatable = True + toggle_renderer.props.xpad = style.DEFAULT_PADDING + toggle_renderer.props.indicator_size = style.zoom(26) + toggle_renderer.connect('toggled', self.__toggled_cb) + + toggle_column = gtk.TreeViewColumn() + toggle_column.pack_start(toggle_renderer) + toggle_column.add_attribute(toggle_renderer, 'active', + UpdateListModel.SELECTED) + self.append_column(toggle_column) + + icon_renderer = CellRendererIcon(self) + icon_renderer.props.width = style.STANDARD_ICON_SIZE + icon_renderer.props.height = style.STANDARD_ICON_SIZE + icon_renderer.props.size = style.STANDARD_ICON_SIZE + icon_renderer.props.xpad = style.DEFAULT_PADDING + icon_renderer.props.ypad = style.DEFAULT_PADDING + icon_renderer.props.stroke_color = style.COLOR_TOOLBAR_GREY.get_svg() + icon_renderer.props.fill_color = style.COLOR_TRANSPARENT.get_svg() + + icon_column = gtk.TreeViewColumn() + icon_column.pack_start(icon_renderer) + icon_column.add_attribute(icon_renderer, 'file-name', + UpdateListModel.ICON_FILE_NAME) + self.append_column(icon_column) + + text_renderer = gtk.CellRendererText() + + description_column = gtk.TreeViewColumn() + description_column.pack_start(text_renderer) + description_column.add_attribute(text_renderer, 'markup', + UpdateListModel.DESCRIPTION) + self.append_column(description_column) + + def __toggled_cb(self, cell_renderer, path): + row = self.props.model[path] + row[UpdateListModel.SELECTED] = not row[UpdateListModel.SELECTED] + + def refresh(self): + pass + + +class UpdateListModel(gtk.ListStore): + + BUNDLE_ID = 0 + SELECTED = 1 + ICON_FILE_NAME = 2 + DESCRIPTION = 3 + SIZE = 4 + + def __init__(self, model): + gtk.ListStore.__init__(self, str, bool, str, str, int) + + for bundle_update in model.updates: + row = [None] * 5 + row[self.BUNDLE_ID] = bundle_update.bundle.get_bundle_id() + row[self.SELECTED] = True + row[self.ICON_FILE_NAME] = bundle_update.bundle.get_icon() + + details = _('From version %(current)s to %(new)s (Size: %(size)s)') + details = details % \ + {'current': bundle_update.bundle.get_activity_version(), + 'new': bundle_update.version, + 'size': _format_size(bundle_update.size)} + + row[self.DESCRIPTION] = '%s\n%s' % \ + (bundle_update.bundle.get_name(), details) + + row[self.SIZE] = bundle_update.size + + self.append(row) + + +def _format_size(size): + """Convert a given size in bytes to a nicer better readable unit""" + if size == 0: + # TRANS: download size is 0 + return _('None') + elif size < 1024: + # TRANS: download size of very small updates + return _('1 KB') + elif size < 1024 * 1024: + # TRANS: download size of small updates, e.g. '250 KB' + return locale.format_string(_('%.0f KB'), size / 1024.0) + else: + # TRANS: download size of updates, e.g. '2.3 MB' + return locale.format_string(_('%.1f MB'), size / 1024.0 / 1024) diff --git a/extensions/deviceicon/Makefile.am b/extensions/deviceicon/Makefile.am new file mode 100644 index 0000000..7ed1f77 --- /dev/null +++ b/extensions/deviceicon/Makefile.am @@ -0,0 +1,10 @@ +sugardir = $(pkgdatadir)/extensions/deviceicon + +sugar_PYTHON = \ + __init__.py \ + battery.py \ + network.py \ + speaker.py \ + speech.py \ + touchpad.py \ + volume.py diff --git a/extensions/deviceicon/Makefile.in b/extensions/deviceicon/Makefile.in new file mode 100644 index 0000000..86ecc0b --- /dev/null +++ b/extensions/deviceicon/Makefile.in @@ -0,0 +1,446 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/deviceicon +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/extensions/deviceicon +sugar_PYTHON = \ + __init__.py \ + battery.py \ + network.py \ + speaker.py \ + speech.py \ + touchpad.py \ + volume.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/deviceicon/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/deviceicon/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/deviceicon/__init__.py b/extensions/deviceicon/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/extensions/deviceicon/__init__.py diff --git a/extensions/deviceicon/battery.py b/extensions/deviceicon/battery.py new file mode 100644 index 0000000..a70458a --- /dev/null +++ b/extensions/deviceicon/battery.py @@ -0,0 +1,260 @@ +# Copyright (C) 2006-2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from gettext import gettext as _ +import sys + +import gconf +import glib +import gobject +import gtk +import dbus + +from sugar.graphics import style +from sugar.graphics.icon import get_icon_state +from sugar.graphics.tray import TrayIcon +from sugar.graphics.palette import Palette +from sugar.graphics.xocolor import XoColor + +from jarabe.frame.frameinvoker import FrameWidgetInvoker + + +_ICON_NAME = 'battery' + +_STATUS_CHARGING = 0 +_STATUS_DISCHARGING = 1 +_STATUS_FULLY_CHARGED = 2 +_STATUS_NOT_PRESENT = 3 + +_UP_DEVICE_IFACE = 'org.freedesktop.UPower.Device' + +_UP_TYPE_BATTERY = 2 + +_UP_STATE_UNKNOWN = 0 +_UP_STATE_CHARGING = 1 +_UP_STATE_DISCHARGING = 2 +_UP_STATE_EMPTY = 3 +_UP_STATE_FULL = 4 +_UP_STATE_CHARGE_PENDING = 5 +_UP_STATE_DISCHARGE_PENDING = 6 + +_WARN_MIN_PERCENTAGE = 15 + + +class DeviceView(TrayIcon): + + FRAME_POSITION_RELATIVE = 102 + + def __init__(self, battery): + client = gconf.client_get_default() + self._color = XoColor(client.get_string('/desktop/sugar/user/color')) + + TrayIcon.__init__(self, icon_name=_ICON_NAME, xo_color=self._color) + + self.set_palette_invoker(FrameWidgetInvoker(self)) + + self._model = DeviceModel(battery) + self.palette = BatteryPalette(glib.markup_escape_text(_('My Battery'))) + self.palette.set_group_id('frame') + self._model.connect('updated', + self.__battery_status_changed_cb) + self._update_info() + + def _update_info(self): + name = _ICON_NAME + current_level = self._model.props.level + xo_color = self._color + badge_name = None + + if not self._model.props.present: + status = _STATUS_NOT_PRESENT + badge_name = None + xo_color = XoColor('%s,%s' % (style.COLOR_WHITE.get_svg(), + style.COLOR_WHITE.get_svg())) + elif self._model.props.charging: + status = _STATUS_CHARGING + name += '-charging' + xo_color = XoColor('%s,%s' % (style.COLOR_WHITE.get_svg(), + style.COLOR_WHITE.get_svg())) + elif self._model.props.discharging: + status = _STATUS_DISCHARGING + if current_level <= _WARN_MIN_PERCENTAGE: + badge_name = 'emblem-warning' + else: + status = _STATUS_FULLY_CHARGED + + self.icon.props.icon_name = get_icon_state(name, current_level, + step=-5) + self.icon.props.xo_color = xo_color + self.icon.props.badge_name = badge_name + + self.palette.set_info(current_level, self._model.props.time_remaining, + status) + + def __battery_status_changed_cb(self, model): + self._update_info() + + +class BatteryPalette(Palette): + + def __init__(self, primary_text): + Palette.__init__(self, primary_text) + self._level = 0 + self._time = 0 + self._status = _STATUS_NOT_PRESENT + self._progress_bar = gtk.ProgressBar() + self._progress_bar.set_size_request( + style.zoom(style.GRID_CELL_SIZE * 4), -1) + self._progress_bar.show() + self._status_label = gtk.Label() + self._status_label.show() + + vbox = gtk.VBox() + vbox.pack_start(self._progress_bar) + vbox.pack_start(self._status_label) + vbox.show() + + self._progress_widget = vbox + self.set_content(self._progress_widget) + + def set_info(self, percentage, seconds, status): + self._level = percentage + self._time = seconds + self._status = status + self._progress_bar.set_fraction(percentage / 100.0) + self._update_secondary() + + def _update_secondary(self): + secondary_text = '' + status_text = '%s%%' % (self._level, ) + + progress_widget = self._progress_widget + if self._status == _STATUS_NOT_PRESENT: + secondary_text = _('Removed') + progress_widget = None + elif self._status == _STATUS_CHARGING: + secondary_text = _('Charging') + elif self._status == _STATUS_DISCHARGING: + if self._level <= _WARN_MIN_PERCENTAGE: + secondary_text = _('Very little power remaining') + else: + minutes_remaining = self._time // 60 + remaining_hourpart = minutes_remaining // 60 + remaining_minpart = minutes_remaining % 60 + # TRANS: do not translate %(hour)d:%(min).2d it is a variable, + # only translate the word "remaining" + secondary_text = _('%(hour)d:%(min).2d remaining') % \ + {'hour': remaining_hourpart, 'min': remaining_minpart} + else: + secondary_text = _('Charged') + + self.set_content(progress_widget) + + self.props.secondary_text = glib.markup_escape_text(secondary_text) + self._status_label.set_text(status_text) + + +class DeviceModel(gobject.GObject): + __gproperties__ = { + 'level': (int, None, None, 0, 100, 0, gobject.PARAM_READABLE), + 'time-remaining': (int, None, None, 0, sys.maxint, 0, + gobject.PARAM_READABLE), # unit: seconds + 'charging': (bool, None, None, False, gobject.PARAM_READABLE), + 'discharging': (bool, None, None, False, gobject.PARAM_READABLE), + 'present': (bool, None, None, False, gobject.PARAM_READABLE), + } + + __gsignals__ = { + 'updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + } + + def __init__(self, battery): + gobject.GObject.__init__(self) + self._battery = battery + self._battery_props_iface = dbus.Interface(self._battery, + dbus.PROPERTIES_IFACE) + self._battery.connect_to_signal('Changed', + self.__battery_properties_changed_cb, + dbus_interface=_UP_DEVICE_IFACE) + self._fetch_properties_from_upower() + + def _fetch_properties_from_upower(self): + """Get current values from UPower.""" + # pylint: disable=W0201 + try: + dbus_props = self._battery_props_iface.GetAll(_UP_DEVICE_IFACE) + except dbus.DBusException: + logging.error('Cannot access battery properties') + dbus_props = {} + + self._level = dbus_props.get('Percentage', 0) + self._state = dbus_props.get('State', _UP_STATE_UNKNOWN) + self._present = dbus_props.get('IsPresent', False) + self._time_to_empty = dbus_props.get('TimeToEmpty', 0) + self._time_to_full = dbus_props.get('TimeToFull', 0) + + def do_get_property(self, pspec): + """Return current value of given GObject property.""" + if pspec.name == 'level': + return self._level + if pspec.name == 'charging': + return self._state == _UP_STATE_CHARGING + if pspec.name == 'discharging': + return self._state == _UP_STATE_DISCHARGING + if pspec.name == 'present': + return self._present + if pspec.name == 'time-remaining': + if self._state == _UP_STATE_CHARGING: + return self._time_to_full + if self._state == _UP_STATE_DISCHARGING: + return self._time_to_empty + return 0 + + def get_type(self): + return 'battery' + + def __battery_properties_changed_cb(self): + old_level = self._level + old_state = self._state + old_present = self._present + old_time = self.props.time_remaining + self._fetch_properties_from_upower() + if self._level != old_level: + self.notify('level') + if self._state != old_state: + self.notify('charging') + self.notify('discharging') + if self._present != old_present: + self.notify('present') + if self.props.time_remaining != old_time: + self.notify('time-remaining') + + self.emit('updated') + + +def setup(tray): + bus = dbus.Bus(dbus.Bus.TYPE_SYSTEM) + up_proxy = bus.get_object('org.freedesktop.UPower', + '/org/freedesktop/UPower') + upower = dbus.Interface(up_proxy, 'org.freedesktop.UPower') + + for device_path in upower.EnumerateDevices(): + device = bus.get_object('org.freedesktop.UPower', device_path) + device_prop_iface = dbus.Interface(device, dbus.PROPERTIES_IFACE) + device_type = device_prop_iface.Get(_UP_DEVICE_IFACE, 'Type') + if device_type == _UP_TYPE_BATTERY: + tray.add_device(DeviceView(device)) diff --git a/extensions/deviceicon/network.py b/extensions/deviceicon/network.py new file mode 100644 index 0000000..96713fb --- /dev/null +++ b/extensions/deviceicon/network.py @@ -0,0 +1,1054 @@ +# +# Copyright (C) 2008 One Laptop Per Child +# Copyright (C) 2009 Tomeu Vizoso, Simon Schampijer +# Copyright (C) 2009 Paraguay Educa, Martin Abente +# Copyright (C) 2010 Plan Ceibal, Daniel Castelo +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +import logging +import hashlib +import socket +import struct +import datetime +import time +import gtk +import glib +import gobject +import gconf +import dbus + +from sugar.graphics.icon import get_icon_state +from sugar.graphics import style +from sugar.graphics.palette import Palette +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.tray import TrayIcon +from sugar.graphics.menuitem import MenuItem +from sugar.graphics.icon import Icon +from sugar.graphics import xocolor +from sugar import profile + +from jarabe.model import network +from jarabe.frame.frameinvoker import FrameWidgetInvoker +from jarabe.view.pulsingicon import PulsingIcon + + +IP_ADDRESS_TEXT_TEMPLATE = _('IP address: %s') + +_GSM_STATE_NOT_READY = 0 +_GSM_STATE_DISCONNECTED = 1 +_GSM_STATE_CONNECTING = 2 +_GSM_STATE_CONNECTED = 3 +_GSM_STATE_FAILED = 4 + + +class WirelessPalette(Palette): + __gtype_name__ = 'SugarWirelessPalette' + + __gsignals__ = { + 'deactivate-connection': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([])), + } + + def __init__(self, primary_text): + Palette.__init__(self, label=primary_text) + + self._disconnect_item = None + + self._channel_label = gtk.Label() + self._channel_label.props.xalign = 0.0 + self._channel_label.show() + + self._ip_address_label = gtk.Label() + + self._info = gtk.VBox() + + def _padded(child, xalign=0, yalign=0.5): + padder = gtk.Alignment(xalign=xalign, yalign=yalign, + xscale=1, yscale=0.33) + padder.set_padding(style.DEFAULT_SPACING, + style.DEFAULT_SPACING, + style.DEFAULT_SPACING, + style.DEFAULT_SPACING) + padder.add(child) + return padder + + self._info.pack_start(_padded(self._channel_label)) + self._info.pack_start(_padded(self._ip_address_label)) + self._info.show_all() + + self._disconnect_item = MenuItem(_('Disconnect')) + icon = Icon(icon_size=gtk.ICON_SIZE_MENU, icon_name='media-eject') + self._disconnect_item.set_image(icon) + self._disconnect_item.connect('activate', + self.__disconnect_activate_cb) + self.menu.append(self._disconnect_item) + + def set_connecting(self): + label = glib.markup_escape_text(_('Connecting...')) + self.props.secondary_text = label + + def _set_connected(self, iaddress): + self.set_content(self._info) + self.props.secondary_text = glib.markup_escape_text(_('Connected')) + self._set_ip_address(iaddress) + self._disconnect_item.show() + + def set_connected_with_frequency(self, frequency, iaddress): + self._set_connected(iaddress) + self._set_frequency(frequency) + + def set_connected_with_channel(self, channel, iaddress): + self._set_connected(iaddress) + self._set_channel(channel) + + def set_disconnected(self): + label = glib.markup_escape_text(_('No wireless connection')) + self.props.primary_text = label + self.props.secondary_text = '' + self._disconnect_item.hide() + self.set_content(None) + + def __disconnect_activate_cb(self, menuitem): + self.emit('deactivate-connection') + + def _set_frequency(self, frequency): + channel = network.frequency_to_channel(frequency) + self._set_channel(channel) + + def _set_channel(self, channel): + self._channel_label.set_text('%s: %d' % (_('Channel'), channel)) + + def _set_ip_address(self, ip_address): + if ip_address is not None: + ip_address_text = IP_ADDRESS_TEXT_TEMPLATE % \ + socket.inet_ntoa(struct.pack('I', ip_address)) + else: + ip_address_text = "" + self._ip_address_label.set_text(ip_address_text) + + +class WiredPalette(Palette): + __gtype_name__ = 'SugarWiredPalette' + + def __init__(self): + label = glib.markup_escape_text(_('Wired Network')) + Palette.__init__(self, primary_text=label) + + self._speed_label = gtk.Label() + self._speed_label.props.xalign = 0.0 + self._speed_label.show() + + self._ip_address_label = gtk.Label() + + self._info = gtk.VBox() + + def _padded(child, xalign=0, yalign=0.5): + padder = gtk.Alignment(xalign=xalign, yalign=yalign, + xscale=1, yscale=0.33) + padder.set_padding(style.DEFAULT_SPACING, + style.DEFAULT_SPACING, + style.DEFAULT_SPACING, + style.DEFAULT_SPACING) + padder.add(child) + return padder + + self._info.pack_start(_padded(self._speed_label)) + self._info.pack_start(_padded(self._ip_address_label)) + self._info.show_all() + + self.set_content(self._info) + self.props.secondary_text = glib.markup_escape_text(_('Connected')) + + def set_connected(self, speed, iaddress): + self._speed_label.set_text('%s: %d Mb/s' % (_('Speed'), speed)) + self._set_ip_address(iaddress) + + def _inet_ntoa(self, iaddress): + address = ['%s' % ((iaddress >> i) % 256) for i in [0, 8, 16, 24]] + return '.'.join(address) + + def _set_ip_address(self, ip_address): + if ip_address is not None: + ip_address_text = IP_ADDRESS_TEXT_TEMPLATE % \ + socket.inet_ntoa(struct.pack('I', ip_address)) + else: + ip_address_text = "" + self._ip_address_label.set_text(ip_address_text) + + +class GsmPalette(Palette): + __gtype_name__ = 'SugarGsmPalette' + + __gsignals__ = { + 'gsm-connect': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + 'gsm-disconnect': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + } + + def __init__(self): + label = glib.markup_escape_text(_('Wireless modem')) + Palette.__init__(self, primary_text=label) + + self._current_state = None + self._failed_connection = False + + self._toggle_state_item = MenuItem('') + self._toggle_state_item.connect('activate', self.__toggle_state_cb) + self.menu.append(self._toggle_state_item) + self._toggle_state_item.show() + + self.info_box = gtk.VBox() + + self.error_title_label = gtk.Label("") + self.error_title_label.set_alignment(0, 0.5) + self.error_title_label.set_line_wrap(True) + self.info_box.pack_start(self.error_title_label) + self.error_description_label = gtk.Label("") + self.error_description_label.set_alignment(0, 0.5) + self.error_description_label.set_line_wrap(True) + self.info_box.pack_start(self.error_description_label) + + self.connection_info_box = gtk.HBox() + icon = Icon(icon_name='data-upload', icon_size=gtk.ICON_SIZE_MENU) + self.connection_info_box.pack_start(icon) + icon.show() + + self._data_label_up = gtk.Label() + self._data_label_up.props.xalign = 0.0 + label_alignment = self._add_widget_with_padding(self._data_label_up) + self.connection_info_box.pack_start(label_alignment) + self._data_label_up.show() + label_alignment.show() + + icon = Icon(icon_name='data-download', icon_size=gtk.ICON_SIZE_MENU) + self.connection_info_box.pack_start(icon) + icon.show() + self._data_label_down = gtk.Label() + self._data_label_down.props.xalign = 0.0 + label_alignment = self._add_widget_with_padding(self._data_label_down) + self.connection_info_box.pack_start(label_alignment) + self._data_label_down.show() + label_alignment.show() + + self.info_box.pack_start(self.connection_info_box) + + self.info_box.show() + self.set_content(self.info_box) + + self.set_state(_GSM_STATE_NOT_READY) + + def _add_widget_with_padding(self, child, xalign=0, yalign=0.5): + alignment = gtk.Alignment(xalign=xalign, yalign=yalign, + xscale=1, yscale=0.33) + alignment.set_padding(style.DEFAULT_SPACING, + style.DEFAULT_SPACING, + style.DEFAULT_SPACING, + style.DEFAULT_SPACING) + alignment.add(child) + return alignment + + def update_state(self, state, reason=0): + self._current_state = state + self._update_label_and_text(reason) + + def _update_label_and_text(self, reason=0): + if self._current_state == _GSM_STATE_NOT_READY: + self._toggle_state_item.get_child().set_label('...') + label = glib.markup_escape_text(_('Please wait...')) + self.props.secondary_text = label + + elif self._current_state == _GSM_STATE_DISCONNECTED: + if not self._failed_connection: + self._toggle_state_item.get_child().set_label(_('Connect')) + label = glib.markup_escape_text(_('Disconnected')) + self.props.secondary_text = label + icon = Icon(icon_name='dialog-ok', \ + icon_size=gtk.ICON_SIZE_MENU) + self._toggle_state_item.set_image(icon) + + elif self._current_state == _GSM_STATE_CONNECTING: + self._toggle_state_item.get_child().set_label(_('Cancel')) + label = glib.markup_escape_text(_('Connecting...')) + self.props.secondary_text = label + icon = Icon(icon_name='dialog-cancel', \ + icon_size=gtk.ICON_SIZE_MENU) + self._toggle_state_item.set_image(icon) + + elif self._current_state == _GSM_STATE_CONNECTED: + self._failed_connection = False + self._toggle_state_item.get_child().set_label(_('Disconnect')) + self.update_connection_time() + icon = Icon(icon_name='media-eject', \ + icon_size=gtk.ICON_SIZE_MENU) + self._toggle_state_item.set_image(icon) + + elif self._current_state == _GSM_STATE_FAILED: + message_error = self._get_error_by_nm_reason(reason) + self.add_alert(message_error[0], message_error[1]) + else: + raise ValueError('Invalid GSM state while updating label and ' \ + 'text, %s' % str(self._current_state)) + + def __toggle_state_cb(self, menuitem): + if self._current_state == _GSM_STATE_NOT_READY: + pass + elif self._current_state == _GSM_STATE_DISCONNECTED: + self.error_title_label.hide() + self.error_description_label.hide() + self.emit('gsm-connect') + elif self._current_state == _GSM_STATE_CONNECTING: + self.emit('gsm-disconnect') + elif self._current_state == _GSM_STATE_CONNECTED: + self.emit('gsm-disconnect') + else: + raise ValueError('Invalid GSM state while emitting signal, %s' % \ + str(self._current_state)) + + def add_alert(self, error, suggestion): + self._failed_connection = True + action = _('Try connection again') + self._toggle_state_item.get_child().set_label(action) + + title = _('Error: %s') % error + self.error_title_label.set_markup('%s' % title) + self.error_title_label.show() + + message = _('Suggestion: %s') % suggestion + self.error_description_label.set_text(message) + self.error_description_label.show() + + def update_connection_time(self, connection_time=None): + if connection_time is not None: + formatted_time = connection_time.strftime('%H:%M:%S') + else: + formatted_time = '00:00:00' + text = _('Connected for %s') % (formatted_time, ) + self.props.secondary_text = glib.markup_escape_text(text) + + def update_stats(self, in_bytes, out_bytes): + in_KBytes = in_bytes / 1024 + out_KBytes = out_bytes / 1024 + self._data_label_up.set_text(_('%d KB') % (out_KBytes)) + self._data_label_down.set_text(_('%d KB') % (in_KBytes)) + + def _get_error_by_nm_reason(self, reason): + if reason in [network.NM_DEVICE_STATE_REASON_NO_SECRETS, + network.NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED]: + message = _('Check your PIN/PUK configuration.') + elif reason in [network.NM_DEVICE_STATE_REASON_PPP_DISCONNECT, + network.NM_DEVICE_STATE_REASON_PPP_FAILED]: + message = _('Check your Access Point Name ' \ + '(APN) configuration') + elif reason in [network.NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER, + network.NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT]: + message = _('Check the Number configuration.') + elif reason == network.NM_DEVICE_STATE_REASON_CONFIG_FAILED: + message = _('Check your configuration.') + else: + message = '' + message_tuple = (network.get_error_by_reason(reason), message) + return message_tuple + + +class WirelessDeviceView(ToolButton): + + FRAME_POSITION_RELATIVE = 302 + + def __init__(self, device): + ToolButton.__init__(self) + + self._bus = dbus.SystemBus() + self._device = device + self._device_props = None + self._flags = 0 + self._ssid = '' + self._display_name = '' + self._mode = network.NM_802_11_MODE_UNKNOWN + self._strength = 0 + self._frequency = 0 + self._device_state = None + self._color = None + self._active_ap_op = None + + self._icon = PulsingIcon() + self._icon.props.icon_name = get_icon_state('network-wireless', 0) + self._inactive_color = xocolor.XoColor( + '%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + self._icon.props.pulse_color = self._inactive_color + self._icon.props.base_color = self._inactive_color + + self.set_icon_widget(self._icon) + self._icon.show() + + self.set_palette_invoker(FrameWidgetInvoker(self)) + self._palette = WirelessPalette(self._display_name) + self._palette.connect('deactivate-connection', + self.__deactivate_connection_cb) + self.set_palette(self._palette) + self._palette.set_group_id('frame') + + self._device_props = dbus.Interface(self._device, + dbus.PROPERTIES_IFACE) + self._device_props.GetAll(network.NM_DEVICE_IFACE, byte_arrays=True, + reply_handler=self.__get_device_props_reply_cb, + error_handler=self.__get_device_props_error_cb) + + self._device_props.Get(network.NM_WIRELESS_IFACE, 'ActiveAccessPoint', + reply_handler=self.__get_active_ap_reply_cb, + error_handler=self.__get_active_ap_error_cb) + + self._bus.add_signal_receiver(self.__state_changed_cb, + signal_name='StateChanged', + path=self._device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + + def disconnect(self): + self._bus.remove_signal_receiver(self.__state_changed_cb, + signal_name='StateChanged', + path=self._device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + + def __get_device_props_reply_cb(self, properties): + if 'State' in properties: + self._device_state = properties['State'] + self._update_state() + + def __get_device_props_error_cb(self, err): + logging.error('Error getting the device properties: %s', err) + + def __get_active_ap_reply_cb(self, active_ap_op): + if self._active_ap_op != active_ap_op: + if self._active_ap_op is not None: + self._bus.remove_signal_receiver( + self.__ap_properties_changed_cb, + signal_name='PropertiesChanged', + path=self._active_ap_op, + dbus_interface=network.NM_ACCESSPOINT_IFACE) + if active_ap_op == '/': + self._active_ap_op = None + return + self._active_ap_op = active_ap_op + active_ap = self._bus.get_object(network.NM_SERVICE, active_ap_op) + props = dbus.Interface(active_ap, dbus.PROPERTIES_IFACE) + + props.GetAll(network.NM_ACCESSPOINT_IFACE, byte_arrays=True, + reply_handler=self.__get_all_ap_props_reply_cb, + error_handler=self.__get_all_ap_props_error_cb) + + self._bus.add_signal_receiver(self.__ap_properties_changed_cb, + signal_name='PropertiesChanged', + path=self._active_ap_op, + dbus_interface=network.NM_ACCESSPOINT_IFACE) + + def __get_active_ap_error_cb(self, err): + logging.error('Error getting the active access point: %s', err) + + def __state_changed_cb(self, new_state, old_state, reason): + self._device_state = new_state + self._update_state() + self._device_props.Get(network.NM_WIRELESS_IFACE, 'ActiveAccessPoint', + reply_handler=self.__get_active_ap_reply_cb, + error_handler=self.__get_active_ap_error_cb) + + def __ap_properties_changed_cb(self, properties): + self._update_properties(properties) + + def _update_properties(self, properties): + if 'Mode' in properties: + self._mode = properties['Mode'] + self._color = None + if 'Ssid' in properties: + self._ssid = properties['Ssid'] + self._display_name = network.ssid_to_display_name(self._ssid) + self._color = None + if 'Strength' in properties: + self._strength = properties['Strength'] + if 'Flags' in properties: + self._flags = properties['Flags'] + if 'Frequency' in properties: + self._frequency = properties['Frequency'] + + if self._color == None: + if self._mode == network.NM_802_11_MODE_ADHOC and \ + network.is_sugar_adhoc_network(self._ssid): + self._color = profile.get_color() + else: + sha_hash = hashlib.sha1() + data = self._ssid + hex(self._flags) + sha_hash.update(data) + digest = hash(sha_hash.digest()) + index = digest % len(xocolor.colors) + + self._color = xocolor.XoColor('%s,%s' % + (xocolor.colors[index][0], + xocolor.colors[index][1])) + self._update() + + def __get_all_ap_props_reply_cb(self, properties): + self._update_properties(properties) + + def __get_all_ap_props_error_cb(self, err): + logging.error('Error getting the access point properties: %s', err) + + def _update(self): + if self._flags == network.NM_802_11_AP_FLAGS_PRIVACY: + self._icon.props.badge_name = 'emblem-locked' + else: + self._icon.props.badge_name = None + + label = glib.markup_escape_text(self._display_name) + self._palette.props.primary_text = label + + self._update_state() + self._update_color() + + def _update_state(self): + if self._active_ap_op is not None: + state = self._device_state + else: + state = network.NM_DEVICE_STATE_UNKNOWN + + if self._mode != network.NM_802_11_MODE_ADHOC and \ + network.is_sugar_adhoc_network(self._ssid) == False: + if state == network.NM_DEVICE_STATE_ACTIVATED: + icon_name = '%s-connected' % 'network-wireless' + else: + icon_name = 'network-wireless' + + icon_name = get_icon_state(icon_name, self._strength) + if icon_name: + self._icon.props.icon_name = icon_name + else: + channel = network.frequency_to_channel(self._frequency) + if state == network.NM_DEVICE_STATE_ACTIVATED: + self._icon.props.icon_name = 'network-adhoc-%s-connected' \ + % channel + else: + self._icon.props.icon_name = 'network-adhoc-%s' % channel + self._icon.props.base_color = profile.get_color() + + if (state >= network.NM_DEVICE_STATE_PREPARE) and \ + (state <= network.NM_DEVICE_STATE_IP_CONFIG): + self._palette.set_connecting() + self._icon.props.pulsing = True + elif state == network.NM_DEVICE_STATE_ACTIVATED: + address = self._device_props.Get(network.NM_DEVICE_IFACE, 'Ip4Address') + self._palette.set_connected_with_frequency(self._frequency, + address) + self._icon.props.pulsing = False + else: + self._icon.props.badge_name = None + self._icon.props.pulsing = False + self._icon.props.pulse_color = self._inactive_color + self._icon.props.base_color = self._inactive_color + self._palette.set_disconnected() + + def _update_color(self): + self._icon.props.base_color = self._color + + def __deactivate_connection_cb(self, palette, data=None): + network.disconnect_access_points([self._active_ap_op]) + + def __activate_reply_cb(self, connection): + logging.debug('Network created: %s', connection) + + def __activate_error_cb(self, err): + logging.debug('Failed to create network: %s', err) + + +class OlpcMeshDeviceView(ToolButton): + _ICON_NAME = 'network-mesh' + FRAME_POSITION_RELATIVE = 302 + + def __init__(self, device, state): + ToolButton.__init__(self) + + self._bus = dbus.SystemBus() + self._device = device + self._device_props = None + self._device_state = None + self._channel = 0 + + self._icon = PulsingIcon(icon_name=self._ICON_NAME) + self._inactive_color = xocolor.XoColor( + '%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + self._icon.props.pulse_color = profile.get_color() + self._icon.props.base_color = self._inactive_color + + self.set_icon_widget(self._icon) + self._icon.show() + + self.set_palette_invoker(FrameWidgetInvoker(self)) + title = _('Mesh Network') + self._palette = WirelessPalette(glib.markup_escape_text(title)) + self._palette.connect('deactivate-connection', + self.__deactivate_connection) + self.set_palette(self._palette) + self._palette.set_group_id('frame') + + self.update_state(state) + + self._device_props = dbus.Interface(self._device, + dbus.PROPERTIES_IFACE) + self._device_props.Get(network.NM_OLPC_MESH_IFACE, 'ActiveChannel', + reply_handler=self.__get_active_channel_reply_cb, + error_handler=self.__get_active_channel_error_cb) + + self._bus.add_signal_receiver(self.__wireless_properties_changed_cb, + signal_name='PropertiesChanged', + path=device.object_path, + dbus_interface=network.NM_OLPC_MESH_IFACE) + + def disconnect(self): + self._bus.remove_signal_receiver(self.__wireless_properties_changed_cb, + signal_name='PropertiesChanged', + path=self._device.object_path, + dbus_interface=network.NM_OLPC_MESH_IFACE) + + def __get_active_channel_reply_cb(self, channel): + self._channel = channel + self._update_text() + + def __get_active_channel_error_cb(self, err): + logging.error('Error getting the active channel: %s', err) + + def __state_changed_cb(self, new_state, old_state, reason): + self._device_state = new_state + self._update() + + def __wireless_properties_changed_cb(self, properties): + if 'ActiveChannel' in properties: + self._channel = properties['ActiveChannel'] + self._update_text() + + def _update_text(self): + channel = str(self._channel) + text = glib.markup_escape_text(_('Mesh Network %s') % (channel, )) + self._palette.props.primary_text = text + + def _update(self): + state = self._device_state + + if (state >= network.NM_DEVICE_STATE_PREPARE) and \ + (state <= network.NM_DEVICE_STATE_IP_CONFIG): + self._icon.props.base_color = self._inactive_color + self._icon.props.pulse_color = profile.get_color() + self._palette.set_connecting() + self._icon.props.pulsing = True + elif state == network.NM_DEVICE_STATE_ACTIVATED: + address = self._device_props.Get(network.NM_DEVICE_IFACE, 'Ip4Address') + self._palette.set_connected_with_channel(self._channel, address) + self._icon.props.base_color = profile.get_color() + self._icon.props.pulsing = False + self._update_text() + + def update_state(self, state): + self._device_state = state + self._update() + + def __deactivate_connection(self, palette, data=None): + obj = self._bus.get_object(network.NM_SERVICE, network.NM_PATH) + netmgr = dbus.Interface(obj, network.NM_IFACE) + netmgr_props = dbus.Interface(netmgr, dbus.PROPERTIES_IFACE) + active_connections_o = netmgr_props.Get(network.NM_IFACE, + 'ActiveConnections') + + for conn_o in active_connections_o: + # The connection path for a mesh connection is the device itself. + obj = self._bus.get_object(network.NM_IFACE, conn_o) + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE) + ap_op = props.Get(network.NM_ACTIVE_CONN_IFACE, 'SpecificObject') + + try: + obj = self._bus.get_object(network.NM_IFACE, ap_op) + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE) + device_type = props.Get(network.NM_DEVICE_IFACE, 'DeviceType') + if device_type == network.NM_DEVICE_TYPE_OLPC_MESH: + netmgr.DeactivateConnection(conn_o) + break + except dbus.exceptions.DBusException: + pass + + +class WiredDeviceView(TrayIcon): + + _ICON_NAME = 'network-wired' + FRAME_POSITION_RELATIVE = 301 + + def __init__(self, speed, address): + client = gconf.client_get_default() + color = xocolor.XoColor(client.get_string('/desktop/sugar/user/color')) + + TrayIcon.__init__(self, icon_name=self._ICON_NAME, xo_color=color) + + self.set_palette_invoker(FrameWidgetInvoker(self)) + self._palette = WiredPalette() + self.set_palette(self._palette) + self._palette.set_group_id('frame') + self._palette.set_connected(speed, address) + + +class GsmDeviceView(TrayIcon): + + _ICON_NAME = 'network-gsm' + FRAME_POSITION_RELATIVE = 303 + + def __init__(self, device): + self._connection_time_handler = None + self._connection_timestamp = 0 + + client = gconf.client_get_default() + color = xocolor.XoColor(client.get_string('/desktop/sugar/user/color')) + + TrayIcon.__init__(self, icon_name=self._ICON_NAME, xo_color=color) + + self._bus = dbus.SystemBus() + self._device = device + self._palette = None + self.set_palette_invoker(FrameWidgetInvoker(self)) + + self._bus.add_signal_receiver(self.__state_changed_cb, + signal_name='StateChanged', + path=self._device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + self._bus.add_signal_receiver(self.__ppp_stats_changed_cb, + signal_name='PppStats', + path=self._device.object_path, + dbus_interface=network.NM_MODEM_IFACE) + + def create_palette(self): + palette = GsmPalette() + + palette.set_group_id('frame') + palette.connect('gsm-connect', self.__gsm_connect_cb) + palette.connect('gsm-disconnect', self.__gsm_disconnect_cb) + + self._palette = palette + + props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE) + props.GetAll(network.NM_DEVICE_IFACE, byte_arrays=True, + reply_handler=self.__current_state_check_cb, + error_handler=self.__current_state_check_error_cb) + + return palette + + def __gsm_connect_cb(self, palette, data=None): + connection = network.find_gsm_connection() + if connection is not None: + connection.activate(self._device.object_path, + reply_handler=self.__connect_cb, + error_handler=self.__connect_error_cb) + else: + self._palette.add_alert(_('No GSM connection available.'), \ + _('Create a connection in the ' \ + 'control panel.')) + + def __connect_cb(self, active_connection): + logging.debug('Connected successfully to gsm device, %s', + active_connection) + + def __connect_error_cb(self, error): + raise RuntimeError('Error when connecting to gsm device, %s' % error) + + def __gsm_disconnect_cb(self, palette, data=None): + obj = self._bus.get_object(network.NM_SERVICE, network.NM_PATH) + netmgr = dbus.Interface(obj, network.NM_IFACE) + netmgr_props = dbus.Interface(netmgr, dbus.PROPERTIES_IFACE) + active_connections_o = netmgr_props.Get(network.NM_IFACE, 'ActiveConnections') + + for conn_o in active_connections_o: + obj = self._bus.get_object(network.NM_IFACE, conn_o) + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE) + devices = props.Get(network.NM_ACTIVE_CONN_IFACE, 'Devices') + if self._device.object_path in devices: + netmgr.DeactivateConnection( + conn_o, + reply_handler=self.__disconnect_cb, + error_handler=self.__disconnect_error_cb) + break + + def __disconnect_cb(self): + logging.debug('Disconnected successfully gsm device') + + def __disconnect_error_cb(self, error): + raise RuntimeError('Error when disconnecting gsm device, %s' % error) + + def __state_changed_cb(self, new_state, old_state, reason): + logging.debug('State: %s to %s, reason %s', old_state, + new_state, reason) + self._update_state(int(new_state), int(old_state), int(reason)) + + def __current_state_check_cb(self, properties): + self._update_state(int(properties['State']), 0, 0) + + def __current_state_check_error_cb(self, error): + raise RuntimeError('Error when checking gsm device state, %s' % error) + + def _update_state(self, state, old_state, reason): + gsm_state = None + + if state is network.NM_DEVICE_STATE_ACTIVATED: + gsm_state = _GSM_STATE_CONNECTED + connection = network.find_gsm_connection() + if connection is not None: + self._connection_timestamp = time.time() - \ + connection.get_settings('connection')['timestamp'] + self._connection_time_handler = gobject.timeout_add_seconds( \ + 1, self.__connection_timecount_cb) + self._palette.update_connection_time() + self._palette.update_stats(0, 0) + if self._palette is not None: + self._palette.connection_info_box.show() + + elif state is network.NM_DEVICE_STATE_DISCONNECTED: + gsm_state = _GSM_STATE_DISCONNECTED + self._connection_timestamp = 0 + if self._connection_time_handler is not None: + gobject.source_remove(self._connection_time_handler) + if self._palette is not None: + self._palette.connection_info_box.hide() + + elif state in [network.NM_DEVICE_STATE_UNMANAGED, + network.NM_DEVICE_STATE_UNAVAILABLE, + network.NM_DEVICE_STATE_UNKNOWN]: + gsm_state = _GSM_STATE_NOT_READY + + elif (state >= network.NM_DEVICE_STATE_PREPARE) and \ + (state <= network.NM_DEVICE_STATE_IP_CONFIG): + gsm_state = _GSM_STATE_CONNECTING + + elif state == network.NM_DEVICE_STATE_FAILED: + gsm_state = _GSM_STATE_FAILED + + if self._palette is not None: + self._palette.update_state(gsm_state, reason) + + def disconnect(self): + self._bus.remove_signal_receiver(self.__state_changed_cb, + signal_name='StateChanged', + path=self._device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + + def __ppp_stats_changed_cb(self, in_bytes, out_bytes): + self._palette.update_stats(in_bytes, out_bytes) + + def __connection_timecount_cb(self): + self._connection_timestamp = self._connection_timestamp + 1 + connection_time = \ + datetime.datetime.fromtimestamp(self._connection_timestamp) + self._palette.update_connection_time(connection_time) + return True + + +class WirelessDeviceObserver(object): + def __init__(self, device, tray): + self._device = device + self._device_view = None + self._tray = tray + self._device_view = WirelessDeviceView(self._device) + self._tray.add_device(self._device_view) + + def disconnect(self): + self._device_view.disconnect() + self._tray.remove_device(self._device_view) + del self._device_view + self._device_view = None + + +class MeshDeviceObserver(object): + def __init__(self, device, tray): + self._bus = dbus.SystemBus() + self._device = device + self._device_view = None + self._tray = tray + + props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE) + props.GetAll(network.NM_DEVICE_IFACE, byte_arrays=True, + reply_handler=self.__get_device_props_reply_cb, + error_handler=self.__get_device_props_error_cb) + + self._bus.add_signal_receiver(self.__state_changed_cb, + signal_name='StateChanged', + path=self._device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + + def _remove_device_view(self): + self._device_view.disconnect() + self._tray.remove_device(self._device_view) + self._device_view = None + + def disconnect(self): + if self._device_view is not None: + self._remove_device_view() + + self._bus.remove_signal_receiver(self.__state_changed_cb, + signal_name='StateChanged', + path=self._device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + + def __get_device_props_reply_cb(self, properties): + if 'State' in properties: + self._update_state(properties['State']) + + def __get_device_props_error_cb(self, err): + logging.error('Error getting the device properties: %s', err) + + def __state_changed_cb(self, new_state, old_state, reason): + self._update_state(new_state) + + def _update_state(self, state): + if (state >= network.NM_DEVICE_STATE_PREPARE) and \ + (state <= network.NM_DEVICE_STATE_ACTIVATED): + if self._device_view is not None: + self._device_view.update_state(state) + return + + self._device_view = OlpcMeshDeviceView(self._device, state) + self._tray.add_device(self._device_view) + else: + if self._device_view is not None: + self._remove_device_view() + + +class WiredDeviceObserver(object): + def __init__(self, device, tray): + self._bus = dbus.SystemBus() + self._device = device + self._device_state = None + self._device_view = None + self._tray = tray + + props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE) + props.GetAll(network.NM_DEVICE_IFACE, byte_arrays=True, + reply_handler=self.__get_device_props_reply_cb, + error_handler=self.__get_device_props_error_cb) + + self._bus.add_signal_receiver(self.__state_changed_cb, + signal_name='StateChanged', + path=self._device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + + def disconnect(self): + self._bus.remove_signal_receiver(self.__state_changed_cb, + signal_name='StateChanged', + path=self._device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + + def __get_device_props_reply_cb(self, properties): + if 'State' in properties: + self._update_state(properties['State']) + + def __get_device_props_error_cb(self, err): + logging.error('Error getting the device properties: %s', err) + + def __state_changed_cb(self, new_state, old_state, reason): + self._update_state(new_state) + + def _update_state(self, state): + if state == network.NM_DEVICE_STATE_ACTIVATED: + props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE) + address = props.Get(network.NM_DEVICE_IFACE, 'Ip4Address') + speed = props.Get(network.NM_WIRED_IFACE, 'Speed') + self._device_view = WiredDeviceView(speed, address) + self._tray.add_device(self._device_view) + else: + if self._device_view is not None: + self._tray.remove_device(self._device_view) + del self._device_view + self._device_view = None + + +class GsmDeviceObserver(object): + def __init__(self, device, tray): + self._device = device + self._device_view = None + self._tray = tray + + self._device_view = GsmDeviceView(device) + self._tray.add_device(self._device_view) + + def disconnect(self): + self._device_view.disconnect() + self._tray.remove_device(self._device_view) + self._device_view = None + + +class NetworkManagerObserver(object): + def __init__(self, tray): + self._bus = dbus.SystemBus() + self._devices = {} + self._netmgr = None + self._tray = tray + + try: + obj = self._bus.get_object(network.NM_SERVICE, network.NM_PATH) + self._netmgr = dbus.Interface(obj, network.NM_IFACE) + except dbus.DBusException: + logging.error('%s service not available', network.NM_SERVICE) + return + + self._netmgr.GetDevices(reply_handler=self.__get_devices_reply_cb, + error_handler=self.__get_devices_error_cb) + + self._bus.add_signal_receiver(self.__device_added_cb, + signal_name='DeviceAdded', + dbus_interface=network.NM_IFACE) + self._bus.add_signal_receiver(self.__device_removed_cb, + signal_name='DeviceRemoved', + dbus_interface=network.NM_IFACE) + + def __get_devices_reply_cb(self, devices): + for device_op in devices: + self._check_device(device_op) + + def __get_devices_error_cb(self, err): + logging.error('Failed to get devices: %s', err) + + def _check_device(self, device_op): + if device_op in self._devices: + return + + nm_device = self._bus.get_object(network.NM_SERVICE, device_op) + props = dbus.Interface(nm_device, dbus.PROPERTIES_IFACE) + + device_type = props.Get(network.NM_DEVICE_IFACE, 'DeviceType') + if device_type == network.NM_DEVICE_TYPE_ETHERNET: + device = WiredDeviceObserver(nm_device, self._tray) + self._devices[device_op] = device + elif device_type == network.NM_DEVICE_TYPE_WIFI: + device = WirelessDeviceObserver(nm_device, self._tray) + self._devices[device_op] = device + elif device_type == network.NM_DEVICE_TYPE_OLPC_MESH: + device = MeshDeviceObserver(nm_device, self._tray) + self._devices[device_op] = device + elif device_type == network.NM_DEVICE_TYPE_MODEM: + device = GsmDeviceObserver(nm_device, self._tray) + self._devices[device_op] = device + + def __device_added_cb(self, device_op): + self._check_device(device_op) + + def __device_removed_cb(self, device_op): + if device_op in self._devices: + device = self._devices[device_op] + device.disconnect() + del self._devices[device_op] + + +def setup(tray): + device_observer = NetworkManagerObserver(tray) diff --git a/extensions/deviceicon/speaker.py b/extensions/deviceicon/speaker.py new file mode 100644 index 0000000..d8b26be --- /dev/null +++ b/extensions/deviceicon/speaker.py @@ -0,0 +1,223 @@ +# Copyright (C) 2008 Martin Dengler +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +import gconf + +import glib +import gobject +import gtk + +from sugar.graphics import style +from sugar.graphics.icon import get_icon_state, Icon +from sugar.graphics.menuitem import MenuItem +from sugar.graphics.tray import TrayIcon +from sugar.graphics.palette import Palette +from sugar.graphics.xocolor import XoColor + +from jarabe.frame.frameinvoker import FrameWidgetInvoker +from jarabe.model import sound + +_ICON_NAME = 'speaker' + + +class DeviceView(TrayIcon): + + FRAME_POSITION_RELATIVE = 103 + + def __init__(self): + client = gconf.client_get_default() + self._color = XoColor(client.get_string('/desktop/sugar/user/color')) + + TrayIcon.__init__(self, icon_name=_ICON_NAME, xo_color=self._color) + + self.set_palette_invoker(FrameWidgetInvoker(self)) + + self._model = DeviceModel() + self._model.connect('notify::level', self.__speaker_status_changed_cb) + self._model.connect('notify::muted', self.__speaker_status_changed_cb) + + self.connect('expose-event', self.__expose_event_cb) + + self._icon_widget.connect('button-release-event', + self.__button_release_event_cb) + + self._update_info() + + def create_palette(self): + label = glib.markup_escape_text(_('My Speakers')) + palette = SpeakerPalette(label, model=self._model) + palette.set_group_id('frame') + return palette + + def _update_info(self): + name = _ICON_NAME + current_level = self._model.props.level + xo_color = self._color + + if self._model.props.muted: + name += '-muted' + xo_color = XoColor('%s,%s' % (style.COLOR_WHITE.get_svg(), + style.COLOR_WHITE.get_svg())) + + self.icon.props.icon_name = get_icon_state(name, current_level, + step=-1) + self.icon.props.xo_color = xo_color + + def __button_release_event_cb(self, widget, event): + if event.button != 1: + return False + + self.palette_invoker.notify_right_click() + return True + + def __expose_event_cb(self, *args): + self._update_info() + + def __speaker_status_changed_cb(self, pspec_, param_): + self._update_info() + + +class SpeakerPalette(Palette): + + def __init__(self, primary_text, model): + Palette.__init__(self, label=primary_text) + + self._model = model + + vbox = gtk.VBox() + self.set_content(vbox) + vbox.show() + + vol_step = sound.VOLUME_STEP + self._adjustment = gtk.Adjustment(value=self._model.props.level, + lower=0, + upper=100 + vol_step, + step_incr=vol_step, + page_incr=vol_step, + page_size=vol_step) + self._hscale = gtk.HScale(self._adjustment) + self._hscale.set_digits(0) + self._hscale.set_draw_value(False) + vbox.add(self._hscale) + self._hscale.show() + + self._mute_item = MenuItem('') + self._mute_icon = Icon(icon_size=gtk.ICON_SIZE_MENU) + self._mute_item.set_image(self._mute_icon) + self.menu.append(self._mute_item) + self._mute_item.show() + + self._adjustment_handler_id = \ + self._adjustment.connect('value_changed', + self.__adjustment_changed_cb) + + self._model_notify_level_handler_id = \ + self._model.connect('notify::level', self.__level_changed_cb) + self._model.connect('notify::muted', self.__muted_changed_cb) + + self._mute_item.connect('activate', self.__mute_activate_cb) + + self.connect('popup', self.__popup_cb) + + def _update_muted(self): + if self._model.props.muted: + mute_item_text = _('Unmute') + mute_item_icon_name = 'dialog-ok' + else: + mute_item_text = _('Mute') + mute_item_icon_name = 'dialog-cancel' + self._mute_item.get_child().set_text(mute_item_text) + self._mute_icon.props.icon_name = mute_item_icon_name + + def _update_level(self): + if self._adjustment.value != self._model.props.level: + self._adjustment.handler_block(self._adjustment_handler_id) + try: + self._adjustment.value = self._model.props.level + finally: + self._adjustment.handler_unblock(self._adjustment_handler_id) + + def __adjustment_changed_cb(self, adj_): + self._model.handler_block(self._model_notify_level_handler_id) + try: + self._model.props.level = self._adjustment.value + finally: + self._model.handler_unblock(self._model_notify_level_handler_id) + self._model.props.muted = self._adjustment.value == 0 + + def __level_changed_cb(self, pspec_, param_): + self._update_level() + + def __mute_activate_cb(self, menuitem_): + self._model.props.muted = not self._model.props.muted + + def __muted_changed_cb(self, pspec_, param_): + self._update_muted() + + def __popup_cb(self, palette_): + self._update_level() + self._update_muted() + + +class DeviceModel(gobject.GObject): + __gproperties__ = { + 'level': (int, None, None, 0, 100, 0, gobject.PARAM_READWRITE), + 'muted': (bool, None, None, False, gobject.PARAM_READWRITE), + } + + def __init__(self): + gobject.GObject.__init__(self) + + sound.muted_changed.connect(self.__muted_changed_cb) + sound.volume_changed.connect(self.__volume_changed_cb) + + def __muted_changed_cb(self, **kwargs): + self.notify('muted') + + def __volume_changed_cb(self, **kwargs): + self.notify('level') + + def _get_level(self): + return sound.get_volume() + + def _set_level(self, new_volume): + sound.set_volume(new_volume) + + def _get_muted(self): + return sound.get_muted() + + def _set_muted(self, mute): + sound.set_muted(mute) + + def get_type(self): + return 'speaker' + + def do_get_property(self, pspec): + if pspec.name == 'level': + return self._get_level() + elif pspec.name == 'muted': + return self._get_muted() + + def do_set_property(self, pspec, value): + if pspec.name == 'level': + self._set_level(value) + elif pspec.name == 'muted': + self._set_muted(value) + + +def setup(tray): + tray.add_device(DeviceView()) diff --git a/extensions/deviceicon/speech.py b/extensions/deviceicon/speech.py new file mode 100644 index 0000000..6b8f915 --- /dev/null +++ b/extensions/deviceicon/speech.py @@ -0,0 +1,148 @@ +# Copyright (C) 2011 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ + +import glib +import gtk +import gconf +import gobject + +from sugar.graphics.icon import Icon +from sugar.graphics.tray import TrayIcon +from sugar.graphics.palette import Palette +from sugar.graphics.xocolor import XoColor +from sugar.graphics.menuitem import MenuItem +from sugar.graphics import style + +from jarabe.frame.frameinvoker import FrameWidgetInvoker +from jarabe.model import speech + + +_ICON_NAME = 'microphone' + + +class SpeechDeviceView(TrayIcon): + + FRAME_POSITION_RELATIVE = 150 + + def __init__(self): + client = gconf.client_get_default() + self._color = XoColor(client.get_string('/desktop/sugar/user/color')) + TrayIcon.__init__(self, icon_name=_ICON_NAME, xo_color=self._color) + self.set_palette_invoker(FrameWidgetInvoker(self)) + self._manager = speech.get_speech_manager() + self._icon_widget.connect('button-release-event', + self.__button_release_event_cb) + + def create_palette(self): + label = glib.markup_escape_text(_('Speech')) + palette = SpeechPalette(label, manager=self._manager) + palette.set_group_id('frame') + return palette + + def __button_release_event_cb(self, widget, event): + self.palette_invoker.notify_right_click() + return True + + +class SpeechPalette(Palette): + + def __init__(self, primary_text, manager): + Palette.__init__(self, label=primary_text) + + self._manager = manager + self._manager.connect('play', self._set_menu_state, 'play') + self._manager.connect('stop', self._set_menu_state, 'stop') + self._manager.connect('pause', self._set_menu_state, 'pause') + + vbox = gtk.VBox() + self.set_content(vbox) + + self._play_icon = Icon(icon_name='player_play') + self._pause_icon = Icon(icon_name='player_pause') + self._play_pause_menu = MenuItem(text_label=_('Say selected text')) + self._play_pause_menu.set_image(self._play_icon) + self._play_pause_menu.connect('activate', self.__play_activated_cb) + self._play_pause_menu.show() + + self._stop_menu = MenuItem(icon_name='player_stop', + text_label=_('Stop playback')) + self._stop_menu.connect('activate', self.__stop_activated_cb) + self._stop_menu.set_sensitive(False) + self._stop_menu.show() + + self.menu.append(self._play_pause_menu) + self.menu.append(self._stop_menu) + + self._adj_pitch = gtk.Adjustment(value=self._manager.get_pitch(), + lower=self._manager.MIN_PITCH, + upper=self._manager.MAX_PITCH) + self._hscale_pitch = gtk.HScale(self._adj_pitch) + self._hscale_pitch.set_draw_value(False) + + vbox.pack_start(gtk.Label(_('Pitch')), padding=style.DEFAULT_PADDING) + vbox.pack_start(self._hscale_pitch) + + self._adj_rate = gtk.Adjustment(value=self._manager.get_rate(), + lower=self._manager.MIN_RATE, + upper=self._manager.MAX_RATE) + self._hscale_rate = gtk.HScale(self._adj_rate) + self._hscale_rate.set_draw_value(False) + + vbox.pack_start(gtk.Label(_('Rate')), padding=style.DEFAULT_PADDING) + vbox.pack_start(self._hscale_rate) + vbox.show_all() + + self._adj_pitch.connect('value_changed', self.__adj_pitch_changed_cb) + self._adj_rate.connect('value_changed', self.__adj_rate_changed_cb) + + def __adj_pitch_changed_cb(self, adjustement): + self._manager.set_pitch(int(adjustement.value)) + + def __adj_rate_changed_cb(self, adjustement): + self._manager.set_rate(int(adjustement.value)) + + def __play_activated_cb(self, widget): + if self._manager.is_paused: + self._manager.restart() + elif not self._manager.is_playing: + self._manager.say_selected_text() + else: + self._manager.pause() + + def __stop_activated_cb(self, widget): + self._manager.stop() + + def _set_menu_state(self, manager, signal): + if signal == 'play': + self._play_pause_menu.set_image(self._pause_icon) + self._play_pause_menu.set_label(_('Pause playback')) + self._stop_menu.set_sensitive(True) + + elif signal == 'pause': + self._play_pause_menu.set_image(self._play_icon) + self._play_pause_menu.set_label(_('Say selected text')) + self._stop_menu.set_sensitive(True) + + elif signal == 'stop': + self._play_pause_menu.set_image(self._play_icon) + self._play_pause_menu.set_label(_('Say selected text')) + self._stop_menu.set_sensitive(False) + + +def setup(tray): + tray.add_device(SpeechDeviceView()) diff --git a/extensions/deviceicon/touchpad.py b/extensions/deviceicon/touchpad.py new file mode 100644 index 0000000..150e8dc --- /dev/null +++ b/extensions/deviceicon/touchpad.py @@ -0,0 +1,146 @@ +# Copyright (C) 2010, Walter Bender, Sugar Labs +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +from gettext import gettext as _ +import os + +import gtk +import gconf +import glib + +import logging + +from sugar.graphics.tray import TrayIcon +from sugar.graphics.xocolor import XoColor +from sugar.graphics.palette import Palette +from sugar.graphics import style + +from jarabe.frame.frameinvoker import FrameWidgetInvoker + +TOUCHPAD_MODE_MOUSE = 'mouse' +TOUCHPAD_MODE_PENTABLET = 'pentablet' + +TOUCHPAD_MODES = (TOUCHPAD_MODE_MOUSE, TOUCHPAD_MODE_PENTABLET) +STATUS_TEXT = (_('finger'), _('stylus')) +STATUS_ICON = ('touchpad-capacitive', 'touchpad-resistive') + +# NODE_PATH is used to communicate with the touchpad device. +NODE_PATH = '/sys/devices/platform/i8042/serio1/hgpk_mode' + + +class DeviceView(TrayIcon): + """ Manage the touchpad mode from the device palette on the Frame. """ + + FRAME_POSITION_RELATIVE = 500 + + def __init__(self): + """ Create the icon that represents the touchpad. """ + icon_name = STATUS_ICON[_read_touchpad_mode()] + + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + TrayIcon.__init__(self, icon_name=icon_name, xo_color=color) + + self.set_palette_invoker(FrameWidgetInvoker(self)) + self.connect('button-release-event', self.__button_release_event_cb) + + def create_palette(self): + """ Create a palette for this icon; called by the Sugar framework + when a palette needs to be displayed. """ + label = glib.markup_escape_text(_('My touchpad')) + self.palette = ResourcePalette(label, self.icon) + self.palette.set_group_id('frame') + return self.palette + + def __button_release_event_cb(self, widget, event): + """ Callback for button release event; used to invoke touchpad-mode + change. """ + self.palette.toggle_mode() + return True + + +class ResourcePalette(Palette): + """ Palette attached to the decive icon that represents the touchpas. """ + + def __init__(self, primary_text, icon): + """ Create the palette and initilize with current touchpad status. """ + Palette.__init__(self, label=primary_text) + + self._icon = icon + + vbox = gtk.VBox() + self.set_content(vbox) + + self._status_text = gtk.Label() + vbox.pack_start(self._status_text, padding=style.DEFAULT_PADDING) + self._status_text.show() + + vbox.show() + + self._mode = _read_touchpad_mode() + self._update() + + def _update(self): + """ Update the label and icon based on the current mode. """ + self._status_text.set_label(STATUS_TEXT[self._mode]) + self._icon.props.icon_name = STATUS_ICON[self._mode] + + def toggle_mode(self): + """ Toggle the touchpad mode. """ + self._mode = 1 - self._mode + _write_touchpad_mode(self._mode) + self._update() + + +def setup(tray): + """ Initialize the devic icon; called by the shell when initializing the + Frame. """ + if os.path.exists(NODE_PATH): + tray.add_device(DeviceView()) + _write_touchpad_mode_str(TOUCHPAD_MODE_MOUSE) + + +def _read_touchpad_mode_str(): + """ Read the touchpad mode string from the node path. """ + node_file_handle = open(NODE_PATH, 'r') + text = node_file_handle.read().strip().lower() + node_file_handle.close() + return text + + +def _read_touchpad_mode(): + """ Read the touchpad mode and return the mode index. """ + mode_str = _read_touchpad_mode_str() + if mode_str not in TOUCHPAD_MODES: + return None + return TOUCHPAD_MODES.index(mode_str) + + +def _write_touchpad_mode_str(mode_str): + """ Write the touchpad mode to the node path. """ + try: + node_file_handle = open(NODE_PATH, 'w') + except IOError, e: + logging.error('Error opening %s for writing: %s', NODE_PATH, e) + return + node_file_handle.write(mode_str) + node_file_handle.close() + + +def _write_touchpad_mode(mode_num): + """ Look up the mode (by index) and write to node path. """ + return _write_touchpad_mode_str(TOUCHPAD_MODES[mode_num]) diff --git a/extensions/deviceicon/volume.py b/extensions/deviceicon/volume.py new file mode 100644 index 0000000..ea2377d --- /dev/null +++ b/extensions/deviceicon/volume.py @@ -0,0 +1,130 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import gobject +import gio +import gtk +import gconf + +from sugar.graphics.tray import TrayIcon +from sugar.graphics.xocolor import XoColor + +from jarabe.journal import journalactivity +from jarabe.view.palettes import VolumePalette +from jarabe.frame.frameinvoker import FrameWidgetInvoker + + +_icons = {} + + +class DeviceView(TrayIcon): + + FRAME_POSITION_RELATIVE = 500 + + def __init__(self, mount): + + self._mount = mount + + icon_name = None + icon_theme = gtk.icon_theme_get_default() + for icon_name in self._mount.get_icon().props.names: + icon_info = icon_theme.lookup_icon(icon_name, + gtk.ICON_SIZE_LARGE_TOOLBAR, 0) + if icon_info is not None: + break + + if icon_name is None: + icon_name = 'drive' + + # TODO: retrieve the colors from the owner of the device + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + + TrayIcon.__init__(self, icon_name=icon_name, xo_color=color) + + self.set_palette_invoker(FrameWidgetInvoker(self)) + + self.connect('button-release-event', self.__button_release_event_cb) + + def create_palette(self): + palette = VolumePalette(self._mount) + palette.set_group_id('frame') + return palette + + def __button_release_event_cb(self, widget, event): + journal = journalactivity.get_journal() + journal.set_active_volume(self._mount) + journal.reveal() + return True + + +def setup(tray): + gobject.idle_add(_setup_volumes, tray) + + +def _setup_volumes(tray): + volume_monitor = gio.volume_monitor_get() + + for volume in volume_monitor.get_volumes(): + _mount(volume, tray) + + for mount in volume_monitor.get_mounts(): + _add_device(mount, tray) + + volume_monitor.connect('volume-added', _volume_added_cb, tray) + volume_monitor.connect('mount-added', _mount_added_cb, tray) + volume_monitor.connect('mount-removed', _mount_removed_cb, tray) + + +def _volume_added_cb(volume_monitor, volume, tray): + _mount(volume, tray) + + +def _mount(volume, tray): + # Follow Nautilus behaviour here + # since it has the same issue with removable device + # and it would be good to not invent our own workflow + if hasattr(volume, 'should_automount') and not volume.should_automount(): + return + + #TODO: should be done by some other process, like gvfs-hal-volume-monitor + #TODO: use volume.should_automount() when it gets into pygtk + if volume.get_mount() is None and volume.can_mount(): + #TODO: pass None as mount_operation, or better, SugarMountOperation + volume.mount(gtk.MountOperation(tray.get_toplevel()), _mount_cb) + + +def _mount_cb(volume, result): + logging.debug('_mount_cb %r %r', volume, result) + volume.mount_finish(result) + + +def _mount_added_cb(volume_monitor, mount, tray): + _add_device(mount, tray) + + +def _mount_removed_cb(volume_monitor, mount, tray): + icon = _icons[mount] + tray.remove_device(icon) + del _icons[mount] + + +def _add_device(mount, tray): + icon = DeviceView(mount) + _icons[mount] = icon + tray.add_device(icon) diff --git a/extensions/globalkey/Makefile.am b/extensions/globalkey/Makefile.am new file mode 100644 index 0000000..b6cbbd6 --- /dev/null +++ b/extensions/globalkey/Makefile.am @@ -0,0 +1,7 @@ +sugardir = $(pkgdatadir)/extensions/globalkey + +sugar_PYTHON = \ + __init__.py \ + screenshot.py \ + speech.py \ + viewsource.py diff --git a/extensions/globalkey/Makefile.in b/extensions/globalkey/Makefile.in new file mode 100644 index 0000000..b0a4128 --- /dev/null +++ b/extensions/globalkey/Makefile.in @@ -0,0 +1,443 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = extensions/globalkey +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pkgdatadir)/extensions/globalkey +sugar_PYTHON = \ + __init__.py \ + screenshot.py \ + speech.py \ + viewsource.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/globalkey/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/globalkey/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/extensions/globalkey/__init__.py b/extensions/globalkey/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/extensions/globalkey/__init__.py diff --git a/extensions/globalkey/screenshot.py b/extensions/globalkey/screenshot.py new file mode 100644 index 0000000..0afe964 --- /dev/null +++ b/extensions/globalkey/screenshot.py @@ -0,0 +1,101 @@ +# Copyright (C) 2008 One Laptop Per Child +# Copyright (C) 2009 Simon Schampijer, James Zaki +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import tempfile +from gettext import gettext as _ + +import gtk +import gconf +import dbus + +from sugar.datastore import datastore +from sugar.graphics import style +from sugar import env +from jarabe.model import shell + +BOUND_KEYS = ['1', 'Print'] + + +def handle_key_press(key): + tmp_dir = os.path.join(env.get_profile_path(), 'data') + fd, file_path = tempfile.mkstemp(dir=tmp_dir) + os.close(fd) + + window = gtk.gdk.get_default_root_window() + width, height = window.get_size() + x_orig, y_orig = window.get_origin() + + screenshot = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, has_alpha=False, + bits_per_sample=8, width=width, + height=height) + screenshot.get_from_drawable(window, window.get_colormap(), x_orig, + y_orig, 0, 0, width, height) + screenshot.save(file_path, 'png') + + client = gconf.client_get_default() + color = client.get_string('/desktop/sugar/user/color') + + content_title = None + shell_model = shell.get_model() + zoom_level = shell_model.zoom_level + + # TRANS: Nouns of what a screenshot contains + if zoom_level == shell_model.ZOOM_MESH: + content_title = _('Mesh') + elif zoom_level == shell_model.ZOOM_GROUP: + content_title = _('Group') + elif zoom_level == shell_model.ZOOM_HOME: + content_title = _('Home') + elif zoom_level == shell_model.ZOOM_ACTIVITY: + activity = shell_model.get_active_activity() + if activity != None: + content_title = activity.get_title() + if content_title == None: + content_title = _('Activity') + + if content_title is None: + title = _('Screenshot') + else: + title = _('Screenshot of \"%s\"') % content_title + + jobject = datastore.create() + try: + jobject.metadata['title'] = title + jobject.metadata['keep'] = '0' + jobject.metadata['buddies'] = '' + jobject.metadata['preview'] = _get_preview_data(screenshot) + jobject.metadata['icon-color'] = color + jobject.metadata['mime_type'] = 'image/png' + jobject.file_path = file_path + datastore.write(jobject, transfer_ownership=True) + finally: + jobject.destroy() + del jobject + + +def _get_preview_data(screenshot): + preview = screenshot.scale_simple(style.zoom(300), style.zoom(225), + gtk.gdk.INTERP_BILINEAR) + preview_data = [] + + def save_func(buf, data): + data.append(buf) + + preview.save_to_callback(save_func, 'png', user_data=preview_data) + + return dbus.ByteArray(''.join(preview_data)) diff --git a/extensions/globalkey/speech.py b/extensions/globalkey/speech.py new file mode 100644 index 0000000..2879b69 --- /dev/null +++ b/extensions/globalkey/speech.py @@ -0,0 +1,29 @@ +# Copyright (C) 2011 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from jarabe.model import speech + +BOUND_KEYS = ['s'] + + +def handle_key_press(key): + manager = speech.get_speech_manager() + if manager.is_paused: + manager.restart() + elif not manager.is_playing: + manager.say_selected_text() + else: + manager.pause() diff --git a/extensions/globalkey/viewsource.py b/extensions/globalkey/viewsource.py new file mode 100644 index 0000000..e0f5ef8 --- /dev/null +++ b/extensions/globalkey/viewsource.py @@ -0,0 +1,29 @@ +# Copyright (C) 2008 One Laptop Per Child +# Copyright (C) 2009 Tomeu Vizoso, Simon Schampijer +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from jarabe.view.viewsource import setup_view_source +from jarabe.model import shell + + +BOUND_KEYS = ['XF86KbdLightOnOff', 'v'] + + +def handle_key_press(key): + shell_model = shell.get_model() + activity = shell_model.get_active_activity() + + setup_view_source(activity) diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..a9244eb --- /dev/null +++ b/install-sh @@ -0,0 +1,527 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2011-01-19.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# 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 +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + # Protect names problematic for `test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for `test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for `test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/intltool-extract.in b/intltool-extract.in new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/intltool-extract.in diff --git a/intltool-merge.in b/intltool-merge.in new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/intltool-merge.in diff --git a/intltool-update.in b/intltool-update.in new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/intltool-update.in diff --git a/missing b/missing new file mode 100755 index 0000000..86a8fc3 --- /dev/null +++ b/missing @@ -0,0 +1,331 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2012-01-06.13; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# 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 2, 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 . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG=\${$#} + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG=\${$#} + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/po/ChangeLog b/po/ChangeLog new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/po/ChangeLog diff --git a/po/Makefile.in.in b/po/Makefile.in.in new file mode 100644 index 0000000..06a8cfe --- /dev/null +++ b/po/Makefile.in.in @@ -0,0 +1,222 @@ +# Makefile for program source directory in GNU NLS utilities package. +# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper +# Copyright (C) 2004-2008 Rodney Dawes +# +# This file may be copied and used freely without restrictions. It may +# be used in projects which are not available under a GNU Public License, +# but which still want to provide support for the GNU gettext functionality. +# +# - Modified by Owen Taylor to use GETTEXT_PACKAGE +# instead of PACKAGE and to look for po2tbl in ./ not in intl/ +# +# - Modified by jacob berkman to install +# Makefile.in.in and po2tbl.sed.in for use with glib-gettextize +# +# - Modified by Rodney Dawes for use with intltool +# +# We have the following line for use by intltoolize: +# INTLTOOL_MAKEFILE + +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datadir = @datadir@ +datarootdir = @datarootdir@ +libdir = @libdir@ +DATADIRNAME = @DATADIRNAME@ +itlocaledir = $(prefix)/$(DATADIRNAME)/locale +subdir = po +install_sh = @install_sh@ +# Automake >= 1.8 provides @mkdir_p@. +# Until it can be supposed, use the safe fallback: +mkdir_p = $(install_sh) -d + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +GMSGFMT = @GMSGFMT@ +MSGFMT = @MSGFMT@ +XGETTEXT = @XGETTEXT@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +MSGMERGE = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist +GENPOT = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot + +ALL_LINGUAS = @ALL_LINGUAS@ + +PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi) + +USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi) + +USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) + +POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) + +DISTFILES = Makefile.in.in POTFILES.in $(POFILES) +EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS + +POTFILES = \ +# This comment gets stripped out + +CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) + +.SUFFIXES: +.SUFFIXES: .po .pox .gmo .mo .msg .cat + +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +INTLTOOL_V_MSGFMT = $(INTLTOOL__v_MSGFMT_$(V)) +INTLTOOL__v_MSGFMT_= $(INTLTOOL__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) +INTLTOOL__v_MSGFMT_0 = @echo " MSGFMT" $@; + +.po.pox: + $(MAKE) $(GETTEXT_PACKAGE).pot + $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox + +.po.mo: + $(INTLTOOL_V_MSGFMT)$(MSGFMT) -o $@ $< + +.po.gmo: + $(INTLTOOL_V_MSGFMT)file=`echo $* | sed 's,.*/,,'`.gmo \ + && rm -f $$file && $(GMSGFMT) -o $$file $< + +.po.cat: + sed -f ../intl/po2msg.sed < $< > $*.msg \ + && rm -f $@ && gencat $@ $*.msg + + +all: all-@USE_NLS@ + +all-yes: $(CATALOGS) +all-no: + +$(GETTEXT_PACKAGE).pot: $(POTFILES) + $(GENPOT) + +install: install-data +install-data: install-data-@USE_NLS@ +install-data-no: all +install-data-yes: all + linguas="$(USE_LINGUAS)"; \ + for lang in $$linguas; do \ + dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $$dir; \ + if test -r $$lang.gmo; then \ + $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ + echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ + echo "installing $(srcdir)/$$lang.gmo as" \ + "$$dir/$(GETTEXT_PACKAGE).mo"; \ + fi; \ + if test -r $$lang.gmo.m; then \ + $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ + echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ + else \ + if test -r $(srcdir)/$$lang.gmo.m ; then \ + $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ + $$dir/$(GETTEXT_PACKAGE).mo.m; \ + echo "installing $(srcdir)/$$lang.gmo.m as" \ + "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ + else \ + true; \ + fi; \ + fi; \ + done + +# Empty stubs to satisfy archaic automake needs +dvi info ctags tags CTAGS TAGS ID: + +# Define this as empty until I found a useful application. +install-exec installcheck: + +uninstall: + linguas="$(USE_LINGUAS)"; \ + for lang in $$linguas; do \ + rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ + rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ + done + +check: all $(GETTEXT_PACKAGE).pot + rm -f missing notexist + srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m + if [ -r missing -o -r notexist ]; then \ + exit 1; \ + fi + +mostlyclean: + rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp + rm -f .intltool-merge-cache + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES stamp-it + rm -f *.mo *.msg *.cat *.cat.m *.gmo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f Makefile.in.in + +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: $(DISTFILES) + dists="$(DISTFILES)"; \ + extra_dists="$(EXTRA_DISTFILES)"; \ + for file in $$extra_dists; do \ + test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ + done; \ + for file in $$dists; do \ + test -f $$file || file="$(srcdir)/$$file"; \ + ln $$file $(distdir) 2> /dev/null \ + || cp -p $$file $(distdir); \ + done + +update-po: Makefile + $(MAKE) $(GETTEXT_PACKAGE).pot + tmpdir=`pwd`; \ + linguas="$(USE_LINGUAS)"; \ + for lang in $$linguas; do \ + echo "$$lang:"; \ + result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ + if $$result; then \ + if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.gmo failed!"; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi; \ + done + +Makefile POTFILES: stamp-it + @if test ! -f $@; then \ + rm -f stamp-it; \ + $(MAKE) stamp-it; \ + fi + +stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ + $(SHELL) ./config.status + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/po/Makevars b/po/Makevars new file mode 100644 index 0000000..da4dba6 --- /dev/null +++ b/po/Makevars @@ -0,0 +1 @@ +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --keyword=C_:1c,2 --keyword=NC_:1c,2 --keyword=Q_ --keyword=g_dgettext:2 --keyword=g_dngettext:2,3 --keyword=g_dpgettext:2 --keyword=g_dpgettext2=2c,3 --keyword=pgettext:1c,2 diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..cc57345 --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,73 @@ +extensions/cpsection/aboutme/__init__.py +extensions/cpsection/aboutme/model.py +extensions/cpsection/aboutme/view.py +extensions/cpsection/aboutcomputer/__init__.py +extensions/cpsection/aboutcomputer/model.py +extensions/cpsection/aboutcomputer/view.py +extensions/cpsection/datetime/__init__.py +extensions/cpsection/datetime/model.py +extensions/cpsection/datetime/view.py +extensions/cpsection/frame/__init__.py +extensions/cpsection/frame/model.py +extensions/cpsection/frame/view.py +extensions/cpsection/keyboard/__init__.py +extensions/cpsection/keyboard/view.py +extensions/cpsection/language/__init__.py +extensions/cpsection/language/model.py +extensions/cpsection/language/view.py +extensions/cpsection/modemconfiguration/__init__.py +extensions/cpsection/modemconfiguration/view.py +extensions/cpsection/network/__init__.py +extensions/cpsection/network/model.py +extensions/cpsection/network/view.py +extensions/cpsection/power/__init__.py +extensions/cpsection/power/model.py +extensions/cpsection/power/view.py +extensions/cpsection/updater/__init__.py +extensions/cpsection/updater/view.py +extensions/deviceicon/battery.py +extensions/deviceicon/network.py +extensions/deviceicon/speech.py +extensions/deviceicon/speaker.py +extensions/deviceicon/touchpad.py +extensions/deviceicon/volume.py +extensions/globalkey/screenshot.py +data/sugar.schemas.in +src/jarabe/controlpanel/cmd.py +src/jarabe/controlpanel/gui.py +src/jarabe/controlpanel/sectionview.py +src/jarabe/controlpanel/toolbar.py +src/jarabe/desktop/activitieslist.py +src/jarabe/desktop/favoriteslayout.py +src/jarabe/desktop/favoritesview.py +src/jarabe/desktop/homebox.py +src/jarabe/desktop/keydialog.py +src/jarabe/desktop/meshbox.py +src/jarabe/desktop/networkviews.py +src/jarabe/desktop/schoolserver.py +src/jarabe/frame/activitiestray.py +src/jarabe/frame/clipboardmenu.py +src/jarabe/frame/clipboardobject.py +src/jarabe/frame/devicestray.py +src/jarabe/frame/zoomtoolbar.py +src/jarabe/intro/window.py +src/jarabe/journal/detailview.py +src/jarabe/journal/expandedentry.py +src/jarabe/journal/journalactivity.py +src/jarabe/journal/journaltoolbox.py +src/jarabe/journal/listmodel.py +src/jarabe/journal/listview.py +src/jarabe/journal/misc.py +src/jarabe/journal/model.py +src/jarabe/journal/modalalert.py +src/jarabe/journal/objectchooser.py +src/jarabe/journal/palettes.py +src/jarabe/journal/volumestoolbar.py +src/jarabe/model/network.py +src/jarabe/view/buddymenu.py +src/jarabe/view/keyhandler.py +src/jarabe/view/launcher.py +src/jarabe/view/palettes.py +src/jarabe/view/viewsource.py +src/jarabe/util/emulator.py + diff --git a/po/POTFILES.skip b/po/POTFILES.skip new file mode 100644 index 0000000..f199f9c --- /dev/null +++ b/po/POTFILES.skip @@ -0,0 +1 @@ +data/sugar.xml.in diff --git a/po/af.po b/po/af.po new file mode 100644 index 0000000..90c1fb2 --- /dev/null +++ b/po/af.po @@ -0,0 +1,1776 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 02:52+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: af\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 "Omtrent My" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Jy moet 'n naam inskryf." + +#: ../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 "Vout in gespesifiseerde kleure." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Kliek om jou kleur te verander:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Nie beskikbaar nie" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identiteit" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Seriële Nommer:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Sagteware" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Bou:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Fermware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +msgstr "" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Datem & Tyd" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "" + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Tydsone" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Raam" + +#: ../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 "nooit" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "dadelik" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s sekondes" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Aktiveerings Vertraging" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Hoekie" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Snykant" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Taal" + +#: ../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 "Jammer, ek praat nie '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Netwerk" + +#: ../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 "Vout in radio waarde: gebruik on/off." + +#: ../extensions/cpsection/network/model.py:152 +#, fuzzy +msgid "Error in specified argument use 0/1." +msgstr "Vout in waarde: gebruik 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Draadloos" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +msgid "Server:" +msgstr "Bediener:" + +#: ../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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Geen" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "Verwyder" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Baie min krag oor" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d oor" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Ontkoppel" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Koppel..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Gekoppel" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kanaal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Koppel" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Ontkoppel" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Kanselleer" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Groep" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Tuis" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Aktiwiteit" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "Om jou veranderings te gebruik moet jy Sugar herbegin.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Waarskuwing" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Veranderings het herbegin nodig" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Kanselleer veranderings" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Later" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Herbegin nou" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Klaar" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Reg" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Hou" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Uitwis" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Registreer" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Sleutel Tipe:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Geldigheidsverklaring Tipe:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Aangaan" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Aansluit" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Weier" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Verwyder" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Maak oop" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Maak oop met" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Buurt" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Naam:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Kliek om die kleur the verander:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Terug" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Volgende" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Titelloos" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Geen preview" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Geen datum" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Deelnemers:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Beskrywing:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Etikette:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Joernaal" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Soek" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Enige Tyd" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Vandag" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Sedert gister" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Verlede week" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Verlede maand" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Verlede jaar" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Enigiemand" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "My vriende" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "My klass" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Enigiets" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Begin" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Jou joernaal is leeg" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +#, fuzzy +msgid "No matching entries" +msgstr "Geen toepaslike inskrywings" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Jou joernaal is leeg" + +#: ../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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Kies 'n objek" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Toemaak" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Verwyder vriend" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Maak vriend" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Uitskakel" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Herbegin" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Nooi na %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Begin..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Stop" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Wys inhoud" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Verwyder" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/am.po b/po/am.po new file mode 100644 index 0000000..d9ef137 --- /dev/null +++ b/po/am.po @@ -0,0 +1,1771 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-09 02:45+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: am\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 +#, fuzzy +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:235 +msgid "Click to change your color:" +msgstr "ቀለም ለመቀየር ተጫኑ፡" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "ማንነት" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "የመለያ ቁጥር" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "ጫፍ" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "ይቅርታ መናገር አልችልም '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "ሚስጢራዊ ቃል፦" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "ቍጥር፦" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "ገመድ አልባ" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "የባትሪውን ሀይል ለመቀነስ ገመድ አልባዉን ሬድዮ አጥፋው" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "ሬድዮ" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "ሃይልን መቆጣጠሪያ" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "ጨርሻለሁ" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "ባትሪዬ" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "አስወግደው" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "ባትሪው በመሞላት ላይ ነው" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d ቀርቶታል" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "ባትሪው ተሞልቷል" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "የአይ ፒ አድራሻ ፡ %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "አቋርጠው" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "እየተገናኘ ነው..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "ተገናኝቷል" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "ጣቢያ" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "አገናኝ" + +#: ../extensions/deviceicon/network.py:276 +#, fuzzy +msgid "Disconnected" +msgstr "አቋርጠው" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "ተወው ሻር" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "ስህተት :%s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "ቡድን" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "ቤት" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "ስራ" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "ሹገር የቁጥጥር ገበታ፡ ማሰጠንቀቂያ፣ ተመሳሳይ ስም ያላቸው ክአንድ በላይ ምርጫ ተገኝቷል፡ %s module: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "ሹገር የቁጥጥር ገበታ፡ ቁልፍ =%s ያልተገኘ ምርጫ" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "ሹገር የቁጥጥር ገበታ:%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 "" + +#: ../src/jarabe/controlpanel/cmd.py:52 +#, fuzzy +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "የተለወጡትን ነገሮች ለመመልከት ሹገርን እንደገና ማስጀመር አለብዎት።\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "ማስጠንቀቂያ" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "የተለወጡትን ነገሮች ለመመልከት እንደገና ማስጀመር ያስፈልጋል" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "የተለወጡትን ነገሮች አጥፋ" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "በኋላ" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "እንደገና አስጀምረዉ" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "ጨርሻለሁ" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "እሺ" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "ዝርያ %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "እንዲጠፋ መፍቀድህን አረጋግጥ" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "እንዲጠፋ መፍቀድህን አረጋግጥ፡እስከመጨረሻው እንዲጠፋ ትፈልጋለህ %s?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "ማቆየት" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "አጥፋው" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "ምዝገባው አልተሳካም" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "ምዝገባዉ ተሳክቷል" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "መዝግበኝ" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "አሁን አረጋግጥ" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "የዝርዝር እይታ" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "የተመረጡት እይታ" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "የቁልፉ አይነት፡" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "የማረጋገጫ አይነት" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "ቀጥል" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "ተቀላቀል" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "አስወግደው" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "ክፈት" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "በዚህ ክፈተው" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "የጎረቤት እይታ" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "ስም፡" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "ቀለም ለመቀየር ተጫኑ፡" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "ወደ ኋላ ተመለስ" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "ቀጥል" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "ያልተሰየመ" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "ያልታወቀ" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "መግለጫ፦" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "መጽሔት" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "ስህተት" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "ጀምር" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "ጓደኛዬ አድርገው" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "አጥፋዉ" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "እንደገና አስጀምርዉ" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "ወደ እዚህ ጋብዘው %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "እየጀመረ ነዉ..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "አቁም" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "አስወግደው" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "ምንጭ" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/ar.po b/po/ar.po new file mode 100644 index 0000000..492c172 --- /dev/null +++ b/po/ar.po @@ -0,0 +1,1820 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# translation of sugar.po to Arabic +# Khaled Hosny , 2007, 2008, 2009, 2011. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +msgid "" +msgstr "" +"Project-Id-Version: sugar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-23 09:56+0200\n" +"Last-Translator: Khaled Hosny \n" +"Language-Team: Arabic \n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"X-Generator: Pootle 2.0.5\n" +"Nplurals=6; Plural=N==0 ? 0: n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 " +": n%100>=11 && n%100<=99 ? 4 : 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 "الحواف: اللون=%s التشبع=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "الحواف: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "الملء: اللون=%s التشبع=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "الملء: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "انقر لتغيير اللون:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "عن حاسوبي" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "غير مُتاح" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "المعرّف" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "الرقم التسلسلي:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "البرمجيات" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "البناء:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "سُكّر:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "البرمجيات المضمّنة:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "برمجية اللاسلكي المضمّنة:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "حقوق النشر والترخيص" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s ثوان" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "تأخير التفعيل" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "الركن" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "الحافة" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "لوحة المفاتيح" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "طراز لوحة المفاتيح" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "زر تغيير التخطيط" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "تعذّر الوصول إلى ‭~/.i18n‬. ستُنشأ إعدادات قياسية." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "تعذّر تحديد اللغة ذات الرمز=%s." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "آسف، لا أتحدث '%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 "" +"أضف اللغات حسب الترتيب الذي تفضله. إذا لم تتوفر ترجمة ستؤخذ من التالية في " +"القائمة." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "إعدادات المودم" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "اسم المستخدم:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "كلمة السّر:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "الرقم:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "اسم نقطة الاتصال (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "رقم المعرف الشخصي (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "خطأ في معامل الإذاعة المحدد، استخدم on/off." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "خطأ في المعامل المحدد، استخدم 0\\1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "اللاسلكي" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "عطل اللاسلكي لتوفير الطاقة" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "الإذاعة" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "تجاهل تأريخ الشبكة إن كنت تواجه مشاكل في الاتصال بالشبكة" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "تجاهل تأريخ الشبكة" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "التعاون" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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 "خطأ في معامل pm التلقائي، استخدم on/off." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "خطأ في معامل pm المتطرف، استخدم on/off." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "إدارة الطاقة" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "إدارة آلية للطاقة (تطيل من عمر البطارية)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "إدارة قصوى للطاقة (تعطّل اللاسلكي وتطيل عمر البطارية)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "تحديث البرمجيات" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "تحديث البرمجيات يُصلح الأعطال ويغلق الثغرات الأمنية ويوفر خصائص جديدة." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "يلتمس %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "ينزّل %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "يحدّث %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "برمجيات محدّثة" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "لا تحديثات لتثبيتها%.0s" +msgstr[1] "يمكنك تثبيت تحديث واحد%.0s" +msgstr[2] "يمكنك تثبيت تحديثين%.0s" +msgstr[3] "يمكنك تثبيت %s تحديثات" +msgstr[4] "يمكنك تثبيت %s تحديثا" +msgstr[5] "يمكنك تثبيت %s تحديث" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "يلتمس التحديثات..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "يُثبّت التحديثات..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "لم تُثبّت أي تحديثات%.0s" +msgstr[1] "ثُبّت تحديث واحد%.0s" +msgstr[2] "ثُبّت تحديثين%.0s" +msgstr[3] "ثُبّتت %s تحديثات" +msgstr[4] "ثُبّت %s تحديثا" +msgstr[5] "ثُبّت %s تحديث" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "ثبّت المختار" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "حجم التنزيل: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +#, python-format, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "من الإصدارة %(current)s إلى %(new)s (الحجم %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "صفر" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 ك.بايت" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f ك.بايت" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f م.بايت" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "بطاريتي" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "أُزيل" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "يشحن" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "باقي %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "مشحون" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "رقم (عنوان) الإنترنت: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "اقطع الاتصال" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "يتصّل..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "مُتّصل" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "لا اتصال لاسلكي" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "قناة" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "شبكة سلكية" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "السرعة" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "مودم لاسلكي" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "انتظر من فضلك..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "اتصل" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "مفصول" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "ألغِ" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "حاول الاتصال مرة أخرى" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "عطل: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "الاقتراح: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "اتّصل لمدة %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +#, python-format, python-format +msgid "%d KB" +msgstr "%d ك.بايت" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "راجع ضبط رقم المعرف الشخصي أو مفتاح القفل." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "راجع ضبط اسم نقطة الاتصال (APN)" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "راجع ضبط الرقم." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "راجع الإعدادات." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "شبكة عُروِيّة" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, python-format, python-format +msgid "Mesh Network %s" +msgstr "شبكة عُروِيّة %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "لا تتوفر أي اتصالات هاتف محمول." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "أنشي اتصالا من لوحة التحكم." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "الكلام" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "انطق النص المحدد" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "أوقف التشغيل" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "الحدة" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "المعدَّل" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "ألبِث التشغيل" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "سماعاتي" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "افتح" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "أصمِت" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "أصبع" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "قلم" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "لوحة اللمس" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "الشبكة العروية" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "المجموعة" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "المنزل" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "النشاط" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "لقطة شاشة" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "لقطة من \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"استخدم \"disabled\" (معطل) للسؤال عن الكنية عند البدء، أو \"system\" (النظام) " +"لاستخدام اسم الولوج إلى حساب النظام." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "الأدلة الإضافية التي يمكن أن تحتوي ترجمات محدّثة." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "مسار النسخ الاحتياطي" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "معرّف حزمة الأنشطة المحميّة" + +#: ../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 "" +"لون الأيقونة المستخدم في أنحاء سطح المكتب. يركب من لون الحواف ولون الملء " +"بنسق ألوان rbg. مثال: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "تأخير الركن" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "الخط المبدئي" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "حجم الخط المبدئي" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "الكنية المبدئية" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "تأخير تنشيط الإطار باستخدام الأركان." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "تأخير تنشيط الإطار باستخدام الحواف." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "المجلد الذي سيُبحث عن الترجمات فيه" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "تأخير الحافة" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "المنظور المفضل" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "طور الاستكمال المفضل" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "الخط المستَخدم في أرجاء سطح المكتب." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "حجم الخط المستَخدم في أرجاء سطح المكتب." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "إذا ضبطت \"صحيح\" فستتيح سكّر البحث عنا في خادوم جابِر." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "إذا ضبطت \"صحيح\" فستظهر سكّر خيار \"اخرج\"." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "إذا ضبطت \"صحيح\" فستظهر سكّر خيار \"أعد التشغيل\"." + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "خادوم جابِر" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "تخطيطات لوحة المفاتيح" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "طراز لوحة المفاتيح" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "خيارات لوحة المفاتيح" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "تنظيم المنظور المفضل." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "قائمة بتخطيطات لوحة المفاتيح، كل على الشكل ‪layout(variant)‬" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "قائمة بخيارات لوحة المفاتيح." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "الطاقة تلقائية" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "الطاقة متشددة" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "انشر في Gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "إعداد لكتم صوت الجهاز." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "أظهر الخروج" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "أظهر إعادة التشغيل" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "الصوت مُصمَت" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "طراز لوحة المفاتيح الذي سيستخدم" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "المنطقة الزمنية للنظام." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "مسار خادوم جابِر الذي سيستخدم." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "مسار مكان الحفظ الاحتياطي." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "لون المستخدم" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "اسم المستخدم" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "الاسم المستَخدم في أرجاء سطح المكتب." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "مستوى الصوت" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "مستوى شدة الصوت." + +#: ../data/sugar.schemas.in.h:66 +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 "لوحة تحكم سكر: تحذير، وُجد أكثر من خيار بنفس الاسم: %s الوحدة: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "لوحة تحكم سكر: key=%s ليس متاحا كخيار" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "لوحة تحكم سكر: %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 "" +"الاستخدام: لوحة تحكم سكر [ خيار ] مفتاح [ معاملات ... ]\n" +"لوحة تحكم لبيئة «سُكّر».\n" +"الخيارات: \n" +"-hاعرض رسالة المساعدة هذه \n" +"-lاسرد كل الخيارات المتاحة \n" +"-h keyاعرض معلومات عن هذا المفتاح \n" +"-g key اعرض القيمة الحالية للمفتاح \n" +"-s keyاضبط قيمة المفتاح \n" +"-c keyامسح القيمة الحالية للمفتاح \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "تحتاج لإعادة تشغيل «سُكّر» لتُطبق التغييرات.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "تحذير" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "تتطلب التغييرات إعادة التشغيل" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "ألغِ التغييرات" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "لاحقا" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "أعِد التشغيل الآن" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "تمّ" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "حسنا" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "الإصدارة %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "أكّد المسح" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "أكّد المسح: أتريد مسح %s نهائيا؟" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "احفظ" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "امسح" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "احذف المفضلة" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "اصنع مفضلة" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "حُر" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "حلقة" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "حلزون" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "صندوق" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "مثلث" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "فشل التسجيل" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "نجح التسجيل" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "الآن، أنت مسجّل في خادوم مدرستك." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "سجّل" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "أعِد التشغيل مرة أخرى" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "تحديث البرمجيات" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "حدّث نشاطاتك لتضمن التوافقية مع البرمجيات الجديدة" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "التمس الآن" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "منظور القائمة" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "‪‬2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "المنظور المفضل" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "‪1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "مطلوب مفتاح تعمية للشبكة اللاسلكية '%s'." + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "نوع المفتاح:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "نوع الاستيثاق:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "‏WPA و WPA2 شخصي" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "أمن اللاسلكي:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "استكمل" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "التحق" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "شبكة لا مركزية %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "شبكة عُروِيّة %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "ارفض" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%d بايت" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%d ك.بايت" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%d م.بايت" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "‏%s من %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, python-format +msgid "Transfer from %s" +msgstr "نقل من %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "اقبل" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "ارفض" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "ألغى الشخص الآخر نقل الملف" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, python-format +msgid "Transfer to %s" +msgstr "نقل إلى %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "أزِل" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "افتح" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "افتح باستخدام" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "قصاصة %s" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "الجِوَار" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "الاسم:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "انقر لتغيير اللون:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "السابق" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "التالي" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "بدون عنوان" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "لا معاينة" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "النوع: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "مجهول" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "التاريخ: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "الحجم: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "لا تاريخ" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "المشاركون:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "الوصف:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "الوُسوم:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "الدفتر" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "ابحث" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "أي وقت" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "اليوم" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "منذ أمس" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "الأسبوع الماضي" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "الشهر الماضي" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "السنة الماضية" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "أي شخص" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "أصدقائي" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "صفي" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "أي شيء" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "انسخ إلى" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "استنسخ" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "عطل أثناء نسخ المدخلة. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "عطل" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "ابدأ" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "رتّب حسب تاريخ التعديل" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "رتّب حسب تاريخ الإنشاء" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "رتّب حسب الحجم" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "رتّب المنظور" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "دفترك خالِ" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "مجلد المستندات فارغ" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "الجهاز فارغ" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "لا مدخلات مطابقة" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "امسح البحث" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "إصدارة أقدم من نشاط %s" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "أتريد الرجوع إلى الإصدارة الأقدم %s" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "أظهر الدفتر" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "اختر عنصرا" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "أغلق" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "استعد مع" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "ابدأ مع" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "لا نشاط لبدء المُدخلة" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "أرسل إلى" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "اعرض التفاصيل" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "لا يمكن إرسال المدخلات التي لا ملفات لها." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "لا يمكن نسخ المدخلات التي لا ملفات لها." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "الحافظة" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "لا يوجد أصدقاء" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "لم يُعثر على اتصال سليم" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "لا نشاط لاستكمال المُدخلة" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "المستندات" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d م.بايت خالية" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "سبب تغيّر حالة الجهاز غير معروف." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "تغيّر الحالة طبيعي." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "الجهاز مُدار الآن." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "لم يعُد الجهاز مُدارًا." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "تعذّر تجهيز الجهاز لإعداده." + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "تعذّر حجز إعدادات رقم الإنترنت (لا عناوين متاحة أو لانتهاء المهلة إلخ)." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "لم تعُد إعدادات رقم الإنترنت صالحة." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "الأسرار مطلوبة لكن لم تُعطَ." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "فشل الاتصال لانشغال الخط." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "فشل الاتصال لانعدام الحرارة بالخط." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "فشل الاتصال لانقطاع الخط." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "انتهت مهلة الاتصال." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "فشل الاتصال." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "فشلت تهيئة المودم." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "لن يبحث عن شبكة." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "رُفض تسجيل الشبكة." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "انتهت مهلة تسجيل الشبكة." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "فشل تسجيل شبكة الهاتف المحمول المطلوبة." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "البرمجيات المضمنة التي يحتاجها الجهاز غير متاحة." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "أزيل الجهاز." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "ذهب NetworkManager للنوم." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "أزيل أو اختفى الاتصال النشط مع الجهاز." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "طلب مستخدم أو عميل قطع الاتصال." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "تغيّر مزوّد\\رابط الجهاز." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "استُخدم الاتصال الموجود مع الجهاز." + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "”المتوسل“ متاح الآن." + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "تعذّر العثور على المودم." + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "فشل اتصال بلوتوث أو انتهت مدته." + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "غير مستخدمة." + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "أزل الصديق" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "اصنع صديق" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "أطفئ" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "أعد التشغيل" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "اخرج" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "إعداداتي" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "ادعُ إلى %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "فشل بدء %s" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "يبدأ..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "فشل بدء النشاط" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "اعرض المصدر" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "أوقف" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "ابدأ الآن" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "أظهر المحتويات" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "أزِل" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "مصدر السيرورة" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "المصدر" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "مصدر حزمة النشاط" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "مصدر عُدة الأدوات سكّر" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "اعرض مصدر: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "اعرض مصدر: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "سكّر في نافذة" diff --git a/po/aym.po b/po/aym.po new file mode 100644 index 0000000..a03a943 --- /dev/null +++ b/po/aym.po @@ -0,0 +1,1835 @@ +# 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 , YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.7.0\n" + +# "Acerca de mí" +#: ../extensions/cpsection/aboutme/__init__.py:24 +msgid "About Me" +msgstr "Luräwinakajata" + +# "Debe ingresar un nombre." +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Maya sutimpi chimpt'ma." + +# "borde: color=%s tonalidad=%s" +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "%s=sami %s=samichajata: qawaya" + +# "borde: %s" +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "...... %s qawaya" + +# "relleno: color=%s tonalidad=%s" +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "%s=sami %s=samichjata: phuqachata" + +# "relleno: %s" +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "%s : phuqachata" + +# "Error en modificadores de color especificados." +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Samichatanaka chiqachäwi pantjasa phuqachata." + +# "Error en colores especificados." +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Samichatanaka pantjasa phuqachata." + +# "Clic para cambiar su color:" +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Samichata mayjt'ayañataki q'upt'ma:" + +# "Acerca de mi computadora" +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Kumputaruraja tuqita" + +# "No disponible" +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Jani wakisiri" + +# "Identidad" +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Kankaña" + +# "Número de serie:" +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Jakhu chimpu:" + +# "Software" +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Wakichäwi" + +# "Ensamble:" +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Apthapiña:" + +# "Azúcar:" +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Misk'i:" + +# "Firmware:" +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +# "Firmware de la red inalámbrica:" +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Red inalámbrica wakisiri Firmware:" + +# "Licencia y derechos de autor" +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Wakichirina wakisiripa" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 wakichäwixa jumataki uchatawa. Sugar sata software wakichäwixa " +"taqitakiwa, ukaxa GNU kamachinakana qhananchasi, ukata maynita mayniru " +"t'uqiyañawa wakisi." + +# "Licencia completa:" +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Taqi wakisiri:" + +# "Fecha y hora" +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Urumpi urasampi" + +# "Error, zona horaria no existe." +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Pantjasiwa, pacha chinuwa chhaqi." + +# "Zona horaria" +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Pacha chinu suyu" + +# "Cuadro" +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Wakichata" + +# "El valor debe ser un número entero." +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Chanipaxa parisa jakhuñapawa." + +# "nunca" +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "janipuniwa" + +# "instantáneo" +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "mäpita" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s pacha ch'ich'inaka" + +# "Retraso de activación" +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Qhantayaña qhipartayäwi" + +# "Esquina" +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "K'uchu" + +# "Borde" +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Qawaya" + +# "Teclado" +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Qillqa q'upt'aña" + +# "Modelo de teclado" +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Kasta qillqaña" + +# "Tecla(s) para cambiar el diseño" +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Wakichatanaka mayjt'ayaña q'upt'aña" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Qillqaña yänaka" + +# "Idioma" +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Aru" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Janiwa wakisiti ~/.i18n. Taqina mantañapataki wakichata." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "código=%s aruxa janiwa amuyasiti." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Jichhasti, janiwa yatkti '%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 "" +"Arunaka wakisipanjama siqintma. Aru chanipa jani utjipana, siqina arkiri " +"aruwa chhijllasini." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "módem wakichäwi wakichaña" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"(3G) telefonía celular wakichäwinakaparu mantañatakixa akïri yatiyañanakawa " +"wakisi." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Apnaqirini sutipa:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Jist'araña:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Jakhu:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Qhantayaña chiqana sutipa (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Sapa mayni chimpupa jakhu (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Mayachasïwi" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Jani yatita kankaña." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Pantjatawa, rayru qhantayañatakixa akïri limt'ma on/off." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Panjatawa, wakisiriru katusa limt'ma 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Wayra taypita" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Wayra raryu jiwasa qhanayaña jakañapa ch'amanchañataki" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Raryu" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "Pantjata mistupana, mayachasïwi sartäwinaka amuyañäni" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Mayachasiña saräwinaka qhananchma" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Yanapaña" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Katuqirixa mayachasiña irptiri utankiwa; ukana taqina mayachasisa " +"yanapasipxi, qawata mayaru tukupxi." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Katuqiri:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Ch'ama" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Pantjata automatic pm amuyt'awipa janiwa/jisa." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Pantjata extreme pm amuyt'awipa janiwa/jisa." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "ch'amana apnaqawipa" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "kipqaki ch'ama apnaqawipa (batteria jaya jaqañataqi)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "Wali ch'ama apnaqawipa (radio apaqaña, batteria jaya jaqaña)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "amuyt'awi machaqaptayana" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"amuyt'awi machaqaptayañanaka pantjatanaka askichaña, pantjatanaka jarqayaña, " +"machaq amuyt'awinaka." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Yant'aski %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "q'ipiraski %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "amuyt'awimaxa machaqaptayatawa" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "machaqaptayañanaka thaqaski..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "machaqaptayaña ut'ayaski..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "machaqaptayaña ajllitaxiwa" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "ni maya" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "maya KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "nayana watiriyaja" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "apsuta" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Ch'ama uchaskiwa" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "pisi ch'amanikxiwa watiriyaxa" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +# "Cargada" +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "q'ipxaruta" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "thaki katjawi IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "jaljtayaña" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Mayachasa..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Mayachata" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "Jani mayachaña utjiti" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "thaki" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Chinu taypit mayachasiña" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Ratuki" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Mayachaña" + +#: ../extensions/deviceicon/network.py:276 +#, fuzzy +msgid "Disconnected" +msgstr "jaljtayaña" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Tukuyaña" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Pantjata: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Amukt'ayaña" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Qawaya Qhipt'awi" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +#, fuzzy +msgid "Keyboard layouts" +msgstr "Qillqaña yänaka" + +# "Modelo de teclado" +#: ../data/sugar.schemas.in.h:38 +#, fuzzy +msgid "Keyboard model" +msgstr "Kasta qillqaña" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +#, fuzzy +msgid "Done" +msgstr "ni maya" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +# "Guardar" +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Imaña" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Kimsa k'uchu" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +#, fuzzy +msgid "Software Update" +msgstr "amuyt'awi machaqaptayana" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Jutiri" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "Chhaqtayaña" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Uñantaña" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Wakisirinaka" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +# "Nombre:" +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Suti:" + +# "Clic para cambiar su color:" +#: ../src/jarabe/intro/window.py:133 +#, fuzzy +msgid "Click to change color:" +msgstr "Samichata mayjt'ayañataki q'upt'ma:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Jutiri" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Jani uñt'ata" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Uru chimpu: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Taña: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Sapüru luräwi" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Payaptayaña" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Pantjata" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Qalltawi" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Jiwayaña" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Laphi k'ipi" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Wasitata qalltaña" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Sayt'ayaña" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Chhaqtayaña" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Naktayiri" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Mis'ki wakichawi" + +#~ msgid "Personal Unblocking Key (PUK):" +#~ msgstr "Qhantayaña sayt'ayata jist'araña (PUK):" + +# "%(interface)s: %(version)s" +#, python-format +#~ msgid "%(interface)s: %(version)s" +#~ msgstr "%(interface)s: %(version)s" + +#, python-format +#~ msgid "%s" +#~ msgstr "%s" + +#, python-format +#~ msgid "%s (%s)" +#~ msgstr "%s (%s)" diff --git a/po/bg.po b/po/bg.po new file mode 100644 index 0000000..5dbf0d9 --- /dev/null +++ b/po/bg.po @@ -0,0 +1,1826 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 03:08+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: bg\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 "За мен" + +#: ../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 "очерк: цвят=%s нюанс=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "очерк: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "запълване: цвят=%s нюанс=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "запълване: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "Натиснете, за да смените цвета:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Не е наличен" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Идентичност" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Сериен номер:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Софтуер" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Издание:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Графична среда (Sugar):" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Микропрограма:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Права за разпространение и лиценз" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 е графичния интерфейс който виждате. Sugar е свободен софтуер, " +"разпространяван под GNU General Public License, и Вие можете свободно да го " +"променяте и/или разпространявате негови копия при определени условия описани " +"в лиценза." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s секунди" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Закъснение на показването" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Ъгъл" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Ръб" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "Отказан е достъп до ~/.i18n. Моля, създайте стандартни настойки." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Не може да бъде определен езикът с код=%s." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Съжалявам, но не говоря '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 +#, fuzzy +msgid "Error in specified argument use 0/1." +msgstr "Грешка в зададения аргумент, използвайте вкл/изкл." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Безжична" + +#: ../extensions/cpsection/network/view.py:69 +#, fuzzy +msgid "Turn off the wireless radio to save battery life" +msgstr "Изключете радиото за да пестите батерия" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Радио" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "Изтрийте мрежовата история, ако имате проблеми да се свържете към мрежа" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Изтриване на мрежовата история" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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 "Грешка в автоматично УЗ, използвайте on/off." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Грешка в агресивно УЗ, използвайте on/off." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Управление на захранването (УЗ)" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Автоматично УЗ (увеличава живота на батерията)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "Агресивно УЗ (изключва радиото, увеличава живота на батерията)" + +#: ../extensions/cpsection/updater/__init__.py:21 +#, fuzzy +msgid "Software update" +msgstr "Обновяване на софтуера" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "Затваряне" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Моята батерия" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "Премахване" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Зареждане" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "остават %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Заредена" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Отделяне..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Свързан" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Канал" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Свързване" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Без свързаност" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Отказ" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +# only temporarily +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Mesh мрежа" + +# only temporarily +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Mesh мрежа %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Моите високоговорители" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Пускане" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Заглушаване" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Mesh" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Група" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Начало" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Дейност" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Снимка на екрана" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "" +"sugar-control-panel: ВНИМАНИЕ, намерени са няколко опции с еднакво име: %s " +"модул: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "sugar-control-panel: ключ=%s - непозволена опция" + +#: ../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. +#. 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 "" +"Използване: sugar-control-panel [ опции ] ключ [ аргументи ... ] \n" +" Управление на работната среда. \n" +" Опции: \n" +" -h показване на помоща \n" +" -l списък на всички опции \n" +" -h ключ показване на информация за ключа \n" +" -g ключ прочитане на текущата стойност на ключа \n" +" -s ключ задаване на нова стойност на ключа \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Моля, рестартирайте графичната среда, за да влязат в сила промените.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Внимание" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Промените изискват рестарт" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Отмяна" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "По-късно" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Рестартиране" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Затваряне" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ок" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Потвърждаване на изтриването" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" +"Потвърждаване на изтриването: желаете ли да бъде изтрито завинаги занятитето " +"\"%s\"?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Запазване" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Изтриване" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Премахване от любимите" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Добавяне към любимите" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Разхвърлян" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Пръстен" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Спирала" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Кутия" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Триъгълник" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Проблем при регистрация" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Регистрацията е успешна" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Вече сте регистрирани при Вашия училищен сървър." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Регистриране" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Обновяване на софтуера" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "Обновете занятията си за да осигурите съвместимост с Вашия нов софтуер" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Проверка сега" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Списъчен изглед" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Любими занятия" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Тип ключ:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Тип удостоверяване:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Продължаване" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Присъединяване" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +# only temporarily +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Mesh мрежа %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Отказване" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Премахване" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Отваряне" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Отваряне с" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +# взето от руския превод +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Съседи" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Име:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Натиснете, за да смените цвета:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Назад" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Следващ" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Без заглавие" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Без преглед" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Без дата" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Участници:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Описание:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Етикети:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Дневник" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Търсене" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Произволна дата" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Днес" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "От вчера" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Миналата седмица" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Миналият месец" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Миналата година" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Всеки" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Моите приятели" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Моят клас" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Всичко" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Пускане" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Вашият дневник е празен" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +#, fuzzy +msgid "No matching entries" +msgstr "Няма съвпадащи записи " + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "Показване на дневника" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Избор на обект" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Затваряне" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d МБ свободно" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Изтриване на приятел" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Създаване на приятел" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Изключване" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Рестартиране" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Покани в %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Стартиране..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Стоп" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Показване на съдържанието" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Премахване" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" + +#, python-format +#~ msgid "%s" +#~ msgstr "%s" + +# TODO: Add "Start with" menu item +#~ msgid "Copy" +#~ msgstr "Копиране" diff --git a/po/bi.po b/po/bi.po new file mode 100644 index 0000000..844f1ff --- /dev/null +++ b/po/bi.po @@ -0,0 +1,1775 @@ +# 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 , YEAR. +# 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 , YEAR. +# 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 , YEAR. +# 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 , YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/bn.po b/po/bn.po new file mode 100644 index 0000000..8151b06 --- /dev/null +++ b/po/bn.po @@ -0,0 +1,1831 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: Update 1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:06+0200\n" +"Last-Translator: Chris \n" +"Language-Team: Bengali \n" +"Language: bn\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" +"X-Language: bn_BD\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 "স্ট্রোক: রং=%s হিউ=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "স্ট্রোক: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "ভরাট: রং=%s হিউ=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "ভরাট: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "রং পরিবর্তন করতে ক্লিক করুন:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "আমার কম্পিউটার সম্পর্কে" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "পাওয়া যায় নি" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "পরিচয়" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "ক্রমিক সংখ্যা:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "সফটওয়্যার" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "তৈরী করো:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "সুগার:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "ফার্মওয়্যার:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "তারবিহীন ফার্মওয়্যার:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "কপিরাইট এবং লাইসেন্স" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"সুগার হচ্ছে একটি গ্রাফিকাল ব্যবহারকারী ইন্টারফেস যেমনটি আপনি দেখছেন। সুগার " +"GNU জেনারেল পাবলিক লাইসেন্স এর আওতাধীন একটি মুক্ত সফটওয়্যার, এবং কিছু শর্ত " +"সাপেক্ষে আপনি এটি নিজের প্রয়োজনমতো পরিবর্তন করতে বা এর অনুলিপি বিতরন করতে " +"পারবেন।" + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s সেকেন্ড" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "কার্যকারিতার বিলম্ব" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "কোণ" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "কিনারা" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "কীবোর্ড" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "কীবোর্ড মডেল" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "বহির্বিন্যাস পরিবর্তনের কী" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "~/.i18n এ প্রবেশ করতে পারে নি। আদর্শ সেটিং তৈরি করুন।" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "কোড=%s এর জন্য কোন ভাষা নির্ধারণ করা যায় নি।" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "দুঃখিত আমি '%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 "" +"আপনার পছন্দ অনুসারে ভাষা সংযুক্ত করুন। যদি একটি অনুবাদ বিদ্যমান না হয়, " +"তালিকার পরবর্তীটি ব্যবহৃত হবে।" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "মডেমের কনফিগারেশন" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"একটি মোবাইল ব্রডব্যান্ড সংযোগকে সেলুলার (3G) নেটওয়ার্কে নির্ধারণ করতে " +"নিম্নের তথ্যাবলী প্রদান করতে হবে।" + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "ব্যবহারকারীর নাম:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "পাসওয়ার্ড:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "ক্রম:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "প্রবেশের পয়েন্ট নাম (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "ব্যক্তিগত পরিচয় নাম্বার (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "তারবিহীন" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "ব্যাটারী সাশ্রয়ের জন্য তারবিহীন বেতার বন্ধ করুন" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "বেতার" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "যদি আপনার সংযোগ পেতে অসুবিধা হয় তাহলে নেটওয়ার্কের ইতিহাস বাতিল করুন" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "নেটওয়ার্কের ইতিহাস বাতিল" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "সহযোগিতা" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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 "স্বয়ংক্রিয় pm আরগুমেন্টের ত্রুটি, চালু/বন্ধ ব্যবহার করুন।" + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "চূড়ান্ত pm আরগুমেন্টের ত্রুটি, চালু/বন্ধ ব্যবহার করুন।" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "বিদুৎ ব্যবস্থাপনা" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "স্বয়ংক্রিয় বিদুৎ ব্যবস্থাপনা (ব্যাটারির আয়ু বাড়ায়)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"সর্বোচ্চ বিদ্যুৎ ব্যবস্থাপনা (তারবিহীন বেতার নিষ্ক্রিয় করে, ব্যাটারির আয়ু " +"বাড়ায়)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "সফ্টওয়্যারের হালনাগাদ" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"সফ্টওয়্যারের হালনাগাদ ত্রুটিকে সঠিক করে, নিরাপত্তা আক্রম্যতা দূর করে, এবং " +"নতুন বৈশিষ্ট্য প্রদান করে।" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "পরীক্ষা করা হচ্ছে %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "ডাউনলোড করা হচ্ছে %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "হালনাগাদ করা হচ্ছে %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "আপনার সফ্টওয়্যারটি আধুনিক" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "আপনি %s হালনাগাদ ইনস্টল করতে পারেন" +msgstr[1] "আপনি %s হালনাগাদ ইনস্টল করতে পারেন" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "হালনাগাদ এর জন্য পরীক্ষা করা হচ্ছে..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "হালনাগাদ ইনস্টল করা হচ্ছে..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s হালনাগাদ ইনস্টল করা হয়েছে" +msgstr[1] "%s হালনাগাদ ইনস্টল করা হয়েছে" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "ইনস্টল নির্বাচিত" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "ডাউনলোড আকার: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "%(current)s সংস্করণ হতে %(new)s (Size: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "কোনটি না" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "১ কিবা" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f কিবা" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f মেবা" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "আমার ব্যাটারি" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "মুছে ফেলা হয়েছে" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "চার্জ করা হচ্ছে" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d বাকি আছে" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "চার্জ করা হয়েছে" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP ঠিকানা: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "সংযুক্ত করা হচ্ছে..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "সংযোগ স্থাপিত হয়েছে" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "চ্যানেল" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "তারযুক্ত নেটওয়ার্ক" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "গতি" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "তারবিহীন মডেম" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "অনুগ্রহ করে অপেক্ষা করুন..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "সংযুক্ত করুন" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "সংযোগ বিচ্ছিন্ন" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "বাতিল" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "পুনরায় সংযোগের চেষ্টা করুন" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "ত্রুটি: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "পরামর্শ: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "%s এর জন্য সংযুক্ত" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d কিবা" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "আপনার PIN/PUK কনফিগারেশন পরীক্ষা করুন।" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "আপনার প্রবেশেযোগ্য পয়েন্ট নামের (APN) কনফিগারেশন পরীক্ষা করুন" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "নাম্বার কনফিগারেশন পরীক্ষা করুন।" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "আপনার কনফিগারেশন পরীক্ষা করুন।" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "মেশ নেটওয়ার্ক" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "মেশ নেটওয়ার্ক %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "কোন GSM সংযোগ পাওয়া যায়নি।" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "কন্ট্রোল প্যানেলে একটি সংযোগ তৈরি করুন।" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "আমার স্পিকার" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "নিঃশব্দ নয়" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "নিঃশব্দ" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "আঙ্গুল" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "স্টাইলাস" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "আমার টাচপ্যাড" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "মেশ" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "দল" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "প্রধান" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "সক্রিয়তা" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "স্ক্রীণশট" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "\"%s\" এর স্ক্রিনশট" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"শুরু করার সময় নিকে জিজ্ঞাসা করার জন্য \"নিস্ক্রিয়\"; UNIX অ্যাকাউন্টের দীর্ঘ " +"নাম পুনরায় ব্যবহার করার জন্য \"সিস্টেম\"।" + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "অতিরিক্ত ডিরেক্টরিতে হালনাগাদকৃত অনুবাদ থাকে।" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "ব্যাকআপ URL" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "সুরক্ষিত কাজের আইডি একজায়গায় করা" + +#: ../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 "" +"ডেক্সটপ জুড়ে ব্যবহৃত হয় এমন XO আইকনের রং। এই স্ট্রিংটি রং এর আঁচড় এবং রঙের " +"ভরাটের সমন্বয়ে গঠিত হয়, ফরম্যাটটি হলো rbg রঙের। উদাহরণ: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "কোন বিলম্ব" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "পূর্বনির্ধারিত ফন্টের চেহারা" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "পূর্বনির্ধারিত ফন্টের আকার" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "পূর্বনির্ধারিত নিক" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "কোন ব্যবহার করে ফ্রেম সক্রিয়করণের বিলম্ব।" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "ফ্রেমের পার্শ্ববর্তী অংশ ব্যবহার করে ফ্রেম সক্রিয়করণের বিলম্ব।" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "অনুবাদ অনুসন্ধান করার জন্য ডিরেক্টরি" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "ফ্রেমের পাশের অংশের বিলম্ব" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "পছন্দনীয় বিন্যাস" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "পছন্দনীয় পুনরায় শুরু করার মোড" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "ডেক্সটপে ব্যবহৃত ব্যবহারকারীর নাম।" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "ডেক্সটপে ব্যবহৃত ব্যবহারকারীর নাম।" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"যদি TRUE হয় তাহলে সুগারের মাধ্যমে আমরা Jabber সার্ভারের অন্যান্য " +"ব্যবহারকারীকে অনুসন্ধান করতে পারি।" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "যদি সত্যি হয়, সুগার \"লগআউট\" অপশন প্রদর্শন করবে।" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "যদি সত্যি হয়, সুগার \"পুনরায় শুরু করা\" অপশন প্রদর্শন করবে।" + +#: ../data/sugar.schemas.in.h:35 +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 "" +"যদি সত্যি হয়, সুগার চ্যানেল 1,6 এবং 11 এর জন্য পূর্বনির্ধারিত অ্যাড হক " +"নেটওয়ার্ক প্রদর্শন করবে। যদি শুরু করার সময় সুগার কোনো \"জানা\" নেটওয়ার্ক না " +"দেখে তবে এটা অ্যাড হক নেটওয়ার্কে স্বয়ংক্রিয়ভাবে সংযুক্ত হয়।" + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Jabber সার্ভার" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "কীবোর্ড লেআউট" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "কীবোর্ড মডেল" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "কীবোর্ড অপশন" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "পছন্দনীয় ভিউ এর বিন্যাস।" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"কীবোর্ড লেআউটের তালিকা। ফরম বহির্বিন্যাসে (ভেরিয়েন্ট) প্রত্যেক প্রবেশ থাকতে " +"হবে।" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "কীবোর্ড অপশনের তালিকা।" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "স্বয়ংক্রিয় বিদ্যুৎ" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "সর্বোচ্চ পরিমান বিদ্যুৎ" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "গেজেটে প্রকাশ করো" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "শব্দের যন্ত্র নীরব করার জন্য সেটিং।" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "লগআউট প্রদর্শন" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "পুনরায় শুরু প্রদর্শন" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "সুগার এড-হক নেটওয়ার্ক প্রদর্শন" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "নিঃশব্দ করার হয়েছে" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "কীবোর্ড মডেলটি ব্যবহার করতে হবে" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "সিস্টেমের জন্য সময়অঞ্চলের সেটিং।" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "jabber সার্ভার ব্যবহারের জন্য URL।" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "ব্যাকআপ সংরক্ষণ করার জন্য URL।" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "ব্যবহারকারীর রং" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "ব্যবহারকারীর নাম" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "ডেক্সটপে ব্যবহৃত ব্যবহারকারীর নাম।" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "ব্যবহারকারী এ ধরণের কার্যকলাপ তালিকা প্রদর্শনের সময় মুছে ফেলে না।" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "ভলিউমের মাত্রা" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "শব্দ যন্ত্রের জন্য ভলিউমের মাত্রা।" + +#: ../data/sugar.schemas.in.h:66 +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 "" +"সুগার-কন্ট্রোল-প্যানেল: WARNING, একই নামের একাধিক অপশন খুঁজে পায়: %s মডিউল: " +"%r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "সুগার-কন্ট্রোল-প্যানেল: কী=%s বিদ্যমান কোনো অপশন নয়" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "সুগার-কন্ট্রোল-প্যানেল: %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 "" +"ব্যবহারবিধি: সুগার-কন্ট্রোল-প্যানেল [অপশন] কী [আরগুমেন্ট ...]\n" +" সুগার পরিবেশের কন্ট্রোল। \n" +" অপশন: \n" +" -h সহায়তা বর্তা প্রদদর্শন করে এবং প্রস্থান করে\n" +" -l বিদ্যমান সকল অপশন তালিকা বদ্ধ করে\n" +" -h কী কী সম্পর্কে তথ্য প্রদর্শন করে \n" +" -g কী কী এর বর্তমান মান পাওয়া যায়\n" +" -s কী কী এর বর্তমান মান নির্ধারণ করে \n" +" -c কী কী এর বর্তমান মান মুছে ফেলে\n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "তোমার পরিবর্তন কার্যকর করার জন্য সুগার পুনরায় চালু করতে হবে।\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "সতর্কবানী" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "পরিবর্তন করা হলে 'পুনরায় চালুকরণ' প্রয়োজন" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "পরিবর্তন বাতিল করো" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "পরবর্তীতে" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "এখনই পুনরায় চালু করো" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "করা হয়েছে" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "ঠিক আছে" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "সংস্করণ %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "মুছে ফেলা নিশ্চিত করো" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "মুছে ফেলা নিশ্চিত করো: তুমি কি স্থায়ীভাবে %s মুছে ফেলতে চাও?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "রাখো" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "মোছো" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "পছন্দনীয় অপশন মুছে ফেলো" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "পছন্দনীয় অপশন তৈরি করো" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "মুক্ত আকৃতি" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "বৃত্ত" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "প্যাঁচানো" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "বাক্স" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "ত্রিভুজ" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "নিবন্ধন ব্যর্থ হয়েছে" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "সফলভাবে নিবন্ধিত হয়েছে" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "তুমি এখন তোমার বিদ্যালয়ের সার্ভারের সাথে নিবন্ধিত।" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "রেজিস্টার" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "পুনরায় নিবন্ধন" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "সফরওয়্যারের হালনাগাদ" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"তোমার নতুন সফটওয়্যারের সাথে সুসংগতি নিশ্চিত করার জন্য তোমার কাজ হালনাগাদ করো" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "এখনই পরীক্ষা করো" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "তালিকা ভিউ" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "পছন্দনীয় ভিউ" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "কী ধরণ:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "পরিচয় প্রমানের ধরণ:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 ব্যক্তিগত" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "তারবিহীন সংযোগের নিরাপত্তা:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "পুনরায় শুরু করুন" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "যোগ দাও" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "অ্যাড-হক নেটওয়ার্ক %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "মেশ নেটওয়ার্ক %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "প্রত্যাখ্যান করা" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dবাইট" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dকিলোবাইট" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dমোগাবাইট" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s, %s এর" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, fuzzy +#, python-format, +msgid "Transfer from %s" +msgstr "%s হতে স্থানান্তর করো" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "গ্রহন করো" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "অপসারণ করো" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, fuzzy +#, python-format, +msgid "Transfer to %s" +msgstr "%s তে স্থানান্তর করো" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "মোছো" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "খোলো" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "দ্বারা খোলো" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s ক্লিপ করছে" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "ছোটবেলা" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "নাম:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "রং পরিবর্তন করতে ক্লিক:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "পেছনে" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "পরবর্তী" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "শিরোনামহীন" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "প্রিভিউ নেই" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "দয়া: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "অজানা" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "তারিখ: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "আকার: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "তারিখ নেই" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "অংশগ্রহনকারী:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "বিবরণ:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "ট্যাগ:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "জার্নাল" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "অনুসন্ধান" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "যে কোন সময়" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "আজ" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "গতকাল পর্যন্ত" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "পূর্ব সপ্তাহ" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "পূর্ব মাস" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "পূর্ব বছর" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "যে কেউ" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "আমার বন্ধুরা" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "আমার ক্লাস" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "যে কোন কিছু" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "এন্ট্রি অনুলিপি করার সময় ত্রুটি। %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "ত্রুটি" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "আরম্ভ" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "পরিবর্ধনের তারিখ অনুযায়ী সাজানো" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "তৈরি করা তারিখ অনুযায়ী সাজানো" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "আকার অনুযায়ী সাজানো" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "প্রদর্শন ক্রমানুসারে সাজানো" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "আপনার জার্নালটি ফাঁকা" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "এই রকম কোন এন্ট্রি নেই" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "অনুসন্ধান মুছে ফেলো" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "%s কার্যকলাপের পুরাতন সংস্করণ" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "আপনি %s সংস্করণে ডাউনগ্রেড করতে চান" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "জার্নাল প্রদর্শন" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "অবজেক্ট নির্বাচন করুন" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "বন্ধ" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "সহায্যে পুনরায় শুরু করো" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "সাহায্যে শুরু করো" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "এন্ট্রিটি শুরু করার জন্য কোন কাজ নেই" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "পাঠাও" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "বিস্তারিত প্রদর্শন করো" + +#: ../src/jarabe/journal/palettes.py:160 +#, fuzzy +msgid "Entries without a file cannot be sent." +msgstr "কোনো ফাইল ছাড়া এন্ট্রি অনুলিপি করা যায় না।" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "কোনো ফাইল ছাড়া এন্ট্রি অনুলিপি করা যায় না।" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "কোন বন্ধু উপস্থিত নেই" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "কোন বৈধ সংযোগ পাওয়া যায়নি" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "এন্ট্রিটি পুনরায় শুরু করার জন্য কোন কাজ নেই" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d মেগাবাইট ফাঁকা" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "ডিভাইসের অবস্থা পরিবর্তনের কারণ অজানা।" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "অবস্থা পরিবর্তন সাধারণ।" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "ডিভাইস এখন নিয়ন্ত্রিত।" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "ডিভাইস এখন আর নিয়ন্ত্রিত নয়।" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "ডিভাইস কনফিগারেশনের জন্য তৈরি নয়।" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"IP কনফিগারেশন সংরক্ষন করা যায়নি (কোনো ঠিকানা বিদ্যমান নেই, সময় শেষ, " +"ইত্যাদি)।" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "IP কনফিগারেশন আর কার্যকর নেই।" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "গোপনীয়তা আবশ্যকীয়, কিন্তু দেয়া নেই।" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" +"802.1X সাপ্লিকেন্ট প্রবেশাধিকার পয়েন্ট বা প্রমাণীকরণ সার্ভার থেকে বিছিন্ন।" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "802.1X সাপ্লিকেন্ট কনফিগারেশন ব্যর্থ।" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "802.1X সাপ্লিকেন্ট কনফিগারেশন বন্ধ বা অপ্রত্যাশিতভাবে ব্যর্থ।" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "802.1X সাপ্লিকেন্ট প্রমানীকরণ করতে অনেক সময় নিয়েছে।" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "PPP সার্ভিস অনুমোদিত সময়ে শুরু করতে ব্যর্থ।" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "PPP সার্ভিস অপ্রত্যাশিতভাবে বিছিন্ন।" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "PPP সার্ভিস বন্ধ বা অপ্রত্যাশিতভাবে ব্যর্থ।" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "DHCP সার্ভিস অনুমোদিত সময়ে শুরু করতে ব্যর্থ।" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "DHCP সার্ভিস অপ্রত্যাশিত ত্রুটি রিপোর্ট করে।" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "DHCP সার্ভিস বন্ধ বা অপ্রত্যাশিতভাবে ব্যর্থ।" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "শেয়ারকৃত সংযোগ সার্ভিস শুরু করতে ব্যর্থ।" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "শেয়ারকৃত সংযোগ সার্ভিস বন্ধ বা অপ্রত্যাশিতভাবে ব্যর্থ।" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "AutoIP সার্ভিস শুরু করতে ব্যর্থ।" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "AutoIP সার্ভিস ত্রুটি অপ্রত্যাশিত ত্রুটি রিপোর্ট করেছে।" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "AutoIP সার্ভিস বন্ধ বা অপ্রত্যাশিতভাবে ব্যর্থ।" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "সংযোগ ব্যস্ত বলে ডায়ালিং ব্যর্থ।" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "কোনো ডায়াল টোন ছিলনা বলে ডায়ালিং ব্যর্থ।" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "কোনো বাহক ছিলনা বলে ডায়ালিং ব্যর্থ।" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "ডায়ালিং এর সময় শেষ।" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "ডায়ালিং ব্যর্থ।" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "মোডেম কাজ করা শুরু করা ব্যর্থ।" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "নির্দিষ্ট GSM APN নির্বাচন করতে ব্যর্থ" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "নেটওয়ার্কের জন্য অনুসন্ধান করা হচছে না।" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "নেটওয়ার্ক নিবন্ধন বাতিল।" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "নেটওয়ার্ক নিবন্ধনের সময় শেষ।" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "অনুরোধকৃত GSM নেটওয়ার্ক দিয়ে নিবন্ধন করতে ব্যর্থ।" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "PIN পরীক্ষা ব্যর্থ।" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "ডিভাইসের প্রয়োজনীয় ফার্মওয়্যার অনুপস্থিত থাকতে পারে।" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "ডিভাইস অপসারণ করা হয়েছে।" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "NetworkManager নিস্ক্রিয়।" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "ডিভাইস এর সক্রিয় সংযোগ অপসারণ বা নিস্ক্রিয় করা হয়েছে।" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "ব্যবহারকারী বা ক্লায়েন্ট সংযোগ বিচ্ছিন্ন করার জন্য অনুরোধ করেছে।" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "The device's carrier/link changed." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "বন্ধু মোছো" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "বন্ধু বানাও" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "বন্ধ করো" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "পুনরায় চালাও" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "লগ-আউট" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "আমার সেটিং" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "%s কে নিমণ্ত্রণ" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s শুরু করতে ব্যর্থ।" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "শুরু হচ্ছে..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "কাজ শুরু করতে ব্যর্থ" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "উৎস প্রদর্শন" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "থামাও" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "নতুন শুরু" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "বিষয়বস্তু দেখাও" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "মোছো" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "উদাহরণের উৎস" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "উৎস" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "কার্যসমষ্টির উৎস" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "উৎস দেখাও:%s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "উৎস দেখাও:%r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "উইন্ডোতে সুগার" diff --git a/po/bn_IN.po b/po/bn_IN.po new file mode 100644 index 0000000..3410c30 --- /dev/null +++ b/po/bn_IN.po @@ -0,0 +1,1991 @@ +# 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 , YEAR. +# 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 , YEAR. +# 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 , YEAR. +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: Update 1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 03:05+0200\n" +"Last-Translator: Chris \n" +"Language-Team: Bengali \n" +"Language: bn_IN\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 "" + +#: ../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:235 +#, fuzzy +msgid "Click to change your color:" +msgstr "রং পরিবর্তন করতে ক্লিক:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "পাওয়া যায় নি" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 +#, fuzzy +msgid "%s seconds" +msgstr "%s সেকেন্ড" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 +#, fuzzy +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "~/.i18n এ প্রবেশ করতে পারে নি। প্রমাণ মানসমূহ তৈরি করো।" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "কোড=%s এর জন্য কোন ভাষা নির্ধারণ করা যায় নি।" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "দুঃখিত আমি '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "উল্লেখিত রেডিও প্রেরিত মান ব্যবহার on/off তে ত্রুটি।" + +#: ../extensions/cpsection/network/model.py:152 +#, fuzzy +msgid "Error in specified argument use 0/1." +msgstr "উল্লেখিত রেডিও প্রেরিত মান ব্যবহার on/off তে ত্রুটি।" + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "করা হয়েছে" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "মোছো" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +#, fuzzy +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +#, fuzzy +msgid "Connecting..." +msgstr "সংযোগ বিচ্ছিন্ন..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "চ্যানেল" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "সংযোগ বিচ্ছিন্ন" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "বাতিল" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "মেশ নেটওয়ার্ক" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, fuzzy +msgid "Mesh Network %s" +msgstr "মেশ নেটওয়ার্ক %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "দল" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "বাড়ি" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "সক্রিয়তা" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "স্ক্রীণশট" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "তোমার পরিবর্তন কার্যকর করার জন্য সুগার পুনরায় চালু করতে হবে।\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "করা হয়েছে" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "ঠিক আছে" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "রাখো" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "মুছে ফেলুন" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "রেজিস্টার" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "কী ধরণ:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "পরিচয় প্রমানের ধরণ:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "পুনরায় শুরু করুন" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "যোগ দাও" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +#, fuzzy +msgid "Mesh Network %d" +msgstr "মেশ নেটওয়ার্ক %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "মোছো" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "খোলো" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "ছোটবেলা" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "নাম:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "রং পরিবর্তন করতে ক্লিক:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "পেছনে" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "পরবর্তী" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "শিরোনামহীন" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "প্রিভিউ নেই" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "তারিখ নেই" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "বিবরণ:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "ট্যাগসমূহ:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "জার্নাল" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "অনুসন্ধান" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "যে কোন সময়" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "আজকে" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "গতকাল পর্যন্ত" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "আগের সপ্তাহে" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "পূর্ব মাস" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "আগের বছরে" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "যে কোন ব্যক্তি" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "আমার বন্ধুরা" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "আমার ক্লাস" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "যে কোন কিছু" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "শুরু" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "আপনার জার্নাল খালি" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "একটি বস্তু বেছে নিন" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "বন্ধ করুন" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "বন্ধু মোছো" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "বন্ধু বানাও" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "বন্ধ করো" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "%s কে নিমণ্ত্রণ" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "শুরু হচ্ছে..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "থামাও" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "মোছো" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" + +# TODO: Add "Start with" menu item +#~ msgid "Copy" +#~ 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 +#~ msgid "Disconnect..." +#~ msgstr "সংযোগ বিচ্ছিন্ন..." + +#~ msgid "Unmount" +#~ msgstr "আনমাউন্ট" + +#~ msgid "Encryption Type:" +#~ 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 +#, fuzzy +#~ msgid "Disconnecting..." +#~ msgstr "সংযোগ বিচ্ছিন্ন..." + +#~ msgid "Connected to a School Mesh Portal" +#~ msgstr "একটি স্কুলের মেশ পোর্টালে সংযুক্ত" + +#~ msgid "Looking for a School Mesh Portal..." +#~ msgstr "একটি স্কুল মেশ পোর্টাল খুজছি..." + +#~ msgid "Connected to an XO Mesh Portal" +#~ msgstr "একটি জো(XO) মেশ পোর্টালে সংযুক্ত" + +#~ msgid "Looking for an XO Mesh Portal..." +#~ msgstr "একটি জো(XO) মেশ পোর্টাল খুজছি..." + +#~ msgid "Connected to a Simple Mesh" +#~ msgstr "একটি সাধারণ মেশ এ সংযুক্ত" + +#~ msgid "Starting a Simple Mesh" +#~ msgstr "একটি সাধারণ মেশ চালু করছি" + +#~ msgid "Unknown Mesh" +#~ msgstr "অজানা মেশ" + +#, python-format +#~ msgid "Clipboard object: %s." +#~ msgstr "ক্লীপবোর্ড বস্তু: %s।" + +#~ msgid "off" +#~ msgstr "off" + +#~ msgid "on" +#~ msgstr "on" + +#~ msgid "Permission denied. You need to be root to run this method." +#~ msgstr "অনুমতি প্রত্যাখ্যাত। এই পন্থাটি চালাতে তোমাকে root হিসেবে কাজ করতে হবে।" + +#~ msgid "Error in reading timezone" +#~ msgstr "সময় জোন পড়তে ত্রুটি" + +#, python-format +#~ msgid "Error copying timezone (from %s): %s" +#~ msgstr "সময় জোন (%s হতে) কপি করায় ত্রুটি: %s" + +#, python-format +#~ msgid "Changing permission of timezone: %s" +#~ msgstr "সময় জোনের অনুমতি পরিবর্তন: %s" + +#~ msgid "About this XO" +#~ msgstr "XO সম্বন্ধে" + +#~ msgid "Add to journal" +#~ msgstr "জার্নালে লেখ" + +#~ msgid "Reboot" +#~ msgstr "পুনরায় চালু" + +#~ msgid "My Battery life" +#~ msgstr "আমার ব্যাটারীর জীবনসীমা" + +#~ msgid "Battery charging" +#~ msgstr "ব্যাটারী চার্জ হচ্ছে" + +#~ msgid "Battery discharging" +#~ msgstr "ব্যাটারী চার্জ কমে যাচ্ছে" + +#~ msgid "Battery fully charged" +#~ msgstr "ব্যাটারী পুরোপুরি চার্জ হয়েছে" + +#~ msgid "Share with:" +#~ msgstr "ভাগাভাগি করো:" + +#~ msgid "Private" +#~ msgstr "ব্যাক্তিগত" + +#~ msgid "My Neighborhood" +#~ msgstr "আমার ছেলেবেলা" + +#~ msgid "Undo" +#~ msgstr "বাতিল করো" + +#~ msgid "Redo" +#~ msgstr "আবার করো" + +#~ msgid "Paste" +#~ msgstr "সাঁটো" + +#, python-format +#~ msgid "%s Activity" +#~ msgstr "%s সক্রিয়তা" + +#~ msgid "Keep error" +#~ msgstr "ত্রুটি রেখে দাও" + +#~ msgid "Keep error: all changes will be lost" +#~ msgstr "ত্রুটি রেখে দাও: সব পরিবর্তন হারিয়ে যাবে" + +#~ msgid "Don't stop" +#~ msgstr "থামিও না" + +#~ msgid "Stop anyway" +#~ msgstr "যে কোন ভাবে থামো" + +#~ msgid "Continue" +#~ msgstr "এগিয়ে যাও" + +#~ msgid "OK" +#~ msgstr "ঠিক আছে" + +#, python-format +#~ msgid "%d year" +#~ msgstr "%d বছর" + +#, python-format +#~ msgid "%d years" +#~ msgstr "%d বছর" + +#, python-format +#~ msgid "%d month" +#~ msgstr "%d মাস" + +#, python-format +#~ msgid "%d months" +#~ msgstr "%d মাস" + +#, python-format +#~ msgid "%d week" +#~ msgstr "%d সপ্তাহ" + +#, python-format +#~ msgid "%d weeks" +#~ msgstr "%d সপ্তাহ" + +#, python-format +#~ msgid "%d day" +#~ msgstr "%d দিন" + +#, python-format +#~ msgid "%d days" +#~ msgstr "%d দিন" + +#, python-format +#~ msgid "%d hour" +#~ msgstr "%d ঘন্টা" + +#, python-format +#~ msgid "%d hours" +#~ msgstr "%d ঘন্টা" + +#, python-format +#~ msgid "%d minute" +#~ msgstr "%d মিনিট" + +#, python-format +#~ msgid "%d minutes" +#~ msgstr "%d মিনিট" + +#, python-format +#~ msgid "%d second" +#~ msgstr "%d সেকেন্ড" + +#~ msgid " and " +#~ msgstr " এবং " + +#~ msgid ", " +#~ msgstr ", " diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..bccb9b8 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,1814 @@ +# 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 , YEAR. +# revisar +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:26+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: ca\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 "En quant a mi" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Ha d'introduir un nom." + +#: ../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 "Error en els modificadors de color especificats" + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Error en els colors especificats" + +#: ../extensions/cpsection/aboutme/view.py:235 +#, fuzzy +msgid "Click to change your color:" +msgstr "Clic per a canviar de color:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "En quant al meu ordinador" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "No disponible" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identitat" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +#, fuzzy +msgid "Serial Number:" +msgstr "Número de serie:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Programari" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sucre:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Llicencia i copyright" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +msgstr "Llicencia completa:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Data i hora" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Error: aquesta zona horària no existeix" + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Zona horària" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Quadre" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "El valor ha de ser un nombre sencer." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "mai" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "instantani" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s segons" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Retard d'activació" + +#: ../extensions/cpsection/frame/view.py:78 +#, fuzzy +msgid "Corner" +msgstr "Cantó" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Idioma" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "No es pot accedir a ~/.i18n.. Crea una configuració estàndar." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "La llengua que té com a codi code=%s no es pot determinar." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Ho sento, no parlo '%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 "" +"Afegeixi idiomes en l'ordre que prefereix. Si una traducció no es troba " +"disponible, s'utilitzarà la següent de la llista." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Xarxa" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Estat desconegut" + +# dubtes: +# 1- manca una coma al text original +# 2- He posat on/off +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Error en l'argument de ràdio especificat, useu on/off" + +# dubtes: +# 1- manca una coma al text original +# 2- He posat on/off +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Error en l'argument especificat, useu 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Col·laboració" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"El servidor és equivalent a l'habitació en la qual es troba; la gent al " +"mateix servidor podrà veure's entre ells, encara que no estiguin a la " +"mateixa xarxa." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Servidor:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Energia" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +#, fuzzy +msgid "Software update" +msgstr "Actualització de programari" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "Fet" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "La meva bateria" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Eliminat" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Carregant" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Queda molt poca bateria" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "Queden %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Carregada" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Adreça IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Desconnectar" + +# 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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Conectant..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Conectat" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Canal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Xarxa cablejada" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Velocitat" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Connectar" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Desconnectat" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Cancel·lar" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +# Aquí he agafat l'original "mesh", en comptes de fer-ne una traducció +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Xarxa Mesh" + +# Aquí he agafat l'original "mesh", en comptes de fer-ne una traducció +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Xarxa Mesh %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +#, fuzzy +msgid "Rate" +msgstr "Data" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Els meus altaveus" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Silenciar" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Malla" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Grup" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Inici" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Activitat" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Captura de pantalla" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Captura de pantalla de \"%s\"" + +#: ../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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +#, fuzzy +msgid "Font face that is used throughout the desktop." +msgstr "Nombre d'usuari que s'utilitza arreu l'escriptori." + +#: ../data/sugar.schemas.in.h:19 +#, fuzzy +msgid "Font size that is used throughout the desktop." +msgstr "Nombre d'usuari que s'utilitza arreu l'escriptori." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "Servidor Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Distribució de les activitats favorites" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "So silenciat" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Configuració de zona horària pel sistema." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL del servidor de Jabber per utilitzar." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Color de l'usuari" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Nom de l'usuari" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Nombre d'usuari que s'utilitza arreu l'escriptori." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Nivell de volum" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Nivell de volum pel dispositiu de so." + +#: ../data/sugar.schemas.in.h:66 +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 "Per aplicar els canvis, cal reiniciar el Sugar.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Advertència" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +#, fuzzy +msgid "Changes require restart" +msgstr "Els canvis requereixen reiniciar" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Cancel·lar canvis" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Després" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Reiniciar ara" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Fet" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "D'acord" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Versió %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Manté" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Esborrar" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Esborrar favorit" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Forma lliure" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Anell" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Espiral" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Caixa" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Triángle" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Registració fallida" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Ara estàs registrat al servidor de l'escola." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Registre" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Actualització de programari" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Actualitzi les seves activitats per assegurar compatibilitat amb el nou " +"programari" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Provar ara" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Vista en llista" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Vista de favorits" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Tipus de clau:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Tipus d'autentificació:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA y WPA2 personal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Reprendre" + +# mmm, potser més simple? +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Uneix-t'hi" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +# Aquí he agafat l'original "mesh", en comptes de fer-ne una traducció +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Xarxa Mesh %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "No es pot connectar al servidor." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "El servidor no ha pogut completar la petició." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Refusar" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s sobre %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Transferència des de %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Acceptar" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Descartar" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Transferència a %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Eliminar" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Obrir" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Obrir amb" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +# aquí cal pensar si es millorÑ barri, veinatge, maquines veines,.... +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Veïns" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Nom:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Clic per a canviar de color:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Enrere" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Següent" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Sense títol" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Sense vista prèvia" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Sense data" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Participants:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Descripció:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Etiqueta" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Diari" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Cerca" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Qualsevol moment" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Avui" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Fins ahir" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "La setmana passada" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "El mes passat" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "L'any passat" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Tothom" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Amics/gues" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "La meva classe" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Tot" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Arrencar" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Cap entrada relacionada" + +#: ../src/jarabe/journal/listview.py:398 +#, fuzzy +msgid "Clear search" +msgstr "Netejar recerca" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Triï un objecte" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Tancar" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Reiniciar amb" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Començar amb" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "No s'ha trobat una activitat per iniciar l'entrada" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Enviar a" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Veure detalls" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "No hi ha amics presents" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "No s'ha trobat cap connexió vàlida" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "No s'ha trobat una activitat per reprendre l'entrada" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB lliures" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Esborrar amic/ga" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Fer amic/ga" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Aturar" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Reiniciar" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Sortir" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Els meus paràmetres" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Convidar a %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Arrencant ..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Veure fuente" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Aturar" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Començar nou" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Mostrar continguts" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Eliminar" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Font" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Font del paquet d'activitat" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Veure codi font: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Veure codi font: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..4c3f3d1 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,1774 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:29+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: cs\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==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.5\n" + +#: ../extensions/cpsection/aboutme/__init__.py:24 +msgid "About Me" +msgstr "O Mě" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Musíš vložit jméno." + +#: ../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:235 +msgid "Click to change your color:" +msgstr "Kliknout pro změnu barvy:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Můj Počítač" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Neplatné" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Totožnost" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Software" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +msgstr "Úplné povolení:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Datum & Čas" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "" + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +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 "nikdy" + +#: ../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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Jazyk" + +#: ../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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Neznámý stav." + +#: ../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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Spolupráce" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +msgid "Server:" +msgstr "Server:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Síla" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Síla vedení" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Aktualizovat Software" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, 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:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "Hotovo" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "Vyjmout" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Nabíjí se" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Nabité" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Odpojit" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Připojuji se..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Připojeno" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Připojit" + +#: ../extensions/deviceicon/network.py:276 +#, fuzzy +msgid "Disconnected" +msgstr "Odpojit" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Zrušit" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Nahlas" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Tichý" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Skupina" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Domů" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Činnost" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Zvuk ztišen" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Uživatelská Barva" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Uživatelské Jméno" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Úroveň hlasitosti" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Varování" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Později" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Nyní restartovat" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Hotovo" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Potvrdit odstranění" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Potvrdit odstranění: Opravdu to chceš odstranit navždy %s?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Uchovat" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Odstranit" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Vyjmout oblíbené" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Volný tvar" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Kruh" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spirála" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Schránka" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Trojúhelník" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Registrace selhala" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Registrace proběhla úspěšně" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Nyní jseš zaregistrovaný na školním serveru." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Registrovat se" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Aktualizovat Software" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Zkontrolovat nyní" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Zobrazit pořadí" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Zobrazit oblíbené" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Druh Klíče:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Začít znovu" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Přidat" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Nemohu se připojit k serveru." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Nepřijmout" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s z %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Přenos z %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Přijmout" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Přenos do %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Vyjmout" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Otevřít" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Otevřít s" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s výstřižku" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Okolí" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Jméno:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Kliknout pro změnu barvy:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Zpět" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Další" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Neoznačený" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Bez náhledu" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Bez data" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Účastníci:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Popis:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Vysačky:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Deník" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Hledat" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Kdykoliv" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Dnes" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Včera" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Minulý týden" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Minulý měsíc" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Minulý rok" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Kdokoliv" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Moji přátelé" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Moje třída" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Cokoliv" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Spustit" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Tvůj Deník je prázdný" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Smazat nalezené" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Tvůj Deník je plný" + +#: ../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:80 +msgid "Show Journal" +msgstr "Ukázat Deník" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Vybrat předmět" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Zavřít" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Začít znovu s" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Spustit s" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Poslat" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Zobrazit Podrobnosti" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Vyjmout přítele" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Vypnout" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Restartovat" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Odhlásit" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Moje Dokumenty" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Spouští se..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Zobrazit Zdroj" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Zastavit" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Vyjmout" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Zdroj" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Zobrazit zdroj: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Zobrazit zdroj: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..d94a1cc --- /dev/null +++ b/po/da.po @@ -0,0 +1,1816 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-11 11:07+0200\n" +"Last-Translator: Aputsiaq Niels \n" +"Language-Team: LANGUAGE \n" +"Language: da\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 "Om mig" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Du skal skrive et navn." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "streg: farve=%s nuance=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "streg: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "fyld: farve=%s nuance=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "fyld: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Fejl i angivne farvetilrettere." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Fejl i angivne farver." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Klik for at ændre din farve:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Om min computer" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Ikke tilgængelig" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identificér" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Serienummer:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Software" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Bygget:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Trådløs firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Ophavsret og licens" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 er den grafiske brugerflade som du ser på. Sugar er fri software, " +"dækket af GNU General Public License, og du er velkommen til at ændre den " +"og/eller distribuere kopier af den under visse betingelser beskrevet deri." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Fuld licens:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Dato & tid" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Fejl tidszone eksisterer ikke." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Tidszone" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Ramme" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Værdi skal være et heltal." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "aldrig" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "øjeblikkeligt" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s sekunder" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Forsinkelse på aktivering" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Hjørne" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Kant" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Tastatur" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Tastaturmodel" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Nøgle(r) til at ændre udseende" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Udseende(r) på tastatur" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Sprog" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Kunne ikke tilgå ~/.i18n. Opret standard-indstillinger." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Sprog for code=%s kunne ikke fastslås." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Desværre jeg taler ikke '%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 "" +"Tilføj sprog i den rækkefølge du foretrækker. Hvis en oversættelse ikke er " +"tilgængelig, så vil den næste i listen blive anvendt." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Konfiguration af modem" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Du vil skulle give følgende information for at opsætte en mobil " +"bredbåndsforbindelse til et mobilt (3G) netværk." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Brugernavn:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Adgangskode:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Nummer:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Navn på adgangspunkt (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Personligt identitetsnummer (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Netværk" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Tilstand er ukendt." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Fejl i angivne radioargument brug on/off." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Fejl i angivne argument brug 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Trådløs" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Sluk for den trådløse radio for at spare på batteriet" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"Drop netværkshistorik hvis du har problemer med at forbinde til netværket" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Drop netværkshistorik" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Samarbejde" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Serveren modsvarer det rum du befinder dig i; personer på samme server vil " +"være i stand til at se hinanden, også selv om de ikke er på samme netværk." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Server:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Strøm" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Fejl i automatisk pm-argument, brug on/off." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Fejl i ekstremt pm-argument, brug on/off." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Strømstyring" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Automatisk strømstyring (øger batterilevetiden)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "Ekstrem strømstyring (slukker trådløs radio, øger batterilevetid)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Software-opdatering" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Software-opdateringer retter fejl, fjerne sikkerhedsproblemer og tilbyder " +"nye funktioner." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Tjekker %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Henter %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Opdaterer %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Din software er opdateret" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Du kan installere %s opdatering" +msgstr[1] "Du kan installere %s opdateringer" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Tjekker for opdateringer..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Installerer opdateringer..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s opdatering blev installeret" +msgstr[1] "%s opdateringer blev installeret" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Installér valgte" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Størrelse på overførsel: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Fra version %(current)s til %(new)s (Størrelse: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Ingen" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Mit batteri" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Ikke isat" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Oplader" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Meget lidt strøm tilbage" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d endnu" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Opladet" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP-adresse: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Afbryd" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Forbinder..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Tilsluttet" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "Ingen trådløs forbindelse" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kanal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Kablet netværk" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Hastighed" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Trådløst modem" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Vent venligst..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Forbind" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Forbindelse afsluttet" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Fortryd" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Forsøg at tilslutte igen" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Fejl: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Forslag: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "Tilsluttet i %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Tjek din PIN/PUK-konfiguration." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Tjek konfigurationen på dit adgangspunktnavn (APN)" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Tjek konfiguration af nummeret." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Tjek din konfiguration." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Maskenetværk" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Maskenetværk %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "Ingen tilgængelig GSM-forbindelse." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "Opret en forbindelse i kontrolpanelet." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "Tale" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "Oplæs valgte tekst" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "Stop afspilning" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "Toneleje" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "Hastighed" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "Sæt afspilning på pause" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Mine højttalere" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Tænd for lyden" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Sluk for lyden" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "finger" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "pen" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "Mit pegefelt" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Maske" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Gruppe" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Hjem" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Aktivitet" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Skærmaftryk" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Skærmbillede af \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"deaktiveret\" for at spørge om kaldenavn; \"system\" for at genbruge UNIX-" +"kontoens lange navn." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "Yderligere kataloger som kan indeholde opdaterede oversættelser." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "Sikkerhedskopi-URL" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "Sæt ID'er med beskyttede aktiviteter i bundt" + +#: ../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 "" +"Farve for XO-ikonet som gennemgående anvendes på skrivebordet. Strengen " +"består af kant- og fyldfarven, formatet er i rgb-farver. Eksempel: " +"#AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Hjørneforsinkelse" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Standard skrifttype" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Standard skriftstørrelse" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Standard kaldenavn" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Forsinkelse for aktivering af rammen ved brug af hjørner." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Forsinkelse for aktivering af rammen ved brug af kanter." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "Katalog hvori der søges efter oversættelser" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Kant-forsinkelse" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Favoritter over udseende" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Favoritter for tilstand ved fortsættelse" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Skrifttype som gennemgående anvendes på skrivebordet." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Skriftstørrelse som gennemgående anvendes på skrivebordet." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "GSM-netværk APN (FORÆLDET/ANVENDES IKKE)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "GSM-netværk PIN (FORÆLDET/ANVENDES IKKE)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "GSM-netværk PUK (FORÆLDET/ANVENDES IKKE)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "GSM-netværk konfiguration af adgangspunkt (FORÆLDET/ANVENDES IKKE)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "GSM-netværksnummer (FORÆLDET/ANVENDES IKKE)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "GSM-netværkskodeord (FORÆLDET/ANVENDES IKKE)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "GSM-netværk konfiguration af kodeord (FORÆLDET/ANVENDES IKKE)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" +"GSM-netværk konfiguration af personligt identifikationsnummer " +"(FORÆLDET/ANVENDES IKKE)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" +"GSM-netværk konfiguration af personlig oplåsningsnøgle (FORÆLDET/ANVENDES " +"IKKE)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "GSM-netværk konfiguration af telefonnummer (FORÆLDET/ANVENDES IKKE)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "GSM-netværk brugernavn (FORÆLDET/ANVENDES IKKE)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "GSM-netværk konfiguration af brugernavn (FORÆLDET/ANVENDES IKKE)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Hvis TRUE, så vil Sugar gøre os tilgængelig for søgning for andre brugere på " +"Jabber-serveren." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Hvis TRUE, så vil Sugar vise \"Log ud\" som en valgmulighed." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Hvis TRUE, så vil Sugar vise \"Genstart\" som en valgmulighed." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"Hvis TRUE, så vil Sugar vise standard Ad-hoc netværk for kanal 1, 6 og 11. " +"Hvis Sugar ikke ser \"kendte\" netværk når det starter, så vil det automatisk " +"tilslutte til et Ad-hoc netværk." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Jabber-server" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Udseender på tastatur" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Tastaturmodel" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Valgmuligheder for tastatur" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Udseende på favoritvisningen." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Liste med udseender på tastatur. Hver post bør være i udseendeform(variant)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Liste med tastaturvalgmuligheder." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "Værdi på toneleje for sugars taletjeneste" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "Værdien på toneleje som anvendes af taletjenesten i Sugar" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Automatisk strømstyring" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Ekstrem strømstyring" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Publicér til Gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "Værdi for hastighed for sugars taletjeneste" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "Værdi for hastighed som anvendes af taletjenesten i Sugar" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Indstilling til at slå lyd fra lydenhed." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Vis Log ud" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Vis Genstart" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Vis Sugar ad-hoc netværk" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Lyd slået fra" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Tastaturmodellen som skal anvendes" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Tidzone-indstilling for systemet." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL som jabber-server skal anvende." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL hvor sikkerhedskopi gemmes til." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Brugerfarve" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Brugernavn" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Brugernavn som gennemgående anvendes på skrivebordet." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"Brugere vil ikke have tilladelse til at slette disse aktiviteter gennem " +"listevisningen." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Lydstyrke" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Lydstyrke for lydenheden." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Under genoptagelsestilstand, så vil klik på et favorit-ikon føre til at " +"seneste post for denne aktivitet vil blive genoptaget." + +#: ../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: ADVARSEL, fandt flere end ét valg med samme navn: %s " +"modul: %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 ikke et tilgængeligt valg" + +#: ../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 "" +"Anvendelse: sugar-control-panel [ valg ] nøgle [ argumenter ... ] \n" +" Styring af sukker-miljøet. \n" +" Valg: \n" +" -h vis denne hjælpebesked og afslut \n" +" -l vis liste over alle tilgængelige valg \n" +" -h key vis information om denne nøgle \n" +" -g key hent den nuværende værdi for nøglen \n" +" -s key angiv den nuværende værdi for nøglen \n" +" -c key nulstil den nuværende værdi for nøglen \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "For at dine ændringer træder i kraft skal du genstarte Sukker.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Advarsel" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Ændringer kræver genstart" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Fortryd ændringer" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Senere" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Genstart nu" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Færdig" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Version %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Bekræft sletning" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Bekræft sletning: Vil du virkeligt permanent slette %s?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Behold" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Slet" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Fjern favorit" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Opret favorit" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Fri form" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Ring" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spiral" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Boks" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Trekant" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Registrering mislykkedes" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Registrering lykkedes" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Du er nu registreret ved din skoleserver." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Registrér" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "Registrér igen" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Software-opdatering" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Opdatér dine aktiviteter for at sikre kompatibilitet med din nye software" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Undersøg nu" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Listevisning" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Favoritvisning" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" +"Der kræves en trådløs krypteringsnøgle til\n" +"det trådløse netværk '%s'." + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Nøgletype:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Ægthedstype:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 Personal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Trådløs sikkerhed:" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Genoptag" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Tilslut" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Ad-hoc netværk %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Maskenetværk %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Kan ikke forbinde til serveren." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Serveren kunne ikke gennemføre forespørgslen." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Afslå" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s af %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Overfør fra %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Godkend" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Afvis" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "Den anden deltager afbrød filoverførslen" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Overfør til %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "Fjern" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Åbn" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Åbn med" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s klipning" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Nabolag" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Navn:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Klik for at ændre farve:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Tilbage" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Næste" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Uden navn" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Ingen smugkig" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Art: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Ukendt" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Dato: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Størrelse: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Ingen dato" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Deltagere:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Beskrivelse:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Mærkater:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Logbog" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Søg" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Nårsomhelst" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Idag" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Siden igår" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Seneste uge" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Seneste måned" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Seneste år" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Enhver" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Mine venner" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Min klasse" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Hvadsomhelst" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "Kopier til" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Duplikér" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "Fejl under kopiering af posten. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Fejl" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Start" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "Sortér efter ændringsdato" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "Sortér efter oprettelsesdato" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "Sortér efter størrelse" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "Sorteringsvisning" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Din logbog er tom" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "Din dokumentmappe er tom" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "Enheden er tom" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Ingen modsvarende emner" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Ryd søgning" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "Ældre version af aktiviteten %s" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "Ønsker du at degradere til version %s" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Din logbog er fuld" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "Slet nogle logbogsindlæg for at frigøre plads for nye indlæg." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Vis logbog" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Vælg et objekt" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Luk" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Fortsæt med" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Start med" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Ingen aktivitet til startpost" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Send til" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Vis detaljer" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "Poster uden en fil kan ikke sendes." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "Poster uden en fil kan ikke kopieres." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Udklipsholder" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Ingen venner tilstede" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Ingen gyldig forbindelse fundet" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Ingen aktivitet for genoptagelsespost" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "Dokumenter" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB ledig" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "Årsagen til enhedens ændrede tilstand er ukendt." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "Den ændrede tilstand er normal." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "Enheden bliver nu håndteret." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "Enheden håndteres ikke længere." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "Enheden kunne ikke klargøres til konfiguration." + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"IP-konfigurationen kunne ikke reserveres (ingen tilgængelige adresse, " +"tidsudløb, osv.)." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "IP-konfigurationen er ikke længere gyldig." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "Hemmelighed var påkrævet, men blev ikke tilbudt." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "Supplikanten 802.1X koblet fra adgangspunktet eller godkendelsesserver." + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "Konfiguration af 802.1X-supplikanten mislykkedes." + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "Supplikanten 802.1X blev afbrudt eller fejlede på uventet vis." + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "Godkendelsesforløbet for 802.1X-supplikanten tog for lang tid." + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "PPP-tjenesten mislykkedes med at starte inden for den tilladte tid." + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "PPP-tjenesten forbindelse blev afbrudt på uventet vis." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "PPP-tjenesten blev afbrudt eller fejlede på uventet vis." + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "DHCP-tjenesten mislykkedes med at starte inden for den tilladte tid." + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "DHCP-tjenesten rapporterede en uventet fejl." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "DHCP-tjenesten blev afbrudt eller fejlede på uventet vis." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "Den delte forbindelsestjeneste mislykkedes med at starte." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" +"Den delte forbindelsestjeneste blev afbrudt eller fejlede på uventet vis." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "AutoIP-tjenesten mislykkedes med at starte." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "AutoIP-tjenesten rapporterede en uventet fejl." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "AutoIP-tjenesten blev afbrudt eller fejlede på uventet vis." + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "Opringning mislykkedes fordi linjen var optaget." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "Opringning mislykkedes fordi der manglede klartone." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "Opringning mislykkedes fordi der ikke var nogen teleudbyder." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "Opringningstiden udløb." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "Opringning mislykkedes." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "Modem-initialisering mislykkedes." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "Mislykkedes med at vælge den angivne GSM APN" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "Søger ikke efter netværk." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "Netværksregistrering blev nægtet." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "Netværksregistreringen udløb." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "Mislykkedes med at registrere det forespurgte GSM-netværk." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "PIN-tjek mislykkedes." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "Nødvendig firmware for enheden kan mangle." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "Enheden blev fjernet." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "NetworkManager gik i dvale." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "Enhedens aktive forbindelse blev fjernet eller forsvandt." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "En bruger eller klient anmodede om afbrydelse af forbindelsen." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "Enhedens teleudbyder/kæde blev ændret." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "Enhedens eksisterende forbindelse blev antaget." + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "Supplikanten er nu tilgængelig." + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "Modemmet kunne ikke findes." + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "Bluetooth-forbindelsen mislykkedes eller nåede tidsudløb." + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "Ubrugt." + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Fjern ven" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Opret ven" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Luk ned" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Genstart" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Log ud" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Mine indstillinger" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Invitér til %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s mislykkede med at starte." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Starter..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "Aktivitet mislykkede med at starte" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Vis kilde" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Stop" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Start ny" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Vis indhold" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Fjern" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Instans-kilde" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Kilde" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Kilde for aktivitetsbundt" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Sugar Værktøjssæt Kilde" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Vis kilde: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Vis kilde: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar i et vindue" diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..2f48c9f --- /dev/null +++ b/po/de.po @@ -0,0 +1,1867 @@ +# 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 , YEAR. +# This file is distributed under the same license as the PACKAGE package. +# Fabian Affolter , 2007. +msgid "" +msgstr "" +"Project-Id-Version: sugar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-11 12:29+0200\n" +"Last-Translator: Markus \n" +"Language-Team: German \n" +"Language: de\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" +"X-Poedit-Language: German\n" + +#: ../extensions/cpsection/aboutme/__init__.py:24 +msgid "About Me" +msgstr "Über mich" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Bitte einen Namen eingeben." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "Linie: Farbe=%s Farbton=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "Linie: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "Füllung: Farbe=%s Farbton=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "Füllung: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Fehler in den angegebenen Farbänderungen." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Fehler in den angegebenen Farben." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Klicken, um deine Farbe zu wechseln:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Über meinen Computer" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Nicht verfügbar" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identität" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Seriennummer:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Software" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Version:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "WLAN-Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Copyright und Lizenz" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 ist die grafische Benutzeroberfläche, die du vor dir siehst. Sugar ist " +"freie Software und unterliegt der GNU General Public License. Im Rahmen der " +"darin festgelegten Bedingungen ist es erlaubt, die Software zu verändern " +"und/oder Kopien davon zu erstellen und zu verteilen." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Vollständige Lizenz:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Datum & Uhrzeit" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Fehler: unbekannte Zeitzone." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Zeitzone" + +# (Markus S.) 'Rahmen'? (Vorschlag von hmeyer) +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Rahmen" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Der Wert muss ganzzahlig sein." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "nie" + +# (Markus S.) ' unmittelbar'? +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "sofort" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s Sekunden" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Aktivierungsverzögerung" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Ecke" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Rand" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Tastatur" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Tastaturmodell" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Taste(n) zum Layoutwechsel" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Tastaturlayout(s)" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Sprache" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Zugriff auf ~/.i18n nicht möglich. Erzeuge daher Standardeinstellungen." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Sprache für Code=%s konnte nicht ermittelt werden." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Entschuldigung, ich spreche nicht '%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 "" +"Sprachen in der gewünschten Reihenfolge hinzufügen. Wenn eine Übersetzung " +"nicht verfügbar ist, wird die nächste aus der Liste benutzt." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Modem-Konfiguration" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Du musst die folgenden Daten eingeben, um eine Verbindung zu einem " +"Mobilfunknetz (3G) aufzubauen." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Benutzername:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Passwort:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Nummer:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Name des Zugangspunktes (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Persönliche Kennnumer (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Netzwerk" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Status ist nicht bekannt." + +# (Markus S.) vgl. http://lists.laptop.org/pipermail/localization/2008-July/001232.html +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Fehler im angegebenen Funknetzparameter -- on/off verwenden." + +# (Markus S.) vgl. http://lists.laptop.org/pipermail/localization/2008-July/001232.html +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Fehler im angegebenen Parameter -- 0/1 verwenden." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Funknetzwerk" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Schalte das Funknetz aus, um die Lebensdauer der Batterie zu erhöhen." + +# (Markus S,) war 'Radio:' +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Funknetz" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"Verwirf die Netzwerk-Chronik, wenn du Schwierigkeiten hast, dich mit dem " +"Netzwerk zu verbinden." + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Netzwerk-Chronik verwerfen" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Zusammenarbeit" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Der Server entspricht dem Raum, in dem du dich befindest; Personen am selben " +"Server können einander sehen, selbst wenn sie sich nicht im selben Netzwerk " +"befinden." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Server:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Energieversorgung" + +# (Markus S.) vgl. http://lists.laptop.org/pipermail/localization/2008-July/001232.html +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "" +"Fehler im automatischen Energieverwaltungsparameter -- on/off verwenden." + +# (Markus S.) vgl. http://lists.laptop.org/pipermail/localization/2008-July/001232.html +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Fehler im extremen Energieverwaltungsparameter -- on/off verwenden." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Energieverwaltung" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Automatische Energieverwaltung (erhöht die Lebensdauer der Batterie)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Extreme Energieverwaltung (deaktiviert das Funknetz, erhöht die Lebensdauer " +"der Batterie)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Software-Aktualisierung" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Software-Aktualisierungen beheben Fehler, schließen Sicherheitslücken und " +"bieten neue Funktionen." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Prüfe %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Lade %s herunter..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Aktualisiere %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Deine Software ist auf dem neuesten Stand." + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Du kannst %s Aktualisierung installieren." +msgstr[1] "Du kannst %s Aktualisierungen installieren." + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Suche nach Aktualisierungen..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Installiere Aktualisierungen..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s Aktualisierung wurde installiert." +msgstr[1] "%s Aktualisierungen wurden installiert." + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Auswahl installieren" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Downloadgröße: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Von Version %(current)s auf %(new)s (Größe: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Nichts" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Meine Batterie" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Entfernt" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Wird aufgeladen" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Sehr wenig Ladung verbleibend" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d verbleibend" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Aufgeladen" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP-Addresse: %s" + +# (mschlager) war 'Nicht verbunden', ich würde aber eher erwarten, dass das die Beschriftung eines Menüeintrags ist, mit dem man eine Verbindung trennt, was dann in der Folge die Meldung 'Disconnecting...' liefert. +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Verbindung trennen" + +# 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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Verbinde..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Verbunden" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "Kein Funknetz verfügbar" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kanal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Kabelnetzwerk" + +# (Markus S.) War 'Geschwindigkeit' +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Übertragungsrate" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Funkmodem" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Bitte warten..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Verbinden" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Nicht verbunden" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Abbrechen" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Erneuter Verbindungsversuch" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Fehler: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Vorschlag: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "Verbunden für %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Überprüfe deine PIN/PUK-Einstellungen." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Überprüfe deine Einstellung für den Namen des Zugangspunktes (APN)." + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Überprüfe deine Einstellung der Nummer." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Überprüfe deine Einstellungen." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Maschennetzwerk" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Maschennetzwerk %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "Keine GSM-Verbindung verfügbar." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "Verbindung in der Menüleiste erstellen." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "Sprache" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "Sage ausgewählten Text" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "Wiedergabe beenden" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "Stimmlage" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "Sprechrate" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "Wiedergabe anhalten" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Meine Lautsprecher" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Laut schalten" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Stumm schalten" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "Finger" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "Stift" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "Mein Touchpad" + +# (Markus S.) 'Zelle'? +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Masche" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Gruppe" + +# (Markus S.) war 'Zuhause', vgl. stuffer-sheet +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Startbildschirm" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Aktivität" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Bildschirmfoto" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Bildschirmfoto von \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"Deaktiviert\" fragt bei der Initalisierung nach einem Nicknamen; \"System\" " +"nutzt den vollständigen UNIX-Benutzernamen." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "" +"Weitere Verzeichnisse, die aktualisierte Übersetzungen enthalten können." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "Backup-URL" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "IDs geschützter Aktivitäten bündeln" + +#: ../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 "" +"Farbe des XO-Symbols, welches in Sugar den Benutzer darstellt. Sie setzt " +"sich aus der Linien- und der Füllfarbe zusammen, die jeweils als RGB-Farben " +"angegeben werden (zum Beispiel: #AC32FF,#9A5200)." + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Eckenverzögerung" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Standard-Schriftart" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Standard-Schriftgröße" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Standard-Benutzername" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Verzögerung bei der Aktivierung eines Rahmens über die Ecken." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Verzögerung bei der Aktivierung eines Rahmens über die Ränder." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "Verzeichnis zur Suche nach Übersetzungen" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Randverzögerung" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Favoriten-Layout" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Favoriten-Wiederaufnahmemodus" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Schriftart, die auf dem Desktop benutzt wird." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Schriftgröße, die auf dem Desktop benutzt wird." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "GSM-Netzwerk APN (VERALTET/UNGENUTZT)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "GSM-Netzwerk PIN (VERALTET/UNGENUTZT)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "GSM-Netzwerk PUK (VERALTET/UNGENUTZT)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "GSM-Netzwerk Access-Point-Namenskonfiguration (VERALTET/UNGENUTZT)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "GSM-Netzwerk Nummer (VERALTET/UNGENUTZT)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "GSM-Netzwerk Passwort (VERALTET/UNGENUTZT)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "GSM-Netzwerk Passwort-Konfiguration (VERALTET/UNGENUTZT)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" +"GSM-Netzwerk Konfiguration der Persönlichen Identifikationsnummer " +"(VERALTET/UNGENUTZT)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" +"GSM-Netzwerk Konfiguration des Persönlichen Entsperrungsschlüssel " +"(VERALTET/UNGENUTZT)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "GSM-Netzwerk Konfiguration der Telefonnummer (VERALTET/UNGENUTZT)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "GSM-Netzwerk Benutzername (VERALTET/UNGENUTZT)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "GSM-Netzwerk Konfiguration des Benutzernamens (VERALTET/UNGENUTZT)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Falls WAHR, wird Sugar es für andere Nutzer des Jabber-Servers zulassen, uns " +"zu suchen." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Falls WAHR, wird Sugar die Option \"Abmelden\" anzeigen." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Falls WAHR, wird Sugar die Option \"Neustart\" anzeigen." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"Falls WAHR, wird Sugar standardmäßige Ad-hoc-Netzwerke für Kanal 1, 6 und 11 " +"anzeigen. Wenn Sugar beim Start kein \"bekanntes\" Netzwerk erkennt, " +"verbindet es sich automatisch mit einem Ad-hoc-Netzwerk." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Jabber-Server" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Tastaturlayouts" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Tastaturmodell" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Tastatureinstellungen" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Layout der Favoriten-Ansicht." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Liste der Tastaturlayouts. Jeder Eintrag sollte von der Form " +"Layout(Variante) sein." + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Liste der Tastatureinstellungen." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "Stimmlage des Sugar-Dienstes Sprache" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "Die Stimmlage, die vom Sprachdienst in Sugar benutzt wird" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Automatische Energieverwaltung" + +# (Markus S.) war 'Extreme Energieverwaltung' +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Extremes Energiesparen" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Veröffentlichen auf Gerät" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "Sprechrate für den Sugar-Dienst Sprache" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "Die Rate, die vom Sprachdienst in Sugar benutzt wird" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Einstellung zum Stummschalten der Audio-Ausgabe." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Abmelden anzeigen" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Neustart anzeigen" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Sugar-Ad-hoc-Netzwerke anzeigen" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Stummgeschaltet" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Das zu verwendende Tastaturmodell" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Zeitzoneneinstellung des Systems." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL des zu nutzenden Jabber-Servers." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL, unter der das Backup gespeichert wird." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Benutzerfarbe" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Benutzername" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Benutzername, der überall auf dem Desktop benutzt wird." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"Benutzer werden diese Aktivitäten nicht in der Listenansicht löschen können." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Lautstärke" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Lautstärkepegel für die Audio-Ausgabe." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Im Wiederaufnahmemodus führt ein Anklicken des Favoriten-Symbols dazu, dass " +"der letzte Eintrag für diese Aktivität fortgesetzt wird." + +#: ../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: WARNUNG, mehr als eine Auswahl mit dem gleichen Namen " +"gefunden: %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: Parameter=%s ist keine verfügbare Option" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "sugar-control-panel: %s" + +# (Markus S.) war 'Benutzung: sugar-control-panel [ option ] key [ args ... ] \n'; 'Parameter' war 'Key'. +# TRANS: Translators, there's a empty line at the end of this string, +# which must appear in the translated string (msgstr) as well. +#. 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 "" +"Benutzung: sugar-control-panel [ Option ] Parameter [ Argumente ... ] \n" +" Einstellungen für Sugar. \n" +" Optionen: \n" +" -h Diese Hilfe anzeigen und beenden\n" +" -l Alle verfügbaren Optionen auflisten\n" +" -h Parameter Informationen zu diesem Parameter zeigen\n" +" -g Parameter Den aktuellen Wert für diesen Parameter auslesen\n" +" -s Parameter Den aktuellen Wert für diesen Parameter festlegen\n" +" -c Parameter Den aktuellen Wert für diesen Parameter zurücksetzen\n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Um die Änderungen zu übernehmen, muss Sugar neu gestartet werden.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Warnung" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Neustart zur Übernahme der Änderungen notwendig" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Änderungen verwerfen" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Später" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Jetzt neu starten" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Fertig" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Version %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Löschen bestätigen" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Löschen bestätigen: Willst du %s wirklich dauerhaft löschen?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Behalten" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Löschen" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Favorit entfernen" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Zum Favoriten machen" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Freie Form" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Ring" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spirale" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Rechteck" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Dreieck" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Anmeldung fehlgeschlagen" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Anmeldung erfolgreich" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Du bist nun an deinem Schulserver angemeldet." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Am Schulserver anmelden" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "Erneut Anmelden" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Software-Aktualisierung" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Aktualisiere deine Aktivitäten, um die Kompatibilität mit deiner neuen " +"Software sicherzustellen." + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Jetzt prüfen" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Listenansicht" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Favoritenansicht" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" +"Für das Drahtlosnetzwerk '%s'\n" +"wird ein Netzwerkschlüssel benötigt." + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Schlüsseltyp:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Authentifizierungstyp:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 Personal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "WLAN-Sicherheit:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Fortsetzen" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Beitreten" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Ad-hoc-Netzwerk %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Maschennetzwerk %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Kann nicht mit dem Server verbinden." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Der Server konnte die Anforderung nicht erfüllen." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Ablehnen" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s von %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Übertragung von %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Akzeptieren" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Verwerfen" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "Der andere Teilnehmer hat die Datenübertragung abgebrochen." + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Übertragung zu %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "Entfernen" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Öffnen" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Öffnen mit" + +# (Markus S.) 'clipping', nicht 'clipped' +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s ausgeschnitten" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Nachbarschaft" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Name:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Klicken zum Wechseln der Farbe:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Zurück" + +# (Markus S.) war 'Nächste' +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Vor" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Ohne Titel" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Keine Vorschau" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Art: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Unbekannt" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Datum: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Größe: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Kein Datum" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Teilnehmer:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Beschreibung:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Stichwörter:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Tagebuch" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Suchen" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Beliebiges Datum" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Heute" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Seit gestern" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Vergangene Woche" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Vergangener Monat" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Vergangenes Jahr" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Alle" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Meine Freunde" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Meine Klasse" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Alles" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "Kopieren nach" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Duplizieren" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "Fehler beim Kopieren des Eintrags. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Fehler" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Start" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "Nach Änderungsdatum sortieren" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "Nach Erstellungsdatum sortieren" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "Nach Größe sortieren" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "Ansicht sortieren" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Dein Tagebuch ist leer." + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "Dein Dokumentenverzeichnis ist leer." + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "Das Laufwerk ist leer." + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Keine passenden Einträge" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Suchfeld leeren" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "Ältere Version von %s Aktivität" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "Möchtest Du auf Version %s zurücksetzen?" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Dein Tagebuch ist voll." + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "" +"Lösche bitte einige alte Tagebucheinträge, um Platz für neue zu schaffen." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Tagebuch anzeigen" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Ein Objekt auswählen" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Schließen" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Fortsetzen mit" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Beginnen mit" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Keine Aktivität, um den Eintrag zu beginnen" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Senden an" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Details betrachten" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "Einträge ohne eine Datei lassen sich nicht senden." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "Einträge ohne eine Datei lassen sich nicht kopieren." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Zwischenablage" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Keine Freunde anwesend" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Keine gültige Verbindung gefunden" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Keine Aktivität, um den Eintrag fortzusetzen" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "Dokumente" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB frei" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "Der Grund für die Zustandsänderung des Gerätes ist unbekannt." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "Die Zustandsänderung ist normal." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "Das Gerät wird nun verwaltet." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "Das Gerät wird nicht länger verwaltet." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "Das Gerät konnte nicht für die Konfiguration bereitgestellt werden." + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"Die IP-Konfiguration konnte nicht umgesetzt werden (keine Adresse verfügbar, " +"Zeitüberschreitung etc.)." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "Die IP-Konfiguration ist nicht länger gültig." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "Geheimnisse wurden angefordert, aber nicht bereitgestellt." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" +"Der 802.1X-Supplikant wurde vom Zugangspunkt oder Authentifizierungsserver " +"getrennt." + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "Konfiguration des 802.1X-Supplikanten schlug fehl." + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "Der 802.1X-Supplikant brach ab oder scheiterte unerwartet." + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "Der 802.1X-Supplikant benötigte zu lange für die Authentifizierung." + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "Der PPP-Dienst startete nicht in der vorgegebenen Zeit." + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "Der PPP-Dienst wurde unerwartet getrennt." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "Der PPP-Dienst brach ab oder scheiterte unerwartet." + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "Der DHCP-Dienst startete nicht in der vorgegebenen Zeit." + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "Der DHCP-Dienst meldete einen unerwarteten Fehler." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "Der DHCP-Dienst brach ab oder scheiterte unerwartet." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "Der Dienst für geteilte Verbindungen konnte nicht starten." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" +"Der Dienst für geteilte Verbindungen brach ab oder scheiterte unerwartet." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "Der AutoIP-Dienst konnte nicht starten." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "Der AutoIP-Dienst meldete einen unerwarteten Fehler." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "Der AutoIP-Dienst brach ab oder scheiterte unerwartet." + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "Die Einwahl schlug fehl, weil die Leitung belegt war." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "Die Einwahl schlug mangels Einwahlton fehl." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "Die Einwahl schlug mangels Leitung fehl." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "Zeitüberschreitung bei der Einwahl." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "Einwahl fehlgeschlagen." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "Initialisierung des Modems fehlgeschlagen." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "Konnte den angegebenen GSM-Zugangspunkt (APN) nicht anwählen." + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "Suche nicht nach Netzwerken." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "Die Netzwerkregistrierung wurde verweigert." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "Zeitüberschreitung bei der Netzwerkregistrierung." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "Registrierung bei dem angeforderten GSM-Netzwerk fehlgeschlagen." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "PIN-Überprüfung fehlgeschlagen." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "Möglicherweise fehlt die nötige Firmware für das Gerät." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "Das Gerät wurde entfernt." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "Der Netzwerk-Manager ist nun im Ruhezustand." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "Die aktive Verbindung des Gerätes wurde entfernt oder ist verschwunden." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "Ein Benutzer oder Client forderte die Verbindungstrennung." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "Die Leitung/Verbindung des Gerätes hat sich geändert." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "Eine bestehende Verbindung für dieses Gerät wurde vermutet." + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "Der Empfänger ist jetzt verfügbar." + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "Das Modem wurde nicht gefunden." + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "Die Bluetooth-Verbindung ist fehlgeschlagen oder abgelaufen." + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "Unbenutzt." + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Freund entfernen" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Freunde werden" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Rechner ausschalten" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Rechner neu starten" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Benutzer abmelden" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Meine Einstellungen" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Einladen zu %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s konnte nicht gestartet werden." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Starte..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "Aktivität konnte nicht gestartet werden." + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Quelltext anzeigen" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Beenden" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Neu beginnen" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Inhalte anzeigen" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Entfernen" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Quelltext der Instanz" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Quelltext" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Quelltext des Aktivitätenbündels" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Quelltext des Sugar-Werkzeugkastens" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Quelltext anzeigen: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Quelltext anzeigen: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar in einem Fenster" diff --git a/po/dz.po b/po/dz.po new file mode 100644 index 0000000..87d6065 --- /dev/null +++ b/po/dz.po @@ -0,0 +1,1766 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2008-08-12 01:05-0400\n" +"Last-Translator: Tenzin Dendup \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "འབད་ཚར།" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "རྩ་བསྐྲད་གཏང་།" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "གསལ་གཞིའི་པར།" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "འབད་ཚར།" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "བཞག" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "ལྡེ་མིག་དབྱེ་བ:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "བདེན་བཤད་དབྱེ་བ:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "རྩ་བསྐྲད་གཏང་།" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "ཁ་ཕྱེ།" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "འདི་གི་ཁ་ཕྱེ།" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "མིང་:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "རྒྱབ།" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "ཤུལ་མམ།" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "ཆ་རོགས་རྩ་བསྐྲད་གཏང་།" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "ཆ་རོགས་བཟོ།" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "རྩ་བསྐྲད་གཏང་།" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/el.po b/po/el.po new file mode 100644 index 0000000..7976052 --- /dev/null +++ b/po/el.po @@ -0,0 +1,1836 @@ +# Greek translation of Sugar. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Simos Xenitellis , 2007. +msgid "" +msgstr "" +"Project-Id-Version: Sugar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-23 09:18+0200\n" +"Last-Translator: Yannis \n" +"Language-Team: Greek \n" +"Language: el\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 "Σχετικά με μένα" + +#: ../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 "πινελιά: χρώμα=%s απόχρωση=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "πινελιά: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "γέμισμα: χρώμα=%s απόχρωση=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "γέμισμα: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "Πατήστε για να αλλάξετε χρώμα:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Σχετικά με τον υπολογιστή μου" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Δεν είναι διαθέσιμο" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Ταυτότητα" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Σειριακός αριθμός:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Λογισμικό" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Αναγνωριστικό έκδοσης:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Υλικολογισμικό:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Υλικολογισμικό Ασύρματου:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Πνευματικά δικαιώματα & Άδεια" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 είναι το γραφικό περιβάλλον διεπαφής του χρήστη που σας ενδιαφέρει. " +"Είναι Ελεύθερο Λογισμικό/Λογισμικό Ανοικτού Κώδικα αδειοδοτημένο με τους " +"όρους της GNU Γενικής Άδειας Δημόσιας Χρήσης και είστε ευπρόσδεκτοι να το " +"μετατρέψετε και να διανείμετε αντίγραφά του, πάντα υπό τους όρους της άδειας " +"που περιγράφεται εδώ." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s δευτερόλεπτα" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Καθυστέρηση ενεργοποίησης" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Γωνία" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Άκρη" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Πληκτρολόγιο" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Μοντέλο πληκτρολογίου" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Πλήκτρο(α) για αλλαγή διάταξης" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "" +"Δεν είναι δυνατή η πρόσβαση στον ~/.i18n. Δημιουργία προκαθορισμένων " +"ρυθμίσεων." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Γλώσσα για τον κωδικό=%s δεν μπορεί να καθοριστεί." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Λυπάμαι! δε μιλάω «%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 "" +"Προσθέστε γλώσσες με τη σειρά που επιθυμείτε. Εάν μια μετάφραση δεν είναι " +"διαθέσιμη, θα χρησιμοποιηθεί η επόμενη γλώσσα της λίστας." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Ρύθμιση του modem" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Θα πρέπει να παρέχετε τις ακόλουθες πληροφορίες, ώστε να δημιουργήσετε μια " +"φορητή ευρυζωνική σύνδεση σε ένα δίκτυο 3G." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Όνομα χρήστη:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Κωδικός πρόσβασης:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Αριθμός:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Όνομα Σημείου Πρόσβασης (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Προσωπικός αριθμός (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "Λάθος σε καθορισμένη παράμετρο. Χρησιμοποιήστε 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Ασύρματο" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" +"Απενεργοποιήστε την ασύρματη εκπομπή για να εξοικονομήσετε ενέργεια στην " +"μπαταρία" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Ασύρματη εκπομπή" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "Διαγράψτε το ιστορικού δικτύου εάν έχετε προβλήματα σύνδεσης στο δίκτυο" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Διαγραφή ιστορικού δικτύου" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Συνεργασία" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" +"Σφάλμα στην παράμετρο ακραίας διαχείρισης ενέργειας, χρησιμοποιήστε ανοιχτό " +"ή κλειστό." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Διαχείριση Ενέργειας" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Αυτόματη διαχείριση ενέργειας (αυξάνει τη διάρκεια της μπαταρίας)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Μέγιστη διαχείριση ενέργειας (απενεργοποιεί την ασύρματη εκπομπή, αυξάνει τη " +"διάρκεια της μπαταρίας)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Ενημέρωση λογισμικού" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Η ενημέρωση λογισμικού διορθώνει σφάλματα, ελαχιστοποιεί τα τρωτά σημεία " +"ασφάλειας και παρέχει νέες λειτουργίες." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Έλεγχος %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Κατέβασμα αρχείων %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Ενημέρωση %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Το λογισμικό σας είναι ενημερωμένο" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Μπορείτε να εγκαταστήσετε %s ενημέρωση" +msgstr[1] "Μπορείτε να εγκαταστήσετε %s ενημερώσεις" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Έλεγχος για ενημερώσεις..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Εγκατάσταση ενημερώσεων..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s ενημέρωση εγκαταστάθηκε" +msgstr[1] "%s ενημερώσεις εγκαταστάθηκαν" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Εγκατάσταση επιλεγμένου" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Μέγεθος αρχείων για κατέβασμα: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Από την έκδοση %(current)s στην %(new)s (Μέγεθος: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Κανένα" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Η μπαταρία μου" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Αφαιρέθηκε" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Στη φόρτιση" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d απομένουν" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Φορτισμένη" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Διεύθυνση IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Αποσύνδεση" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Σύνδεση..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Συνδέθηκε" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "Δεν υπάρχει ασύρματη σύνδεση" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Κανάλι" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Ενσύρματο δίκτυο" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Ταχύτητα" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Ασύρματο modem" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Παρακαλώ περιμένετε..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Σύνδεση" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Αποσυνδέθηκε" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Άκυρο" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Προσπαθήστε πάλι για σύνδεση" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Σφάλμα: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Υπόδειξη:%s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "Συνδέθηκε για %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Ελέγξτε τις ρυθμίσεις PIN/PUK." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Ελέγξτε τις ρυθμίσεις του Ονόματος του Σημείου Πρόσβασης (APN) σας" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Ελέγξτε τις ρυθμίσεις Αριθμών." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Ελέγξτε τις ρυθμίσεις σας." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Δίκτυο πλέγματος" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Δίκτυο πλέγματος %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "Δεν υπάρχει σύνδεση GSM." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "Δημιουργία σύνδεσης στον πίνακα ελέγχου." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "Ομιλία" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "Εκφώνησε το επιλεγμένο κείμενο" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "Διακοπή αναπαραγωγής" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "Τόνος" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "Ρυθμός" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "Παύση αναπαραγωγής" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Τα ηχεία μου" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Άρση σίγασης" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Σίγαση" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "δάχτυλο" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "στυλό" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "Η πινακίδα αφής μου" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Πλεγματοειδές δίκτυο" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Φίλοι" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Αρχική" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Δραστηριότητα" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Στιγμιότυπο οθόνης" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Στιγμιότυπο οθόνης του «%s»" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"«απενεργοποιημένο» για ερώτηση παρωνυμίου κατά την αρχικοποίηση, «σύστημα» " +"για την επαναχρησιμοποίηση του ονόματος λογαριασμού σύνδεσης του UNIX." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "" +"Πρόσθετοι κατάλογοι οι οποίοι μπορεί να περιέχουν ενημερωμένες μεταφράσεις." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "Αντιγράφο του URL" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "Ομαδοποιημένες ΤΔ προστατευμένων Δραστηριοτήτων" + +#: ../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 "" +"Χρώμα για το εικονίδιο του ΧΟ που χρησιμοποιείται στον υπολογιστή. Είναι " +"συνδυασμός του χρώματος γραμμής και του χρώματος γεμίσματος σε μορφή RGB. " +"Παράδειγμα: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Καθυστέρηση γωνίας" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Προκαθορισμένη όψη γραμματοσειράς" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Προκαθορισμένο μέγεθος γραμματοσειράς" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Προκαθορισμένο παρωνύμιο" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Καθυστέρηση ενεργοποίησης του πλαισίου που χρησιμοποιεί τις γωνίες." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Καθυστέρηση ενεργοποίησης του πλαισίου που χρησιμοποιεί τις ακμές." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "Κατάλογος για αναζήτηση μεταφράσεων" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Καθυστέρηση ακμής" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Διάταξη αγαπημένων" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Λειτουργία επαναφοράς αγαπημένων" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Όψη γραμματοσειράς που χρησιμοποιείται στην επιφάνεια εργασίας." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Μέγεθος γραμματοσειράς που χρησιμοποιείται στην επιφάνεια εργασίας." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Εάν είναι ΑΛΗΘΕΣ, θα μπορούν οι άλλοι χρήστες να μας αναζητούν στον " +"εξυπηρετητή Jabber." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Εάν είναι ΑΛΗΘΕΣ, το Sugar θα εμφανίσει την επιλογή \"Αποσύνδεση\"." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Εάν είναι ΑΛΗΘΕΣ, το Sugar θα εμφανίσει την επιλογή \"Επανεκκίνηση\"." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"Εάν είναι ΑΛΗΘΕΣ, το Sugar θα εμφανίζει τα εξορισμού δίκτυα Ad-hoc για τα " +"κανάλια 1,6 και 11. Αν το Sugar δε βλέπει κανένα \"γνωστό\" δίκτυο όταν " +"ξεκινάει, τότε συνδέεται αυτόματα σε ένα δίκτυο Ad-hoc." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Εξυπηρετητής Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Διατάξεις πληκτρολογίου" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Μοντέλο πληκτρολογίου" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Επιλογές πληκτρολογίου" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Διάταξη προβολής αγαπημένων." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Κατάλογος διατάξεων πληκτρολογίου. Κάθε καταχώρηση πρέπει να είναι σε μορφή " +"διάταξης (εναλλακτική μορφή)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Κατάλογος επιλογών πληκτρολογίου." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Διαχείριση Αυτόματη" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Διαχείριση Ακραία" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Δημοσίευση στις Επινοήσεις" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Ρύθμιση για τη σίγαση της συσκευής ήχου." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Εμφάνιση Αποσύνδεσης" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Εμφάνιση Επανεκκίνησης" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Δείξε τα δίκτυα Ad-hoc του Sugar" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Ήχος σε σίγαση" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Το μοντέλο πληκτρολογίου που θα χρησιμοποιηθεί" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Ρύθμιση ζώνης ώρας συστήματος." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL του εξυπηρετητή jabber που θα χρησιμοποιηθεί." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL όπου αποθηκεύτηκε το αντίγραφο ασφάλειας." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Χρώμα χρήστη" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Όνομα χρήστη" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Το όνομα χρήστη που θα χρησιμοποιηθεί για την επιφάνεια εργασίας." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"Οι χρήστες δε θα μπορούν να αφαιρέσουν αυτές τις δραστηριότητες από την " +"προβολή λίστας." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Επίπεδο έντασης" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Επίπεδο έντασης της συσκευής ήχου." + +#: ../data/sugar.schemas.in.h:66 +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 "" +"πίνακας-ελέγχου-sugar: ΠΡΟΕΙΔΟΠΟΙΗΣΗ! βρέθηκαν περισσότερες από μία επιλογές " +"με το ίδιο όνομα: %s άρθρωμα: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "πίνακας-ελέγχου-sugar: κλειδί=%s μη διαθέσιμη επιλογή" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "πίνακας-ελέγχου-sugar: %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 "" +"Χρήση: sugar-control-panel [ επιλογή ] κλειδί [ ορίσματα ... ] \n" +" Έλεγχος περιβάλλοντος εργασίας sugar. \n" +" Επιλογές: \n" +" -h εμφάνιση αυτού του μηνύματος βοήθειας και έξοδος \n" +" -l λίστα όλων των διαθέσιμων επιλογών \n" +" -h κλειδί εμφάνιση πληροφοριών γι' αυτό το κλειδί \n" +" -g κλειδί εμφανίζει την τρέχουσα τιμή του κλειδιού \n" +" -s κλειδί καθορίζει την τρέχουσα τιμή του κλειδιού \n" +" -c κλειδί καθαρίζει την τρέχουσα τιμή του κλειδιού \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Για να εφαρμοστούν οι αλλαγές σου θα πρέπει να επανεκκινήσεις το Sugar.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Προειδοποίηση" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Οι αλλαγές απαιτούν επανεκκίνηση" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Ακύρωση αλλαγών" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Αργότερα" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Επανεκκίνηση τώρα" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Ολοκληρώθηκε" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Εντάξει" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Έκδοση %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Επιβεβαίωση διαγραφής" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Επιβεβαίωση διαγραφής: Θέλετε να διαγραφεί μόνιμα το %s;" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Διατήρηση" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Διαγραφή" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Αφαίρεση αγαπημένου" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Δημιουργία αγαπημένου" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Ελεύθερο σχήμα" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Δακτύλιος" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Σπείρα" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Πλαίσιο" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Τρίγωνο" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Η καταχώρηση απέτυχε" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Καταχώρηση Επιτυχής" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Είσαι τώρα καταχωρημένος(-η) στον εξυπηρετητή του σχολείου σου." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Καταχώρηση" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "Καταχώρηση ξανά" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Ενημέρωση λογισμικού" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Ενημερώστε τις δραστηριότητές σας για να βεβαιωθείτε για τη συμβατότητα τους " +"με το νέο σας λογισμικό" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Έλεγχος τώρα" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Προβολή λίστας" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Προβολή αγαπημένων" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Τύπος Κλειδιού:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Τύπος Πιστοποίησης:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 Ιδιωτικό" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Ασφάλεια ασύρματου δικτύου:" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Συνέχεια" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Σύνδεση" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Δίκτυο Ad-hoc %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Δίκτυο πλέγματος %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Απόρριψη" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s από %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Μεταφορά από το%s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Αποδοχή" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Απομάκρυνση" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "Το κα" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Μεταφορά στο%s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "Αφαίρεση" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Άνοιγμα" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Άνοιγμα με" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s στο πρόχειρο" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Γειτονιά" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Όνομα:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Κάντε κλικ για να αλλάξετε χρώμα:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Πίσω" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Επόμενο" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Χωρίς τίτλο" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Χωρίς προεπισκόπηση" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Είδος: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Άγνωστο" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Ημερομηνία: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Μέγεθος: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Χωρίς ημερομηνία" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Συμμετέχοντες:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Περιγραφή:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Ετικέτες:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Ημερολόγιο" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Αναζήτηση" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Οποτεδήποτε" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Σήμερα" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Από χθες" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Περασμένη εβδομάδα" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Περασμένος μήνας" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Περασμένος χρόνος" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Οποιοσδήποτε" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Οι φίλοι μου" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Η τάξη μου" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Οτιδήποτε" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "Αντιγραφή στο" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Δημιουργία αντίγραφου" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "Λάθος κατά την αντιγραφή της καταχώρησης. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Λάθος" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Έναρξη" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "Ταξινόμηση κατά ημερομηνία τροποποίησης" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "Ταξινόμηση κατά ημερομηνία δημιουργίας" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "Ταξινόμηση κατά μέγεθος" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "Προβολή ταξινόμησης" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Το ημερολόγιο είναι κενό" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "Ο φάκελος των αρχείων είναι κενός" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "Η συσκευή είναι κενή" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Δεν βρέθηκαν καταχωρήσεις που να ταιριάζουν" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Εκκαθάριση αναζήτησης" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "Παλαιότερη Έκδοση της Δραστηριότητας %s" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "Θέλεις να υποβαθμιστώ στην έκδοση %s" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "Εμφάνιση ημερολογίου" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Επιλογή ενός αντικειμένου" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Κλείσιμο" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Συνέχεια με" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Έναρξη με" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Δεν υπάρχει δραστηριότητα για την έναρξη της καταχώρησης" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Αποστολή στο" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Προβολή λεπτομερειών" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "Καταχωρίσεις χωρίς αρχείο δεν μπορούν να σταλούν." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "Καταχωρήσεις χωρίς αρχείο δεν μπορούν να αντιγραφούν." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Πρόχειρο" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Δεν εμφανίζονται φίλοι" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Δεν βρέθηκε έγκυρη σύνδεση" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Δεν υπάρχει δραστηριότητα για τη συνέχιση της καταχώρησης" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "Έγγραφα" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB ελεύθερα" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "Η αιτία για την αλλαγή κατάστασης της συσκευής είναι άγνωστη." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "Η αλλαγή κατάστασης είναι φυσιολογική." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "Η συσκευή τώρα βρίσκεται υπό διαχείριση." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "Η συσκευή δε βρίσκεται υπό διαχείριση πια." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "Η συσκευή δεν μπορεί να διαβαστεί για να ρυθμιστεί." + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"Η ρύθμιση της IP δε μπορεί να δεσμευθεί (δεν υπάρχουν διευθύνσεις, τέλος " +"χρόνου, κλπ)." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "Η ρύθμιση IP δεν ισχύει πια." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "Τα συνθηματικά είναι απαραίτητα, αλλά δε δόθηκαν." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" +"Ο πελάτης 802.1X αποσυνδέθηκε από το σημείο πρόσβασης ή το διακομιστή " +"πιστοποίησης." + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "Οι ρυθμίσεις του πελάτη 802.1X απέτυχαν." + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "Ο πελάτης 802.1X έφυγε ή έκλεισε απρόσμενα." + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "Ο πελάτης 802.1X δεν πιστοποιήθηκε έγκαιρα." + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "Η υπηρεσία PPP απέτυχε να ξεκινήσει μέσα στον επιτρεπόμενο χρόνο." + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "Η υπηρεσία PPP αποσυνδέθηκε απρόσμενα." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "Η υπηρεσία PPP έκλεισε ή απέτυχε απρόσμενα." + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "Η υπηρεσία DHCP απέτυχε να ξεκινήσει μέσα στον επιτρεπόμενο χρόνο." + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "Η υπηρεσία DHCP ανάφερε ένα μη αναμενόμενο σφάλμα." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "Η υπηρεσία DHCP έκλεισε ή απέτυχε απρόσμενα." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "Η υπηρεσία κοινόχρηστης σύνδεσης απέτυχε να ξεκινήσει." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "Η υπηρεσία κοινόχρηστης σύνδεσης έκλεισε ή απέτυχε απρόσμενα." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "Η υπηρεσία αυτόματης διευθυνσιοδότησης απέτυχε να ξεκινήσει." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" +"Η υπηρεσία αυτόματης διευθυνσιοδότησης ανάφερε ένα μη αναμενόμενο σφάλμα." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "Η υπηρεσία αυτόματης διευθυνσιοδότησης έκλεισε ή απέτυχε απρόσμενα." + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "Η κλήση αριθμού απέτυχε γιατί η γραμμή ήταν κατηλειμμένη." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "Η κλήση αριθμού απέτυχε γιατί δεν υπήρχε ήχος κλήσης." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "Η κλήση αριθμού απέτυχε επειδή δεν υπήρχε φέρον σήμα." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "Η κλήση βγήκε εκτός χρονικού ορίου." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "Η κλήση απέτυχε." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "Η αρχικοποίηση του αποδιαμορφωτή απέτυχε." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "Αποτυχία επιλογής του καθορισμένου σημείου πρόσβασης GSM" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "Δε γίνεται αναζήτηση για δίκτυα." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "Δεν επιτράπηκε η καταχώρηση στο δίκτυο." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "Η καταχώρηση στο δίκτυο βγήκε εκτός ορίου χρόνου." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "Απέτυχε η καταχώρηση στο δίκτυο GSM που ζητήθηκε." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "Ο έλεγχος PIN απέτυχε." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "Το απαραίτητο υλικολογισμικό της συσκευής ίσως να λείπει." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "Η συσκευή απομακρύνθηκε." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "Ο Διαχειριστής Δικτύου πήγε για ύπνο." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "Η ενεργή σύνδεση της συσκευής απομακρύνθηκε ή χάθηκε." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "Ένας χρήστης ή πελάτης ζήτησε την αποσύνδεση." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "Η σύνδεση/σήμα της συσκευής άλλαξε." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Διαγραφή φίλου/ης" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Να γίνει φίλος/η" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Τερματισμός" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Επανεκκίνηση" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Αποσύνδεση" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Οι ρυθμίσεις μου" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Πρόσκληση στην %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "Η %s απέτυχε να ξεκινήσει." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Εκκίνηση..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "Η δραστηριότητα απέτυχε να ξεκινήσει" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Προβολή πηγής" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Κλείσιμο" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Έναρξη νέου" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Προβολή περιεχομένων" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Αφαίρεση" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Στιγμιότυπο πηγής" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Πηγή" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Πηγή δέσμης δραστηριοτήτων" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Πηγή Εργαλειοθηκών του Sugar" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Προβολή πηγής: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Προβολή πηγής: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Το Sugar σε παράθυρο" diff --git a/po/en.po b/po/en.po new file mode 100644 index 0000000..662fcda --- /dev/null +++ b/po/en.po @@ -0,0 +1,1813 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-11 08:44+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: en\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:235 +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:43 +msgid "Not available" +msgstr "Not available" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identity" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Serial Number:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Software" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Build:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Wireless Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Copyright and License" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +msgstr "Full license:" + +#: ../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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "Edge" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Keyboard" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Keyboard Model" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Key(s) to change layout" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "Username:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Password:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Number:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Access Point Name (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Personal Identity Number (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "Wireless" + +#: ../extensions/cpsection/network/view.py:69 +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:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +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:107 +msgid "Discard network history" +msgstr "Discard network history" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Collaboration" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Error in extreme pm argument, use on/off." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Power management" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Automatic power management (increases battery life)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Extreme power management (disables wireless radio, increases battery life)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Software update" + +#: ../extensions/cpsection/updater/view.py:63 +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:125 +#, python-format +msgid "Checking %s..." +msgstr "Checking %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Downloading %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Updating %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Your software is up-to-date" + +#: ../extensions/cpsection/updater/view.py:141 +#, 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:159 +msgid "Checking for updates..." +msgstr "Checking for updates..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Installing updates..." + +#: ../extensions/cpsection/updater/view.py:173 +#, 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:255 +msgid "Install selected" +msgstr "Install selected" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Download size: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "From version %(current)s to %(new)s (Size: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "None" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "My Battery" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Removed" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Charging" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d remaining" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Charged" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP address: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Disconnect" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Connecting..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Connected" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "No wireless connection" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Channel" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Wired Network" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Speed" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Wireless modem" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Please wait..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Connect" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Disconnected" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Cancel" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Try connection again" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Error: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Suggestion: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "Connected for %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Check your PIN/PUK configuration." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Check your Access Point Name (APN) configuration" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Check the Number configuration." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Check your configuration." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Mesh Network" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Mesh Network %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "No GSM connection available." + +#: ../extensions/deviceicon/network.py:758 +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:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "Say selected text" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "Stop playback" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "Pitch" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "Rate" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "Pause playback" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "My Speakers" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Unmute" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Mute" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "finger" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "stylus" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "My touchpad" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Mesh" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Group" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Home" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Activity" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Screenshot" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "Additional directories which can contain updated translations." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "Backup URL" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "Bundle IDs of protected activities" + +#: ../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 "" +"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:7 +msgid "Corner Delay" +msgstr "Corner Delay" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Default font face" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Default font size" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Default nick" + +#: ../data/sugar.schemas.in.h:11 +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:12 +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:13 +msgid "Directory to search for translations" +msgstr "Directory to search for translations" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Edge Delay" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Favorites Layout" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Favorites resume mode" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Font face that is used throughout the desktop." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Font size that is used throughout the desktop." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "GSM network APN (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "GSM network PIN (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "GSM network PUK (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "GSM network access point name configuration (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "GSM network number (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "GSM network password (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "GSM network password configuration (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "GSM network telephone number configuration (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "GSM network username (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "GSM network username configuration (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:32 +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:33 +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:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "If TRUE, Sugar will show a \"Restart\" option." + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "Jabber Server" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Keyboard layouts" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Keyboard model" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Keyboard options" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Layout of the favorites view." + +#: ../data/sugar.schemas.in.h:41 +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:42 +msgid "List of keyboard options." +msgstr "List of keyboard options." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "Pitch value for the speech sugar service" + +#: ../data/sugar.schemas.in.h:44 +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:45 +msgid "Power Automatic" +msgstr "Power Automatic" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Power Extreme" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Publish to Gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "Rate value for the speech sugar service" + +#: ../data/sugar.schemas.in.h:49 +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:50 +msgid "Setting for muting the sound device." +msgstr "Setting for muting the sound device." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Show Log out" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Show Restart" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Show Sugar Ad-hoc networks" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Sound Muted" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "The keyboard model to be used" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Timezone setting for the system." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL of the jabber server to use." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL where the backup is saved to." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "User Color" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "User Name" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "User name that is used throughout the desktop." + +#: ../data/sugar.schemas.in.h:63 +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:64 +msgid "Volume Level" +msgstr "Volume Level" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Volume level for the sound device." + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Warning" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Changes require restart" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Cancel changes" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Later" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Restart now" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Done" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Version %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Confirm erase" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, 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:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Keep" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Erase" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Remove favorite" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Make favorite" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Freeform" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Ring" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spiral" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Box" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Triangle" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Registration Failed" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Registration Successful" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "You are now registered with your school server." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Register" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "Register again" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Software Update" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "Update your activities to ensure compatibility with your new software" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Check now" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "List view" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Favorites view" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, 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:140 +msgid "Key Type:" +msgstr "Key Type:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Authentication Type:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 Personal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Wireless Security:" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Resume" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Join" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Ad-hoc Network %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Mesh Network %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Cannot connect to the server." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "The server could not complete the request." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Decline" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s of %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Transfer from %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Accept" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Dismiss" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "The other participant canceled the file transfer" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Transfer to %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "Remove" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Open" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +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:43 +msgid "Neighborhood" +msgstr "Neighborhood" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Name:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Click to change color:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Back" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Next" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Untitled" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "No preview" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Kind: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Unknown" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Date: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Size: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "No date" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Participants:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Description:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Tags:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Journal" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Search" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Anytime" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Today" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Since yesterday" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Past week" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Past month" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Past year" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Anyone" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "My friends" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "My class" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Anything" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "Copy to" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Duplicate" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "Error while copying the entry. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Error" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Start" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "Sort by date modified" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "Sort by date created" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "Sort by size" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "Sort view" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Your Journal is empty" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "Your documents folder is empty" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "The device is empty" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "No matching entries" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Clear search" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "Older Version Of %s Activity" + +#: ../src/jarabe/journal/misc.py:274 +#, 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:64 +msgid "Your Journal is full" +msgstr "Your Journal is full" + +#: ../src/jarabe/journal/modalalert.py:68 +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:80 +msgid "Show Journal" +msgstr "Show Journal" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Choose an object" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Close" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Resume with" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Start with" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "No activity to start entry" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Send to" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "View Details" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "Entries without a file cannot be sent." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "Entries without a file cannot be copied." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Clipboard" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "No friends present" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "No valid connection found" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "No activity to resume entry" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "Documents" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB Free" + +#: ../src/jarabe/model/network.py:211 +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:213 +msgid "The state change is normal." +msgstr "The state change is normal." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "The device is now managed." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "The device is no longer managed." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "The device could not be readied for configuration." + +#: ../src/jarabe/model/network.py:221 +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:224 +msgid "The IP configuration is no longer valid." +msgstr "The IP configuration is no longer valid." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "Secrets were required, but not provided." + +#: ../src/jarabe/model/network.py:228 +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:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "Configuration of the 802.1X supplicant failed." + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "The 802.1X supplicant quit or failed unexpectedly." + +#: ../src/jarabe/model/network.py:235 +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:237 +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:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "The PPP service disconnected unexpectedly." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "The PPP service quit or failed unexpectedly." + +#: ../src/jarabe/model/network.py:243 +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:245 +msgid "The DHCP service reported an unexpected error." +msgstr "The DHCP service reported an unexpected error." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "The DHCP service quit or failed unexpectedly." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "The shared connection service failed to start." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "The shared connection service quit or failed unexpectedly." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "The AutoIP service failed to start." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "The AutoIP service reported an unexpected error." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "The AutoIP service quit or failed unexpectedly." + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "Dialing failed because the line was busy." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "Dialing failed because there was no dial tone." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "Dialing failed because there was no carrier." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "Dialing timed out." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "Dialing failed." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "Modem initialization failed." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "Failed to select the specified GSM APN" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "Not searching for networks." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "Network registration was denied." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "Network registration timed out." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "Failed to register with the requested GSM network." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "PIN check failed." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "Necessary firmware for the device may be missing." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "The device was removed." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "NetworkManager went to sleep." + +#: ../src/jarabe/model/network.py:290 +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:293 +msgid "A user or client requested the disconnection." +msgstr "A user or client requested the disconnection." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "The device's carrier/link changed." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "The device's existing connection was assumed." + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "The supplicant is now available." + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "The modem could not be found." + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "The Bluetooth connection failed or timed out." + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "Unused." + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Remove friend" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Make friend" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Shutdown" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Restart" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Logout" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "My Settings" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Invite to %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s failed to start." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Starting..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "Activity failed to start" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "View Source" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Stop" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Start new" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Show contents" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Remove" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Instance Source" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Source" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Activity Bundle Source" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Sugar Toolkit Source" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "View source: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "View source: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar in a window" diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..9a27fea --- /dev/null +++ b/po/es.po @@ -0,0 +1,1860 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: olpc-sugar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-12 10:31+0200\n" +"Last-Translator: AlanJAS \n" +"Language-Team: Fedora Spanish \n" +"Language: es\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" +"X-Poedit-Language: Spanish\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-Basepath: .\n" + +#: ../extensions/cpsection/aboutme/__init__.py:24 +msgid "About Me" +msgstr "Acerca de mí" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Debe ingresar un nombre." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "borde: color=%s tonalidad=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "borde: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "relleno: color=%s tonalidad=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "relleno: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Error en modificadores de color especificados." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Error en colores especificados." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Clic para cambiar su color:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Acerca de mi computadora" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "No disponible" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identidad" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Número de serie:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Software" + +# Por ahora.. +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Ensamble:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Azúcar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Firmware de la red inalámbrica:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Licencia y derechos de autor" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"Azúcar, es la interfaz gráfica del usuario que esta mirando. Azucar es " +"software libre, se encuentra bajo la licencia \"GNU Licencia Publica " +"General\", y esta invitado para cambiar y/o distribuir copias de ésta, bajo " +"ciertas condiciones que se describen en ella." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Licencia completa:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Fecha y hora" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Error, zona horaria no existe." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Zona horaria" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Cuadro" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "El valor debe ser un número entero." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "nunca" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "instantáneo" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s segundos" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Retraso de la activación" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Esquina" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Borde" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Teclado" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Modelo de teclado" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Tecla(s) para cambiar el diseño" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Diseño(s) de teclado" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Idioma" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "" +"No se puede acceder a ~/.i18n. Crear configuración internacional estándar." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "El lenguaje del código=%s no pudo ser determinado." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Lo siento, yo no hablo '%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 "" +"Añade idiomas en el orden que prefieres. Si una traducción no se encuentra " +"disponible, se usará la siguiente en la lista." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Configuración del módem" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Necesitará proveer la información siguiente para configurar una conexión de " +"banda ancha (3G) de red de telefonía celular." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Nombre de usuario:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Contraseña:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Número:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Nombre de punto de acceso (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Número de identificación personal (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Red" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Estado desconocido." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Error en argumento especificado de radio use on/off." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Error en argumento especificado use 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Inalámbrica" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Apague la radio inalámbrica y ahorre vida de batería" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "Descarte el historial de la red si tiene problemas de conexión" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Descarte historial de la red" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Colaboración" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"El servidor es equivalente al cuarto en el cual se esta; la gente en el " +"mismo servidor podrá verse entre ellos, aun cuando no esten en la misma red." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Servidor:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Energía" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Error en argumento automático de manejo de energía, use on/off." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Error en argumento extremo de manejo de energía, use on/off." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Manejo de energía" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Manejo automático de energía (incrementa la vida de la batería)" + +# best translationfor now +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Manejo extremo de energía (deshabilita el radio wireless, incrementa la vida " +"de la batería)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Actualización de software" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Las actualizaciones de software corrigen errores, eliminan vulnerabilidades " +"de seguridad y proveen nuevas características." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Probando %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Descargando %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Actualizando %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Tu software esta actualizado" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Puedes instalar %s actualización" +msgstr[1] "Puedes instalar %s actualizaciones" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Buscando actualizaciones..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Instalando actualizaciones..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s actualización fue instalada" +msgstr[1] "%s actualizaciones fueron instaladas" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Instalación seleccionada" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Tamaño de descarga: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Desde la version %(current)s hacia %(new)s (Size: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Ninguno" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Mi batería" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Eliminado" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Cargando" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Queda muy poca batería" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "Quedan %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Cargada" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Direccion IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Desconectar" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Conectando..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Conectado" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "No hay una conexión inalámbrica" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Canal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Red Cableada" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Velocidad" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Módem inalámbrico" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Espere por favor..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Conectar" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Desconectado" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Cancelar" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Probar la conexión nuevamente" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Error: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Sugerencia: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "Conectado a %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Revise la configuración de su PIN/PUK." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Revise la configuración del nombre de su punto de acceso (APN)" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Revise el Número en la configuración." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Revise su configuración." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Red Malla" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Red Malla %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "No se dispone de conexión GSM." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "Crear una conexión en el panel de control." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "Decir" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "Decir texto seleccionado" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "Parar la grabación" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "Tono" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "Velocidad" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "Pausar la grabación " + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Mis parlantes" + +# la traducción la tome del AlsaMixer de Gnome. +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Dar voz" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Silenciar" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "dedo" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "estilo" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "Mi superficie táctil" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Malla" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Grupo" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Hogar" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Actividad" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Captura de pantalla" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Captura pantalla de \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"disabled\" (desactivado) para preguntar apodo al inicio; \"system\" (sistema) " +"para reutilizar el nombre largo de la cuenta UNIX." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "Directorios adicionales que pueden contener traducciones actualizadas." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "URL de Respaldo" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "Bundle IDs de actividades protegidas" + +#: ../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 "" +"El color para el ícono del XO se utiliza en todo el escritorio. La cadena " +"está compuesta por el trazo y color de relleno de color, el formato es el de " +"colores RGB. Ejemplo: #AC32FF, #9A5200" + +# es la mejor traduccion ? +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Retraso de las Esquinas" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Tipo de letra predeterminado" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Tamaño de letra predeterminado" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Apodo predeterminado" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Retraso para la activación del cuadro utilizando las esquinas." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Retraso para la activación del cuadro utilizando los bordes." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "Directorio a buscar para traducciones" + +# es la mejor traduccion ? +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Retraso del Borde" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Diseño de favoritos" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Modo de reanudar favoritos" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Tipo de letra que se utiliza en todo el escritorio." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Tamaño de letra que se utiliza en todo el escritorio." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "APN de la red GSM (OBSOLETO / NO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "PIN de la red GSM (OBSOLETO / NO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "PUK de la red GSM (OBSOLETO / NO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" +"Configuración del nombre del punto de acceso (APN) de la red GSM (OBSOLETO / " +"NO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "Número de la red GSM (OBSOLETO / NO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "Contraseña de la red GSM (OBSOLETO / NO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "Configuración de la contraseña de la red GSM (OBSOLETO / NO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" +"Configuración del numero de identificación personal (PIN) de la red GSM " +"(OBSOLETO / NO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" +"Configuración de la clave de desbloqueo personal (PUK) de la red GSM " +"(OBSOLETO / NO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" +"Configuración del número de teléfono de la red GSM (OBSOLETO / NO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "Nombre de usuario de la red GSM (OBSOLETO / NO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" +"Configuración del nombre de usuario de la red GSM (OBSOLETO / NO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Si es TRUE, Azúcar habilitará que otros usuarios nos busquen en el servidor " +"Jabber." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Si es TRUE, Azúcar mostrará una opción \"Terminar Sesión\"." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Si es TRUE, Azúcar mostrará una opción \"Reiniciar Sesión\"." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"Sí es TRUE, Azúcar mostrara las redes ad-hoc predefinidas para canales 1,6, " +"y 11. Sí Azúcar no ve redes conocidas cuando inicia, se conectará " +"automáticamente a una red ad-hoc." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Servidor Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Distribuciones del teclado" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Modelo del teclado" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Opciones del teclado" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Distribución de las actividades favoritas." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Lista de las distribuciones de teclado. Cada entrada debe ser en la forma " +"distribución(variante)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Lista de las opciones del teclado." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "Registro del Tono Vocal para el Servicio de Lenguaje Azucar/Sugar" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "Registro del Tono Vocal usado por el Servicio de Lenguaje Azucar/Sugar" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Manejo automática de energía" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Manejo extremo de energía" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Publicar en Gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "Valor de velocidad para el servicio de habla de Sugar" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "Valor de velocidad usado por el servicio de habla de Sugar" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Configuración para silenciar el dispositivo de sonido." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Mostrar Terminar Sesión" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Mostrar Reiniciar" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Mostrar redes específicas de Azúcar" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Sonido silenciado" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "El modelo del teclado que se utilizará" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Configuración de zona horaria para el sistema." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL del servidor de Jabber para usar." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL donde se guarda el backup." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Color del usuario" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Nombre de usuario" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Nombre de usuario que se utiliza en todo el escritorio." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"Usuarios que no se les permitirá borrar actividades a través de la vista de " +"lista." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Nivel de volumen" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Nivel de volumen para el dispositivo de sonido." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Cuando en el modo de retomar, al hacer clic en un icono de favoritos causa " +"que se retome la última entrada de esa actividad." + +#: ../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: ADVERTENCIA, hay más de una opción con el mismo nombre: " +"módulo %s: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "sugar-control-panel: clave=%s no es una opción disponible" + +#: ../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. +#. 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 "" +"Uso: sugar-control-panel [ opción ] clave [ args ... ] \n" +" Control para el ambiente de sugar. \n" +" Opciones: \n" +" -h muestra este mensaje de ayuda y sale \n" +" -l enumera todas las opciones disponibles \n" +" -h clave muestra la información sobre esta clave \n" +" -g clave obtiene el valor actual de la clave \n" +" -s clave establece el valor actual de la clave \n" +" -c clave vaciar el valor actual de la clave \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Para aplicar sus cambios tiene que reiniciar Azúcar.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Advertencia" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Los cambios requieren reiniciar" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Cancelar cambios" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Después" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Reiniciar ahora" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Hecho" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Aceptar" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Versión %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Confirmar borrado" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Confirmar el borrado: ¿Quiere borrar %s de forma permanente?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Guardar" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Borrar" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Remover favorito" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Hacer favorito" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Forma libre" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Anillo" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Espiral" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Caja" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Triángulo" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Error al registrar" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Registro exitoso" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Ahora estás registrado en el servidor de colegio." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Registro" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "Registrar nuevamente" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Actualización de Software" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Actualice sus actividades para asegurar compatibilidad con su nuevo software" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Pruebe ahora" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Vista en lista" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Vista de favoritos" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" +"Una clave de encriptación es requerida para\n" +"la red inalámbrica '%s'." + +# This is an encryption key type, not a keyboard key +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Tipo de clave:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Tipo de autenticación:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA y WPA2 Personal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Seguridad inalámbrica:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Retomar" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Unirse" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Red específica %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Red Malla %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "No se puede conectar al servidor." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "El servidor no pudo completar el pedido." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Rechazar" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s de %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Transferencia desde %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Aceptar" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Descartar" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "El otro participante canceló la transferencia del archivo" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Transferencia a %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "Eliminar" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Abrir" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Abrir con" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "recorte de %s" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Vecindario" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Nombre:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Clic para cambiar de color:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Atrás" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Siguiente" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Sin título" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Sin vista previa" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Tipo: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Desconocido" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Fecha: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Tamaño: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Sin fecha" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Participantes:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Descripción:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Etiquetas:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Diario" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Buscar" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Cualquier momento" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Hoy" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Desde ayer" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Última semana" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Último mes" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Último año" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Cualquiera" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Mis amigos" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Mi clase" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Cualquiera" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "Copiar a" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Duplicar" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "Error mientras se copiaba la entrada. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Error" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Iniciar" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "Ordenar por fecha de modificación" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "Ordenar por fecha de creación" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "Ordenar por tamaño" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "Ordenar vista" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Su diario está vacío" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "Tu carpeta de documentos está vacía" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "El dispositivo está vacío" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "No hay entradas coincidentes" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Limpiar búsqueda" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "Versión más antigua de la actividad %s" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "¿Desea instalar la versión %s, mas antigua?" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Su diario está lleno" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "" +"Por favor borre algunas entradas viejas del diario para hacer espacio a las " +"nuevas entradas." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Mostrar diario" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Escoja un objeto" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Cerrar" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Reiniciar con" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Empezar con" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "No se encontró una actividad para iniciar la entrada" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Enviar a" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Ver detalles" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "Las entradas sin un archivo no pueden ser copiadas." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "Entradas sin un archivo no pueden ser copiadas." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Portapapeles" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "No hay amigos presentes" + +# tildes +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "No se encontró una conexión válida" + +# tildes... +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "No se encontró una actividad para retomar la entrada" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "Documentos" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB libres" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "La razón para el cambio de estado del dispositivo es desconocida." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "El cambio de estado es normal." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "El dispositivo está siendo administrado." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "El dispositivo ya no está siendo administrado." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "El dispositivo no pudo ser preparado para su configuración." + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"La configuración IP no pudo ser reservada (no hay dirección disponible, " +"tiempo fuera, etc)." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "La configuración IP ya no es válida." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "Claves requeridas, pero no fueron suministradas." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" +"El cliente 802.1X fué desconectado del punto de acceso o del server de " +"autenticación." + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "Configuración del cliente 802.1X fallada." + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "El cliente 802.1X ha abandonado o fallado inesperadamente." + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "El cliente 802.1X ha tomado demasiado tiempo para autenticar." + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "El servicio PPP ha fallado en comenzar en el tiempo permitido." + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "El servicio PPP se ha desconectado inesperadamente." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "El servicio PPP ha abandonado o fallado inesperadamente." + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "El servicio DHCP ha fallado en comenzar en el tiempo permitido." + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "El servicio DHCP ha reportado un error inesperado." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "El servicio DHCP ha abandonado o fallado inesperadamente." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "El servicio de conexión compartida ha fallado al iniciar." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" +"El servicio de conexión compartida ha abandonado o fallado inesperadamente." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "El servicio AutoIP ha fallado al iniciar." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "El servicio AutoIP ha reportado un error inesperado." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "El servicio AutoIP ha abandonado o fallado inesperadamente." + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "Conexión fallada porque la línea estaba ocupada." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "Conexión fallada porque no había tono de llamada." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "Conexión fallada porque no había portadora." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "Llamada expiró por tiempo." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "Llamada falló." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "Fallo en inicialización de modem." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "Fallo al seleccionar el punto de acceso (APN) GSM" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "No se buscan redes." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "Registración en la red fué rechazada." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "Registración en la red expiró." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "Falló la registración con la red GSM solicitada." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "Control de PIN fallado." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "Firmware necesario para el dispositivo puede faltar." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "El dispositivo fué quitado." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "NetworkManager fue dormido." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" +"Las conexiones activas del dispositivo fueron removidas o desaparecieron." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "Un usuario o cliente solicitó la desconexión." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "La portadora/link del dispositivo a cambiado." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "La conexión existente del dispositivo es asumida." + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "El supllicante no está disponible." + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "El modem no puede ser encontrado." + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "La conexión Bluetooth falló por tiempo de espera." + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "No usada." + +# "Eliminate friend"??? That's a bit harsh. Wouldn't "quitar amigo" be a better choice?-- +# agree but i preffer remover :). that verbe has the exact meaning we are looking on here. +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Remover amigo" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Agregar amigo" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Apagar" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Reiniciar" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Salir" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Mis ajustes" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Invitar a %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s falló al iniciar." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Iniciando..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "Actividad falló al iniciar" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Ver fuente" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Parar" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Empezar nuevo" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Mostrar contenidos" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Quitar" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Fuente de la instancia" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Fuente" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Fuente del paquete de la actividad" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Fuentes de Sugar Toolkit" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Ver código fuente: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Ver código fuente: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar en una ventana" diff --git a/po/fa.po b/po/fa.po new file mode 100644 index 0000000..50d36bc --- /dev/null +++ b/po/fa.po @@ -0,0 +1,1788 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 07:20+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: fa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-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:235 +#, fuzzy +msgid "Click to change your color:" +msgstr "برای تبدیلی رنگ تیک کن:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 +#, fuzzy +msgid "%s seconds" +msgstr "%s ثانیه ها" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 +#, fuzzy +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "دسترسی نمیتواند ~/.i18n. زمینه معیاری بسازید" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "زبان برای رمز=%s تعین نمی گردد" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "ببخشید من سخن گفته نمیتوانم \"%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 +#, fuzzy +msgid "Error in specified argument use 0/1." +msgstr "اشتباه دراستدلال معین از خاموش/روشن نمودن رادیو " + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "شد" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "پاک کردن" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +#, fuzzy +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +#, fuzzy +msgid "Connecting..." +msgstr "منقطع شدن" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "کانال" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "منقطع شد" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "لغو کن" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "شبکه بافته شده" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, fuzzy +msgid "Mesh Network %s" +msgstr "شبکه بافته شده" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "گروه" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "خانه" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr " فعالیت" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "عکس صفحه" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "برای اجرا نمودن تغیرات تان شما باید شوگر را دوباره چالان کنید\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "شد" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "درست است." + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "نگه داشتن" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "پاک کن" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "راجستر و ثبت کردن" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "نوعیت کلید:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "نوعیت تصدیق:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "از سر گرفتن" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "پیوستن" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +#, fuzzy +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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "پاک کردن" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "باز کردن" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "همسایگی" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "نام:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "برای تبدیلی رنگ تیک کن:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "عقب" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "بعدی" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "بی‌عنوان" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "پیش‌نمایشی نیست" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "بی تاریخ" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "تعریف:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "برچسبها" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "روزنگار" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "جستجو" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "هرزمان" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "امروز" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "از دیروز" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "هفته گذشته" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "ماه گذشته" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "سال گذشته" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "هرکس" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "دوستانم" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "کلاسم" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "هرچیز" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "شروع" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "دوست را پاک کن" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "دوست بسازید" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "بند کردن" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "دعوت به ( ) %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "در حال شروع شدن...." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "توقف" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "پاک کردن" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/fa_AF.po b/po/fa_AF.po new file mode 100644 index 0000000..1ac2b79 --- /dev/null +++ b/po/fa_AF.po @@ -0,0 +1,1864 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:14+0200\n" +"Last-Translator: Chris \n" +"Language-Team: Dari \n" +"Language: fa_AF\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-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 "روکش: رنگ =%s hue=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "روکش: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "پرکردن : رنگ=%s hue=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "پرکردن %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "برای تبدیلی رنگ کلیک کنید" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "درباره کمپیوتر من" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "دردسترس نیست" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "هویت" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "سریال نمبر" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "قطعات" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "ساختن" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "شوگر" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "نرم افزار" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "سفت افزار بی سیم" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "کاپی رایت وجواز" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "وقت محلی" + +# (poterminology) /home/sayamindu/test/fa_AF/record-activity.po (1) +# (poterminology) /home/sayamindu/test/fa_AF/sugar.po (1) +#: ../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 "ثانیه ها%s" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "تاخیر فعال سازی" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "کنج" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "سن" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "دسترسی ناموفق~/.i18n. تنظیمات استندرد ایجاد کنید" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "زبان برای رمز: تعین کرده نمی شود=%s" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "متاسفم من حرف نمی زنم'%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 +#, fuzzy +msgid "Error in specified argument use 0/1." +msgstr "اشتباه دراستدلال مشخص رادیو روشن یا خاموش را استفاده کنید" + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "بی سیم" + +#: ../extensions/cpsection/network/view.py:69 +#, fuzzy +msgid "Turn off the wireless radio to save battery life" +msgstr "رادیوی بی سیم را خاموش سازید تا عمر بطری را تضمین کرده باشید" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "رادیو" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "تاریخ شبکه را دوراندازید اگر شما با وصل کردن شبکه مشکل دارید" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "تاریخ شبکه را دوراندازید" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "همدستی" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "اشتباه دراستدلال افراطی پی ام روشن یا خاموش را استعمال کنید" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "مدیریت برق" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "مدیریت برق اتوماتیک توان بطری را افزایش میدهد" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"مدیریت برق خیلی زیاد رادیوی بی سیم را ازبین میبرد وعمربطری را افزایش میدهد" + +#: ../extensions/cpsection/updater/__init__.py:21 +#, fuzzy +msgid "Software update" +msgstr "تجدید نرم افزار" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "انجام شد" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "باطری من" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "حذف گردید" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "درحال چارچ شدن" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d باقی مانده" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "چارج شد" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "آی پی آدرس : %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "درحال وصل شدن..." + +# (poterminology) /home/sayamindu/test/fa_AF/chat-activity.po (1) +# (poterminology) /home/sayamindu/test/fa_AF/sugar.po (4) +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "وصل گردید" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "کانال" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "شبکه سیم کشی شده" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "سرعت" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +# (poterminology) /home/sayamindu/test/fa_AF/sugar.po (1) +# (poterminology) /home/sayamindu/test/fa_AF/connect-activity.po (1) +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "اتصال" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "منقطع شدن" + +# +# (poterminology) /home/sayamindu/test/fa_AF/TamTamMini.activity.po (1)
+# (poterminology) /home/sayamindu/test/fa_AF/TamTamEdit.activity.po (1)
+# (poterminology) /home/sayamindu/test/fa_AF/web-activity.po (1)
+# (poterminology) /home/sayamindu/test/fa_AF/TamTamSynthLab.activity.po (1)
+# (poterminology) /home/sayamindu/test/fa_AF/TamTamJam.activity.po (1)
+# (poterminology) /home/sayamindu/test/fa_AF/sugar-toolkit.po (1)
+# (poterminology) /home/sayamindu/test/fa_AF/sugar.po (2)
+# (poterminology) /home/sayamindu/test/fa_AF/write.po (1) +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "لغوکن" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +#, fuzzy +msgid "%d KB" +msgstr "dkb%" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "شبکه تنیده" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, fuzzy +msgid "Mesh Network %s" +msgstr "شبکه تنیده" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "بلندگوهای من" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "صدا آزاد" + +# (poterminology) /home/sayamindu/test/fa_AF/TamTamEdit.activity.po (1) +# (poterminology) /home/sayamindu/test/fa_AF/sugar.po (1) +# (poterminology) /home/sayamindu/test/fa_AF/TamTamJam.activity.po (1) +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "بدون صدا" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "تنیده یا بافته" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "گروه" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "خانه" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "فعالیت" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "عکس صفحه" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +#, python-format, fuzzy +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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "پشتیبان یو آر ال" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../data/sugar.schemas.in.h:6 +#, fuzzy +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:7 +msgid "Corner Delay" +msgstr "تاخیری کنج" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "تاخیر در فعال سازی قاب که گوشه ها را استعمال مینماید" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "تاخیر در فعال سازی قاب که کناره ها را استعمال مینماید" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "تاخیری لبه" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "طرح بندی دلخواه" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "طریقه از سرگرفتن دلخواه ها" + +#: ../data/sugar.schemas.in.h:18 +#, fuzzy +msgid "Font face that is used throughout the desktop." +msgstr "نام استفاده کننده که از طریق دیسکتاپ استفاده میگردد" + +#: ../data/sugar.schemas.in.h:19 +#, fuzzy +msgid "Font size that is used throughout the desktop." +msgstr "نام استفاده کننده که از طریق دیسکتاپ استفاده میگردد" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"اگر درست باشد، شوگر مارا قابل جستجو برای استفاده کنندگان دیگری از سرور جبیر " +"خواهد ساخت" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "سرور جبیر" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "طرح بندی نمایش دلخواه" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "برق اتوماتیک" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "برق شدید" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "به ابزار نشر کن" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "تنظیم برای بی صدا کردن دستگاه صدا" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "صدا خاموش گردید" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "تنظیم وقت محل برای سیستم" + +#: ../data/sugar.schemas.in.h:58 +#, fuzzy +msgid "URL of the jabber server to use." +msgstr "یو آر ال سرور جبیر برای استفاده" + +#: ../data/sugar.schemas.in.h:59 +#, fuzzy +msgid "URL where the backup is saved to." +msgstr "یو آر ال جاییکه پشتیبان حفظ گردیده است به" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "رنگ استفاده کننده" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "نام استفاده کننده" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "نام استفاده کننده که از طریق دیسکتاپ استفاده میگردد" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "سطح درجه صدا" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "سطح درجه صدا برای دستگاه صدا" + +#: ../data/sugar.schemas.in.h:66 +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 "" +"شوگر-کنترول پنل- : هشدار: بیش ترازیک انتخاب یافت شد همراه با همین قسم نام %" +"s %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "کلید یک انتخاب موجود نیست یا دردسترس نیستsugar-control-panel:=%s " + +#: ../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 " +" [ args ... ] \n" +" انتخاب:این پیام کمکی را نشان دهید واین علامت را خارج سازید تمام انتخاب " +"های موجود را بارگذاری کنید کلید معلومات را درباره این کلید نشان میدهد کلید " +"مقدار جاری کلید را به دست میآورد کلید مقدارجاری برای کلید مستقرمیسازد کلید " +"مقداری فعلی را پاک میکند\n" +" \n" +" -h \n" +" -l \n" +" -h \n" +" -g \n" +" -s \n" +" -c \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +#, fuzzy +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "برای اجرا نمودن تغیرات تان شما باید شوگررا دوباره آغازکنید\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "هشدار" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "دوباره شروع کردن لازم را تغیرمیدهد" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "تغیرات را لغوکن" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "بعدی" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "حالا دوباره آغازکنید" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "انجام شد" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "درست است" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "پاک کردن را تایید کنید" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "پاک کردن را تایید کنید: آیا میخوهید که به طوردایم پاک کنید %s?" + +# 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) +# (poterminology) /home/sayamindu/test/fa_AF/sugar.po (1) +# (poterminology) /home/sayamindu/test/fa_AF/sugar-toolkit.po (3) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "نگه داشتن" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "پاک کردن" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "دلخواه را حذف کنید" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "دلخواه بساز" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "شکل آزاد" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "حلقه" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "مار پیچ" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "بکس" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "مثلث" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "ثبت نام موفق نگردید" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "ثبت نام موفق" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "شما حالا با سرورمکتب تان ثبت نام شدید" + +# (poterminology) /home/sayamindu/test/fa_AF/TamTamMini.activity.po (1) +# (poterminology) /home/sayamindu/test/fa_AF/sugar.po (1) +# (poterminology) /home/sayamindu/test/fa_AF/TamTamJam.activity.po (1) +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "ثبت نام کردن" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "تجدید نرم افزار" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "فعالیت ها ی خودرا تجدید کنید تا سازگاری تان را با قطعات تضمین کنید" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "حالا چک کنید" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "دید لیستی" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "دید دلخواه" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "نوعیت کلید" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "نوعیت تصدیق" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "شخصی WPA &WPA2" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "امنیت بی سیم" + +# TRANS: Action label for resuming an activity. +# (poterminology) /home/sayamindu/test/fa_AF/journal-activity.po (1) +# (poterminology) /home/sayamindu/test/fa_AF/sugar.po (1) +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "شروع شدن" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "پیوستن" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +#, fuzzy +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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "کاهش" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +#, python-format, fuzzy +msgid "%dB" +msgstr "db%" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +#, python-format, fuzzy +msgid "%dKB" +msgstr "dkb%" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +#, python-format, fuzzy +msgid "%dMB" +msgstr "dmb%" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +#, python-format, fuzzy +msgid "%s of %s" +msgstr "از" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, fuzzy +msgid "Transfer from %s" +msgstr "انتقال از" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "قبول کردن" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "مرخص کردن" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, fuzzy +msgid "Transfer to %s" +msgstr "انتقال به" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "حذف کن" + +# (poterminology) /home/sayamindu/test/fa_AF/TamTamSynthLab.activity.po (2) +# (poterminology) /home/sayamindu/test/fa_AF/TamTamMini.activity.po (2) +# (poterminology) /home/sayamindu/test/fa_AF/TamTamEdit.activity.po (2) +# (poterminology) /home/sayamindu/test/fa_AF/sugar.po (2) +# (poterminology) /home/sayamindu/test/fa_AF/TamTamJam.activity.po (2) +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "باز" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "بازکردن با" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +#, python-format, fuzzy +msgid "%s clipping" +msgstr "چیدن" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "همسایگی" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "نام" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "برای تبدیلی رنگ کلیک کن" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "عقب" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "بعدی" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "بدون عنوان" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "پیش نمایش نیست" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "تاریخی نیست" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "اشتراک کنندگان" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "تعریف" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "برچسپ ها" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "ژورنال" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "جستجو کردن" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "هر وقت" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "امروز" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "از دیروز تا کنون" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "هفته گذشته" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "ماه گذشته" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "سال گذشته" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "هر کدام" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "رفقای من" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "صنف من" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "هر چیز" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +# (poterminology) /home/sayamindu/test/fa_AF/journal-activity.po (1) +# (poterminology) /home/sayamindu/test/fa_AF/measure_stable.po (1) +# (poterminology) /home/sayamindu/test/fa_AF/sugar.po (1) +# (poterminology) /home/sayamindu/test/fa_AF/slider-puzzle.po (2) +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "شروع" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "روزنامه شما خالی است" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +#, fuzzy +msgid "No matching entries" +msgstr "دخولی ها مطابقت ندارد" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "جستجو را پاک کن" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "روزنامه را نشان بده" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "یک شیء را انتخاب کن" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "بسته کردن" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "ادامه دادن همراه" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "شروع همراه" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "کدام فعالیت نمیباشد تا دخولی را شروع نماید" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "ارسال کن به" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "جزییات را ببین" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "کدام رفیق حاضر نیست" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "کدام اتصال با ارزش پیدا نگردید" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "کدام فعالیت نمیباشد تا دخولی را آغاز نماید" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d مگابایت خالی" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "رفیق را حذف کن" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "دوست بساز" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "خاموش کردن" + +# (poterminology) /home/sayamindu/test/fa_AF/sugar.po (2) +# (poterminology) /home/sayamindu/test/fa_AF/memorize.po (1) +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "شروع مجدد" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "خروج از سیستم" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "تنظیمات من" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "دعوت به %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "شروع شدن ..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "منبع نما" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "توقف" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "مطالب را نشان بده" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "حذف کن" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "منبع مثال یا نمونه" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "منبع" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "منبع مجموعه فعالیت" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "نمایش منبع %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +#, python-format, fuzzy +msgid "View source: %r" +msgstr "نمایش منبع %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/ff.po b/po/ff.po new file mode 100644 index 0000000..fc8fd69 --- /dev/null +++ b/po/ff.po @@ -0,0 +1,1769 @@ +# 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 , YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \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" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Momtu" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Jokku" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Innitaaka" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Alaa ƴeewto" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Alaa ñalnde" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Sifo" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Kelme jiilorɗe" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Jaaynirde" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Yiilo" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Nde woni kala" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Hannde" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Gila haŋki" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Yontere ɓennunde" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Lewru ɓennundu" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Hitaande ɓennunde" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Mo woni kala" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Musidɓe am" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Kalaas am" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Ko woni kala" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Fuɗɗo" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/fil.po b/po/fil.po new file mode 100644 index 0000000..143ff30 --- /dev/null +++ b/po/fil.po @@ -0,0 +1,1764 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2010-09-08 11:46+0200\n" +"Last-Translator: bopolissimus \n" +"Language-Team: LANGUAGE \n" +"Language: fil\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.3\n" + +#: ../extensions/cpsection/aboutme/__init__.py:24 +msgid "About Me" +msgstr "Tungkol sa akin" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Kailangan mong maglagay nang pangalan" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..2572582 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,1846 @@ +# translation of sugar.po to french +# Copyright (C) 2007 the Package Owner +# This file is distributed under the same license as the sugar graphical shell package. +# Samuel Bizien , 2007. +msgid "" +msgstr "" +"Project-Id-Version: sugar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-05-01 00:20+0200\n" +"Last-Translator: samy boutayeb \n" +"Language-Team: French \n" +"Language: fr\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 "À propos de moi" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Vous devez indiquer un nom." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "stroke: couleur=%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: couleur=%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 "Erreur dans les modificateurs de couleur spécifiés." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Erreur dans les couleurs spécifiées." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Cliquer pour changer de couleur :" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "À propos de mon ordinateur" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Non disponible" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identité" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Numéro de série :" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Logiciel" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Version :" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar :" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Micrologiciel :" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Micrologiciel sans fil :" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Copyright et licence" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 est l'interface graphique utilisateur que vous utilisez actuellement. " +"Sugar est un logiciel libre couvert par la licence GNU/GPL (General Public " +"License). Vous êtes autorisé à le modifier et/ou à en distribuer des copies " +"aux conditions spécifiées." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Licence complète :" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Date et heure" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Erreur : le fuseau horaire n'existe pas." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Fuseau horaire" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Cadre" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "La valeur doit être un entier." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "jamais" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "immédiat" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s secondes" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Délai d'activation" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Coin" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Bord" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Clavier" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Modèle de clavier" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Touche(s) de modification de la disposition" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Disposition(s) du clavier" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Langue" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Accès impossible à ~/.i18n. Création de paramètres par défaut." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "La langue associée au code = %s n'a pas pu être déterminée." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Désolé je ne parle pas '%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 "" +"Ajoutez des langues dans l'ordre souhaité. Si la traduction n'est pas " +"disponible, la suivante dans la liste sera utilisée." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Configuration du modem" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Fournir les informations ci-après pour configurer une connexion large bande " +"à un réseau cellulaire (3G)." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Identifiant :" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Mot de passe :" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Numéro :" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Nom du Point d'Accès (APN) :" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Numéro d'Identité Personnel (PIN) :" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Réseau" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "État inconnu." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Argument 'radio' spécifié incorrect. Utiliser marche/arrêt." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Argument spécifié incorrect. Utiliser 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Réseau sans fil" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Désactiver la radio sans fil pour prolonger la batterie" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"Ignorer l'historique du réseau si vous avez du mal à vous connecter au " +"réseau" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Ignorer l'historique du réseau" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Collaboration" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Le serveur est comparable à la pièce où vous êtes ; les personnes connectées " +"au même serveur pourront se voir même si elles ne sont pas sur le même " +"réseau." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Serveur :" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Alimentation" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Erreur dans l'argument gestion de l'alimentation automatique." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Erreur dans l'argument gestion de l'alimentation extrême." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Gestion de l'alimentation" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Gestion automatique de l'alimentation (prolonge la batterie)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Gestion extrême de l'alimentation (désactive la radio sans fil, prolonge la " +"batterie)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Mise à jour logicielle" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Les mises à jour logicielles corrigent les erreurs, éliminent les failles de " +"sécurité et apportent de nouvelles fonctionnalités." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Vérification de %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Téléchargement de %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Mise à jour de %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Vos logiciels sont à jour" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Vous pouvez installer %s mise à jour" +msgstr[1] "Vous pouvez installer %s mises à jour" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Vérification des mises à jour..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Installation des mises à jour..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s mise à jour a été installée" +msgstr[1] "%s mises à jour ont été installées" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Installer les activités sélectionnées" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Taille du téléchargement : %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "De la version %(current)s à %(new)s (taille : %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Zéro" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 Ko" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f Ko" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f Mo" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Ma batterie" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Retiré" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "En charge" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "La batterie est pratiquement déchargée" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d restantes" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Charge complète" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Adresse IP : %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Déconnecter" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Connexion..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Connecté" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "Aucune connexion sans fil" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Canal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Réseau filaire" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Vitesse" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Modem sans fil" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Patienter..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Connecter" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Déconnecté" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Annuler" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Essayez de vous reconnecter" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Erreur : %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Suggestion : %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "Connecté depuis %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d Ko" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Vérifiez votre configuration PIN/PUK." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Vérifiez la configuration de votre nom de point d'accès (APN)" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Vérifiez la configuration du numéro." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Vérifiez votre configuration." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Réseau maillé" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Réseau maillé %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "Aucune connexion GSM disponible." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "Créez une connexion dans le panneau de contrôle." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "Voix" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "Dites le texte sélectionné" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "Interrompre la lecture" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "Hauteur" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "Taux" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "Pause de la lecture" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Haut-parleurs" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Activer le son" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Mettre en sourdine" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "doigt" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "stylet" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "Mon pavé tactile" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Réseau maillé" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Groupe" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Accueil" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Activité" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Capture d'écran" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Capture d'écran de \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"désactivé\" pour demander un pseudo lors de l'initialisation ; \"système\" " +"pour réutiliser l'identifiant long du compte UNIX." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "" +"Les dossiers supplémentaires peuvent comporter des traductions mises à jour." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "Sauvegarde de l'URL" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "Identifiant des bundles des activités protégées" + +#: ../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 "" +"Couleur de l'icône du XO utilisée sur le Bureau. La chaîne indique la " +"couleur du trait et du remplissage. Le format correspond aux couleurs RVB. " +"Exemple : #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Délai des coins" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Police par défaut" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Corps de la police par défaut" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Pseudo par défaut" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Délai d'activation du cadre à l'aide des coins." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Délai d'activation du cadre à l'aide des bords." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "Répertoire de recherche des traductions" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Délai des bords" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Disposition favorite" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Mode de reprise favori" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Police utilisée sur le bureau." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Corps de la police utilisée sur le bureau." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "APN du réseau GSM (DÉCONSEILLÉ/INUTILISÉ)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "Code PIN du réseau GSM (DÉCONSEILLÉ/INUTILISÉ)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "Code PUK du réseau GSM (DÉCONSEILLÉ/INUTILISÉ)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" +"Configuration du nom du point d'accès au réseau GSM (DÉCONSEILLÉ/INUTILISÉ)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "Numéro du réseau GSM (DÉCONSEILLÉ/INUTILISÉ)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "Mot de passe du réseau GSM (DÉCONSEILLÉ/INUTILISÉ)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "Configuration du mot de passe du réseau GSM (DÉCONSEILLÉ/INUTILISÉ)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" +"Configuration du numéro d'identification personnel du réseau GSM " +"(DÉCONSEILLÉ/INUTILISÉ)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" +"Configuration de la clé de déverrouillage personnelle (PUK) du réseau GSM " +"(DÉCONSEILLÉ/INUTILISÉ)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" +"Configuration du numéro de téléphone du réseau GSM (DÉCONSEILLÉ/INUTILISÉ)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "Identifiant du réseau GSM (DÉCONSEILLÉ/INUTILISÉ)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "Configuration de l'identifiant du réseau GSM (DÉCONSEILLÉ/INUTILISÉ)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Si VRAI, Sugar permettra aux autres utilisateurs du serveur Jabber de nous " +"retrouver." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Si VRAI, Sugar affichera une option \"Déconnexion\"." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Si VRAI, Sugar affichera une option \"Redémarrer\"." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"Si VRAI, Sugar affichera les réseaux ad-hoc des canaux 1,6 et 11. si Sugar " +"ne voit aucun réseau \"connu\" au démarrage, il se connecte automatiquement à " +"un réseau ad-hoc." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Serveur Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Dispositions du clavier" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Modèle de clavier" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Options du clavier" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Disposition de la vue favorite." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Liste des dispositions de claviers. Chaque ligne doit avoir la forme " +"disposition(variante)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Liste des options de clavier." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "Valeur de hauteur du service vocal de Sugar" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "Valeur de hauteur utilisée par le service volcal de Sugar" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Alimentation automatique" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Alimentation extrême" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Publication vers Gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "Valeur de taux du service vocal de Sugar" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "Valeur de taux utilisée par le service vocal de Sugar" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Configuration de la mise en sourdine du périphérique audio." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Afficher Déconnexion" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Afficher Redémarrer" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Afficher les réseaux ad-hoc Sugar" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Audio désactivé" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Modèle de clavier à utiliser" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Configuration du fuseau horaire du système." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL du serveur Jabber à utiliser." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL d'enregistrement de la sauvegarde." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Couleurs de l'utilisateur" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Nom de l'utilisateur" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Nom identifiant l'utilisateur sur le bureau." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"Les utilisateurs ne sont pas autorisés à supprimer ces activités depuis la " +"vue liste." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Niveau de volume" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Niveau de volume du périphérique audio." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Lorsque le mode reprise est activé, cliquez sur l'icône Favoris pour " +"reprendre le dernier élément de cette activité." + +#: ../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: ATTENTION, plusieurs options avec un nom identique ont " +"été trouvées : %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 n'est pas une option disponible" + +#: ../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. +#. 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 ] clé [ args ... ] \n" +" Contrôle de l'environnement sugar. \n" +" Options: \n" +" -h afficher ce message d'aide et quitter \n" +" -l afficher la liste des options disponibles \n" +" -h clé afficher les informations sur cette clé \n" +" -g clé obtenir la valeur actuelle associée à cette clé \n" +" -s clé définir la valeur actuelle de cette clé \n" +" -c clé \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Relancer Sugar pour que les changements prennent effet.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Attention" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Relancer pour valider" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Abandonner" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Plus tard" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Relancer maintenant" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Accepter" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Version %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Confirmer la suppression" + +# Conformer la suppression : faut-il supprimer %s définitivement ? +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Confirmer la suppression : faut-il supprimer %s définitivement ?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Conserver" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Supprimer" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Retirer le favori" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Ajouter aux favoris" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Libre" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Concentrique" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spirale" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Boîte" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Triangle" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Échec de l'enregistrement" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Enregistrement réussi" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Vous êtes maintenant enregistré sur le serveur de l'école." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "S'enregistrer" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "S'enregistrer à nouveau" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Mise à jour logicielle" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "Actualiser les activités pour assurer la compatibilité logicielle" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Vérifier maintenant" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Écran liste" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Écran favoris" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" +"Une clé de chiffrement sans fil est requise pour\n" +"le réseau sans fil '%s'." + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Type de clé :" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Type d'authentification :" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 Personal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Sécurité sans fil :" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Reprendre" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Rejoindre" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Réseau ad-hoc %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Réseau maillé %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Impossible de se connecter au serveur." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Le serveur n'a pas pu achever la requête." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Refuser" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%do" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKo" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMo" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s sur %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Transfert depuis %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Accepter" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Refuser" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "L'autre participant a annulé le transfert du fichier" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Transfert vers %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "Retirer" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Ouvrir" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Ouvrir avec" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s coupure" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Voisinage" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Nom :" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Cliquer pour changer de couleur :" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Précédent" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Suivant" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Sans titre" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Pas de prévisualisation" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Variante : %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Inconnu" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Date : %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Taille : %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Sans date" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Participants :" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Description :" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Étiquettes :" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Journal" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Rechercher" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "N'importe quand" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Aujourd'hui" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Depuis hier" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Depuis une semaine" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Depuis un mois" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Depuis une année" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Tout le monde" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Mes amis" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Ma classe" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Tout" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "Copier vers" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Recopier" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "Erreur lors de la copie de l'entrée. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Erreur" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Lancer" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "Trier sur la date de modification" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "Trier sur la date de création" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "Trier sur la taille" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "Trier l'affichage" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Le journal est vide" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "Le dossier documents est vide" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "Le périphérique est vide" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Aucune entrée correspondante" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Effacer la recherche" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "Ancienne version de l'activité %s" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "Voulez-vous revenir à la version %s" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Votre journal est plein" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "" +"Effacer des entrées anciennes du Journal pour libérer de la place pour les " +"nouvelles entrées." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Montre le Journal" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Choisir un objet" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Fermer" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Reprendre avec" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Commencer avec" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Aucune activité pour démarrer l'entrée" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Envoyer à" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Afficher les détails" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "Impossible d'envoyer les entrées sans fichier." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "Impossible de copier les entrées sans fichier." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Presse-papier" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Aucun ami présent" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Aucune connexion valide trouvée" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Aucune activité pour reprendre l'entrée" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "Documents" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d Mo de libre" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "La raison du changement d'état du périphérique est inconnue." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "Le changement d'état est normal." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "Le périphérique est géré." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "Le périphérique n'est plus géré." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "Le périphérique n'est pas disponible pour être configuré." + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"Impossible de réserver la configuration IP (adresse indisponible, " +"dépassement de délai, etc.)." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "La configuration IP n'est plus valide." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "Secrets requis mais non fournis." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" +"Déconnexion du supplicant 802.1X du point d'accès ou du serveur " +"d'authentification." + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "Échec de la configuration du supplicant 802.1X." + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "Arrêt ou échec inattendu du supplicant 802.1X." + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "Délai d'authentification trop long du supplicant 802.1X." + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "Échec du démarrage du service PPP dans le délai autorisé." + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "Déconnexion inattendue du service PPP." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "Arrêt ou échec inattendu du service PPP." + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "Échec du démarrage du service DHCP dans le délai autorisé." + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "Le service DHCP a signalé une erreur inattendue." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "Arrêt ou échec inattendu du service DHCP." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "Échec du démarrage du service de connexion partagée." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "Arrêt ou échec inattendu du service de connexion partagée." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "Échec du démarrage du service AutoIP." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "Le service AutoIP a signalé une erreur inattendue." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "Arrêt ou échec inattendu du service AutoIP." + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "Échec de la numérotation car la ligne était occupée." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "Échec de la numérotation en l'absence de tonalité." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "Échec de la numérotation résultant de l'absence de porteuse." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "Délai de la numérotation dépassé." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "Échec de la numérotation." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "Échec de l'initialisation du modem." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "Échec de la sélection de l'APN du GSM spécifié" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "Pas de recherche de réseaux." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "Enregistrement sur le réseau refusé." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "Enregistrement sur le réseau expiré." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "Échec de l'enregistrement avec le réseau GSM demandé." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "Échec de la vérification du code PIN." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "Le micrologiciel requis pour le périphérique est peut-être absent." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "Le périphérique a été retiré." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "NetworkManager est en veille." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "La connexion active du périphérique a été supprimée ou a disparu." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "Un utilisateur ou un client a demandé la déconnexion." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "La porteuse/le lien du périphérique a changé." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "La connexion du périphérique est supposée être établie." + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "Le suppliant est disponible." + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "Modem introuvable." + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "Échec ou dépassement de délai de la connexion Bluetooth." + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "Inutilisé." + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Retirer de mes amis" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Ajouter à mes amis" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Éteindre" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Redémarrer" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Se déconnecter" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Mes paramètres" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Inviter à %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s n'a pas pu être démarré." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Démarrage..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "Échec du démarrage de l'activité" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Afficher la source" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Arrêter" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Commencer un nouveau" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Afficher les contenus" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Retirer" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Instancie source" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Source" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Source du paquet de l'activité" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Source du kit d'outils Sugar" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Afficher le code source : %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Afficher le code source : %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar dans une fenêtre" diff --git a/po/gu.po b/po/gu.po new file mode 100644 index 0000000..f0a366c --- /dev/null +++ b/po/gu.po @@ -0,0 +1,1775 @@ +# 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 , YEAR. +# 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 , YEAR. +# 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 , YEAR. +# 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 , YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \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" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/ha.po b/po/ha.po new file mode 100644 index 0000000..f9dad23 --- /dev/null +++ b/po/ha.po @@ -0,0 +1,1762 @@ +# translation of sugar.po to hausa +# This file is distributed under the same license as the PACKAGE package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. +# saudat mohammed , 2006. +msgid "" +msgstr "" +"Project-Id-Version: sugar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2006-07-10 16:37+0100\n" +"Last-Translator: saudat mohammed \n" +"Language-Team: hausa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.10\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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Baya" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Yi Bincike" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/he.po b/po/he.po new file mode 100644 index 0000000..f0bf244 --- /dev/null +++ b/po/he.po @@ -0,0 +1,1881 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:36+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: he\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 +#, fuzzy +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 "ציור: צבע=%s גוון=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "ציור: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "מילוי: צבע=%s גוון=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "מילוי: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +#, fuzzy +msgid "Error in specified color modifiers." +msgstr "אירעה שגיאה בצבעי התבנית שהוזנו." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "אירעה שגיאה בצבעים שהוזנו." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "יש ללחוץ כדי לשנות את הצבע:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "קצת על המחשב שלי" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "לא זמין" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "זהות" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "מספר סידורי:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "תוכנה" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "בנייה:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +#, fuzzy +msgid "Sugar:" +msgstr "שוגר:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "קושחה:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "קושחה אלחוטית:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "זכויות יוצרים ורישיון" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +#, fuzzy +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) הוא הממשק הגרפי אשר נמצא מולך. שוגר הוא תוכנה חופשית אשר נמצאת " +"תחת הרישיון הציבורי הכללי של גנו (GNU GPL). אנחנו מזמינים אותך להשתמש בו, " +"לשנות אותו ולהפיץ אותו תחת התנאים המתוארים שם." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s שניות" + +#: ../extensions/cpsection/frame/view.py:54 +#, fuzzy +msgid "Activation Delay" +msgstr "זמן הפעלה" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "פינה" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "קצה" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +#, fuzzy +msgid "Keyboard" +msgstr "מקלדת" + +#: ../extensions/cpsection/keyboard/view.py:190 +#, fuzzy +msgid "Keyboard Model" +msgstr "מודל מקלדת" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +#, fuzzy +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 +#, fuzzy +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "הגישה אל ~/.i18n אינה אפשרית. יש ליצור הגדרות סטנדרטיות. " + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "לא נמצאה שפה המתאימה לקוד=%s." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "סליחה, איני דובר '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +#, fuzzy +msgid "Username:" +msgstr "שם משתמש:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +#, fuzzy +msgid "Password:" +msgstr "סיסמה:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +#, fuzzy +msgid "Number:" +msgstr "מספור:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +#, fuzzy +msgid "Access Point Name (APN):" +msgstr "שם נקודת גישה:" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "רשת" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "מצב אינו ידוע." + +#: ../extensions/cpsection/network/model.py:101 +#, fuzzy +msgid "Error in specified radio argument use on/off." +msgstr "ערך שגוי לפרמטר רדיו. השתמש ב on/off." + +#: ../extensions/cpsection/network/model.py:152 +#, fuzzy +msgid "Error in specified argument use 0/1." +msgstr "ערך שגוי לפרמטר. השתמש ב 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "רשת אלחוטית" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "כדאי לכבות את הרשת האלחוטית כדי להאריך את חיי הסוללה" + +#: ../extensions/cpsection/network/view.py:82 +#, fuzzy +msgid "Radio" +msgstr "רדיו" + +#: ../extensions/cpsection/network/view.py:98 +#, fuzzy +msgid "Discard network history if you have trouble connecting to the network" +msgstr "אם יש לך בעיות התחברות לרשת כדאי לנקות את ההיסטוריה של חיבורי הרשת" + +#: ../extensions/cpsection/network/view.py:107 +#, fuzzy +msgid "Discard network history" +msgstr "ניקוי היסטוריה של חיבורי הרשת" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "שיתוף פעולה" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +msgid "Server:" +msgstr "שרת:" + +#: ../extensions/cpsection/power/__init__.py:21 +#, fuzzy +msgid "Power" +msgstr "חשמל" + +#: ../extensions/cpsection/power/model.py:90 +#, fuzzy +msgid "Error in automatic pm argument, use on/off." +msgstr "שגיאה בפרמטר ניהול חשמל אוטומטי, השתמש ב on/off." + +#: ../extensions/cpsection/power/model.py:120 +#, fuzzy +msgid "Error in extreme pm argument, use on/off." +msgstr "שגיאה בפרמטר ניהול חשמל קיצוני, השתמש ב on/off." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "ניהול חשמל" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "ניהול חשמל אוטומטי (מאריך את חיי הסוללה)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "ניהול חשמל קיצוני (ניתוק רשת אלחוטית, מאריך את חיי הסוללה)" + +#: ../extensions/cpsection/updater/__init__.py:21 +#, fuzzy +msgid "Software update" +msgstr "עדכון תוכנה" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +#, python-format, fuzzy +msgid "Checking %s..." +msgstr "%s בודק את..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +#, python-format, fuzzy +msgid "Downloading %s..." +msgstr "%s מתקבל..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +#, python-format, fuzzy +msgid "Updating %s..." +msgstr "%s מעדכן את..." + +#: ../extensions/cpsection/updater/view.py:139 +#, fuzzy +msgid "Your software is up-to-date" +msgstr "המערכת מעודכנת" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +#, fuzzy +msgid "Checking for updates..." +msgstr "מחפש עדכונים…" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "סיום" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "הסוללה שלי" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "נמחק" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "בטעינה" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "נותרו %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "הסוללה מלאה" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "כתובת IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +#, fuzzy +msgid "Disconnect" +msgstr "התנתק" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "מתחבר..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "מחובר" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "ערוץ" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "רשת קוית" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "מהירות" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +#, fuzzy +msgid "Please wait..." +msgstr "אנא המתן..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +#, fuzzy +msgid "Connect" +msgstr "התחבר" + +#: ../extensions/deviceicon/network.py:276 +#, fuzzy +msgid "Disconnected" +msgstr "מנותק" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +#, fuzzy +msgid "Cancel" +msgstr "ביטול" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +#, python-format, fuzzy +msgid "Error: %s" +msgstr "שגיאה: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +#, python-format, fuzzy +msgid "Suggestion: %s" +msgstr "הצעות: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +#, fuzzy +msgid "Mesh Network" +msgstr "רשת מְבֻזָּרת" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, fuzzy +msgid "Mesh Network %s" +msgstr "רשת מְבֻזָּרת %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "הרמקולים שלי" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "ביטול השתקה" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "השתק" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +#, fuzzy +msgid "Mesh" +msgstr "רשת מְבֻזָּרת" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "קבוצה" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "בית" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "פעילות" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "צילום מסך" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "צילום מסך של \"%s\"" + +#: ../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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +#, fuzzy +msgid "Keyboard layouts" +msgstr "פריסת מקלדת" + +#: ../data/sugar.schemas.in.h:38 +#, fuzzy +msgid "Keyboard model" +msgstr "מודל מקלדת" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +#, fuzzy +msgid "User Name" +msgstr "שם משתמש" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 +#, fuzzy +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "כדי שהשינויים יכנסו לתוקף יש לאתחל את הממשק הגרפי.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +#, fuzzy +msgid "Warning" +msgstr "אזהרה" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +#, fuzzy +msgid "Changes require restart" +msgstr "שינויים דורשים הפעלה מחדש" + +#: ../src/jarabe/controlpanel/gui.py:301 +#, fuzzy +msgid "Cancel changes" +msgstr "ביטול שינויים" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +#, fuzzy +msgid "Later" +msgstr "אחר כך" + +#: ../src/jarabe/controlpanel/gui.py:310 +#, fuzzy +msgid "Restart now" +msgstr "הפעל מחדש עכשיו" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +#, fuzzy +msgid "Done" +msgstr "סיום" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +#, fuzzy +msgid "Ok" +msgstr "אישור" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +#, python-format, fuzzy +msgid "Version %s" +msgstr "גירסה %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +#, fuzzy +msgid "Confirm erase" +msgstr "אישור מחיקה" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +#, fuzzy +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "אישור מחיקה: האם ברצונך למחוק לתמיד את %s?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +#, fuzzy +msgid "Keep" +msgstr "שמור" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +#, fuzzy +msgid "Erase" +msgstr "מחיקה" + +#: ../src/jarabe/desktop/activitieslist.py:436 +#, fuzzy +msgid "Remove favorite" +msgstr "הורד מהמועדפים" + +#: ../src/jarabe/desktop/activitieslist.py:440 +#, fuzzy +msgid "Make favorite" +msgstr "הוסף למועדפים" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +#, fuzzy +msgid "Spiral" +msgstr "ספירלות" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +#, fuzzy +msgid "Registration Failed" +msgstr "ההרשמה נכשלה" + +#: ../src/jarabe/desktop/favoritesview.py:341 +#, fuzzy +msgid "Registration Successful" +msgstr "ההרשמה הצליחה" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +#, fuzzy +msgid "Register" +msgstr "הרשמה" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +#, fuzzy +msgid "Software Update" +msgstr "עדכון תוכנה" + +#: ../src/jarabe/desktop/homebox.py:67 +#, fuzzy +msgid "Update your activities to ensure compatibility with your new software" +msgstr "עדכון הפעילויות מודה תאימות עם התוכנה החדשה שלך." + +#: ../src/jarabe/desktop/homebox.py:76 +#, fuzzy +msgid "Check now" +msgstr "בדוק עכשיו" + +#: ../src/jarabe/desktop/homebox.py:197 +#, fuzzy +msgid "List view" +msgstr "תצוגת רשימה" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +#, fuzzy +msgid "Favorites view" +msgstr "תצוגת מעודפים" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +#, fuzzy +msgid "Authentication Type:" +msgstr "סוג אימות:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +#, fuzzy +msgid "Resume" +msgstr "חדֵּש" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +#, fuzzy +msgid "Join" +msgstr "הצטרפות" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "רשת מְבֻזָּרת %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +#, fuzzy +msgid "Cannot connect to the server." +msgstr "התחברות לשרת נכשלה." + +#: ../src/jarabe/desktop/schoolserver.py:150 +#, fuzzy +msgid "The server could not complete the request." +msgstr "השרת נכשל במילוי הבקשה." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +#, fuzzy +msgid "Decline" +msgstr "לדחות" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +#, fuzzy +msgid "Dismiss" +msgstr "שחרר" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "מחק" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +#, fuzzy +msgid "Open" +msgstr "פתח" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +#, fuzzy +msgid "Open with" +msgstr "פתיחה באמצעות" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +#, fuzzy +msgid "Neighborhood" +msgstr "סביבה" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "שם:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "לחץ כדי לשנות צבע" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +#, fuzzy +msgid "Back" +msgstr "חזור" + +#: ../src/jarabe/intro/window.py:211 +#, fuzzy +msgid "Next" +msgstr "הבא" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +#, fuzzy +msgid "Untitled" +msgstr "ללא כותרת" + +#: ../src/jarabe/journal/expandedentry.py:245 +#, fuzzy +msgid "No preview" +msgstr "אין תצוגה מקדימה" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +#, python-format, fuzzy +msgid "Date: %s" +msgstr "תאריך: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +#, python-format, fuzzy +msgid "Size: %s" +msgstr "גודל: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +#, fuzzy +msgid "No date" +msgstr "אין תאריך" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +#, fuzzy +msgid "Description:" +msgstr "תיאור:" + +#: ../src/jarabe/journal/expandedentry.py:348 +#, fuzzy +msgid "Tags:" +msgstr "תגיות:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "יומן" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +#, fuzzy +msgid "Search" +msgstr "חיפוש" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +#, fuzzy +msgid "Today" +msgstr "היום" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +#, fuzzy +msgid "Copy to" +msgstr "העתק אל" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +#, fuzzy +msgid "Duplicate" +msgstr "שכפל" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "שגיאה" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +#, fuzzy +msgid "Start" +msgstr "התחל" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +#, fuzzy +msgid "Sort by size" +msgstr "סידור לפי גודל" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +#, fuzzy +msgid "Your Journal is empty" +msgstr "יומנך מלא" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +#, fuzzy +msgid "Clear search" +msgstr "ניקוי מחרוזת חיפוש" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "סגור" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +#, fuzzy +msgid "View Details" +msgstr "הצגת פרטים" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +#, fuzzy +msgid "Documents" +msgstr "מסמכים" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +#, fuzzy +msgid "Remove friend" +msgstr "מחק חבר/ה" + +#: ../src/jarabe/view/buddymenu.py:70 +#, fuzzy +msgid "Make friend" +msgstr "הפוך לחבר/ה" + +#: ../src/jarabe/view/buddymenu.py:87 +#, fuzzy +msgid "Shutdown" +msgstr "כיבוי" + +#: ../src/jarabe/view/buddymenu.py:95 +#, fuzzy +msgid "Restart" +msgstr "הפעלה מחדש" + +#: ../src/jarabe/view/buddymenu.py:101 +#, fuzzy +msgid "Logout" +msgstr "התנתקות" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +#, fuzzy +msgid "Starting..." +msgstr "מתחיל..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +#, fuzzy +msgid "View Source" +msgstr "צפה בקוד המקור" + +#: ../src/jarabe/view/palettes.py:102 +#, fuzzy +msgid "Stop" +msgstr "עצור" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +#, fuzzy +msgid "Show contents" +msgstr "הצג תוכן" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "מחק" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +#, fuzzy +msgid "Source" +msgstr "מקור" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, fuzzy +msgid "View source: %s" +msgstr "צפה בקוד המקור: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +#, python-format, fuzzy +msgid "View source: %r" +msgstr "צפה בקוד המקור: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/hi.po b/po/hi.po new file mode 100644 index 0000000..e56d38a --- /dev/null +++ b/po/hi.po @@ -0,0 +1,1833 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-03 04:56+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: hi\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 "मेरे बारे में" + +#: ../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 "स्ट्रोक: रंग=%s वर्ण=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "स्ट्रोक: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "भरें: रंग=%s वर्ण=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "भरें: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "रंग बदलने हेतु क्लिक करें:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "मेरे कम्प्यूटर के बारे में" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "उपलब्ध नहीं है" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "पहचान" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "क्रमांक:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "सॉफ्टवेयर" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "बिल्ड:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "सुगर:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "फर्मवेयर:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "वायरलेस फर्मवेयर:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "सर्वाधिकार तथा लाइसेंस" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s सेकंड" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "सक्रियण देरी" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "किनारा" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "किनारा" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "कुंजीपट" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "कुंजीपट मॉडल" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "खाका बदलने के लिए कुंजियाँ" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "~/.i18n पर पहुँच नहीं सका. मानक सेटिंग बनाएँ." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "कोड=%s की भाषा का निर्धारण नहीं किया जा सका." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "माफ़ कीजिए, मैं '%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 "" +"जिस अनुक्रम में आप चाहते हैं, उसमें भाषाएँ जोड़ें. यदि अनुवाद उपलब्ध नहीं " +"होगा, तो सूची में दिए गए अगले वाले को प्रयोग में लिया जाएगा." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "मॉडेम विन्यास" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"आप निम्नलिखित जानकारी प्रदान करने के लिए एक सेलुलर संजाल(3 जी) के लिए एक " +"मोबाइल ब्रॉडबैंड कनेक्शन के सेट की आवश्यकता होगी." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "उपयोक्ता नाम:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "पासवर्ड:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "नम्बर:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "एक्सेस प्वाइंट नाम:" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "व्यक्तिगत पहचान संख्या (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "निर्दिष्ट तर्क प्रयोग 0/1 में त्रुटि है." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "वायरलेस" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "बैटरी का जीवन बढ़ाने के लिए वायरलेस रेडियो को बन्द कर दें" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "रेडियो" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"यदि आपको नेटवर्क में कनेक्ट करने में समस्या हो रही है तो नेटवर्क इतिहास को " +"मिटा दें" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "नेटवर्क इतिहास मिटाएँ" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "साझेदारी" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "एक्सट्रीम पीएम तर्क में त्रुटि है, चालू/बन्द प्रयोग करें." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "बिज़ली प्रबंधन" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "स्वचालित बिजली प्रबंधन (बैटरी का जीवन बढ़ाता है)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"एक्सट्रीम ऊर्जा प्रबंधन (वायरलेस रेडियो को बन्द करता है, बैटरी का जीवन " +"बढ़ाने के लिए)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "सॉफ़्टवेयर अद्यतन" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"सॉफ़्टवेयर अपडेट में त्रुटियाँ दूर होती हैं, सुरक्षा समस्याओं से छुटकारा " +"मिलता है तथा नई विशेषताएँ मिलती हैं." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "%s जाँचा जा रहा है..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "%s डाउनलोड किया जा रहा है..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "%s अद्यतन किया जा रहा है..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "आपका सॉफ़्टवेयर अद्यतन है" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "आप %s अद्यतन संस्थापित कर सकते हैं" +msgstr[1] "आप %s अद्यतन संस्थापित कर सकते हैं" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "अद्यतन के लिए जाँचा जा रहा है..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "अद्यतनों को संस्थापित किया जा रहा है..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s अद्यतन संस्थापित किया गया" +msgstr[1] "%s अद्यतनों को संस्थापित किया गया" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "चयनित को संस्थापित करें" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "डाउनलोड आकार: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +#, python-format, , +#, python-format, +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "संस्करण %(current)s %(new)s(आकार: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "कुछ नहीं" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1कि.बा." + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f कि.बा." + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f मे.बा." + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "मेरी बैटरी" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "हटा दिया गया" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "चार्जिंग में" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d बाकी" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "चार्ज है" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "आईपी पता: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "कनेक्ट हो रहा है..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "कनेक्टेड" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "वायरलेस कनेक्शन नहीं" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "माध्यम" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "वायर्ड नेटवर्क" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "गति" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "वायरलेस मॉडम" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "कृपया प्रतीक्षा करें..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "कनेक्ट" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "सम्पर्क टूट गया" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "रद्द करें" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "कनेक्शन फिर से: प्रयास करें" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "त्रुटि: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "सुझाव: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "%s के लिए जुड़ा" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%dकि.बा." + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "अपने पिन / PUK विन्यास की जाँच करें." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "अपने एक्सेस प्वाइंट (APN) नाम विन्यास की जाँच करें" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "संख्या विन्यास की जाँच करें." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "आपके विन्यास की जाँच करें." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "मेश संजाल" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "मेश नेटवर्क %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "कोई जीएसएम कनेक्शन उपलब्ध है." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "नियंत्रण कक्ष में एक कनेक्शन बनाएँ." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "वाणी" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +#, fuzzy +msgid "Rate" +msgstr "तारीख़" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "मेरे स्पीकर" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "मौन हटाएँ" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "मौन" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "उंगली" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "लेखनी" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "मेरा touchpad" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "जाल" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "समूह" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "घर" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "क्रिया" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "पटचित्र" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "\"%s\" का स्क्रीनशॉट" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"अक्षम\" के लिए initialization पर निक पूछा; \"व्यवस्था\" के लिए UNIX खाते लंबे " +"नाम पुनः प्रयोग करे." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "अतिरिक्त निर्देशिका जो अद्यतन अनुवादों को शामिल कर सकते हैं." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "बैकअप यूआरएल" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "संरक्षित गतिविधियों के बंडल आईडी" + +#: ../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 "" +"XO प्रतीक के लिए रंग जिसे पूरे डेस्कटॉप में प्रयोग में लिया जाएगा. स्ट्रिंग " +"को स्ट्रोक रंग तथा भरने के रंग से बनाया गया है तथा आरजीबी रंग फ़ॉर्मेट में " +"है. उदाहरण: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "किनारा देरी" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "डिफ़ाल्ट फाँट प्रतिरूप" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "डिफ़ाल्ट फॉण्ट आकार" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "डिफ़ॉल्ट निक" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "कोना का प्रयोग करते हुए फ्रेम एक्टिवेशन में देरी." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "किनारा का प्रयोग करते हुए फ्रेम एक्टिवेशन में देरी." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "अनुवाद के लिए खोज करने के लिए निर्देशिका" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "किनारा देरी" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "पसंदीदा ख़ाका" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "पसंदीदा रेज्यूम मोड" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "प्रयोक्ता नाम जिसका प्रयोग पूरे डेस्कटॉप में किया जाना है." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "प्रयोक्ता नाम जिसका प्रयोग पूरे डेस्कटॉप में किया जाना है." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"यदि सही है, सुगर हमें जैबर सर्वर के अन्य प्रयोक्ताओं के लिए खोजने लायक बना " +"देगा." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "यदि सही है, सुगर \"लॉग आउट\" विकल्प दिखाएगा." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "यदि सही है, सुगर \"लॉग आउट\" विकल्प दिखाएगा." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"सच तो, Sugar1,6 चैनल और11 के लिए डिफ़ॉल्ट तदर्थ संजाल दिखाएगा. यदि Sugar " +"नहीं \"ज्ञात\" संजाल देखता है जब यह शुरू होता है, यह नेटवर्क तदर्थ autoconnect " +"करता है." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "जैबर सर्वर" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "कुंजीपट ख़ाका" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "कुंजीपट मॉडल" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "कुंजीपट विकल्प" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "पसंदीदा दृश्य का ख़ाका." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"कुंजीपट खाका की सूची. प्रत्येक सूची खाका फ़ॉर्म (वेरिएंट) में होनी चाहिए" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "कुंजीपट विकल्पों की सूची." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "स्वचलित पावर" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "एक्सट्रीम पावर" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "गॅजेट में प्रकाशित करें" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "आवाज उपकरण को मौन करने के लिए सेटिंग." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "लाग आउट दिखाएँ" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "पुनः आरंभ दिखाएँ" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Sugar तदर्थ संजाल दिखाएँ" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "आवाज मौन है" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "कुंजीपट मॉडल जिसे प्रयोग करना है" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "सिस्टम के लिए समयक्षेत्र सेटिंग." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "प्रयोग किए जाने वाले जैबर सर्वर का यूआरएल." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "यूआरएल जहाँ बैकअप सहेजा जाना है." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "प्रयोक्ता रंग" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "प्रयोक्ता नाम" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "प्रयोक्ता नाम जिसका प्रयोग पूरे डेस्कटॉप में किया जाना है." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"उपयोगकर्ताओं के लिए सूची दृश्य के माध्यम से इन गतिविधियों को मिटा अनुमति " +"नहीं दी जाएगी." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "आवाज़ स्तर" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "ध्वनि उपकरण के लिए आवाज स्तर." + +#: ../data/sugar.schemas.in.h:66 +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 "" +"सुगर-कंट्रोल-पैनल: चेतावनी, एक ही नाम के एक से अधिक विकल्प मिले: %s मॉड्यूल: " +"%r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "सुगर-कंट्रोल-पेनल: कुंजी=%s विकल्प उपलब्ध नहीं है" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "सुगर-कंट्रोल-पेनल: %s" + +# TRANS: Translators, there's a empty line at the end of this string, +# which must appear in the translated string (msgstr) as well. +#. 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 "" +"उपयोग: sugar-control-panel [ विकल्प ] key [ आर्गुमेंट ... ] \n" +" सुगर वातावरण के लिए नियंत्रण. \n" +" विकल्प: \n" +" -h यह मदद दिखाकर बाहर हो जाता है \n" +" -l सभी उपलब्ध विकल्पों की सूची देता है \n" +" -h key इस कुंजी के बारे में जानकारी देता है \n" +" -g key कुंजी का वर्तमान मूल्य प्राप्त करें \n" +" -s key कुंजी का वर्तमान मूल्य सेट करता है \n" +" -c key कुंजी का वर्तमान मूल्य साफ करता है \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "अपने परिवर्तनों को लागू करने के लिए आपको शुगर को पुनरारंभ करना होगा.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "चेतावनी" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "परिवर्तनों के लिए कम्प्यूटर फिर से प्रारंभ करना आवश्यक है" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "परिवर्तनों को रद्द करें" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "बाद में" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "अभी फिर से प्रारंभ करें" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "सम्पन्न" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "ठीक" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "संस्करण %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "मिटाने हेतु पुष्टि" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "मिटाने की पुष्टि: क्या आप %s को हमेशा के लिए मिटा देना चाहते हैं?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "रखें" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "मिटाएँ" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "पसंदीदा मिटाएँ" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "पसंदीदा बनाएँ" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "फ्रीफ़ॉर्म" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "रिंग" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "सर्पिल" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "बक्सा" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "त्रिभुज" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "पंजीकरण असफल" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "पंजीकरण सफल" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "आप अब अपने स्कूल के सर्वर से पंजीकृत हो चुके हैं." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "पंजीकृत करें" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "फिर पंजीकृत" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "सॉफ़्टवेयर अद्यतन" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"अपने नये सॉफ़्टवेयर के साथ संगतता सुनिश्चित करने के लिए अपनी क्रियाओं को " +"अद्यतन करें" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "अभी जाँचें" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "सूची दृश्य" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "पसंदीदा दृश्य" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "कुंजी प्रकार:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "प्रमाणीकरण का प्रकार:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 व्यक्तिगत" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "बेतार सुरक्षा:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "पुनरारंभ" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "जुड़ें" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "तदर्थ संजाल %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "मेश संजाल %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "अस्वीकार" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dबा." + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dकि.बा." + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dमे.बा." + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s इसमें का- %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "%s से हस्तांतरण" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "स्वीकृत" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "खारिज" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "अन्य भागीदार फ़ाइल स्थानांतरण रद्द" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "%s को हस्तांतरित करें" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "हटाएँ" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "खोलें" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "के साथ खोलें" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s क्लिपिंग" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "आसपडोस" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "नाम:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "रंग बदलने के लिए क्लिक करें:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "पीछे जाएँ" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "अगला" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "बिना शीर्षक" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "कोई पूर्वावलोकन नहीं" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "काइंड: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "अज्ञात" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "तारीख़: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "आकार: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "बिना तारीख़" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "प्रतिभागी:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "वर्णन:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "चिप्पियाँ:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "दैनिकी" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "ढूंढें" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "कभी भी" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "आज" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "कल से" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "पिछला सप्ताह" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "पिछला महीना" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "पिछला वर्ष" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "कोई भी" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "मेरे मित्र" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "मेरी कक्षा" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "कुछ भी" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "पर प्रतिलिपि बनाएँ" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "दूसरी प्रति" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +#, python-format, +msgid "Error while copying the entry. %s" +msgstr "नकल प्रविष्टि जबकि त्रुटि. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "त्रुटि" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "प्रारंभ" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "तिथि के अनुसार छाँटें संशोधित" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "तिथि के अनुसार छाँटें बनाया" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "आकार के अनुसार छाँटें" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "छाटें देखें" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "आपकी दैनिकी खाली है" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "आपके दस्तावेज़ फ़ोल्डर खाली है" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "डिवाइस खाली है" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "कोई भी मेल खाती हुई प्रविष्टि नहीं है" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "खोज साफ करें" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "%s की गतिविधि के पुराने संस्करण" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +#, python-format, +msgid "Do you want to downgrade to version %s" +msgstr "क्या आप डाउनग्रेड संस्करण चाहते हैं %s" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "दैनिकी दिखाएँ" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "एक वस्तु चुनें" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "बंद करें" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "के साथ बहाल करें" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "के साथ प्रारंभ करें" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "प्रविष्टि प्रारंभ करने के लिए कोई क्रिया नहीं" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "को भेजें" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "विवरणों को देखें" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "किसी फ़ाइल के बिना प्रविष्टियाँ भेजा नहीं जा सकता." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "किसी फ़ाइल के बिना प्रविष्टियाँ नकल नहीं जा सकता." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "क्लिपबोर्ड" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "कोई मित्र उपस्थित नहीं है" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "कोई भी वैध कनेक्शन नहीं मिला" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "प्रविष्टि बहाल करने के लिए कोई क्रिया नहीं" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "दस्तावेज़" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d मे.बा. रिक्त" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "यंत्र बदलने के लिए कारण अज्ञात है." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "परिस्तिथि परिवर्तन सामान्य है." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "यंत्र अब प्रबंधित है." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "यंत्र अब प्रबंधित नहीं है." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "यंत्र विन्यास के लिए सुसज्जित नहीं है." + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"आईपी ​​विन्यास (उपलब्ध नहीं पता, मध्यांतर, आदि) आरक्षित नहीं किया जा सकता " +"है." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "आईपी ​​विन्यास अब वैध नहीं है." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "पासवर्ड की आवश्यकता है, लेकिन नहीं दी." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "802.1X निवेदक पहुँच बिंदु या प्रमाणीकरण सर्वर से कट गया." + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "802.1X निवेदक के विन्यास असफल रहा." + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "802.1X निवेदक छोड़ दिया है या अनपेक्षित रूप से विफल रहा है." + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "802.1X निवेदक भी लंबे समय प्रमाणित करने के लिए ले लिया." + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "पीपीपी सेवा समय के भीतर शुरू करने में विफल रहा है." + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "पीपीपी सेवा अनपेक्षित रूप से कट गया." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "पीपीपी सेवा छोड़ दिया है या अनपेक्षित रूप से विफल रहा है." + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "DHCP सेवा की अनुमति दी समय के भीतर शुरू करने में विफल रहा है." + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "DHCP सेवा एक अनपेक्षित त्रुटि की सूचना दी." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "DHCP सेवा छोड़ दिया है या अनपेक्षित रूप से विफल रहा है." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "साझा कनेक्शन सेवा प्रारंभ करने में विफल." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "साझा कनेक्शन सेवा छोड़ने या अनपेक्षित रूप से विफल रहा है." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "AutoIP सेवा प्रारंभ करने में विफल." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "AutoIP सेवा एक अनपेक्षित त्रुटि की सूचना दी." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "AutoIP सेवा छोड़ दिया है या अनपेक्षित रूप से विफल रहा है." + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "डायलिंग में विफल रहा है क्योंकि लाइन व्यस्त था." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "डायलिंग में विफल रहा है क्योंकि वहाँ कोई डायल टोन नहीं." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "डायलिंग में विफल रहा है क्योंकि वहाँ कोई वाहक नहीं." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "डायलिंग समयबाह्य हो गया." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "डायलिंग में विफल रहा." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "मोडेम आरंभीकरण में विफल रहा है." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "निर्दिष्ट जीएसएम APN का चयन करने में विफल" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "संजाल नहीं खोजा." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "संजाल पंजीयन इनकार कर दिया था." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "संजाल पंजीयन समयबाह्य हो." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "अनुरोध जीएसएम संजाल के साथ पंजीकृत करने में विफल." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "पिन जांच करने में विफल." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "इस डिवाइस के लिए आवश्यक फर्मवेयर लापता है." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "डिवाइस हटा दिया था." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "NetworkManager सो गया." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "डिवाइस सक्रिय कनेक्शन हटा या गायब हो गया था." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "एक उपयोगकर्ता या ग्राहक के वियोग का अनुरोध किया." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "डिवाइस कैरियर / लिंक बदल गया." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "मित्र हटाएँ" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "मित्र बनाएँ" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "बन्द करें" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "पुनः आरंभ करें" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "लॉगआउट" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "मेरे सेटिंग" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "%s को निमंत्रित करें" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s प्रारंभ करने में विफल." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "प्रारंभ हो रहा है..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "गतिविधि शुरू करने में विफल" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "स्रोत देखें" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "रूकें" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "नया प्रारंभ करें" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "सामग्री दिखाएँ" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "हटाएँ" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "इंस्टैंस स्रोत" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "स्रोत" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "क्रिया बंडल स्रोत" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Sugar टूलकिट स्रोत" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "स्रोत देखें: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "स्रोत देखें: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar खिड़की मे" diff --git a/po/ht.po b/po/ht.po new file mode 100644 index 0000000..4db5bf1 --- /dev/null +++ b/po/ht.po @@ -0,0 +1,1806 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 04:48+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: ht\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 "Enfòmasyon pèsonèl" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Ou dwe rantre yon non." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "stroke: koulè=%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: koulè=%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 "Erè nan modifikatè koulè espesifye yo." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Erè nan koulè espesifye yo." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Klike pou chanje koulè:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Pa disponib" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Idantite" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Nimero seri:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Pwogram" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Bati:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Mikrolojisyèl:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +#, fuzzy +msgid "Copyright and License" +msgstr "Copyright avek lisans" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +#, fuzzy +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 se entèfas grafik wap gade la a. Sugar se yon lojisyèl lib, sou Lisans " +"Piblik Jeneral GNU, e pa gen pwoblèm pou ou chanje li epi/oubyen distribiye " +"kopi li avek sètenn kondisyon ki nan kontra sa a." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +#, fuzzy +msgid "Full license:" +msgstr "Lisans konplè:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Dat ak lè" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Erè lè lokal pa egziste." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Lè lokal" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Ankadreman" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Valè-a dwe yon antye." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "Jamè" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "imediat" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s segond" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Reta aktivasyon" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Kwen" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Bò" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Lang" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Aksè enposib ~/.i18n. Kreye paramèt pa defo yo." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Lang pou kod=%s pa ka tèmine." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Dezole mwen pa pale '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Rezo" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Yo pa konnen eta l'." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Agiman radio espesifye-a pa kòrèk sèvi limen/etenn." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Agiman espesifye-a pa kòrèk sèvi 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "San fil" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +#, fuzzy +msgid "Radio" +msgstr "Radyo" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Kolaborasyon" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +msgid "Server:" +msgstr "Sèvè:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Alimantasyon" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Agiman pou jere alimantasyon otomatik la pa kòrèk sèvi ak limen/etenn." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Agiman pou gere alimantasyon ak dèyo pa kòrèk sèvi ak limen/etenn." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Jere alimantasyon" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "automatic power management(ogmante tan batri a ap bay)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Jesyon ekstrèm enèji batri a(retire posibilite capte ond wireless, ogmante " +"tan batri a ap bay)" + +#: ../extensions/cpsection/updater/__init__.py:21 +#, fuzzy +msgid "Software update" +msgstr "Mete logisyèl la ajou" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "Fini" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Batri-m" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "Retire" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Ap chaje" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Yon ti kras chaj ki rete" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d ki rete" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Fin chaje" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Dekonekte" + +# 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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "An koneksyon..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Konekte" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Chanèl" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Vitès" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Konekte" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Dekonekte" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Anile" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Rezo maye" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Rezo maye %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Opalè m' yo" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Aktive son an" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Dezaktive son an" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Rezo maye" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Gwoup" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Lakay" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Aktivite" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Ekran projektwa" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "" +"Sugar-control-panel: Atansyon, yo jwenn plizyè opsyon ak yon menm non: %s " +"modil: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "Sugar-kontwòl-panèl: kle=%s pa yon opsyon disponib" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "sugar-kontwòl-panèl: %s" + +# TRANS: Translators, there's a empty line at the end of this string, +# which must appear in the translated string (msgstr) as well. +#. 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 "" +"Sèvi: Sugar-Kontwòl-panèl [opsyon] kle [args ... ]\n" +"\tKontwòl pou anvironman sugar. \n" +"\topsyon: \n" +"\t-h\tmontre mesaj èd sa epi soti \n" +"\t-l\tfè lis tout opsyon disponib yo \n" +"\t-h kle\tmontre enfòmasyon sou kle sa \n" +"\t-g kle\tpwan valè kouran kle-a \n" +"\t-s kle\tfikse valè Kouran pou kle-a \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +#, fuzzy +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Pou aplike chanjman ou yo ou bezwen reyinisyalize program nan.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Avètisman" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Redemare pou aplike chanjman yo" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Anile chanjman yo" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Pi ta" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Redemare kounye a menm" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Fini" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Konfime sa ou efase a" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Konfime sa ou efase a: ou vle retire'l net %s?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Kenbe" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Efase" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Siprime favori" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Ajoute nan favori" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Fòm lib" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Zanno" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Triyang" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "enskripsyon an pa fèt" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "enskripsyon an fèt" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "ou pa enskri avek sèvè lekol ou a." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Enskri" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Mete logisyèl la ajou" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Mete aktivite ou yo ajou pou asire yap byen mache avèk nouvo lojisyèl ou a" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Verifye kounye a" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Gade lis" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Fas prefere" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "kalite kle:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Kalite otantifikasyon:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Repwann" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Rejwen'n" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Rezo maye %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Pa kapab konekte nan sèvè a." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Sèvè a pa kapab konplete rekèt la" + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Refize" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Retire" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Ouvri" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Ouvri ak" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Vwazinaj" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Non:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Klike pou chanje koulè:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Retounen" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Pwochen" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "San tit" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Pa gen previziyalizasyon" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Dat: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Pa gen dat" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Patisipan yo:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Deskripsyon:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Etikèt:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Jounal" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Chache" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Nenpòt lè" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Jodia" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Depi Yè" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Semèn pase a" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Mwa pase" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Lane pase a" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Nenpòt moun" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Zanmi m yo" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Klas mwen" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Nenpòt bagay" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Jounal ou vid" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Pa gen antre ki matche" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Jounal ou plen" + +#: ../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:80 +msgid "Show Journal" +msgstr "Montre jounal la" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "chwazi yon bagay" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Fèmen" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB vid" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Retire nan zanmi mwen yo" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Fè zanmi ak moun sa" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Eten'n" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Redemare" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Envite nan %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Demaraj..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Stope, rete" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Afiche kontni yo" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Retire" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..3b6c91b --- /dev/null +++ b/po/hu.po @@ -0,0 +1,1775 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2011-03-25 15:01+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: hu\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.1\n" + +#: ../extensions/cpsection/aboutme/__init__.py:24 +msgid "About Me" +msgstr "Rólam" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Meg kell adnod egy nevet." + +#: ../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 "Hiba a megadott színekben." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Kattints a színed megváltoztatásához:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +#, fuzzy +msgid "About my Computer" +msgstr "Számítógépemről" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +#, fuzzy +msgid "Not available" +msgstr "Nem áll rendelkezésre" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +#, fuzzy +msgid "Identity" +msgstr "Személyazonosító" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Sorozatszám:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +#, fuzzy +msgid "Software" +msgstr "Szoftver" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Időzóna" + +#: ../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 "soha" + +#: ../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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Billentyűzet" + +#: ../extensions/cpsection/keyboard/view.py:190 +#, fuzzy +msgid "Keyboard Model" +msgstr "Billentyűzet fajta" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +#, fuzzy +msgid "Keyboard Layout(s)" +msgstr "Billentyűzet kiosztások" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Nyelv" + +#: ../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 "Sajnos nem beszélek '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Hálózat" + +#: ../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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Rádió" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Együttműködés" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +msgid "Server:" +msgstr "Szerver:" + +#: ../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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Szoftverfrissítés" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Frissítések telepítése..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Eltávolított" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +#, fuzzy +msgid "Connecting..." +msgstr "Csatlakozik..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Csatorna" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Vezetékes hálózat" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Sebesség" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Némítás" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Csoport" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Képernyőkép" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "Jabber szerver" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Billentyűzet kiosztások" + +#: ../data/sugar.schemas.in.h:38 +#, fuzzy +msgid "Keyboard model" +msgstr "Billentyűzet fajta" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Billentyűzet beállítások" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Felhasználói szín" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Felhasználói név" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Hangerőszint" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Figyelmeztetés" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Később" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Újraindítás most" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Verzió %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Kedvenc eltávolítása" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Szoftverfrissítés" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Eltávolított" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Név:" + +#: ../src/jarabe/intro/window.py:133 +#, fuzzy +msgid "Click to change color:" +msgstr "Kattints a színed megváltoztatásához:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Cím nélküli" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Eltávolított" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/id.po b/po/id.po new file mode 100644 index 0000000..93c124c --- /dev/null +++ b/po/id.po @@ -0,0 +1,1831 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:15+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: id\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.5\n" + +#: ../extensions/cpsection/aboutme/__init__.py:24 +msgid "About Me" +msgstr "Mengenai Saya" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Anda harus memasukkan nama." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "goresan: warna=%s corak=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "goresan: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "isi: warna=%s corak=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "isi: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Kesalahan dalam pengubah warna tertentu." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Kesalahan dalam warna tertentu." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Klik untuk mengubah warna anda:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Tentang komputer saya" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Tidak tersedia" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identitas" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Nomer serial:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Piranti lunak" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Bikinan:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Piranti lunak perangkat:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Piranti lunak perangkat nirkabel:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Hak Cipta dan Lisensi" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 adalah antar-muka grafis pengguna yang sedang Anda lihat ini. Sugar " +"adalah piranti lunak bebas, dengan lisensi GNU General Public License " +"(Lisensi Publik Umum GNU), dan Anda dipersilakan untuk mengubahnya dan/atau " +"menyebarluaskan salinannya sesuai ketentuan-ketentuan yang tercantum di " +"dalam lisensi tersebut." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Lisensi selengkapnya:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Tanggal & Waktu" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Ada kesalahan: Zona waktu tidak tersedia." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Zona waktu" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Bingkai" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Harus nilai integer." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "tak pernah" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "seketika" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s detik" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Waktu Tunda Aktivasi" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Pojok" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Sisi" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Papan Ketik" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Model Papan Ketik" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Kunci untuk mengubah tatanan" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Tatanan Papan Ketik" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Bahasa" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Tak bisa meng-akses ~/.i18n. Menggunakan konfigurasi standar saja." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Bahasa dengan kode=%s tak bisa ditentukan." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Mohon maaf, saya tidak berbicara dengan bahasa '%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 "" +"Tambahkan bahasa-bahasa dalam perintah yang anda perkenan. Jika terjemahan " +"tidak tersedia, maka masukan pada baris berikutnya yang akan digunakan." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "Nama Pengguna:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Kata Sandi:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +#, fuzzy +msgid "Number:" +msgstr "Angka:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +#, fuzzy +msgid "Access Point Name (APN):" +msgstr "Nama Akses Point (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Jaringan" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Keadaan tak diketahui." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Kesalahan dalam argumen radio yang ditentukan menggunakan on/off." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Kesalahan dalam argumen yang ditentukan menggunakan 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Nirkabel" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Matikan perangkat nirkabel untuk menghemat daya baterai" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"Bersihkan sejarah jaringan jika Anda mengalami kesulitan untuk menghubungkan " +"jaringan" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Bersihkan sejarah jaringan" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Kerja Sama" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Servernya sama dengan dimana anda berada; orang-orang pada server yang sama " +"akan dapat saling bertemu, bahkan ketika mereka tidak berada pada jaringan " +"yang sama." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Server:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Daya" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Kesalahan ditemui ketika mengotomatisasi argumen md. gunakan on/off." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Kesalahan ditemui dalam argumen md ekstrim. gunakan on/off." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Manajemen daya" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Manajemen daya otomatis (meningkatkan ketahanan baterai)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Manajemen daya ektrim (mematikan radio nirkabel, meningkatkan ketahanan " +"baterai)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Pembaruan perangkat lunak" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Pembaruan perangkat lunak ditujukan untuk memperbaiki kesalahan, " +"menghilangkan kelemahan keamanan, dan menyediakan beberapa fitur baru." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Memeriksa %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Mengunduh %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Memperbaharui %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Perangkat lunak anda sudah dalam kondisi paling baru" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Anda dapat memasangkan pembaruan %s" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Memeriksa pembaruan..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Memasangkan pembaruan..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "pembaruan %s sudah dipasangkan" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Pasangkan yang dipilih" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Ukuran unduhan: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Dari versi %(current)s ke %(new)s (Ukuran: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Tidak ada" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Baterai Ku" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Dihapuskan" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Mengisi" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Daya yang tersedia sangat sedikit" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d tersisa" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Terisi" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Alamat IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Putuskan" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Menghubungkan..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Terhubung" + +#: ../extensions/deviceicon/network.py:119 +#, fuzzy +msgid "No wireless connection" +msgstr "Tidak koneksi nirkabel" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kanal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Jaringan Kabel" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Kecepatan" + +#: ../extensions/deviceicon/network.py:202 +#, fuzzy +msgid "Wireless modem" +msgstr "Modem nirkabel" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Silakan tunggu..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Koneksikan" + +#: ../extensions/deviceicon/network.py:276 +#, fuzzy +msgid "Disconnected" +msgstr "Putuskan" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Batal" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Kesalahan: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Saran: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +#, fuzzy +msgid "Rate" +msgstr "Tanggal" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Speaker Ku" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Bersuara" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Bisu" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Bertaut" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Kelompok" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Rumah" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Aktivitas" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Tangkapan" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Tangkapan dari \"%s\"" + +#: ../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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "URL Cadangan" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" +"Warna untuk aikon XO yang digunakan pada destop. Temali yang digunakan " +"merupakan komposisi dari warna garis dan isi, menggunakan format warna rgb. " +"Contohnya: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Waktu Tunda Pojok" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Waktu tunda untuk aktivasi bingkai yang menggunakan pojok." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Waktu tunda untuk aktivasi frame menggunakan sisi-sisinya." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Waktu Tunda Sisi" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Tatanan Kesukaan" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Modus kembali kesukaan" + +#: ../data/sugar.schemas.in.h:18 +#, fuzzy +msgid "Font face that is used throughout the desktop." +msgstr "Nama huruf yang akan digunakan melalui destop." + +#: ../data/sugar.schemas.in.h:19 +#, fuzzy +msgid "Font size that is used throughout the desktop." +msgstr "Ukuran huruf yang akan digunakan melalui destop." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Jika BENAR, Sugar akan membuat kita dapat ditemukan oleh pengguna lain di " +"server Jabber." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Jika BENAR, Sugar akan menampilkan pilihan \"Keluar\"." + +#: ../data/sugar.schemas.in.h:34 +#, fuzzy +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Jika BENAR, Sugar akan menampilkan pilihan \"Keluar\"." + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "Server Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Tatanan papan ketikan" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Model papan ketikan" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Pilihan untuk papan ketikan" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Tatanan untuk penampilan kesukaan." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Daftar dari beberapa tatanan papan ketik. tiap masukan harus dalam susunan " +"tantanan (varian)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Daftar pilihan dari papan ketikan." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Daya Otomatis" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Daya Ekstrim" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Publikasikan ke Gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Setelan untuk membisukan perangkat suara." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Perlihatkan \"Keluar\"" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Suara dibisukan" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Model papan ketik yang akan digunakan" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Setelan zona waktu untuk sistem." + +#: ../data/sugar.schemas.in.h:58 +#, fuzzy +msgid "URL of the jabber server to use." +msgstr "Url dari server jabber yang akan digunakan." + +#: ../data/sugar.schemas.in.h:59 +#, fuzzy +msgid "URL where the backup is saved to." +msgstr "Url dimana cadangan akan disimpankan." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Warna Pengguna" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Nama Pengguna" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Nama pengguna yang akan digunakan melalui destop." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Tingkat Volume" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Tingkat volume dari perangkat suara." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Ketika dalam mode pengembalian, klik pada aikon yang disuka akan menyebabkan " +"masukan terakhir pada aktivitas tersebut akan dikembalikan." + +#: ../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: PERINGATAN, ditemukan lebih dari satu pilihan dengan " +"nama yang sama: %s modul: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "sugar-control-panel: kunci=%s tidak tersedia dalam pilihan yang ada" + +#: ../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 "" +"Penggunaan: sugar-control-panel [ pilihan ] kunci [ argumen ... ] \n" +"Mengendalikan lingkungan kerja sugar. \n" +" Pilihan: \n" +" -h memperlihatkan pesan bantuan ini dan keluar \n" +" -l daftar dari semua pilihan yang ada \n" +" -h kunci memperlihatkan informasi mengenai kunci ini \n" +" -g kunci mendapatkan isi daripada kunci \n" +" -s kunci menentukan isi untuk kunci ini \n" +" -c kunci membersihkan isi kunci \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +#, fuzzy +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Untuk mendapatkan perubahan yang ada anda diharuskan memulai ulang sugar.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Peringatan" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Perubahan membutuhkan pemulain ulang" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Batalkan perubahan" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Nanti" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Mulai ulang sekarang" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Selesai" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Versi %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Konfirmasikan penghapusan" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" +"Konfirmasikan penghapusan: Apakah anda yakin untuk secara permanen " +"menghapuskan %s?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Simpan" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Hapus" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Hilangkan kesukaan" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Buat jadi kesukaan" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Freeform" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Melingkar" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spiral" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Kotak" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Segi tiga" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Pendaftaran Gagal" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Pendaftaran Berhasil" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Sekarang anda terdaftar di server sekolah anda." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Daftarkan" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +#, fuzzy +msgid "Register again" +msgstr "Daftarkan lagi" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Pembaruan Perangkat Lunak" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Perbarui aktivitas anda untuk memastikan kompatibilitasnya dengan perangkat " +"lunak baru anda" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Periksa sekarang" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Tampilan daftar" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Tampilan kesukaan" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Jenis Kunci:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Jenis Otentikasi:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 Pribadi" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Keamanan Nirkabel:" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Kembali" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Bergabung" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Tidak dapat terhubung ke server." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Servernya tidak dapat menyelesaikan permintaan anda." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Tolak" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s dari %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Transfer dari %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Terima" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Bubar" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Transfer ke %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Hapuskan" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Buka" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Buka dengan" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "Kliping %s" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Lingkungan sekitar" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Nama:" + +#: ../src/jarabe/intro/window.py:133 +#, fuzzy +msgid "Click to change color:" +msgstr "Klik untuk mengubah warna:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Kembali" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Selanjutnya" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Tak bernama" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Tidak ada penampakan" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Jenis: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Tidak diketahui" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Tanggal: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Ukuran: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Tidak bertanggal" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Para Peserta:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Keterangan:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Penanda:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Catatan" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Cari" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Setiap saat" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Hari ini" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Sejak kemarin" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Minggu yang lalu" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Bulan yang lalu" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Tahun yang lalu" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Setiap orang" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Teman-teman ku" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Kelas ku" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Apa saja" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "Salin ke" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +#, fuzzy +msgid "Duplicate" +msgstr "Duplikatkan" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Kesalahan" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Mulai" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Jurnal anda kosong" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Tidak ada masukan yang cocok" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Bersihkan pencarian" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Jurnal anda penuh" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "" +"Silahkan hapus beberapa masukan lama pada jurnal agar yang baru mendapatkan " +"tempat." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Perlihatkan Jurnal" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Pilih sebuah objek" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Tutup" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Kembali dengan" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Mulai dengan" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Tidak ada aktivitas untuk memulai masukan" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Kirimkan ke" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Selengkapnya" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +#, fuzzy +msgid "Clipboard" +msgstr "Papan Klip" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Tidak ada teman-teman" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Tidak ada koneksi untuk ditemukan" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Tidak ada aktivitas untuk mengembalikan masukan" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +#, fuzzy +msgid "Documents" +msgstr "Dokumen" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB Tersedia" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Hapuskan teman" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Jadikan teman" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Matikan" + +#: ../src/jarabe/view/buddymenu.py:95 +#, fuzzy +msgid "Restart" +msgstr "Jalankan Ulang" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Keluar" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Setelan ku" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Undang ke %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +#, python-format, fuzzy +msgid "%s failed to start." +msgstr "%s gagal menjalankan." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Memulai..." + +#: ../src/jarabe/view/palettes.py:58 +#, fuzzy +msgid "Activity failed to start" +msgstr "Kegiatan gagal menjalankan" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Lihat Sumbernya" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Hentikan" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Mulai yang baru" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Lihat isinya" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Hapuskan" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Sumber Instan" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Sumber" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Sumber Paket Aktivitas" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Lihat sumber: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Lihat sumber: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/ig.po b/po/ig.po new file mode 100644 index 0000000..6ad0b17 --- /dev/null +++ b/po/ig.po @@ -0,0 +1,1762 @@ +# translation of sugar.po to Igbo +# This file is distributed under the same license as the PACKAGE package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER, 2006. +# Onye, Sylvester , 2006. +msgid "" +msgstr "" +"Project-Id-Version: sugar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2006-07-07 10:23+0100\n" +"Last-Translator: Onye, Sylvester \n" +"Language-Team: Igbo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.10.2\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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Àzụ́" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Chọ̀ọ́" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/is.po b/po/is.po new file mode 100644 index 0000000..5c95ae0 --- /dev/null +++ b/po/is.po @@ -0,0 +1,1768 @@ +# 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 , YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \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" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Eyða" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Endurvekja" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Engin titill" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Engin forsýning" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Enginn dagsettning" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Lýsing:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Merki:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Dagbók" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Leita" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Hvenær sem er" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Í dag" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Síðan í gær" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Í seinustu viku" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Í seinasta mánuði" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Á seinasta ári" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Hver sem er" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Mínir vinir" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Minn bekkur" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Hvað sem er" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..7ac7e6f --- /dev/null +++ b/po/it.po @@ -0,0 +1,1949 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-02 06:39+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: it\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 "Informazioni su" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Devi inserire un nome." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "linea: colore=%s tinta=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "linea: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "riempimento: colore=%s tinta=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "riempimento: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Errore nella variazione dei colori richiesta." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Errore nella definizione dei colori." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Seleziona per cambiare il tuo colore:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Il mio Computer" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Non disponibile" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identità" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Numero di Serie:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Software" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Build:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Wireless Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Copyright e Licenza" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 è l'interfaccia utente che stai utilizzando in questo istante. Sugar è " +"Software Libero, protetto dalla licenza General Public License di GNU, e " +"chiunque è il benvenuto per apportare modifiche e migliorie e/o distribuirne " +"copie, alle condizioni descritte nella licenza medesima." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Testo della Licenza:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Data e Ora" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Errore, timezone non esistente." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Timezone" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Cornice" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Valore deve essere un intero." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "mai" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "istantaneamente" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s secondi" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Ritardo attivazione" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Angolo" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Margine" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Tastiera" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Modello Tastiera" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Tasto/i per cambiare la disposizione" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Disposizione Tastiera" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Lingua" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Impossibile accedere a ~/.i18n. Creazione configurazione standard." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Linguaggio con codice=%s sconosciuto." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Spiacente, ma non parlo '%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 "" +"Aggiungi i linguaggi nell'ordine che preferisci. Se una traduzione non fosse " +"disponibile, verrà utilizzata quella successiva della lista." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Configurazione del modem" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Dovresti fornire le informazioni richieste per configurare una connessione " +"mobile in banda larga ad una rete cellulare (3G)." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Utente:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Password:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Numero:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Nome Access Point (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Personal Identity Number (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Network" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Stato sconosciuto." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Errore nel campo specificato, utilizzare on/off." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Errore nel campo specificato, utilizzare 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Wireless" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Spegni il trasmettitore wireless per risparmiare carica della batteria" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"Elimina la storia delle connessioni di rete effettuate nel caso di problemi " +"di connessione" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Elimina la storia delle connessioni di rete" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Collaborazione" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Il Server equivale alla stanza in cui si sta; le persone collegate allo " +"stesso server sono in grado di vedersi fra loro, anche se collegate a reti " +"differenti." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Server:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Energia" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "" +"Errore nel campo Gestione Automatica Risparmio Energetico, utilizza on/off." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" +"Errore nel campo Gestione Estrema Risparmio Energetico, utilizza on/off." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Gestione Risparmio Energetico (power management)" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" +"Gestione Automatica Risparmio Energetico (incrementa la durata delle " +"batterie)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Gestione Risparmio Energetico Estrema (spegne la connessione radio wireless, " +"incrementa la durata delle batterie)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Aggiornamento software" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Gli aggiornamenti software correggono errori, eliminano vulnerabilità del " +"codice ed offrono nuove funzioni." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Verifica %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Scaricando %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Aggirnamento %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Il tuo software è aggiornato" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Puoi installare %s aggiornamento" +msgstr[1] "Puoi installare %s aggiornamenti" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Ricerca aggiornamenti..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Installazione aggiornamenti..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s aggiornamento è stato installato" +msgstr[1] "%s aggiornamenti sono stati installati" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Installa selezionati" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Dimensione dati da scaricare: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Dalla versione %(current)s alla %(new)s (Dimensione: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Nessuno" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "La mia Batteria" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Rimosso" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Caricando" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Pochissima carica rimanente" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d rimanenti" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Carica" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Indirizzo IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Disconnetti" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Connessione..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Connesso" + +#: ../extensions/deviceicon/network.py:119 +#, fuzzy +msgid "No wireless connection" +msgstr "Nessuna connessione wireless" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Canale" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Rete su cavo" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Velocità" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Modem Wireless" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Attendi..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Connetti" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Disconnesso" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Cancella" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Prova nuovamente a connetterti" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Errore: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Suggerimento: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "Connesso per %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Verifica la configurazione di PIN/PUK." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Verifica la configurazione dell'Access Point Name (APN)" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Verifica la configurazione del Numero." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Verifica la configurazione." + +# A complete translation in italian: "rete a maglie" becames a tautology +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Rete Mesh" + +# A complete translation in italian: "rete a maglie" becames a tautology +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Rete Mesh %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "Connessione GSM non disponibile." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "Definisci una connessione nel Pannello di Controllo." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +#, fuzzy +msgid "Say selected text" +msgstr "Dire il testo selezionato" + +#: ../extensions/deviceicon/speech.py:83 +#, fuzzy +msgid "Stop playback" +msgstr "Interrompere la riproduzione" + +#: ../extensions/deviceicon/speech.py:97 +#, fuzzy +msgid "Pitch" +msgstr "Intonazione" + +#: ../extensions/deviceicon/speech.py:106 +#, fuzzy +msgid "Rate" +msgstr "Data" + +#: ../extensions/deviceicon/speech.py:133 +#, fuzzy +msgid "Pause playback" +msgstr "Pausa di riproduzione" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "I miei Altoparlanti" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Attiva" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Silenzia" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "dito" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "stilo" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "Il mio Touchpad" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Mesh" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Gruppo" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Casa" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Attività" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Schermata" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Schermata di \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"se \"disabled\" viene richiesto il nome alla inizializzazione; se \"system\" " +"verrà utilizzato il nome presente nell'account UNIX." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "Ulteriori directory contenenti traduzioni aggiornate." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "URL di salvataggio" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "ID dei pacchetti di attività protette" + +#: ../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 "" +"Colori per l'icona XO che viene utilizzata nel sistema. La stringa è " +"composta dal colore della linea e dal colore del riempimento, il formato è " +"quello dei colori rbg. Esempio: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Ritardo dell'angolo" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Tipo di carattere di default" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Dimensione del carattere di default" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Nome di default" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" +"Ritardo nella attivazione della cornice portando il puntatore in un angolo." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" +"Ritardo nella attivazione della cornice portando il puntatore sui bordi." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "Directory in cui cercare traduzioni" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Ritardo del bordo" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Disposizione delle attività preferite" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Modalità di richiamo delle attività preferite" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Tipo di carattere di default utilizzato in tutto il sistema." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Dimensione del carattere utilizzato in tutto il sistema." + +#: ../data/sugar.schemas.in.h:20 +#, fuzzy +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "APN rete GSM (DISAPPROVATO/INUTILIZZATO)" + +#: ../data/sugar.schemas.in.h:21 +#, fuzzy +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "PIN rete GSM (DISAPPROVATO/INUTILIZZATO)" + +#: ../data/sugar.schemas.in.h:22 +#, fuzzy +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "PUK rete GSM (DISAPPROVATO/INUTILIZZATO)" + +#: ../data/sugar.schemas.in.h:23 +#, fuzzy +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" +"configurazione di access point name rete GSM (DISAPPROVATO/INUTILIZZATO)" + +#: ../data/sugar.schemas.in.h:24 +#, fuzzy +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "numero di rete GSM (DISAPPROVATO/INUTILIZZATO)" + +#: ../data/sugar.schemas.in.h:25 +#, fuzzy +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "password di rete GSM (DISAPPROVATO/INUTILIZZATO)" + +#: ../data/sugar.schemas.in.h:26 +#, fuzzy +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "configurazione della password di rete GSM (DISAPPROVATO/INUTILIZZATO)" + +#: ../data/sugar.schemas.in.h:27 +#, fuzzy +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" +"configurazione del personal identification number (PIN) della rete GSM " +"(DISAPPROVATO/INUTILIZZATO)" + +#: ../data/sugar.schemas.in.h:28 +#, fuzzy +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" +"configurazione della chiave personale di sblocco (PUK) della rete GSM " +"(DISAPPROVATO/INUTILIZZATO)" + +#: ../data/sugar.schemas.in.h:29 +#, fuzzy +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" +"configurazione del numero telefonico della rete GSM " +"(DISAPPROVATO/INUTILIZZATO)" + +#: ../data/sugar.schemas.in.h:30 +#, fuzzy +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "username dela rete GSM (DISAPPROVATO/INUTILIZZATO)" + +#: ../data/sugar.schemas.in.h:31 +#, fuzzy +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" +"configurazione dello username della rete GSM (DISAPPROVATO/INUTILIZZATO)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Se TRUE, Sugar renderà il computer rintracciabile dagli altri utenti del " +"server Jabber." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Se TRUE, Sugar mostrerà una opzione di \"Disconnessione\"." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Se TRUE, Sugar mostrerà una opzione di \"Riavvia\"." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"Se TRUE, Sugar mostrerà le reti di default Ad-hoc per i canali 1,6 e 11. Se " +"Sugar non vede reti \"conosciute\" all'avvio, si connette in automatico ad una " +"rete Ad-hoc." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Jabber Server" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Disposizioni tastiera" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Modello tastiera" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Opzioni tastiera" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Disposizione della vista dei favoriti." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Elenco di disposizioni della tastiera. Ogni voce deve essere nel formato " +"layout(variant)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Lista di opzioni per la tastiera." + +#: ../data/sugar.schemas.in.h:43 +#, fuzzy +msgid "Pitch value for the speech sugar service" +msgstr "Valore del intonazione per il servizio vocale di Sugar" + +#: ../data/sugar.schemas.in.h:44 +#, fuzzy +msgid "Pitch value used by the speech service in Sugar" +msgstr "Intonazione valore utilizzato dal servizio vocale a Sugar" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Economizzazione Automatica" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Economizzazione Massima" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Pubblica su Gadget" + +#: ../data/sugar.schemas.in.h:48 +#, fuzzy +msgid "Rate value for the speech sugar service" +msgstr "Valore del frequenza per il servizio vocale di Sugar" + +#: ../data/sugar.schemas.in.h:49 +#, fuzzy +msgid "Rate value used by the speech service in Sugar" +msgstr "Frequenza valore utilizzato dal servizio vocale a Sugar" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Selezione per silenziare il riproduttore sonoro." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Mostra Disconnessione" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Mostra Riavvia" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Mostra rete ad-hoc di Sugar" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Suono Silenziato" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Modello di tastiera da utilizzare" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Selezione per il Timezone del sistema." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL del server jabber da utilizzare." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL su cui effettuare i salvataggi." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Colore dell'Utente" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Nome Utente" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Nome Utente utilizzato in tutto il sistema." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"Gli utenti non saranno abilitati alla cancellazione di queste attività dalla " +"Visualizzazione a lista." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Livello Volume" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Livello del volume del riproduttore di suoni." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Quando è selezionata la modalità di ripresa, selezionando una delle icone " +"delle attività favorite provocherà il riavvio della ultima versione " +"utilizzata." + +#: ../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: ATTENZIONE, trovata più di una opzione avente lo stesso " +"nome: %s modulo: %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 non è una opzione disponibile" + +# non credo sia da tradurre.... +#: ../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. +#. 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 +#, fuzzy +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 "" +"Utilizzo: sugar-control-panel [ opzioni ] key [ args ... ] \n" +" Controllo dell'ambiente sugar. \n" +" Opzioni: \n" +" -h Mostra questo messaggio di aiuto ed esci\n" +" -l lista tutte le opzioni disponibili \n" +" -h key mostra informazioni sulla \"key\" \n" +" -g key stampa il valore corrente della \"key\" \n" +" -s key assegna il valore corrente alla \"key\" \n" +" -c key pulisci il valore corrente alla \"key\" \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Per applicare le modifiche è necessario riavviare Sugar.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Attenzione" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Le modifiche rendono necessario un riavvio" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Annulla modifiche" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Dopo" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Riavvia adesso" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Fatto" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Versione %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Conferma cancellazione" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" +"Conferma cancellazione: Sei sicuro di voler eliminare definitivamente %s?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Memorizza" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Elimina" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Rimuovi preferito" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Definisci preferito" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Formato libero" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Anello" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spirale" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Scatola" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Triangolo" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Registrazione Fallita" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Registrazione Effettuata" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Ora sei registrato sul tuo server di scuola." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Registra" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +#, fuzzy +msgid "Register again" +msgstr "Registra ancora" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Aggiornamento software" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Aggiorna le tue attività perchè siano compatibili con il tuo sistema " +"aggiornato" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Verifica adesso" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Vista Elenco" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Visualizza i Preferiti" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Tipo Chiave:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Tipo di Autenticazione:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 Personal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Wireless Security:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Riprendi" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Associa" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Rete Ad-hoc %d" + +# A complete translation in italian: "rete a maglie" becames a tautology +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Rete Mesh %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Impossibile connettersi al server." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Il server non può completare la richiesta." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Rinuncia" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s di %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Trasferisci da %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Accetta" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Abbandona" + +#: ../src/jarabe/frame/activitiestray.py:644 +#, fuzzy +msgid "The other participant canceled the file transfer" +msgstr "L'altro partecipante ha annullato il trasferimento di file" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Trasferisci verso %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Rimuovi" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Apri" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Apri con" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "ritaglio %s" + +# Letterale "Vicinato", sperimentale: I miei vicini +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "I miei vicini" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Nome:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Seleziona per cambiare colore:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Indietro" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Prossimo" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Senza titolo" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Nessuna anteprima" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Tipo: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Sconosciuto" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Data: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Dimensione: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Nessuna data" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Partecipanti:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Descrizione:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Etichette:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Diario" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Cerca" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Sempre" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Oggi" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Da ieri" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Settimana scorsa" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Mese scorso" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Anno scorso" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Tutti" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "I miei amici" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "La mia classe" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Qualsiasi" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +#, fuzzy +msgid "Duplicate" +msgstr "Duplica" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "Errore durante la copia dell'elemento. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Errore" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Avvia" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +#, fuzzy +msgid "Sort by date modified" +msgstr "Ordinato per data di modifica" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +#, fuzzy +msgid "Sort by date created" +msgstr "Ordinato per data di creazione" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +#, fuzzy +msgid "Sort by size" +msgstr "Ordinato per dimensione" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +#, fuzzy +msgid "Sort view" +msgstr "Vista per ordinamento" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Il tuo Diario è vuoto" + +#: ../src/jarabe/journal/listview.py:320 +#, fuzzy +msgid "Your documents folder is empty" +msgstr "La cartella documenti è vuota" + +#: ../src/jarabe/journal/listview.py:322 +#, fuzzy +msgid "The device is empty" +msgstr "Il dispositivo è vuoto" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Non ci sono registrazioni corrispondenti" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Annulla ricerca" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +#, python-format, fuzzy +msgid "Older Version Of %s Activity" +msgstr "Versione precedente di %s attività" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +#, python-format, fuzzy +msgid "Do you want to downgrade to version %s" +msgstr "Voi ritornare alla versione %s" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Il tuo Diario è pieno" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "" +"Per favore cancella alcune registrazioni vecchie dal Diario per far spazio " +"alle nuove." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Apri il Diario" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Scegli un oggetto" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Chiudi" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Riprendi con" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Inizia con" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Attività per riprendere la sessione non presente" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Invia a" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Visualizza Dettagli" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "Elementi senza file non possono essere inviato." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "Elementi senza file non possono essere copiati." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Cartella appunti" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Non ci sono amici presenti" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Connessione non trovata" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Sessione dell'Attività da riprendere non presente" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +#, fuzzy +msgid "Documents" +msgstr "Documento" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB Liberi" + +#: ../src/jarabe/model/network.py:211 +#, fuzzy +msgid "The reason for the device state change is unknown." +msgstr "La ragione per il cambiamento di stato del dispositivo è sconosciuta." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "Il cambiamento di stato è normale." + +#: ../src/jarabe/model/network.py:215 +#, fuzzy +msgid "The device is now managed." +msgstr "Il dispositivo è ora gestito." + +#: ../src/jarabe/model/network.py:217 +#, fuzzy +msgid "The device is no longer managed." +msgstr "Il dispositivo non è più gestito." + +#: ../src/jarabe/model/network.py:219 +#, fuzzy +msgid "The device could not be readied for configuration." +msgstr "Il dispositivo non può essere pronto per la configurazione." + +#: ../src/jarabe/model/network.py:221 +#, fuzzy +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"La configurazione IP non può essere riservata (indirizzo non disponibile, " +"timeout, ecc)." + +#: ../src/jarabe/model/network.py:224 +#, fuzzy +msgid "The IP configuration is no longer valid." +msgstr "La configurazione IP non è più valida." + +#: ../src/jarabe/model/network.py:226 +#, fuzzy +msgid "Secrets were required, but not provided." +msgstr "Sono state richieste informazioni riservate, ma non sono state fornite." + +#: ../src/jarabe/model/network.py:228 +#, fuzzy +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" +"Il richiedente 802.1X è stato disconnesso dal punto di accesso o dal server " +"di autenticazione." + +#: ../src/jarabe/model/network.py:231 +#, fuzzy +msgid "Configuration of the 802.1X supplicant failed." +msgstr "La configurazione del richiedente 802.1X è fallita." + +#: ../src/jarabe/model/network.py:233 +#, fuzzy +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "Il richiedente 802.1X si è chiuso o ha fallito in modo imprevisto." + +#: ../src/jarabe/model/network.py:235 +#, fuzzy +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "Il richiedente 802.1X ha richiesto troppo tempo per l'autenticazione." + +#: ../src/jarabe/model/network.py:237 +#, fuzzy +msgid "The PPP service failed to start within the allowed time." +msgstr "Il servizio PPP non si è attivato nel tempo stabilito." + +#: ../src/jarabe/model/network.py:239 +#, fuzzy +msgid "The PPP service disconnected unexpectedly." +msgstr "Il servizio PPP si è disconnesso in modo imprevisto." + +#: ../src/jarabe/model/network.py:241 +#, fuzzy +msgid "The PPP service quit or failed unexpectedly." +msgstr "Il servizio PPP è terminato o mancato in modo imprevisto." + +#: ../src/jarabe/model/network.py:243 +#, fuzzy +msgid "The DHCP service failed to start within the allowed time." +msgstr "Il servizio DHCP non si è attivato nel tempo stabilito." + +#: ../src/jarabe/model/network.py:245 +#, fuzzy +msgid "The DHCP service reported an unexpected error." +msgstr "Il servizio DHCP ha riportato un errore imprevisto." + +#: ../src/jarabe/model/network.py:247 +#, fuzzy +msgid "The DHCP service quit or failed unexpectedly." +msgstr "Il servizio DHCP è terminato o mancato in modo imprevisto." + +#: ../src/jarabe/model/network.py:249 +#, fuzzy +msgid "The shared connection service failed to start." +msgstr "Il servizio di connessione condivisa non si è attivato." + +#: ../src/jarabe/model/network.py:251 +#, fuzzy +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" +"Il servizio di connessione condivisa è terminato o mancato in modo " +"imprevisto." + +#: ../src/jarabe/model/network.py:254 +#, fuzzy +msgid "The AutoIP service failed to start." +msgstr "Il servizio AutoIP non si è attivato." + +#: ../src/jarabe/model/network.py:256 +#, fuzzy +msgid "The AutoIP service reported an unexpected error." +msgstr "Il servizio AutoIP ha riportato un errore imprevisto." + +#: ../src/jarabe/model/network.py:258 +#, fuzzy +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "Il servizio AutoIP è terminato o mancato in modo imprevisto." + +#: ../src/jarabe/model/network.py:260 +#, fuzzy +msgid "Dialing failed because the line was busy." +msgstr "La composizione del numero è fallita perché la linea era occupata." + +#: ../src/jarabe/model/network.py:262 +#, fuzzy +msgid "Dialing failed because there was no dial tone." +msgstr "" +"La composizione del numero è fallita perché non c'era il segnale di linea." + +#: ../src/jarabe/model/network.py:264 +#, fuzzy +msgid "Dialing failed because there was no carrier." +msgstr "La composizione del numero è fallita perché non c'era la linea." + +#: ../src/jarabe/model/network.py:266 +#, fuzzy +msgid "Dialing timed out." +msgstr "Tempo scaduto per comporre il numero." + +#: ../src/jarabe/model/network.py:268 +#, fuzzy +msgid "Dialing failed." +msgstr "Composizione del numero fallita." + +#: ../src/jarabe/model/network.py:270 +#, fuzzy +msgid "Modem initialization failed." +msgstr "Inizializzazione del modem fallita." + +#: ../src/jarabe/model/network.py:272 +#, fuzzy +msgid "Failed to select the specified GSM APN" +msgstr "La selezione di GSM APN specificato è fallita" + +#: ../src/jarabe/model/network.py:274 +#, fuzzy +msgid "Not searching for networks." +msgstr "Ricerca di reti inattiva." + +#: ../src/jarabe/model/network.py:276 +#, fuzzy +msgid "Network registration was denied." +msgstr "Registrazione alla rete negata." + +#: ../src/jarabe/model/network.py:278 +#, fuzzy +msgid "Network registration timed out." +msgstr "Registrazione alla rete scaduta." + +#: ../src/jarabe/model/network.py:280 +#, fuzzy +msgid "Failed to register with the requested GSM network." +msgstr "La registrazione alla rete GSM richiesta è fallita." + +#: ../src/jarabe/model/network.py:282 +#, fuzzy +msgid "PIN check failed." +msgstr "Controllo del PIN respinto." + +#: ../src/jarabe/model/network.py:284 +#, fuzzy +msgid "Necessary firmware for the device may be missing." +msgstr "Firmware per il dispositivo mancante." + +#: ../src/jarabe/model/network.py:286 +#, fuzzy +msgid "The device was removed." +msgstr "Il dispositivo è stato rimosso." + +#: ../src/jarabe/model/network.py:288 +#, fuzzy +msgid "NetworkManager went to sleep." +msgstr "NetworkManager è in pausa." + +#: ../src/jarabe/model/network.py:290 +#, fuzzy +msgid "The device's active connection was removed or disappeared." +msgstr "La connessione attiva del dispositivo è stata rimossa o è scomparsa." + +#: ../src/jarabe/model/network.py:293 +#, fuzzy +msgid "A user or client requested the disconnection." +msgstr "Disconnessione richiesta dall'utente." + +#: ../src/jarabe/model/network.py:295 +#, fuzzy +msgid "The device's carrier/link changed." +msgstr "Il collegamento del dispositivo è cambiato." + +#: ../src/jarabe/model/network.py:297 +#, fuzzy +msgid "The device's existing connection was assumed." +msgstr "Connessione esistente del dispositivo è stata assunta." + +#: ../src/jarabe/model/network.py:299 +#, fuzzy +msgid "The supplicant is now available." +msgstr "Il supplicant è ora disponibile." + +#: ../src/jarabe/model/network.py:301 +#, fuzzy +msgid "The modem could not be found." +msgstr "Il modem non è stato trovato." + +#: ../src/jarabe/model/network.py:303 +#, fuzzy +msgid "The Bluetooth connection failed or timed out." +msgstr "La connessione Bluetooth non riuscita o scaduta." + +#: ../src/jarabe/model/network.py:305 +#, fuzzy +msgid "Unused." +msgstr "Inutilizzato." + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Rimuovi l'amico" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Aggiungi agli amici" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Spegni" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Riavvia" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Disconnessione" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Le mie Preferenze" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Invito per %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +#, python-format, fuzzy +msgid "%s failed to start." +msgstr "%s non è riuscito ad avviarsi." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Inizio..." + +#: ../src/jarabe/view/palettes.py:58 +#, fuzzy +msgid "Activity failed to start" +msgstr "L'attività ha fallito l'avvio" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Visualizza Sorgente" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Chiudi" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Inizia nuovo" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Mostra i contenuti" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Rimuovi" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Sorgente Istanza" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Sorgente" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Sorgente della Attività" + +#: ../src/jarabe/view/viewsource.py:393 +#, fuzzy +msgid "Sugar Toolkit Source" +msgstr "Sorgente della Sugar Toolkit" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Vedi codice sorgente: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Vedi codice sorgente: %r" + +#: ../src/jarabe/util/emulator.py:40 +#, fuzzy +msgid "Sugar in a window" +msgstr "Sugar in una finestra" diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..be45a67 --- /dev/null +++ b/po/ja.po @@ -0,0 +1,1821 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:01+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-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 "線: 色=%s 色相=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "線: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "塗りつぶし: 色=%s 色相=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "塗りつぶし: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "クリックして色を変更:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "私のコンピュータについて" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "不明です" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "個体の識別" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "シリアル番号:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "ソフトウェア" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "ビルド:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "ファームウェア:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "ワイヤレスファームウェア:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "著作権とライセンス" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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は、あなたが見ているグラフィカルユーザインターフェースです。Sugarはフリーソフトウェアで、GNU General Public Licen" +"se(一般公衆利用許諾契約書)による保護対象です。ここに記載されている条件の範囲で、Sugarを変更したりコピーを配布することが自由に行えます。" + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s 秒" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "表示するまでの時間" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "画面の4すみ" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "画面のふち" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "キーボード" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "キーボードのモデル" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "レイアウト変更に使うキー" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "~/.i18nにアクセスできませんでした。標準設定を作ってください。" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "コード%sの言語が不明です。" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "ごめんなさい。'%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 "使いたい言語を順番に追加してください。翻訳されていないと、リストの次のものが使われます。" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "モデムの設定" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "3Gネットワークへの接続を設定するのに、以下の情報を指定する必要があります。" + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "ユーザ名:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "パスワード:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "番号:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "アクセスポイント名(APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "個人識別番号(PIN)" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "radio引数指定でエラー、on/offを使ってください。" + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "引数指定でエラー、0/1を使ってください。" + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "無線" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "電池を節約するため、無線を止める" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "電波" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "ネットワーク接続で問題がある場合、接続履歴を破棄します" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "ネットワーク接続履歴を破棄" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "コラボレーション" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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 "automatic_pm 引数指定でエラー、 on/offを指定してください" + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "extreme_pm 引数指定のエラー、 on/offを指定してください。" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "電源の管理" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "自動的な電源管理(電池が長持ちします)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "最大の電源管理(無線の電波を停めて、電池を長持ちさせます)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "ソフトウェアの更新" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "ソフトウェアの更新により、エラーを修正し、セキュリティ脆弱性を減らし、新機能を追加します。" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "%s を調べています..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "%s をダウンロードしています..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "%s を更新しています..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "ソフトウェアは最新になっています" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "%s の更新をインストールできます" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "更新をチェックしています..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "更新をインストールしています..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s の更新がインストールされました" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "選ばれているものをインストールする" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "ダウンロードのサイズ: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "現在のバージョン %(current)s から %(new)s (サイズ: %(size)s) へ" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "なし" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "私の電池" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "取り外されています" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "充電中" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "残り %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "充電済み" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IPアドレス: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "接続しています..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "接続しました" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "無線接続がありません" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "チャンネル" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "有線ネットワーク" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "速度" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "無線モデム" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "お待ちください..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "接続" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "切断されました" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "中止" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "もう一度接続を試してみてください" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "エラー: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "提案: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "%s に接続しました" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "PIN/PUKの設定を確認してください。" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "アクセスポイント名の設定を確認してください。" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "番号の設定を確認してください。" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "設定を確認してください。" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "メッシュネットワーク" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "メッシュネットワーク %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "GSM接続が使えません。" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "コントロールパネルで接続を設定してください。" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +#, fuzzy +msgid "Rate" +msgstr "日付" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "私のスピーカー" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "音を出す" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "音を消す" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "指" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "スタイラス" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "私のタッチパッド" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "メッシュ" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "グループ" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "ホーム" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "アクティビティ" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "スクリーンショット" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "\"%s\"のスクリーンショット" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "初期化の際ニックネームを確認する場合は \"disabled\"を、UNIXアカウントの長い名前を再利用するには\"system\"を指定してください" + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "更新された翻訳データを置く追加ディレクトリ" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "バックアップURL" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "保護されたアクティビティのバンドルID" + +#: ../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 "" +"デスクトップで使われるXOアイコンの色。文字列は線と塗りつぶしの色で構成されます。フォーマットは赤青緑の形式です。例: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "四隅の遅延" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "デフォルトのフォント種類" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "デフォルトのフォントサイズ" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "デフォルトのニックネーム" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "画面四隅でフレームを起動する際の遅延" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "画面四辺でフレームを起動する際の遅延" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "翻訳データを検索するディレクトリ" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "四辺の遅延" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "お気に入りのレイアウト" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "お気に入り復元モード" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "デスクトップで使われるフォント種類" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "デスクトップで使われるフォントサイズ" + +#: ../data/sugar.schemas.in.h:20 +#, fuzzy +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "GSMネットワークのAPN 未使用" + +#: ../data/sugar.schemas.in.h:21 +#, fuzzy +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "GSMネットワークのPIN 未使用" + +#: ../data/sugar.schemas.in.h:22 +#, fuzzy +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "GSMネットワークのPUK 未使用" + +#: ../data/sugar.schemas.in.h:23 +#, fuzzy +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "GSMネットワークのアクセスポイント名の設定 未使用" + +#: ../data/sugar.schemas.in.h:24 +#, fuzzy +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "GSMネットワーク番号 未使用" + +#: ../data/sugar.schemas.in.h:25 +#, fuzzy +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "GSMネットワークのパスワード 未使用" + +#: ../data/sugar.schemas.in.h:26 +#, fuzzy +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "GSMネットワークのパスワード設定 未使用" + +#: ../data/sugar.schemas.in.h:27 +#, fuzzy +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "GSMネットワークのPINコード設定 未使用" + +#: ../data/sugar.schemas.in.h:28 +#, fuzzy +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "GSMネットワークのPUKコード設定 未使用" + +#: ../data/sugar.schemas.in.h:29 +#, fuzzy +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "GSMネットワークの電話番号設定 未使用" + +#: ../data/sugar.schemas.in.h:30 +#, fuzzy +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "GSMネットワークのユーザ名 未使用" + +#: ../data/sugar.schemas.in.h:31 +#, fuzzy +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "GSMネットワークのユーザ名設定 未使用" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "ONの場合、SugarはJabberサーバーの他のユーザが私たちを検索できるようにします" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "もしONなら、Sugarはログアウト オプションを表示します。" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "もしONなら、Sugarは再起動 オプションを表示します。" + +#: ../data/sugar.schemas.in.h:35 +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 "" +"もしONなら、Sugarはチャンネル1,6,11のデフォルトのアドホックネットワークを表示します。もしSugar起動時に名前つきネットワークが見つからな" +"いと、自動的にアドホックネットワークに接続します。" + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Jabberサーバー" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "キーボードの配列" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "キーボードのモデル" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "キーボードのオプション" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "お気に入り表示のレイアウト" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "キーボード配列のリスト。" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "キーボードオプションのリスト" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "電源設定-自動" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "電源設定-最大" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "ガジェットに送信" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "サウンド装置の音を消す" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "ログアウト を表示" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "再起動 を表示" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "アドホックネットワークを表示" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "消音されました" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "使用するキーボードのモデル" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "システムのタイムゾーン設定" + +#: ../data/sugar.schemas.in.h:58 +#, fuzzy +msgid "URL of the jabber server to use." +msgstr "使用するJabberサーバーのURL" + +#: ../data/sugar.schemas.in.h:59 +#, fuzzy +msgid "URL where the backup is saved to." +msgstr "バックアップが保存されるURL" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "ユーザの色" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "ユーザの名前" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "デスクトップで使われるユーザ名" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "リスト表示で、これらのアクティビティを削除することはできません。" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "音量レベル" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "サウンド装置の音量レベル" + +#: ../data/sugar.schemas.in.h:66 +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 "sugar-control-panel: 注意, 同じ名前のオプションが複数あります: %s モジュール: %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 は有効なオプションではありません" + +#: ../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. +#. 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 "" +"使い方: sugar-control-panel [ option ] key [ args ... ] \n" +"Sugarの環境を設定する。 \n" +"Options: \n" +"-h このヘルプメッセージを表示して終了する\n" +"-l 全ての有効なオプションを表示\n" +"-h key このキーについての情報を表示\n" +"-g key このキーの現在の設定値を取得\n" +"-s key このキーの値を設定 \n" +"-c key このキーの設定を消去\n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +#, fuzzy +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "変更を適用するにはsugarを再起動しなければいけません。\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "注意" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "変更には再起動が必要です" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "変更を取りやめる" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "あとで" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "今すぐ再起動" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "完了" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "了解" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "バージョン %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "消去の確認" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "消去の確認: %s を完全に消去しますか?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "ジャーナルに保存" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "消去する" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "お気に入りから削除" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "お気に入りに登録" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "自由に並べる" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "円に並べる" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "渦巻きに並べる" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "箱型に並べる" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "三角形に並べる" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "登録失敗" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "登録成功" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "あなたはスクールサーバーに登録されました" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "登録" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "もう一度登録" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "ソフトウェアの更新" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "新しいソフトウェアとの互換性を保つため、アクティビティを更新してください" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "今すぐ調べる" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "リスト表示" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "お気に入り" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "キーのタイプ:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "認証タイプ:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA と WPA2パーソナル" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "無線のセキュリティ:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "再開" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "参加" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "アドホックネットワーク %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "メッシュネットワーク %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "断る" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s の %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "%sから転送" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "受け入れる" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "閉じる" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "相手がファイル転送をキャンセルしました" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "%sへ転送" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "削除" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "開く" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "次のもので開く:" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%sのクリッピング" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "お隣さん" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "名前:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "クリックして色を変更:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "戻る" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "進む" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "タイトル無し" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "プレビュー無し" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "種類: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "不明" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "日付: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "サイズ: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "日付無し" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "参加者:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "説明:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "タグ:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "ジャーナル" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "検索" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "すべての期間" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "今日" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "昨日から後" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "過去1週間" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "過去1ヶ月" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "過去1年" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "誰でも" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "私の友だち" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "私のクラス" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "すべての種類" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "コピー" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "複製" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "コピー中にエラーになりました。%s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "エラー" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "開始" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "更新日で並べ替える" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "作成日で並べ替える" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "サイズで並べ替える" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "並べ替え表示" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "ジャーナルが空です" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "書類フォルダは空です" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "そのデバイスは空です" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "あてはまるものが無いです" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "検索をクリア" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "%s アクティビティの古いバージョン" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +#, python-format, +msgid "Do you want to downgrade to version %s" +msgstr "古いバージョン %s に戻しますか" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "ジャーナルを表示" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "オブジェクトを選ぶ" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "閉じる" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "次のアクティビティで再開" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "次のアクティビティで開始" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "エントリを開始するアクティビティがありません" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "次に送る" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "詳細を表示" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "ファイルがないエントリは送信できません。" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "ファイルがないエントリはコピーできません。" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "クリップボード" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "お友達がいません" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "正しい接続がありません" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "エントリを再開するアクティビティがありません" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "ドキュメント" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB 空き" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "デバイスの状態変化の理由は不明です。" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "デバイスの状態変化の理由は不明です。" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "デバイスは管理されています。" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "デバイスはもう管理されていません。" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "デバイスの設定準備ができませんでした。" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "IP設定を予約できませんでした(アドレスの空きがない、タイムアウトなど)。" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "IP設定は正しくありません。" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "秘密鍵が必要ですが入力されていません。" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "802.1X サプリカントはアクセスポイントまたは認証サーバーから切断されました。" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "802.1X サプリカントの設定が失敗しました。" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "802.1X サプリカントは終了したか、失敗しました。" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "802.1X サプリカントは時間がかかり過ぎて認証できませんでした。" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "PPPサービスが許容される時間内に起動できませんでした。" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "PPPサービスは予期なく切断されました。" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "PPPサービスは予期なく終了したか失敗しました。" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "DHCPサービスが許容される時間内に起動できませんでした。" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "DHCPサービスが予期せぬエラーになりました。" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "DHCPサービスは予期なく終了したか失敗しました。" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "共有接続サービスが起動できませんでした。" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "共有接続サービスは予期なく終了したか失敗しました。" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "AutoIPサービスが起動できませんでした。" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "AutoIPサービスが予期せぬエラーになりました。" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "AutoIPサービスは予期なく終了したか失敗しました。" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "回線が話し中でダイヤルに失敗しました。" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "発信音がないのでダイヤルできませんでした。" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "回線が切断されたのでダイヤルできませんでした。" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "ダイヤルがタイムアウトしました。" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "ダイヤルできませんでした。" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "モデムの初期化が失敗しました。" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "指定されたGSMアクセスポイントの選択が失敗しました。" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "ネットワーク登録は拒否されました。" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "ネットワーク登録がタイムアウトしました。" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "要求されたGSMネットワークの登録が失敗しました。" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "PINコードのチェックが失敗しました。" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "デバイスに必要なファームウェアが無いのかもしれません。" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "デバイスが取り外されました。" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "ネットワークマネージャはスリープ状態になりました。" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "デバイスの有効な接続が無くなりました。" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "ユーザまたはクライアントが切断を要求しました。" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "デバイスの回線/リンクが変わりました。" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "お友だちの登録削除" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "お友だちを登録" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "シャットダウン" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "再起動" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "ログアウト" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "私の設定" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "%s に招待する" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s は起動できませんでした。" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "起動中..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "アクティビティが起動できませんでした" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "ソースコードを表示" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "停止" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "新しく開始する" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "内容を表示" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "削除" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "インスタンスのソースコード" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "ソースコード" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "アクティビティバンドルのソースコード" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Sugarツールキットのソースコード" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "ソースを表示: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "ソースを表示: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/km.po b/po/km.po new file mode 100644 index 0000000..773d937 --- /dev/null +++ b/po/km.po @@ -0,0 +1,1811 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Rit Lim , 2008. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:17+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: km\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-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:235 +msgid "Click to change your color:" +msgstr "ចុច​ដើម្បី​ដូរ​ពិណ​របស់​អ្នក ៖" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "អំពី​កុំព្យូទ័រ​របស់ខ្ញុំ" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "មិន​អាច​រក​បាន" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "អត្តសញ្ញាណ" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "លេខសំគាល់ ៖" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "សូសវែ" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "ដំឡើង ៖" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "ស្ករ ៖" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "ហ្វឹមវែ ៖" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "ហ្វឹមវែ ឥត​ខ្សែ" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "កម្មសិទ្ឋិ​បញ្ញា​និង​អាជ្ញាប័ណ្ណ" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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) ជា​ប្រភេទ​រូបភាព​ផ្ទៃ​ខាង​មុខ​របស់​អ្នក​ប្រើប្រាស់ " +"ដែល​អ្នក​អាច​រក​បាន ស្ករ​(Sugar)គឺ​ជា​សេរីភាព​សូសវែ​ (software) " +"ទទួល​ខុស​ត្រូវ​ដោយ GNU ជា​អាជ្ញាប័ណ្ណ​សាធារណ​ទូទៅ " +"ហើយ​ស្វាគមន៍​ទៅ​លើ​ការ​ប្តូរ ចំលង​ចែកចាយ ដែល​មាន​លក្ខណ​ដែល​បាន​ចែង​នៅ​ទី​នេះ" + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s វិនាទី" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "ពន្យារការ​ធ្វើ​សកម្មភាព" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "កាច់ជ្រុង" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "ក្រប" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "ក្តារ​ចុច" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "ម៉ូដែល​ក្ដារចុច" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "មិន​អាច​អាន ~/i១៨n បាន​ទេ ។ បង្កើត​និយាម​​​សម្រាប់​កំណត់" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "កូដ​សំរាប់​ភាលា​ code=%s មិន​អាន​រក​ឃើញ​ទេ" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "សូម​ទោស ខ្ញុំ​មិន​ចេះ​និយាយ​ភាសា '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "ការ​កំណត់​រចនាសម្ព័ន្ធ​ម៉ូដឹម" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "ឈ្មោះអ្នក​ប្រើ ៖" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "ពាក្យ​សម្ងាត់ ៖" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "លេខ" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "ឥត​ខ្សែ" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "បិត​ប្រព័ន្ឋ​វិទ្យុឥត​​ខ្សែ​ដើម្បី​សន្សំ​ថ្ម" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "វិទ្យុ" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "ផ្តាច់​ប្រព័ន្ឋ​ជាមុន​ប្រសិន​បើ​មាន​បញ្ហា​ដល់​ភ្ជាប់​ប្រព័ន្ឋ​បណ្ដាញ" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "ផ្តាច់​ប្រព័ន្ឋ​ជាមុន​ប្រសិន" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "សហប្រតិបត្តិការ" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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 "" +"កំហុស​នៅ​ក្នុង​ប្រព័ន្ធ​ស្វ័យប្រវត្ត pm នៃ​ភាព​មិន​ត្រូវ​គ្នា​ដល់​ការ​ប្រើ " +"បិត/បើក" + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" +"កំហុស​នៅ​ក្នុង​ប្រព័ន្ធ​ឆ្លាស់ pm នៃ​ភាព​មិន​ត្រូវ​គ្នា​ដល់​ការ​ប្រើ បិត/បើក" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "ការគ្រប់គ្រងថាមពល" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "ការ​គ្រប់គ្រង​ថាមពល​ស្វ័យប្រវត្ត (ដើម្បី​ប្រើប្រាស់​ថ្ម​បាន​យូរ)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"ការគ្រប់គ្រង​ថាមពល​ឆ្លាស់ (ផ្ដាច់​ប្រព័ន្ធ​វិទ្យុ​ឥត​ខ្សែ " +"ដើម្បី​​ប្រើប្រាស់​​ថ្ម​​បាន​​យូរ)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "បច្ចុប្បន្នភាព​របស់​​​កម្មវិធី" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"កែ​កំហុស​សុសវែរ​អោយ​ទាន់សម័យ កាត់​ចោល​នូវ​កា​ខ្វះខាត​​កំហុស​សន្តិសុខ និង " +"ផ្តល់​ជូន​លក្ខណៈ​ថ្មីៗ" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +#, python-format, +msgid "Checking %s..." +msgstr "កំពុង​ពិនិត្យ​មើល %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "កំពុងទាញយក %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "កំពុង​ធ្វើ​បច្ចុប្បន្នភាព %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "ប្រព័ន្ធ​របស់​អ្នក​ទាន់សម័យ" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "កំពុង​ពិនិត្យ​រក​មើលបច្ចុប្បន្នភាព..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "ដំឡើង​បច្ចុប្បន្នភាព" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "ទំហំ​ទាញយក ៖ %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "គ្មាន" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 គីឡូបៃ" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f គីឡូបៃ" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "ថ្មរបស់ខ្ញុំ" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "យក​ចេញ" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "កំពុងបញ្ចូល" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +#, python-format, +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d នៅសល់" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "បានបញ្ចូល" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "អាសយដ្ឋាន​ភ្ជាប់​​អ៊ីនធឺណិត ៖ %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "តភ្ជាប់..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "ត​ភ្ជាប់​ហើយ" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "ប៉ុស្ដិ៍" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "ខ្សែ​បណ្ដាញ" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "ល្បឿន" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "សូម​រង់ចាំ..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "ភ្ជាប់" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "ផ្ដាច់ចេញ" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "បោះបង់" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "កំហុស ៖ %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +#, python-format, +msgid "Suggestion: %s" +msgstr "ការ​ផ្តល់​យោ​បល់ ៖ %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d គីឡូបៃ" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "បណ្ដាញត" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "បណ្ដាញត %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "ឧបលួរ​របស់​ខ្ញុំ" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "មិនស្ងាត់" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "ស្ងាត់" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "ដែក​ចារ" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "សំណាញ់" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "ក្រុម" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "ផ្ទះ" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "សកម្មភាព" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "រូបថត​អេក្រង់" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "កន្លែង​ចំលង​ទុក" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../data/sugar.schemas.in.h:6 +#, fuzzy +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 "" +"ពណ៌​រួប​តំណាង XO ដែល​ត្រូវ​បាន​ប្រើប្រាស់​លើ​ពាសពេញ​ផ្ទៃ​តុ " +"ដែល​ជា​ការ​កំណត់​សំគាល់​រាង​និង​ផ្ទៃ​ពណ៌​ដើម្បី​កំណត់​ពណ៌ rgb ឧទាហរណ៍ " +"#AC៣២FF,#៩A៥២០០" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "ពន្យារកាច់ជ្រុង" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +#, fuzzy +msgid "Font face that is used throughout the desktop." +msgstr "ឈ្មោះ​អ្នក​ប្រើ​ដែល​ត្រូវ​បាន​ប្រើ​ពាស​ពេញ​លើ​ផ្ទៃ​តុ" + +#: ../data/sugar.schemas.in.h:19 +#, fuzzy +msgid "Font size that is used throughout the desktop." +msgstr "ឈ្មោះ​អ្នក​ប្រើ​ដែល​ត្រូវ​បាន​ប្រើ​ពាស​ពេញ​លើ​ផ្ទៃ​តុ" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "ម៉ាស៊ីនបម្រើ Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "ប្លង់​ក្ដារ​ចុច ៖" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "ម៉ូដែល​ក្ដារចុច" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "ថាមពល​ស្វ័យប្រវត្ត" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "ថាមពល​ឆ្លាស់" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "កំណត់​មិន​ឲ្យ​ឧបករណ៍​សំឡេង​ឮ" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "ត្រូវបានបិទសំឡេង" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "ម៉ោង​តំបន់​ត្រូវ​បាន​កំណត់​នៅ​ក្នុង​ប្រពន្ធ" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "អភ័យដ្ឋាន​ដែល​ជា​ទីកន្លែង​រក្សា​ឯកសារ​ទុក" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "ពណ៌អ្នកប្រើ" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "ឈ្មោះអ្នកប្រើ" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "ឈ្មោះ​អ្នក​ប្រើ​ដែល​ត្រូវ​បាន​ប្រើ​ពាស​ពេញ​លើ​ផ្ទៃ​តុ" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "ទំហំកំរិត" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "ទំហំ​កម្រិត​​សម្រាប់​ប្រើ​លើ​ឧបករណ៍​សំឡេង" + +#: ../data/sugar.schemas.in.h:66 +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 "sugar-control-panel: key=%s ជម្រើស​អត់​មាន​ទេ" + +#: ../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 "" + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "ដើម្បី​ទទួល​បាន​សំណើ​សុំ​អោយ​ប្តូរ​ត្រូវ​ចាប់​ផ្តើម​ស៊ូហ្គឺ​ឡើង​វិញ\n" + +# This is assuming the context is a warning message, like, "Warning: this operation will be permanent." +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "ប្រយ័ត្ន" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "ការ​ប្តូរ​តំរូវ​អោយ​ចាប់​​ផ្តើម​ម៉ាស៊ីន​ឡើង​វិញ" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "បោះបង់ការប្តូរ" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "បន្ទាប់" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "ចាប់​​ផ្តើម​ឡើង​វិញ​ឥឡូវនេះ" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "រួច​ហើយ" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "យល់ព្រម" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "កំណែ %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "បញ្ជាក់លុបចេញ" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "បញ្ជាក់លុបចេញ តើអ្នកចង់លុបចេញជា​អចិន្ត្រៃយ %s?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "រក្សាទុក" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "លុប" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "យក​ចេញ​ពី​​សំណព្វ" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "រក្សា​ទុក​សណព្វ" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "ទម្រង់​សេរី" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "រោទ៍" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "កួច" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "ប្រអប់" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "ត្រីកោណ" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "បរាជ័យ​ចុះ​ឈ្មោះ" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "ចុះ​ឈ្មោះ​បាន​ជោគជ័យ" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "ឥឡូវ​នេះ​អ្នក​បាន​ចុះ​ឈ្មោះ​ទៅ​ក្នុង​ម៉ាស៊ីន​របស់​សាលា" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "ចុះ​ឈ្មោះ" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "ចុះឈ្មោះ​​ម្តង​ទៀត" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "សុសវែរទាន់សម័យ" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"សូមបញ្ជាក់សកម្មភាពរបស់អ្នកអោយទាន់សម័យ ដែលអាចធ្វើការជាមួយសុសវែរថ្មីរបស់អ្នក" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "ពិនិត្យមើលឥឡូវនេះ" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "បញ្ជីមើល" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "<បញ្ជា>២" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "ពេញនិយមមើល" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "<បញ្ជា>១" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "ប្រភេទ​ឆ្នុច ៖" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "ប្រភេទផ្ទៀង ៖" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 ផ្ទាល់ខ្លួន" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "ប្រព័ន្ធ​សន្តិសុខ​ឥត​ខ្សែ ៖" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "បន្ត" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "ចូល​រួម" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "បណ្ដាញត %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "ច្រានចោល" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s នៃ%s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "ផ្ទេរ​មកពី%s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "ព្រមទទួល" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, fuzzy +msgid "Transfer to %s" +msgstr "ផ្ទេរ​ទៅ​កាន់ %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "យក​ចេញ" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "បើក" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "បើកជាមួយ" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s កាត់យកចេញ" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "ភូមិ" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "ឈ្មោះ" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "ដូរ​ព័ណ" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "ថយ​ក្រោយ" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "ថតទៅ​មុខ" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "គ្មាន​ចំណង​ជើង" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "អត់មានព្រាង" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "មិន​ស្គាល់" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "កាល​បរិច្ឆេទ ៖ %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "ទំហំ ៖ %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "អត់​មាន​ថ្ងៃ​ខែ" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "អ្នកចូលរួម ៖" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "ពិពណ៌នា ៖" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "គំនូស ៖" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "កំណត់​ប្រចាំ​ថ្ងៃ" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "ស្វែងរក" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "វេលា​ណា​ក៏​បាន" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "ថ្ងៃ​នេះ" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "តាំង​ពី​ម្សិលមិញ" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "អាទិត្យ​មុន" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "ខែ​មុន" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "ឆ្នាំ​មុន" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "អ្នកណាក៏​ដោយ" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "មិត្ត​ខ្ញុំ" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "ថ្នាក់​ខ្ញុំ" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "អ្វី​ទាំង​អស់" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +#, fuzzy +msgid "Copy to" +msgstr "​ចម្លង​ទៅ" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "ស្ទួន" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "កំហុស" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "ចាប់​ផ្ដើម" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "តម្រៀប​តាម​ទំហំ" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +#, fuzzy +msgid "Your Journal is empty" +msgstr "ទិនានុប្បវត្តិ​របស់​អ្នក​បាន​ពេញ" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "សំអាតស្វែងរក" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "បង្ហាញទានានុប្បវត្តិ" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "ជ្រើសរើសវត្ថុ" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "បិទ" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "ចាប់​ផ្ដើមជាមួយ" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "ផ្ញើទៅកាន់" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "មើល​សេចក្តី​លម្អិត" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "ក្ដារ​តម្បៀត​ខ្ទាស់" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "គ្មាន​មិត្តភ័ក្ដិ​នៅ​ពេល​នេះ​ទេ" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "ឯកសារ" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "ដក​មិត្ត​ចេញ" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "កសាង​មិត្ត​ភាព" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "បិទ" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "ចាប់​ផ្ដើមឡើងវិញ" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "ចាកចេញ" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "ការ​កំណត់​របស់​ខ្ញុំ" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "អញ្ជើញទៅ %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "ចាប់​ផ្ដើម..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "មើល​ប្រភព" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "ឈប់" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "បង្ហាញ​មាតិកា" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "យក​ចេញ" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "ប្រភព" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "មើល​ប្រភព%s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "មើល​ប្រភព%r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 0000000..aa13e88 --- /dev/null +++ b/po/ko.po @@ -0,0 +1,1766 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 06:43+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-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:235 +msgid "Click to change your color:" +msgstr "당신의 색을 바꾸세요:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "나의 컴퓨터에 대해" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "시리얼 번호:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "소프트웨어" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "빌드:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"슈가는 그래픽 인터페이스 입니다. 지금 당신이 보고 있는것이 슈가 입니다. 슈가는 자유 소프트웨어 이고 GNU 라이센스 입니다. 슈가 " +"소프트웨어는 아래에 설명된 조건에서 자유롭게 수정하고 배포할 수 있습니다." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "날짜 & 시간" + +#: ../extensions/cpsection/datetime/model.py:92 +#, fuzzy +msgid "Error timezone does not exist." +msgstr "에러 timezone은 존재하지 않습니다." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "취소" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "활동" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "저장" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "이름:" + +#: ../src/jarabe/intro/window.py:133 +#, fuzzy +msgid "Click to change color:" +msgstr "당신의 색을 바꾸세요:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/kos.po b/po/kos.po new file mode 100644 index 0000000..21e8327 --- /dev/null +++ b/po/kos.po @@ -0,0 +1,1762 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2009-09-02 21:21-0400\n" +"Last-Translator: Chris Leonard \n" +"Language-Team: LANGUAGE \n" +"Language: kos\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 1.2.1\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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Tui" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/mg.po b/po/mg.po new file mode 100644 index 0000000..6663338 --- /dev/null +++ b/po/mg.po @@ -0,0 +1,1768 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 06:47+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: mg\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 "Momba ahy" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Tsy maintsy mampiditra anarana ianao" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "Tsindrio raha hanova ny lokonao:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Ny momba ny solosaina" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Aoreno:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Faritra" + +#: ../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 "eo no ho eo" + +#: ../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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Fiteny" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Tsy afaka niditra ~/.i18n. Mamorona tefy marofibika." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Tsy fantatra ny fitenin'ny sora-drindra=%s." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Azafady izaho tsy miteny '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "Tsy misy taroby" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Fiaraha-miasa" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +msgid "Server:" +msgstr "Mpamatsy, Mpizara" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Hery, Tanjaka" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "Vita" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Esory" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Adiresy IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Foano" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Avereno ny feo" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Esory ny feo" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "Tahirizo ny URL" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Tefy fanafoanana ny feon'ny fitaovam-peo." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Nesorina ny feo" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Tefin'ny faritrora ho an'ny rafitra." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL misy ny tahiry." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Lokon'ny mpampiasa" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Anaran'ny mpampiasa" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Fanovàna ny hadirim-peo." + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Tandremo" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Foano ny fanovàna" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Amin'ny manaraka" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Vita" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Soloy" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Boaty" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Telozoro" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Nisy olana ny fisoratana anarana" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Vita soa aman-tsara ny fisoratana anarana" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Voasoratra anarana" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "" + +# je proposerai aussi "Tsy afaka mifandray amin'ny mpamatsy". Cela dépend si on souhaite traduire "server" par "mpizara" ou "mpamatsy". +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Tsy afaka mifandray amin'ny mpizara." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Tsy afaka mameno ny fangatahana ny mpamatsy." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Ekeo" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Fafao" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Sokafy" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Sokafy miaraka amin'ny" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Ny manodidina" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Anarana:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Tsindrio raha te hanova ny loko:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Miverina" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Manaraka" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Tsy misy lohateny" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Mombamomba:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Firaiketana" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Tadiavo" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Anio, Androany" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Nanomboka omaly" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Tamin'ny herinandro lasa" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Tamin'ny iray volana" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Tamin'ny herin-taona" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Ny olona rehetra" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Ny namako" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Ny kilasiko" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Atomboy" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Tsy misy n'inoninona ao anatin'ny firaiketanao" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Feno ny firaiketanao" + +#: ../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:80 +msgid "Show Journal" +msgstr "Asehoy ny firaiketana" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Akatony" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Alefaso any amin'i" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Jereo ny antsipiriany" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB Malalaka" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Esory io namana io" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Pio, Vonoy" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Miala sehatra" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Ireo tefiko" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Asehoy ny sora-drindra" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Ajanony" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Asehoy ny atiny" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Fafao" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/mi.po b/po/mi.po new file mode 100644 index 0000000..2066b99 --- /dev/null +++ b/po/mi.po @@ -0,0 +1,1764 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2010-01-02 03:00-0400\n" +"Last-Translator: Chris Leonard \n" +"Language-Team: LANGUAGE \n" +"Language: mi\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 1.2.1\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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Whakaaturanga:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/mk.po b/po/mk.po new file mode 100644 index 0000000..94f72e7 --- /dev/null +++ b/po/mk.po @@ -0,0 +1,1778 @@ +# translation of sugar.po to Macedonian +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Arangel Angov , 2007. +msgid "" +msgstr "" +"Project-Id-Version: olpc-sugar.master\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-10 08:51+0200\n" +"Last-Translator: Chris \n" +"Language-Team: Macedonian \n" +"Language: mk\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%10==1 ? 0 : 1);\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:235 +#, fuzzy +msgid "Click to change your color:" +msgstr "Кликни да смениш боја:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "Завршено" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "Отстрани" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Соседство" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Соседство %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Група" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Дома" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Активност" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Слика од екранот" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Завршено" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Зачувај" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Избриши" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Продолжи" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Соседство %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Отстрани" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Отвори" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Соседство" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Име:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Кликни да смениш боја:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Назад" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Напред" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Без наслов" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Без преглед" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Без датум" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Опис:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Ознаки:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Дневник" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Барај" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Било кога" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Денес" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Од вчера" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Минатата недела" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Минатиот месец" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Минатата година" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Било кој" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Мои другарчиња" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Мојот клас" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Било што" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Отстрани пријател" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Додај пријател" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Исклучи" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Стоп" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Отстрани" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/ml.po b/po/ml.po new file mode 100644 index 0000000..a3bd387 --- /dev/null +++ b/po/ml.po @@ -0,0 +1,1773 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2008-03-07 14:59-0500\n" +"Last-Translator: Ani Peter \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.0.2\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:235 +#, fuzzy +msgid "Click to change your color:" +msgstr "നിറം മാറ്റുവാന്‍ ഇവിടെ ഞെക്കുക:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "നീക്കം ചെയ്യുക" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "അയല്‍വക്കം" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "പൂമുഖം" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "പ്രവര്‍ത്തനം" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "സൂക്ഷിക്കുക" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "ചേരുക" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "നീക്കം ചെയ്യുക" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "തുറക്കുക" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "അയല്‍വക്കം" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "പേര്:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "നിറം മാറ്റുവാന്‍ ഇവിടെ ഞെക്കുക:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "മുന്‍പത്തേത്" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "അടുത്തത്" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "തിരച്ചില്‍" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "ഏത്‍ സമയത്തും" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "ഇന്ന്" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "ഇന്നലെ മുതല്‍" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "കഴിഞ്ഞ ഒരാഴ്ച" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "കഴിഞ്ഞ ഒരു മാസം" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "കഴിഞ്ഞ ഒരു വര്‍ഷം" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "എന്റെ സുഹ്രുത്തുക്കള്‍" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "സുഹൃത്തിനെ നീക്കം ചെയ്യുക" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "സുഹൃത്തുക്കളെ ഉണ്ടാക്കുക" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "%s - ലേക്ക് ക്ഷണിക്കുക" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "തുടങ്ങുന്നു..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "നിര്‍ത്തുക" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "നീക്കം ചെയ്യുക" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/mn.po b/po/mn.po new file mode 100644 index 0000000..b9ca470 --- /dev/null +++ b/po/mn.po @@ -0,0 +1,1814 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 06:53+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: mn\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 "Миний тухай" + +#: ../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 "зурагдах хэмжээ: өнгө=%s тодролт=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "зурагдах хэмжээ: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "дүүргэх: өнгө=%s тодролт=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "дүүргэх: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "Товшиж өнгөө солино уу:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Миний компьютерийн тухай" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Боломжгүй байна" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Онцлох шинж" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Цувралын дугаар:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Програм хангамж" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Хувилбар:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Шугар:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Бичил програм:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Утасгүй бичил хангамж:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Зохиогчийн эрх ба Зөвшөөрөл" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 бол таны хайж буй хэрэглэгчийн график орчин юм. GNU General Public " +"License-р бүтээгдсэн Sugar бол чөлөөт нээлттэй програм хангамж мөн. Та " +"үүнийг тодорхой хэдэн заагдсан журмын хүрээнд өөрчилж, түгээж болно." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s секунд" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Идэвхжилийн Саатал" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Булан" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Ирмэг" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Гар" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Гарын загвар" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Гарын бичих горимыг солих" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "~/.i18n хандаж чадсангүй. Үндсэн тохиргоог үүсгэнэ үү." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Кодны хэл=%s тодорхойлж чадсангүй." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Уучлаарай би '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Модемын тохиргоо" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "Хэрэглэгчийн нэр:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Нэвтрэх үг:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Дугаар:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "Сонгосон тохиргооны төлөвд алдаа гарлаа 0/1 aшиглах хэрэгтэй." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Утасгүй холболт" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Радио холболтоос гарч цэнэгээ хэмнэх" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Радио" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Хамтын ажиллагаа" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Хэт үүсгүүр зохицуулалтын төлөвд алдаа гарлаа." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Хүчдэл зохицуулагч" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Хүчдэлийг автоматаар зохицуулагч (батерейг хэмнэх)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Хүчдэлийг дээд зэргээр хэмнэх (радио долгионыг хааснаар батерейг хэмнэх)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Хангамж шинэчлэх" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +#, python-format, fuzzy +msgid "Checking %s..." +msgstr "%s-ийг шалгаж байна" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +#, fuzzy +msgid "Checking for updates..." +msgstr "Шинэчлэл байгаа эсэхийг шалга" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Огт үгүй" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Миний батарей" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Устгасан" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Цэнэглэгдэж байна" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d үлдлээ" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Цэнэглэгдсэн" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP хаяг: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Холбогдож байна..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Холбогдсон" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Суваг" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Утастай Сүлжээ" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Хурд" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Түр хүлээнэ үү..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Холбох" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Салгагдсан" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Болих" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Алдаа: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +#, python-format, fuzzy +msgid "%d KB" +msgstr "%d КБайт" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Тархалтын сүлжээ" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, python-format, +msgid "Mesh Network %s" +msgstr "Тархалтын сүлжээ %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Миний чанга яригч" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Дуутай болгох" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Дуугүй болгох" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Тархалт" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Бүлэг" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Нүүр хуудас" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Үйл ажиллагаа" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Дэлгэцний зураг" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Их ашигладаг фонт." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Фонтийн хэмжээ." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "Жаббер Сервер" + +#: ../data/sugar.schemas.in.h:37 +#, fuzzy +msgid "Keyboard layouts" +msgstr "Гарын бичилтийн байрлал" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Гарын загвар" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Хэрэглэгчийн Өнгө" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Хэрэглэгчийн Нэр" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Хэрэглэгчийн нэр олон байдалд ашиглаж байдаг." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Дууны Хэмжээ" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Дуу авианы тоноглолын дууны жэмжээ." + +#: ../data/sugar.schemas.in.h:66 +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 "sugar-удирдах-самбар: АНХААР, нэр давхцаж байна: %s модуль: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "sugar-удирдах-самбар: товч=%s сонгох боломжгүй" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "sugar-удирдах-самбар: %s" + +# TRANS: Translators, there's a empty line at the end of this string,&amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br /&amp;amp;amp;gt;&amp;amp;lt;br /&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
+# which must appear in the translated string (msgstr) as well. +#. 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 "" +"Хэрэглээ: sugar-удирдах-самбар [ сонголт ] товч [ аргумент ... ] \n" +" Sugar-ийн орчны хяналт. \n" +" Сонголтууд: \n" +" -х Энэ тусламжын мэдээ үзүүлэх ба гаргах \n" +" -л Боломжит сонголтын үзүүлэлтүүд \n" +" -х товч Товчны тухай мэдээлэл \n" +" -а товч Товчны одоогийн ач холбогдлыг мэдэх \n" +" -ы товч Товчны одоогийн ач холбогдлыг тохируулах \n" +" -с товч Товчны одоогийн ач холбогдлыг арилгах \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Өөрчлөлтийг идэвхжүүлэхийн тулд та дахин эхлүүлэх шаардлагатай.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Анхаар" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Өөрчлөхийн тулд дахин эхлүүлэх хэрэгтэй" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Өөрчлөлтийг цуцлах" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Дараа" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Одоо эхлүүлэх үү" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Боллоо" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Тийм" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Хувилбар %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Арилгахыг зөвшөөрөх" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Арилгахыг зөвшөөрөх: Та %s бүр мөсөн арилгахыг хүсч байна уу?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Хадгалах" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Арилгах" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Дуртай зүйлийг устгах" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Дуртай зүйл болгох" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Дурын хэлбэр" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Цагираг" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Спираль" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Хайрцаг" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Гурвалжин" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Бүртгэл бүтэлгүйтлээ" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Бүртгэл амжилттай" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Та одоо сургуулийн серверт бүртгэгдлээ." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Бүртгүүлэх" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Хангамж Шинэчлэх" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Одоо шалга" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Жагсаалтыг харах" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Дуртай зүйлсийг үзэх" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Үндсэн төрөл:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Нэвтрэх нууцлалын төрөл:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Эргэж орох" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Нэгдэх" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Тархалтын сүлжээ %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Үл зөвшөөрөх" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%d Байт" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%d КБайт" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%d МБайт" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s-ны %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "%s-аас дамжуулах" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Зөвшөөрөх" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +#, fuzzy +msgid "Dismiss" +msgstr "Алгас" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "%s-д дамжуулах" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Устгах" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Нээх" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Сонгож нээх" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Хөршүүд" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Нэр:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Энд дарж өнгөө солино уу:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Буцах" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Дараах" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Гарчиггүй" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Урьдчилан харах боломжгүй" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Огноо: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Хэмжээ: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Огноо байхгүй" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Гүйцэтгэгчид:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Тайлбар:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Шошго:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Журнал" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Хайлт" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Ямар ч үед" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Өнөөдөр" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Өчигдрөөс хойших" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Өнгөрсөн долоо хоногт" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Өнгөрсөн сард" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Өнгөрсөн жил" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Хэн ч гэсэн" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Миний найзууд" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Манай анги" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Бүх юм" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +#, fuzzy +msgid "Copy to" +msgstr "Хуулах газар" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Хувилах" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Алдаа" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Эхлэх" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Таны Журнал хоосон байна" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Тохирсон оролт алга" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Хайлт арилгах" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "Журнал Үзүүлэх" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Обьектыг сонгох" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Хаах" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +#, fuzzy +msgid "Send to" +msgstr "Илгээх этгээд" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +#, fuzzy +msgid "Documents" +msgstr "Бичиг баримт" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB ашиглаагүй" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Найзыг хасах" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Найз нэмэх" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Унтраах" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Дахин эхлүүлэх" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Гарах" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Миний Тохиргоо" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "%s-д урих" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Эхэлж байна..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Зогсоох" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Шинээр эхлүүлэх" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Агуулгийг үзэх" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Устгах" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Эх үүсвэр" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/mr.po b/po/mr.po new file mode 100644 index 0000000..e8d65bd --- /dev/null +++ b/po/mr.po @@ -0,0 +1,1814 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 06:51+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: mr\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 "माझ्या बद्दल" + +#: ../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 "फटकारा: रंग=%s छटा=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "फटकारा: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "भरा: रंग=%s छटा=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "भरा: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "रंग बदलण्यासाठी क्लिक करा" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "माझ्या संगणकाबद्दल" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "उपलब्ध नाही" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "ओळख" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "क्रमशः क्रमांक" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "सॉफ्टवेर" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "बांधा:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "शूगर:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "फर्मवेर :" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "वायरलेस फर्मवेयर:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "कॉपीराईट आणि लाइसेन्स" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"तुम्ही पाहत असलेले शुगर हे मुक्त सॉफ्टवेयर आहे, जे GNU (जनरल पब्लीक " +"लायसेन्स) अंतर्गत आहे, आणि काही ठरावीक नियमात यात बदल करण्यास व याचे कॉपी " +"पसरवण्यास तुमचे स्वागत करतो." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s सेकेंड" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "चालू करण्यात होणारा उशीर" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "कोपरा" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "धार" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "कि-बोर्ड" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "कि-बोर्ड नमुना" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "लेआउट बदलण्यासाठीची की" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "की-बोर्ड लेआउटस" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "भाषा" + +# jj4zXm acjkiafvozsb, [url=http://ocwzcpnvdnkk.com/]ocwzcpnvdnkk[/url], [link=http://qibtzlmestab.com/]qibtzlmestab[/link], http://vzswtyjwbluf.com/ +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "प्रवेश नाही ~/.i18n. योग्य सेटिंग बनवा." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "कोडसाठी भाषा=%s अस्तित्वात नाही" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "माफ करा मी %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 "" +"तुम्हाच्या आवडीप्रमाणे भाषेची सुची बनवा. जर भाषांतर उपलब्ध नसेल, तर सुची " +"पैकी पुढिल वापरात येइल." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "मोडेम कॉन्फिगरेशन" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "वापरकर्त्याचे नाव:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "पासवर्ड:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "अंक:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "अॅक्सेस पॉइंटचे नाव:" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "खाजगी ओळख अंक(पीन):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "दिलेल्या सांराशमध्ये चुक आहे 0/1 वापरा." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "विनतार" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "बॅटरीचे आयु्ष्य वाढविण्यासाठी बीनतारी रेडीओ बंद करा." + +#: ../extensions/cpsection/network/view.py:82 +#, fuzzy +msgid "Radio" +msgstr "रेडियो" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"जर तुम्हाला नेटवर्कसोबत संपर्क साधण्यास त्रास होत असेल तर, नेटवर्कचा मागील " +"तपशील काढुन टाका." + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "नेटवर्कचा मागील तपशील काढुन टाका" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "सहयोगाने" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "शेवटच्या पीएम सारांशामधे चुक आहे, चालू/बंद वापरा." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "उर्जा व्यवस्था" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "स्वयंचलित उर्जा व्यवस्था (बॅटरीचा जीवन काळ वाढत)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "जबर उर्जा व्यवस्था ( विनतार रेडियो बंद करतो, बॅटरीचा जीवन काळ वाढत)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "सॉफ्टवेर अपडेट" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "तपासत आहे %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "डाउनलोड चालू आहे %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "अपडेटींग %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "तुमचे सॉफ्टवेर अद्यावत आहे" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "%s अपडेट तुम्ही इंस्टॉल करू शकता" +msgstr[1] "%s अपडेटस तुम्ही इंस्टॉल करू शकता" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "अपडेटस तपासत आहे..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "अपडेटस इंस्टॉल करत अहे..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s अपडेट इंस्टॉल झाले." +msgstr[1] "%s अपडेटस इंस्टॉल झाले." + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "पूर्ण करा" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "माज़ी बॅटरी" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "काढून टाकणे" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "चार्ज होत आहे" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d उरले आहे" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "चार्ज झाले" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "संपर्क होत आहे" + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "संपर्क जुळले" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "मार्ग" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "गती" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "संपर्क साधा" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "संपर्क तुटणे" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "रद्द करणे" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "चुक: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "मेष जाळे" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, fuzzy +msgid "Mesh Network %s" +msgstr "मेष जाळे %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "माझे स्पीकर" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "आवज़ चालू" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "आवज़ बंद" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "मेष" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "गट" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "घर" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "क्रिया" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "पडदा चित्रा" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +#, fuzzy +msgid "Keyboard layouts" +msgstr "की-बोर्ड लेआउटस" + +#: ../data/sugar.schemas.in.h:38 +#, fuzzy +msgid "Keyboard model" +msgstr "कि-बोर्ड नमुना" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "" +"शुगर - कंट्रोल - पॅनेल: सूचना, एकनावाचे एकापेक्षा जास्त विकल्प मिळाले: %s " +"मॉडयुल: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "शुगर-कंट्रोल-पॅनेल:की=%s पर्याय उपलब्ध नाही" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "शुगर-कंट्रोल-पॅनेल:%s" + +# TRANS: Translators, there's a empty line at the end of this string, +# which must appear in the translated string (msgstr) as well. +#. 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 "" +"वापर:शुगर-कंट्रोल-पॅनेल[पर्याय]किल्ली[तर्क .....] \n" +" शुगर वातावरणचे नियंत्रण. \n" +" पर्याय: \n" +" -h_ हा मदतीचा संदेश पाठवा आणि बंद करा \n" +" -l_ उपलब्ध सूची दाखवा \n" +" -h_ ह्या किल्लीबद्दल माहिती दाखवा -g किल्ली_ " +" किल्लीची सध्याची किंमत घ्या \n" +" -s किल्ली_ किल्लीला सध्याची किंमत द्या \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "तुम्ही केलेले बदल लागू करण्यासाठी शुगर परत चालू करा.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "सूचना" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "बदली लागू करण्यासाठी परत सुरू करा" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "बदली रद्द करा" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "नंतर" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "परत सुरू करा" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "पूर्ण करा" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "ठीक" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "मीटाव नक्की करा" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "मीटाव नक्की करा: तुम्हाला %s कायमसाठी मिटवायची आहे का" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "संभाला" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "खोडा" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "आवडते काढून टाका" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "आवडते नोंद करा" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "पासून मुक्त" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "रिंग" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "त्रिकोण" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "नोंदणीकरन असफल" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "नोंदणीकरन सफल" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "आता तुमच्या स्कूल सर्वर बरोबर तुमची नोंदणी झाली" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "नोंद" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "सॉफ्टवेर अपडेट" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"नवीन सॉफ्टवेर बरोबर आपल्या एकटीवीटीची अनुरूपताची खात्री करण्यासाठी ते अपडेट " +"करून घ्या" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "आता पहा" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "यादी दृष्य" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "आवडते दृश्‍ा" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "कळ प्रकार" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "पमाणिकरणचा प्रकार" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "पुन्हा आरंभ करणे" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "सामील व्हा" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +#, fuzzy +msgid "Mesh Network %d" +msgstr "मेष जाळे %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "अस्वीकार" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "काढून टाकणे" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "उघडणे" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "ने उघडा" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "शेजार" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "नाव" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "रंग बदलण्यासाठी क्लिक करा" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "मागे" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "पूढे" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "विषयरहीत" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "आगाऊ प्रदर्शन नाही" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "अनोळखी" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "तारीख: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "माप: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "तारीख नाही" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "प्रतिस्पर्धी" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "वर्णन:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "ठसा:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "नियतकालिक" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "शोधा" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "कोणत्याही वेळी" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "आज" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "कालपासून" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "गेल्या आठवडयात" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "गेल्या महिन्यात" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "गेल्या वर्षी" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "कोणीही" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "माझे मित्र" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "माझा वर्ग" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "काहीही" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "चुक" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "चालू करा" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "तुमचे नियतकालिक रिकामी आहे" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +#, fuzzy +msgid "No matching entries" +msgstr "ज़ूळ्णारी नोंद नाही" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "नियतकालिक दाखवा" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "वस्तू निवडा" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "बंद करा" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB फ्री" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "मित्राला काढून टाका" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "मित्रा करा" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "बंद करा" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "पुन्हा चालू करा" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "%s ला आमंत्रण द्या" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "चालू करणे" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "थांबा" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "आतला दाखवा" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "काढून टाकणे" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "स्त्रोत्र" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/ms.po b/po/ms.po new file mode 100644 index 0000000..942a46d --- /dev/null +++ b/po/ms.po @@ -0,0 +1,1797 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-05-01 00:34-0400\n" +"PO-Revision-Date: 2012-05-17 14:43+0200\n" +"Last-Translator: Mohd Lazim bin Abdul Raoh \n" +"Language-Team: LANGUAGE \n" +"Language: ms\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.5\n" + +#: ../extensions/cpsection/aboutme/__init__.py:24 +msgid "About Me" +msgstr "Mengenai Saya" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Kamu perlu masukkan nama." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "usapan: warna=%s rona=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "usapan: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "penuhkan: warna=%s rona=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "penuhkan: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Ralat dalam penerangan warna yang ditentukan." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Ralat dalam warna yang ditentukan." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Klik untuk tukar warna anda:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Mengenai komputer saya" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Tidak tersedia" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identiti" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Nombor siri:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Perisian" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Binaan:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Perisian tegar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Perisian tegar tanpa dawai:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Hakcipta dan Lesen" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 agalah antara muka grafik yang anda sedang perhatikan. Sugar adalah " +"perisian percuma, dilindungi oleh GNU General Public License, dan anda " +"dialu-alukan untuk mengubahnya dan/atau mengedar salinannya di bawah " +"beberapa syarat yang termaktub di dalamnya." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Lesen penuh:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Tarikh & Masa" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Ralat zon masa tidak wujud." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Zon masa" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Rangka" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Nilai perlu integer." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "tak pernah" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "serta-merta" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s saat" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Aktivasi tertangguh" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Bucu" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Pinggir" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Papan kekunci" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Model Papan kekunci" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Kekunci bagi mengubah tata letak" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Tata letak papan kekunci" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Bahasa" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Tidak boleh mengakses ~/.i18n. Cipta piawai latar." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Bahasa bagi kod=%s tidak boleh diselesaikan." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Maaf saya tidak bertutur '%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 "" +"Tambah bahasa mengikut kehendak susanan anda. Jika terjemahan tiada, baris " +"kemudian dalam senarai akan diguna pakai." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Konfigurasi Modem" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Anda perlu memberikan maklumat berikut untuk menetapkan sambungan jalur " +"lebar (3G) kepada rangkaian mudah alih." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Nama pengguna:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Kata kekunci:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Nombor:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Nama Titik Akses (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Nombor Pengenalan Peribadi (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Rangkaian" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Keadaan tidak diketahui." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Ralat dalam argumen yang telah ditentukan gunakan pasang/tutup." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Ralat dalam argumen yang telah ditentukangunakan 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Tanpa dawai" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Tutup radio tanpa dawai untuk menjimatkan jangka hayat bateri" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"Abaikan sejarah rangkaian jika anda ada masalah untuk menyambung ke " +"rangkaian" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Abaikan sajarah rangkaian" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Usahasama" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Pelayan ini bersamaan dengan bilik mana ada berada; orang di dalam pelayan " +"yang sama boleh melihat antara satu sama lain, walaupun mereka bukan berada " +"dalam rangkaian yang sama." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Pelayan:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Tenaga" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Ralat dalam argumen automatik pm, gunakan pasang/tutup." + +#: ../extensions/cpsection/power/view.py:45 +msgid "Power management" +msgstr "Pengurusan tenaga" + +#: ../extensions/cpsection/power/view.py:55 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Pengurusan tenaga secara automatik (tambah daya hidup bateri)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Pengemaskinian perisian" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Pengemaskinian perisian membetulkan ralat, menghapuskan kelemahan " +"keselamatan, dan membekalkan ciri-ciri baru." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Memeriksa %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Memuat turun %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Mengemas kini %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Perisian anda yang terkini" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Anda boleh memasang %s kemas kini" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Memeriksa untuk kemas kini..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Memasang kemas kini..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s kemas kini telah dipasang" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Pemasangan dipilih" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Saiz muat turun: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Dari versi %(current)s to %(new)s (Saiz: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Semua tiada" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Bateri Saya" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Buang" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Mengecas" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Amat sikit saki baki tenaga" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d tinggal" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Dicas" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Alamat IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Nyahsambung" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Sambung..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Disambung" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "Tiada sambungan tanpa wayar" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Saluran" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Rangkaian berdawai" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Kelajuan" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Modem tanpa dawai" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Sila tunggu..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Sambung" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Nyahsambung" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Batal" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Cuba sambungan semula" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Ralat: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Cadangan: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "Sambung bagi %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Periksa konfigurasi PIN/PUK anda." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Periksa konfigurasi Nama Poin Akses (APN) anda" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Periksa konfigurasi Nombor." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Periksa konfigurasi anda." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Rangkaian jejaring" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Rangkaian jejaring %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "Tiada sambungan GSM." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "Cipta satu sambungan dalan panel kawalan." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "Ucapan" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "Sebut perkataan yang dipilih" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "Hentikan main" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "Kadar" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Penguat suara Saya" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Nyahbisu" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Bisu" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "jejari" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "stylus" +msgstr "stilus" + +#: ../extensions/deviceicon/touchpad.py:64 +msgid "My touchpad" +msgstr "Pad sesentuh saya" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Jejaring" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Kumpulan" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Rumah" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Aktiviti" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Tangkap layar" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Tangkap layar dari \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"dilumpuhkan\" untuk menggunakan nama sebagai pemulaan; \"system\" untuk " +"menggunakan nama penuh akaun UNIX." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "Direktori tambahan mengandungi terjemahan terkini." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "URL Sandaran" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" +"Warna bagi arca XO untuk semeja. Untaian adalah gabungan warna usapan dan " +"warna penuhi, formatnya warna rgb.Contoh: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Lengahan Bucu" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Muka fon asal" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Saiz fon asal" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Timangan asal" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Tangguh pengaktifan bingkai menggunakan bucu." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Tangguh pengaktifan bingkai menggunakan pinggir." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "Direktori untuk carian terjemahan" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Lengahan pinggir" + +#: ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Pengurusan tenaga secara ekstrem (lumpuhkan radio tanpa wayar, tambah daya " +"hidup bateri)" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Tata letak kegemaran" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Mod teruskan kegemaran" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Muka fon yang digunakan oleh semeja." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Saiz fon yang digunakan oleh semeja." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Jika BENAR, Sugar akan membuat kita boleh dicari oleh pengguna-pengguna lain " +"di pelayan Jabber." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Jika BENAR, Sugar akan memaparkan pilihan \"Log keluar\"." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Jika BENAR, Sugar akan memaparkan pilihan \"Mula semula\"." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"Jika BENAR, Sugar akan memaparkan rangkaian ad hoc asal bagi saluran 1,6 dan " +"11. Jika Sugar nampak tiada \"diketahui\" rangkaian ketika ia bermula, ia " +"akan automatik sambung ke rangkaian ad hoc." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Pelayan Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Tata letak papan kekunci" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Model papan kekunci" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Pilihan papan kekunci" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Tata letak paparan kegemaran." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Sanarai tata letak papan kekunci. Setiap entri mesti dalam bentuk tata " +"letak(varian)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Senarai pilihan papan kekunci." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Tenaga Automatik" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Tenaga Ekstrem" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Terbit ke Gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Seting bagi menyenyapkan peranti bunyi." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Paparkan Log keluar" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Paparkan Mula semula" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Paparkan rangkaian ad hoc Sugar" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Bunyi disenyapkan" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Model papan kekunci yang akan digunakan" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Seting zon masa bagi sistem." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL bagi pelayan jabber yang digunakan." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL di mana sandaran di simpan." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Warna Pengguna" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Nama Pengguna" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Nama pengguna yang digunakan secara menyeluruh dalam semeja." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"Pengguna tidak dibenarkan memadam aktiviti-aktiviti melalui paparan senarai." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Kelantangan" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Kelantangan bagi peranti bunyi." + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +#, fuzzy +msgid "Done" +msgstr "Semua tiada" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +#, fuzzy +msgid "Software Update" +msgstr "Pengemaskinian perisian" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +#, python-format, +msgid "Mesh Network %d" +msgstr "Rangkaian jejaring %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +#, python-format, +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Buang" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Nama:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Klik untuk tukar warna anda:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB bebas" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Singkir kawan" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Buat kawan" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Penutupan" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Mula semula" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Log keluar" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Tetapan saya" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Jemput ke %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s gagal dimulakan." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Mula..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "Aktiviti gagal dimulakan" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Lihat sumber" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Berhenti" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Mula baru" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Tunjuk isian" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Buang" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Sumber tika" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Sumber" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Aktiviti berkas sumber" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Sumber set peralatan Sugar" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Lihat sumber: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Lihat sumber: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar dalam tetingkap" + +#~ msgid "Error in extreme pm argument, use on/off." +#~ msgstr "Ralat dalam argumen ekstrem pm, gunakan pasang/tutup." diff --git a/po/mvo.po b/po/mvo.po new file mode 100644 index 0000000..34a4dfa --- /dev/null +++ b/po/mvo.po @@ -0,0 +1,1763 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2008-08-24 20:13-0400\n" +"Last-Translator: David G Leeming \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0rc2\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:235 +#, fuzzy +msgid "Click to change your color:" +msgstr "Click pata soaia cala" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Kilakila:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Click pata soaia cala" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/nb.po b/po/nb.po new file mode 100644 index 0000000..87f2207 --- /dev/null +++ b/po/nb.po @@ -0,0 +1,1812 @@ +# translation of sugar.po to Norsk bokmål +# Kent Dahl , 2008. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +msgid "" +msgstr "" +"Project-Id-Version: sugar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-10 08:58+0200\n" +"Last-Translator: Chris \n" +"Language-Team: Norsk bokmål \n" +"Language: nb\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 "Om meg" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Du må skrive inn et navn." + +#: ../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 +#, fuzzy +msgid "Error in specified color modifiers." +msgstr "Feil i de angitte fargemodifikatorene." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Feil i de angitte fargene." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Klikk for å endre din farge:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Ikke tilgjengelig" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identitet" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Serienummer:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Programvare" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Bygg:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +#, fuzzy +msgid "Firmware:" +msgstr "Fastvare:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +msgstr "" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Dato og tid" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Feil: Tidssonen finnes ikke." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Tidssone" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Ramme" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Verdien må være et heltall." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "aldri" + +#: ../extensions/cpsection/frame/view.py:28 +#, fuzzy +msgid "instantaneous" +msgstr "umiddelbar" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s sekunder" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Aktiveringsforsinkelse" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Hjørne" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Kant" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Språk" + +#: ../extensions/cpsection/language/model.py:30 +#, fuzzy +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Fikk ikke tilgang til ~/.i18n. Lag standardinnstillinger." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +#, fuzzy +msgid "Language for code=%s could not be determined." +msgstr "Kunne ikke fastslå språket for koden=%s." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Beklager, jeg snakker ikke '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Nettverk" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Tilstanden er ukjent." + +#: ../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:61 +msgid "Wireless" +msgstr "Trådløs" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +#, fuzzy +msgid "Radio" +msgstr "Radio:" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +msgid "Server:" +msgstr "Tjener:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Strøm" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Feil i argument til automatisk strømstyring, bruk on/off." + +#: ../extensions/cpsection/power/model.py:120 +#, fuzzy +msgid "Error in extreme pm argument, use on/off." +msgstr "Feil i argument til ekstrem strømstyring, bruk on/off." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Strømstyring" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Automatisk strømstyring (øker batterilevetiden)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "Ekstrem strømstyring (slår av trådløs radio, øker batterilevetiden)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "Ferdig" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Mitt Batteri" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "Fjern" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Lader" + +#: ../extensions/deviceicon/battery.py:153 +#, fuzzy +msgid "Very little power remaining" +msgstr "Veldig lite strøm igjen" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +#, fuzzy +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d gjenstår" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Oppladet" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Koble fra" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Kobler til..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Tilkoblet" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kanal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Koble til" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Avkoblet" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Avbryt" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +#, fuzzy +msgid "Mesh Network" +msgstr "Maskenettverk" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Maskenettverk %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Mine Høytalere" + +#: ../extensions/deviceicon/speaker.py:138 +#, fuzzy +msgid "Unmute" +msgstr "Ikke demp" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Demp" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +# Maskenett +#: ../extensions/globalkey/screenshot.py:59 +#, fuzzy +msgid "Mesh" +msgstr "Maskenett" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Gruppe" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Hjem" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Lek" + +#: ../extensions/globalkey/screenshot.py:72 +#, fuzzy +msgid "Screenshot" +msgstr "Skjermbilde" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "" +"sugar-control-panel: ADVARSEL, fant mer enn en opsjon med samme navnet: %s " +"modul: %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 er ikke en tilgjengelig opsjon." + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "" + +# Remember to fix indenting. +# TRANS: Translators, there's a empty line at the end of this string, +# which must appear in the translated string (msgstr) as well. +#. 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 +#, fuzzy +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 "" +"Bruk: sugar-control-panel [ opsjon ] nøkkel [ argumenter ... ] \n" +" Kontrollerer sugar-miljøet. \n" +" Opsjoner: \n" +" -h vis denne hjelpen og avsluttt \n" +" -l lister alle tilgjengelig opsjoner \n" +" -h nøkkel vis informasjon om denne nøkkelen \n" +" -g nøkkel hent verdien til denne nøkkelen \n" +" -s nøkkel sett denne nøkkelen sin verdi \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +#, fuzzy +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "For å gjennomføre endringene må du starte sugar på nytt.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Advarsel" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Endringer krever omstart" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Avbryt endringer" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Senere" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Start om nå" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Ferdig" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Bekreft sletting" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Bekreft sletting: Ønsker du å slette %s for godt?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Behold" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Slett" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Fjern favoritt" + +#: ../src/jarabe/desktop/activitieslist.py:440 +#, fuzzy +msgid "Make favorite" +msgstr "Lagre som favoritt" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +#, fuzzy +msgid "Freeform" +msgstr "Frihånd" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Ring" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Registrer" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Listevisning" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +#, fuzzy +msgid "Favorites view" +msgstr "Favoritvisning" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Nøkkelform:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Autentiseringsform:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Gjenoppta" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Bli med" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Maskenettverk %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Avslå" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Fjern" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Åpne" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Åpne med" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Nabolag" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Navn:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Klikk her for å endre farge" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Tilbake" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Neste" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Uten tittel" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Ingen forhåndsvisning" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Ingen dato" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Deltakere:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Beskrivelse:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Merkelapper:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Dagbok" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Søk" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Når som helst" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "I dag" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Siden igår" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Sist uke" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Sist måned" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Sist år" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Hvem som helst" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Mine venner" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Min klasse" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Hva som helst" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Start" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Dagboken din er tom" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +#, fuzzy +msgid "No matching entries" +msgstr "Ingen oppføringer passet" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Dagboken din er tom" + +#: ../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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Velg en ting" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Lukk" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB ledig" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Fjern venn" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Bli venn" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Slå av" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Omstart" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Inviter til %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Starter..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Stans" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Vis innhold" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Fjern" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/ne.po b/po/ne.po new file mode 100644 index 0000000..69eaf2a --- /dev/null +++ b/po/ne.po @@ -0,0 +1,1828 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-27 07:21+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: ne\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 "मेरो बारेमा" + +#: ../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 "ब्रसको धर्को: रङ्ग=%s ह्‍यु‍=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "ब्रसको धर्का: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "भर: रङ्ग=%s ह्‍यु=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "भर: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "रङ्ग परिवर्तन गर्न क्लिक गरः" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "मेरो कम्प्यूटरको बारेमा" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "उपलब्ध छैन" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "व्यक्तित्व" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "क्रमिक अङ्क:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "सफ्टवेर" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "बनाइ:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "शुगर:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "फर्मवेर:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "तारबिनाको फर्मवेर:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "कपिराइट र अनुमतिपत्र" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"अहिले तपाईंले हेरिराखेको ग्रफीकल युजर इन्टरफेस सुगर हो।सुगर फ्री सफ्टवेर हो, " +"जुन GNU जनरल पब्लिक अनुमति पत्रले हेर्छ, र तोकिएको नियमअनुसार तपाईंले यसलाई " +"परिवर्तन गरेर नियम अनुसार अरुलाई दिन सक्नुहुनेछ।" + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s सेकेण्ड" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "सुरु गर्न ढिलाइ" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "कुना" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "किनार" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "कुञ्जीपाटी" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "कुञ्जीपाटी मोडेल" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "खाका परिवर्तन गर्नको लागि कुञ्जी(हरु)" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "~/.i१८n. मा पहुँच भएन। मानक सेटिङ्गहरु बनाऊ।" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "कोड=%sको भाषा निश्चित गर्न सकिएन।" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "माफ गर्नुस, म '%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 "" +"भाषाहरूलाई जुन क्रममा मनपर्छ त्यहि क्रममा थप। अनुवाद उपलब्ध छैन भने सूचीमा " +"भएको अर्को प्रयोग गरिने छ।" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "मोडेम कन्फिगरेसन" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"सेलुलर (3G) सञ्जालमा ब्रोडब्यण्ड कनेक्सन सेटअप गर्नको लागि तिमीले तलका " +"जानकारीहरू दिनु पर्छ।" + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "युजरनेम:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "पासवर्ड:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "नम्बर:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "एक्सेस पोइण्ट नेम (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "निजी पहिचान संख्या (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "वायरलेस" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "ब्याटरी बचतको लागी वायरलेस रेडियो बन्द गर्नु" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "रेडियो" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "सञ्जालमा जोड्न समस्या परे सञ्जाल इतिहास (सञ्जाल इतिहास) मेट" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "सञ्जालको इतिहास मेट" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "सहकार्य" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"तिमी बसेको कोठा जतिमा सर्भर भरपर्छ, ‍एउटै सर्भरमा भएका XO हरु एक अर्कालाई " +"देख्न सक्छन्, एउटै नेटवर्कमा नहुन्दा पनि।" + +#: ../extensions/cpsection/network/view.py:140 +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 "स्वचालित pm निर्देशनमा त्रुटि छ, बन्द/खुला प्रयोग गर।" + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "चरम रुपको pm निर्देशनमा त्रुटि छ, बन्द/खुला प्रयोग गर।" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "पावर ब्यवस्थापन" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "स्वचालित (अटोम्याटिक) पावर व्यास्थापन" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"चरम पावर व्यास्थापन (यसले वायरलेस रेडियो बन्द गर्छ, ब्याटरीको जीवन वृद्धि " +"गर्छ)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "सफ्टवेर अप्डेट" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"सफ्टवेयार अपडेटहरूले त्रुटिहरू ठिक गर्छ, सुरक्षामा भएका कमजोरीहरूलाई हटाउँछ " +"र नयाँ विशेषताहरू दिन्छ।" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "%s जाँचिइरहेको छ..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "%s डाउनलोड भइरहेको छ..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "%s अपडेट गरिँदै छ..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "तिम्रो सफ्टवेयर अपटुडेट छ" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "तिमी %s अपडेट राख्न सक्छौ" +msgstr[1] "तिमी %s अपडेटहरू राख्न सक्छौ" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "कुनै अपडेटहरू छ कि भनेर जाँचिदै छ..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "अपडेटहरू स्थापित गरिँदै छ..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s अपडेट स्थापित गरियो" +msgstr[1] "%s अपडेटहरू स्थापित गरियो" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "छानिएकाहरूलाई स्थापित गर" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "डाउनलोडको आकार: %s" + +# Do not translate %(current)s or %(new)s or %(size)s they are variables +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +#, python-format, +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "%(current)s संस्करणबाट %(new)s (Size: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "कुनै पनि होइन" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "१ KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f KB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "मेरो ब्यााटरी" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "हटाइयो" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "चार्ज हुँदैछ" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "एकदमै थोरै शक्‍ति बाँकी छ" + +# %(hour)d:%(min).2d are variables (separated by a : ) +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d बाँकी" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "चार्ज भयो" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP अड्रेस: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "जडान हुदैछ..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "जडान भयो" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "वायरलेस जडान छैन" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "माध्यम" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "तार युक्त सञ्जाल" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "गति" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "वायरलेस मोडेम" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "कृपया पर्खनुहोस्..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "जोड" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "विच्छेद भयो" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "रद्द" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "सम्बन्ध स्थापित गर्नको लागि पुन: प्रयास गर्नुहोस्" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "त्रुटि: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "सुझाव: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "%s सम्म जोडियो" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "तिम्रो PIN/PUK विन्यासको जाँच गर।" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "तिम्रो एक्सेस पोइन्ट नेमको (APN) विन्यासको जाँच गर।" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "संख्या विन्यासको जाँच गर।" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "तिम्रो विन्यासको जाँच गर।" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "मेश सञ्जाल" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "मेश सञ्जाल %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "कुनै पनि GSM कनेक्सन उपलब्ध छैन।" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "कन्ट्रोल पानेल मा नयाँ कनेक्सन बनाऊ ।" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "भाषण" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "चुनिएका पाठ भन" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "पाशर्व बन्द गर" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "पिच" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "गति" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "पाशर्व रोक" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "मेरो स्पिकरहरु" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "आवाज खोल" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "आवाज बन्द गर" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "औँला" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "स्टाइलस" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "मेरो टचप्याड" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "मेश" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "समूह" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "गृह" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "क्रियाकलाप" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "पर्दाछवि" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "\"%s\" को स्क्रिनसट" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"डिस्एबल्ड\" ले थालनीमा लागि निकलाई सोध्ने; \"प्रणाली\" ले फेरि UNIX लामो खाता " +"नाम प्रयोग गर्ने।" + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "थप डाइरेक्टरीहरु जसमा अरु अध्यावधिक अनुबाद राखिएको हुनसक्छ।" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "बैकअप URL" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "सुरक्षित क्रियाकलापहरुको बन्दल IDs" + +#: ../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 "" +"XO आईकनको रंग जुन डेस्कटप भरि प्रयोग गरिन्छ । स्ट्रिङ्ग स्ट्रोक रंग र फिल " +"रंगले बनेको हो, फर्म्याट rbg रंगको हुन्छ। उदाहरण: #AC३२FF,#९A५२००" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "फ्रेम आउन ढिलाइ" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "पूर्वनिर्धारित फन्टफेस" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "पूर्वनिर्धारित फन्टसाइज" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "पूर्वनिर्धारित निक" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "कनँर प्रयोग गरेर ढांचाको सक्रियतालाई ढिलाइ गर।" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "किनार प्रयोग गरेर ढांचाको सक्रियताको लागि ढिलाइ गर।" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "अनुबादको लागि खोजि गर्न संग्रह" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "किनार ढिलाइ" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "मनपर्दो रूपरेखा" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "मनपर्दो पुनरारम्भ विधा" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "डेस्कटपभरि प्रयोग भएको फन्ट फेस।" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "डेस्कटपभरि प्रयोग हुने फन्ट आकार।" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "GSM संजाल APN(निन्दा गरेको / प्रयोग नभएको)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "GSM संजाल PIN(निन्दा गरेको / प्रयोग नभएको)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "GSM संजाल PUK(निन्दा गरेको / प्रयोग नभएको)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "GSM संजाल पहुँच बिन्दुको नाम संरुप (निन्दा गरेको / प्रयोग नभएको)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "GSM संजाल संख्या(निन्दा गरेको / प्रयोग नभएको)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "GSM संजाल पासवर्ड (निन्दा गरेको / प्रयोग नभएको)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "GSM संजाल पासवर्ड संरुप (निन्दा गरेको / प्रयोग नभएको)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "GSM संजाल व्यक्तिगत पहिचान संख्या संरुप (निन्दा गरेको / प्रयोग नभएको)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "GSM संजाल व्यक्तिगत खोल्ने साँचो संरुप (निन्दा गरेको / प्रयोग नभएको)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "GSM संजाल दूरवार्ता यन्त्र संख्या संरुप (निन्दा गरेको / प्रयोग नभएको)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "GSM संजाल प्रयोगकर्ताको नाम (निन्दा गरेको / प्रयोग नभएको)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "GSM संजाल प्रयोगकर्ताको नाम संरुप(निन्दा गरेको / प्रयोग नभएको)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"यदि TRUE हो भने, सुगरले हामीलाई ज्याबर सर्भरको अरु युजरहरुले खोज्न मिल्छ " +"बनाउनेछ।" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "यदि TRUE हो भने, सुगरले हामीलाई \"लग आउट\" विकल्प देखाउनेछ।" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "यदि TRUE हो भने, सुगरले हामीलाई \"रिइसटार्ट\" विकल्प देखाउनेछ।" + +#: ../data/sugar.schemas.in.h:35 +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 "" +"यदि सही हो भने, सुगरले च्यानल १,६ र ११ को लागि पूर्वनिर्धारित Ad-hoc " +"सञ्जालमा देखाउँनेछ। सुगर सुरु हुँदा थाहा भएको सञ्जाल भेटाएन भने स्वत: Ad-hoc " +"सञ्जालमा जडित हुन्छ" + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "ज्याबर सर्भर" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "कुञ्जीपाटी सजावट" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "कुञ्जीपाटी मोडेल" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "कुञ्जीपाटी विक्लपहरु" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "मनपर्दो दृश्यको रूपरेखा।" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "कुञ्जीपाटी सजावटको सूची।हरेक प्रविष्टि फारम सजावट(variant) मा हुनुपर्छ" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "कुञ्जीपाटी विकल्पको सूची" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "भाषण सुगर सेवाको लागि पिच मान" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "भाषण सेवाले सुगरमा प्रयोग गरेको पिच मान" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "स्वचालित शक्ती" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "अत्यधिक शक्ती" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "यन्त्रमा प्रकाशित गर" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "भाषण सुगर सेवाको लागि गति मान" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "भाषण सेवाले सुगरमा प्रयोग गरेको गति मान" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "ध्वनि यन्त्रको आवाज बन्द गर्ने सेटिङ्ग।" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "लग आउट देखाउनुहोस्" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "रिइस्टार्ट बट्न देखाउ।" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "सुगर Ad-hoc नेटवर्क दोखाउ।" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "आवाज बन्द" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "प्रयोग गरिने कुञ्जीपाटी नमुना" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "प्रणालीको लागि समय अंचल सेटिङ्ग।" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "चलाउनलाई ज्याबर सर्भरको URL" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "ब्याकप बचत गर्ने ठाउँको URL" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "युजरको रङ्ग" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "युजरको नाम" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "डेस्कटपभरि प्रयोग हुने युजरको नाम।" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "प्रयोगकर्ताले सूची दृशयबाट यी क्रियाकलापहरु मेटाउन पाउनु हुनेछैन।" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "आवाजको स्तह" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "घ्वनि यन्त्रको लागि आवाजको स्तह ।" + +#: ../data/sugar.schemas.in.h:66 +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 "" +"सुगर-कन्ट्रोल-प्यानल: सावधान, त्यही नाम भएको एउटा भन्दा धेरै रोजाई भेटियो: %" +"s मोडियुल: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "सुगर-कन्ट्रोल-प्यानल: कि=%s उपलब्ध छैन" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "सुगर-कन्ट्रोल-प्यानल: %s" + +# TRANS: Translators, there's a empty line at the end of this string, +# which must appear in the translated string (msgstr) as well. +#. 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 "" +"प्रयोग: सुगर-कन्ट्रोल-प्यानल [ option ] कि [ args ... ] \n" +" सुगर वातावरणको लागी कन्ट्रोल।\n" +" Option: \n" +" -h यो सहयोग सन्देश देखाउ र निस्क \n" +" -l भएका सबै सेवाहरु सुचिमा देखाउ \n" +" -h कि यो कि सम्बन्धि जानकारी देखाउ \n" +" -g कि किको अहिलेको मान लिउ \n" +" -s कि किको लागी अहिलेको मान राख \n" +" -c कि किको लागी अहिलेको मान सफा गर \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "परिवर्तन लागू गर्न सुगर पुन:शुरु गर्नु पर्छ ।\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "सावधान" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "परिवर्तनका लागि पुण: सुरु गर्न आवश्यक छ" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "परिवर्तनहरु रद्द गर" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "पछि" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "पुन: सुरु गर" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "भयो" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "हुन्छ" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "संस्करण %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "साँच्चै मेट्ने" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "मेट्ने पुष्टि : %s लाई सधैँको लागी मेट्न चहान्छौ?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "राख" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "मेट" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "मनपर्ने हटाउ" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "प्रिय बनाउ" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "स्वतन्त्र आकारको" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "औँठी" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "पेंचदार" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "बाकस" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "त्रिकोण" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "दर्ता असफल भयो" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "दर्ता सफल भयो" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "अब तपाईँको नाम बिद्यालयको सर्भरमा दर्ता भइसक्यो।" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "दर्ता" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "दर्ता फेरी गर" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "सॉफ्टवेयर अद्यावधिक" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "नयाँ सफ्टवेर चलाउनका निम्ति तिम्रो क्रियाकलापहरु अप्डेट गर" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "अहिले जाँच गर" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "सुची दृश्य" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "२" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "मन्पर्दो दृश्य" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "१" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "तारबिना सञ्जाल '%s' को लागि तारबिना कुञ्जीको जरुरी छ" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "कुञ्जी प्रकार:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "प्रमाणीकरण प्रकार:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA र WPA2 निजी" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "तारबिनाको लागि सुरक्षा" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "पुनरारम्भ" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "सहभागी होऊ" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Ad-hoc सञ्जाल %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "मेश सञ्जाल %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "नाई" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s को %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "%s बाट सार्नुहोस" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "स्विकार" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "खारेज गर्नुहोस्" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "अर्को सहभागीले फाइल सार्ने रद्द गर्यो" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "%s मा सार्नुहोस" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "हटाउनुहोस्" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "खोल" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "सगँ खोल" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s क्लिपिङ" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "छिमेक" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "नामः" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "रङ्ग परिवर्तन गर्न क्लिक गरः" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "पछाडि" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "अर्को" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "बिना शिर्षक" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "पूर्वावलोकन छैन" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "प्रकार: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "अज्ञात" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "मिति: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "साइज: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "मिति छैन" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "प्रतिभागीहरु:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "वर्णनः" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "चिनोहरु:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "पंजिका" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "खोज" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "कुनैबेला" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "आज" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "हिजो देखि" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "गत हप्ता" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "गत महिना" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "गत वर्ष" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "जो सुकै" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "मेरा साथीहरु" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "मेरो कक्षा" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "कुनैपनि" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "मा प्रतिलिपी बनाउ" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "नक्कल" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "प्रविष्टि कपि गर्दा त्रुटि। %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "त्रुटि" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "सुरु गर" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "परिमार्जित मिति क्रमबद्व रुपमा राखनुहोस्" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "परिमार्जित मिति सृजित गरेको अनुसार क्रमबद्व रुपमा राखनुहोस्" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "साइज अनुसार क्रमबद्व रुपमा राखनुहोस्" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "क्रमबद्ध दृश्य" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "तिम्रो पंजिका खाली छ" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "तिम्रो कागजात फोल्डर खाली छ" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "यन्त्र खाली छ" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "मिल्ने लेखा छैन" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "खोजलाई सफा गर" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "%s क्रियाकलापको पुरानो संस्करण" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "के तपाई संस्करण %s मा खटाउन चहानुहुन्छ" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "पंजिका देखाउ" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "वस्तु छान" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "बन्द" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "पुनरारम्भ सहित" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "शुरु सहित" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "सुरु गर्न कुनै क्रियाकलाप छैन" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "पठाउनु" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "वृत्तांत हेर" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "फाइल नभएको प्रविष्टिहरु पठाउन सकिदैन।" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "फाइल नभाको प्रविष्टिहरु कपि हुन सकेन।" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "क्लिपबोर्ड" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "कुनै पनि साथीहरु हाजीर छैनन्" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "कुनै पनि सदर संयोग भेटिएन" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "पुनरारम्भ गर्न कुनै क्रियाकलाप छैन" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "कागजातहरु" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB खालि" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "यन्त्रको अवस्था परिवर्तन भएको थाहा भएन।" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "परिवर्तन भएको अवस्था सामान्य छ।" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "यन्त्र अहिले व्यवस्थापित भयो।" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "यन्र अहिले व्यवस्थापित छैन।" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "यस यन्त्रलाई कन्फिगरेसनलाई तयार पार्न सकिएन।" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "IP कन्फिगरेसन सुरक्षित हुन सकेन् (टाइमआउट,ठेगाना उपलब्ध छइन)।" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "IP कन्फिगरेसन मान्य छैन।" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "गोप्य कुरा चाहियो,तर दिइएको छैन।" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "802.1X सप्लिक्यान्ट एक्सेस प्वाइन्ट वा प्रमाणीकरण सर्भरबाट बिच्छेद भयो" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "802.1X सप्लिक्यान्टको कन्फिगरेसन असफल भयो।" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "अप्रत्याशित रूपमा 802.1X सप्लिक्यान्ट बन्द वा असफल भयो।" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "802.1X सप्लिक्यान्टलाई प्रमाणीकरण गर्न घेरै समय लाग्यो।" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "PPP सेवा स्वीकृत गरिएको समय भन्दा लामो समय लिएकोले बन्द भयो।" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "अप्रत्याशित रूपमा PPP सेवा विच्छेद भयो।" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "अप्रत्याशित रूपमा PPP सेवा बन्द वा असफल भयो।" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "DHCP सेवा स्वीकृत गरिएको समय भन्दा लामो समय लिएकोले बन्द भयो।" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "DHCP सेवाले अनपेक्षित त्रुटि देखायो।" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "अप्रत्याशित रूपमा DHCP सेवा बन्द वा असफल भयो।" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "भाग गएको जडान सुरु हुन असफल भयो।" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "अंश भएको जडान सेवा बन्द वा असफल भयो।" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "स्वत IP सेवा सुरु हुन असफल भयो।" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "स्वत IP सेवाले अनपेक्षित त्रुटि देखायो।" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "स्वत IP सेवा बन्द वा असफल भयो।" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "लाइन बिजी भएकोले डायल गर्न असफल भयो।" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "डायल टोन नभएकोले डायल गर्न असफल भयो।" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "क्यारियर नभएकोले डायल गर्न सकिएन ।" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "डायल गर्ने समय सकियो।" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "डायल गर्ने असफल भयो।" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "मोडेम इन्सटलाइजेसन असफल भयो।" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "निर्दिष्ट GSM APN चयन गर्न असफल भयो।" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "सञ्जाल खोजीरहेको छैन।" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "सञ्जाल रेजिस्ट्एसन अस्वीकृत भयो" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "सञ्जाल रेजिस्ट्एसनको समय सकियो।" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "अनुरोध गरिएको GSM सञ्जालमा रेजिस्टर गर्न सकिएन।" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "PIN जाँच असफल भयो।" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "यन्त्रलाई आवश्यक फर्मवेयर हराइरहेको हुन सक्छ।" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "यन्त्र हटाइयो।" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "सञ्जाल प्रबन्धक सुत्न गयो।" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "यन्त्रको सक्रिय जडान हरायो वा हटाइयो।" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "प्रयोगकर्ता वा ग्राहकले जडान बिच्छेद गर्न अनुरोध गरियो।" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "यन्त्रको क्यारियर/लिङ्क परिवर्तन गरियो।" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "यन्त्रको विद्यमान संयोजन कल्पना गरेको थियो।" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "निवेदक अहिले उपलब्ध छ।" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "मोडेम भेटाउन सकोएन।" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "ब्लूटूथ संयोजन असफल भयो वा समय सकियो" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "प्रयोग नभएको।" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "साथी हटाऊ" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "साथी बनाऊ" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "बन्द" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "पून: सुरु" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "लगआउट" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "मेरो सेटिंगहरु" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "%s मा निम्ता देऊ" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s सुरुहुन असफल।" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "शुरु हुदैछ..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "क्रियाकलाप सुरुहुन असफल" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "स्रोत दृश्य" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "बन्द गर" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "नयाँ सुरु गर।" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "वस्तुहरु देखाउ" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "हटाउनुहोस्" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "दृष्टांत स्रोत" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "स्रोत" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "क्रियाकलाप बन्डलको स्रोत" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "सुगर टूलकिटको स्रोत" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "स्रोत दृश्य : %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "स्रोत दृश्य : %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "सञ्झ्यालमा सुगर" diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..a78b233 --- /dev/null +++ b/po/nl.po @@ -0,0 +1,1845 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-23 20:17+0200\n" +"Last-Translator: whe \n" +"Language-Team: LANGUAGE \n" +"Language: nl\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 "Over mij" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Je moet een naam invoeren." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "streep: kleur=%s tint=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "streep: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "vulling: kleur=%s tint=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "vulling: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Fout in opgegeven kleurenmodificaties." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Fout in opgegeven kleuren." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Klik om de kleur te veranderen:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Over mijn computer" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Niet beschikbaar" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identiteit" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Serienummer:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Software" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Bouw:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Firmware draadloos netwerk:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Copyright en licentie" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 de grafische gebruikersinterface waar je momenteel naar kijkt. " +"Sugar is vrije software, uitgegeven onder de GNU General Public License, en " +"je mag het aanpassen en/of kopieën distribueren onder de condities zoals " +"vermeld in de licentie." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Volledige licentie:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Datum en Tijd" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Fout tijdzone bestaat niet." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Tijdzone" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Kader" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Waarde moet een geheel getal zijn." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "nooit" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "direct" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s seconden" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Activatievertraging" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Hoek" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Rand" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Toetsenbord" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Toetsenbordmodel" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Toets(en) om de indeling te veranderen" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Toetsenbordindeling(en)" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Taal" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Kon niet bij ~/.i18n komen. Standaard instellingen aanmaken." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Taal voor code=%s kon niet bepaald worden." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Sorry ik spreek geen '%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 "" +"Voeg talen toe in de volgorde die je wenst. Als een vertaling niet " +"beschikbaar is, zal de volgende in de lijst gebruikt worden." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Modem configuratie" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Je moet de volgende informatie opgeven om een mobiele breedbandverbinding " +"via een mobiel (3G) netwerk op te zetten." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Gebruikersnaam:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Wachtwoord:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Getal:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Access Point Naam (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Persoonlijk Identiteitsnummer (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Netwerk" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Status is onbekend." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Fout in opgegeven keuze argument gebruik aan/uit." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Fout in opgegeven keuze argument gebruik 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Draadloos" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Draadloze zender uitzetten om de batterij te besparen" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Zender" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"Gooi de netwerkgeschiedenis weg als je problemen hebt om met het netwerk te " +"verbinden" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Netwerkgeschiedenis weggooien" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Samenwerking" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"De server is hetzelfde als de ruimte waar jij je in bevindt; mensen op " +"dezelfde server kunnen elkaar zien, ook als ze niet op hetzelfde netwerk " +"zitten." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Server:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Energie" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Fout in automatisch energiebeheer argument, gebruik on/off." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Fout in extreem energiebeheer argument, gebruik on/off." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Energiebeheer" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Automatisch energiebeheer (verhoogt gebruiksduur accu)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Extreem energiebeheer (deactiveert draadloze zender, verhoogt gebruiksduur " +"accu)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Software-update" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Software-updates verbeteren fouten, verhelpen beveiligingsproblemen en " +"bieden nieuwe mogelijkheden." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Controleren van %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Downloaden van %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Updaten van %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Je software is bijgewerkt" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Je kan %s update installeren" +msgstr[1] "Je kan %s updates installeren" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Controleren op updates..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Updates installeren..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s update is geïnstalleerd" +msgstr[1] "%s updates zijn geïnstalleerd" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Installatie geselecteerd" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Downloadgrootte: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +#, python-format, +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Van versie %(current)s naar %(new)s (Grootte: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Niets" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Mijn Accu" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Verwijderd" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Opladen" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Heel weinig energie over" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d over" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Opgeladen" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP adres: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Verbinding verbreken" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Verbinden..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Verbonden" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "Geen draadloze verbinding" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kanaal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Bedraad netwerk" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Snelheid" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Draadloze modem" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Even geduld aub..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Verbinden" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Verbinding verbroken" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Annuleren" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Probeer verbinding opnieuw" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Fout %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Suggestie: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "Verbonden met: %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +#, python-format, +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Controleer je PIN/PUK configuratie." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Controleer je Toegangspuntnaam (APN) configuratie" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Controleer de Nummer configuratie." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Controleer je configuratie." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Mesh netwerk" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, python-format, +msgid "Mesh Network %s" +msgstr "Mesh Netwerk %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "Geen GSM verbinding beschikbaar." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "Maak een verbinding in het besturingspaneel." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "Spraak" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "Spreek geselecteerde tekst uit" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "Stop afspelen" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "Toonhoogte" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "Snelheid" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "Pauzeer afspelen" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Mijn Speakers" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Ontdempen" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Dempen" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "vinger" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "houder" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "Mijn aanraakscherm" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Mesh" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Groep" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Thuis" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Activiteit" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Schermafdruk" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Schermafdruk van \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"uitgezet\" om bijnaam te vragen bij initialisatie; \"systeem\" hergebruikt de " +"UNIX gebruiker lange naam." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "Additionele directories die bijgewerkte vertalingen kunnen bevatten." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "Back-up URL" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "Bundel ID's van afgeschermde activiteiten" + +#: ../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 "" +"Kleur van het XO icoon dat op de desktop gebruikt wordt. De waarden bestaan " +"uit een lijnkleur en een vulkleur, formaat is gelijk aan rbg kleuren. " +"Bijvoorbeeld: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Hoekvertraging" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Standaard lettertype" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Standaard lettergrootte" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Standaard bijnaam" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Vertraging voor de activatie van het kader door de hoeken te gebruiken." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Vertraging voor de activatie van het kader door de randen te gebruiken." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "Directory om naar vertalingen te zoeken" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Randvertraging" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Favorietenlayout" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Favorieten hervatmodus" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Lettertype dat overal gebruikt wordt op het bureaublad." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Lettergrootte die overal gebruikt wordt op het bureaublad." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "GSM netwerk APN (AFGESCHREVEN/ONGEBRUIKT)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "GSM netwerk PIN (AFGESCHREVEN/ONGEBRUIKT)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "GSM netwerk PUK (AFGESCHREVEN/ONGEBRUIKT)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "GSM netwerk access punt naam configuratie (AFGESCHREVEN/ONGEBRUIKT)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "GSM netwerk nummer(AFGESCHREVEN/ONGEBRUIKT)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "GSM netwerk passwoord(AFGESCHREVEN/ONGEBRUIKT)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "GSM netwerk password configuratie (AFGESCHREVEN/ONGEBRUIKT)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" +"GSM netwerk persoonlijk identificatie nummer configuratie " +"(AFGESCHREVEN/ONGEBRUIKT)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" +"GSM netwerk persoonlijke unlock key configuratie (AFGESCHREVEN/ONGEBRUIKT)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "GSM netwerk telefoon nummer configuratie (AFGESCHREVEN/ONGEBRUIKT)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "GSM netwerk usernaam (AFGESCHREVEN/ONGEBRUIKT)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "GSM netwerk usernaam configuratie (AFGESCHREVEN/ONGEBRUIKT)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Indien WAAR, dan zal Sugar ons opzoekbaar maken voor andere gebruikers op de " +"Jabber server." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Indien WAAR, zal Sugar een \"Afmelden\" optie geven." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Indien WAAR, zal Sugar een \"Hetstart\" optie geven." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"Als waar; Sugar toont de standaard Ad-hoc netwerken voor kanaal 1,6 en 11. " +"Als Sugar een niet \"bekend\" netwerk ziet als het start, dan maakt het " +"automatisch verbinding met een Ad-hoc netwerk." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Jabber-server" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Toetsenbordindelingen" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Toetsenbordmodel" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Toetsenbordopties" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Layout van de favorieten weergave." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Lijst met toetsenbordindelingen. Elke invoer moet in de " +"vormindeling(variant) zijn" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Lijst met toetsenbordopties." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "Toonhoogte voor de spraak sugar service" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "Toonhoogte gebruikt door de spraakservice in Sugar" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Energiebeheer: automatisch" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Energiebeheer: extreem" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Publiceren naar gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "Snelheid voor de sugar spraakservice" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "Snelheid gebruikt door de spraakservice in Sugar" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Instelling voor dempen van het audio-apparaat." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Afmelden weergeven" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Toon Herstart" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Toon Sugar Ad-hoc netwerken" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Geluid gedempt" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Het toetsenbordmodel om te gebruiken" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Tijdzone-instelling voor het systeem." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL van de te gebruiken jabber-server." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL waar de back-up opgeslagen wordt." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Gebruikerskleur" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Gebruikersnaam" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Gebruikersnaam die op de desktop gebruikt wordt." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"Gebruikers is niet toegestaan om deze activiteiten te wissen met de " +"lijstview." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Volumeniveau" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Volumeniveau voor het audio-apparaat." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Indien in hervatmodus, kun je door te klikken op een favorietenicoon ervoor " +"zorgen dat de laatste invoer van die activiteit hervat wordt." + +#: ../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-stuur-paneel: WAARSCHUWING, meer dan één optie met dezelfde naam " +"gevonden: %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: sleutel=%s is geen beschikbare optie" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "sugar-stuur-paneel: %s" + +# TRANS: Translators, there's a empty line at the end of this string, +# which must appear in the translated string (msgstr) as well. +#. 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 "" +"Gebruik: sugar-stuur-paneel [ optie ] sleutel [ args ... ] \n" +" Configuratie voor de sugar omgeving. \n" +" Opties: \n" +" -h geef dit helpbericht weer en sluit af \n" +" -l lijst van alle beschikbare opties \n" +" -h sleutel geef informatie over deze sleutel \n" +" -g sleutel verkrijg de huidige waarde van de sleutel \n" +" -s sleutel zet de huidige waarde naar de sleutel \n" +" -c sleutel wis de huidige waarde van de sleutel \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Om je veranderingen toe te passen moet je Sugar herstarten.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Waarschuwing" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Verandering vereist een herstart" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Veranderingen annuleren" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Later" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Herstart nu" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Klaar" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Versie %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Bevestig wissen" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Bevestig wissen: Wilt u permanent %s wissen?" + +# lijkt misschien teveel op een "sla op" actie? +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Bewaar" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Wissen" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Verwijder favoriet" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Maak favoriet" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Vrijevorm" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Ring" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spiraal" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Vierkant" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Driehoek" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Registratie mislukt" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Registratie succesvol uitgevoerd" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Je bent nu geregistreerd bij je school-server." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Registreren" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "Registreer opnieuw" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Software Bijwerken" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Update je activiteiten om zeker ervan te zijn dat ze met je nieuwe software " +"compatibel zijn" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Controleer nu" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Lijstweergave" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Favorietenweergave" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" +"Een encryptiesleutel is nodig voor\n" +" het draadloze netwerk '%s'." + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Sleutel type:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Authenticatie type:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 Persoonlijk" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Draadloze netwerkbeveiliging:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Hervatten" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Bijvoegen" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Ad-hoc Netwerk %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Mesh Netwerk %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Kan niet met de server verbinden." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "De server kon de aanvraag niet voltooien." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Weigeren" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s van %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Overdragen van %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Accepteren" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Wegdoen" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "De andere deelnemer annuleerde de bestandsoverdracht" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Overdragen naar %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "Verwijderen" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Openen" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Openen met" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s in klembord zetten" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Omgeving" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Naam:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Klik om de kleur te veranderen:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Terug" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Volgende" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Naamloos" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Geen voorbeeld" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Type: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Onbekend" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Datum: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Grootte: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Geen datum" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Deelnemers:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Omschrijving:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Labels:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Dagboek" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Zoeken" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Ieder tijdstip" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Vandaag" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Sinds gisteren" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Afgelopen week" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Afgelopen maand" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Afgelopen jaar" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Iedereen" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Mijn vrienden" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Mijn klas" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Alles" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "Kopieer naar" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Dubbele" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "Fout bij kopiëren van entry. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Fout" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Start" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "Sorteer op wijzigingsdatum" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "Sorteer op aanmaakdatum" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "Sorteer op grootte" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "Sorteer beeld" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Je dagboek is leeg" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "Je documentenmap is leeg" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "Het apparaat is leeg" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Geen overeenkomende ingangen" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Zoekopdracht wissen" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "Oudere Versie Van %s Activiteit" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "Wil je verlagen naar versie %s" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Je dagboek is vol" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "Verwijder a.u.b. oude dagboekingangen om ruimte te maken voor nieuwe." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Dagboek weergeven" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Kies een object" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Sluiten" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Hervatten met" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Starten met" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Geen activiteit om invoer mee te starten" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Verstuur naar" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Details weergeven" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "Invoegingen zonder een bestand kunnen niet verzonden worden." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "Invoegingen zonder een bestand kunnen niet gekopieerd worden." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Klembord" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Geen vrienden aanwezig" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Geen bruikbare verbinding gevonden" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Geen activiteit om invoer mee te hervatten" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "Documenten" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB vrij" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "De reden voor de apparaattoestandwijziging is onbekend." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "De statuswijziging is normaal." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "Het apparaat is nu bestuurd." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "Het apparaat wordt niet langer bestuurd." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "Het apparaat kon niet gereed worden gemaakt voor configuratie." + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"IP configuratie kon niet gereserveerd worden (geen adres beschikbaar, " +"timeout, etc)." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "De IP cponfiguratie is niet meer geldig." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "Geheimen zijn benodigd, maar niet meegeleverd." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" +"De 802.1X supplicant losgekoppeld van het toegangspunt of de autorisatie " +"server." + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "Configuratie van de 802.1X supplicant faalde." + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "De 802.1X supplicant stopte of faalde onverwacht." + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "De 802.1X supplicant deed te lang over authenticatie." + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "De PPP service startte niet binnen de toegestande tijd." + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "De PPP service ontkopplede onverwacht." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "De PPP service stopte of faalde onverwacht." + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "De DHCP service startte niet binnen de toegestane tijd." + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "De DHCP service rapporteerde een onverwachte fout." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "De DHCP service stopte of faalde onverwacht." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "De gedeelde verbinding service startte niet." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "De gedeelde verbinding service stopte of faalde onverwacht." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "De AutoIP service startte niet." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "De AutoIP service rapporteerde een onverwachte fout." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "De AutoIP service stopte of faalde onverwacht." + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "Nummer kiezen faalde omdat de lijn bezet was." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "Nummerkiezen faalde omdat er geen kiestoon was." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "Nummerkiezen faalde omdat er geen draagspanning was." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "Timeout bij nummerkiezen." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "Nummerkiezen faalde." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "Modeminitialisatie faalde." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "Kon niet selecteren gespecificeerde GSM APN" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "Zoekt geen netwerken." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "Netwerkregistratie afgewezen." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "Timeout bij netwerkregistratie." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "Kon niet registreren bij aangevraagde GSM netwerk." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "PIN controle faalde." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "Noodzakelijke firmware voor ht apparaat misschien afwezig." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "Het apparaat was verwijderd." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "NetworkManager ging slapen." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "De actieve verbinding van het apparaaat was verwijderd of verdween." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "Een gebruiker of client verzocht de ontkoppeling." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "Het apparaat's carrier of link wijzigde." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "De bestaande verbinding van het apparaat was aangenomen." + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "De aanvrager is nu beschikbaar." + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "De modem kan niet gevonden worden." + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "De Bluetooth verbinding faalde of had time-out." + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "Ongebruikt." + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Verwijder vriend" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Maak vriend" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Afsluiten" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Herstarten" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Afmelden" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Mijn instellingen" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Nodig uit voor %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s kon niet starten." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Beginnen..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "Activiteit kon niet starten" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Bron weergeven" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Stop" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Begin nieuw" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Inhoud weergeven" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Verwijderen" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Werkkopie van bron maken" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Bron" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Activiteitsbundel Bron" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Sugar Werktuigkist Bron" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Bron weergeven: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Bron weergeven: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar in een venster" diff --git a/po/pa.po b/po/pa.po new file mode 100644 index 0000000..a8e75e7 --- /dev/null +++ b/po/pa.po @@ -0,0 +1,1765 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-29 06:10+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: pa\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 "" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "ਕੋਈ ਨਹੀਂ" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +#, fuzzy +msgid "Done" +msgstr "ਕੋਈ ਨਹੀਂ" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/pap.po b/po/pap.po new file mode 100644 index 0000000..44771f5 --- /dev/null +++ b/po/pap.po @@ -0,0 +1,1818 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:12+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: pap\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 "Tokante mi mes" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Bo mester pone un nòmber." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "strepi: koló=%s tono di koló=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "strepi: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "yena: koló=%s tono=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "yena: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Eror den e modifikadónan di koló spesifiká." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Eror den e kolónan spesifiká." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Klèk pa kambia bo koló:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Tokante mi kòmpiuter" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "E no ta disponibel" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identidat" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Nùmber di serie:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Sòftwèr" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Vershon:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Suku:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Firmware sin waya:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Derechi di kopia i Lisensia" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"Suku ta e konekshon grafiko pa usadó ku bo ta mira aworaki. Suku ta un " +"programa pòrnada, kubrí pa e lisensia públiko di GNU General Public License, " +"i bo ta pèrmití pa kambié i/o distribuí kopia di dje bou di sierto " +"kondishonnan deskribí den e lisensia." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Lisensia kompleto:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Fecha i ora" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Eror e zona di tempu no ta èksistí." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Zona di tempu" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Kuadro" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "E balor mester ta un nùmber henter." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "nunka" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "instantáneo" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s sekònde" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Tardansa den e aktivashon" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Skina" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Rant" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Teklado" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Modèl di teklado" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Tekla(nan) pa kambia diseño" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Skema di teklado" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Idioma" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "No por a drenta ~/.i18n. Krea esenarionan stándart." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "No tabata posibel determiná e idioma pa e kódigo =%s." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Despensami, pero mi no ta papia '%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 "" +"Agregá idioma den e órden ku bo ta preferá. Si no tin tradukshon disponibel " +"lo usa e próksimo riba lista." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Formashon di modem" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "Nòmber di uzadó:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "kódigo sekreto:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Number:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Reda" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "E estado ta deskonosí." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Eròr den e argumento spesifiká; uza sendé/pagá." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Eror den e argumento spesifiká, uza 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Sin waya" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Paga e radio pa spar e bateria" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "Deskartá historia di e reda si bo tin problema pa konektá ku e reda" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Deskartá historia di e reda" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Kolaborashon" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"E sirbidó ta komparabel ku e kamber ku bo ta aden; hende riba e mesun server " +"por wak otro, asta ora nan no ta riba mesun reda." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Sirbidó:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Karga" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Eror den e argumento pm outomátiko, usa sende/paga." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Eror den e argumento pm ekstremo, usa sende/paga." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Maneho di karga" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Maneho outomátiko di karga (prolongá bida di bateria)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "Maneho ekstremo di karga (ta paga radio, prolongá bida di bateria)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Aktualisashon di programa" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Aktualisashonnan di programa ta korigí eror, eliminá problema di seguridat i " +"ofresé karakterístika nobo." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Kontrolando %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Bahando %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Aktualisando %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Bo programa ta aktualisá" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Bo por instalá aktualisashon %s" +msgstr[1] "Bo por instalá aktualisashonnan %s" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Kontrolando aktualisashonnan..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Instalando aktualisashonnan..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "aktualisashon %s a kaba di instalá" +msgstr[1] "aktualisashonnan %s a kaba di instalá" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Instalá e loke a selektá" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Tamaño di download: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Di vershon %(current)s pa %(new)s (Tamaño: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Ningun" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Mi Bateria" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Eliminá" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Kargando" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "A sobra masha tiki karga" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "a sobra %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Kargá" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Adrès di IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Deskonektá" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Konektando..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Konektá" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kanal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Reda ku waya" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Velosidad" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Modem sin waya" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Un momento por fabor..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Konektá" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Deskonektá" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Kanselá" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Reda di routernan independiente" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Reda di router independiente %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +#, fuzzy +msgid "Rate" +msgstr "Fecha" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Mi spikernan" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Desaktivá státus di silensio" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Silensiá" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Routernan independiente" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Grupo" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Página inisial" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Aktividat" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Kopia di pantaya" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Kopia di pantaya di \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"E no ta posibel pa pùntra e apudo; 'sistema' pa reusá e nòmber largu di e " +"kwenta di UNIX." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "URL pa warda kopia" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../data/sugar.schemas.in.h:6 +#, fuzzy +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 "" +"Koló di e símbolo di XO ku usá na e desktop. E seri ta konsistí di koló pa " +"strepi i koló pa yena, e format ta meskos ku esun di kolónan rbg. Por " +"ehèmpel: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Tardansa di huki" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Tipo di lèter skohí pa e sistema" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Tamaño di lèter skohí pa e sistema" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Apodo skohí pa e sistema" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Tardansa di aktivashon di e kuadro usando e hukinan." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Tardansa di aktivashon di e kuadro uzando e rantnan." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Tardansa di rant" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Skema di faboritonan" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Funshonalidat di habri favoritonan" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Tipo di lèter ku ta usa na e desktop." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Tamaño di lèter ku ta usa na e desktop." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +# Kisas BERDAT mester bira TRUE, si e ta un òrdu den e programa? +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Si ta BERDAT, Suku lo pone ku e otro usadónan di e sirbidó Jabber por buska " +"nos." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Si ta BERDAT, Suku lo mustra e opshon \"Deskonektá usadó\"." + +#: ../data/sugar.schemas.in.h:34 +#, fuzzy +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Si ta BERDAT, Suku lo mustra e opshon \"Deskonektá usadó\"." + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "E sirbidó Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Skema di teklado" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Modèl di teklado" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Opshonnan di teklado" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Skema di e bista di favoritonan." + +# Mi ta asumí ku "layout (variant)" ta parti di e lenga di e programa. Si no ta asina e mester bira "... skema(variante)" +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Lista di skemanan di teklado. Kada drentada mester ta den forma " +"layout(variant)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Lista ku opshonnan di teklado." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Karga outomátiko" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Karga ekstremo" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Publiká na gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Konfigurashon pa silensiá e aparato di zonidu." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Mustra Deskonektá Usadó" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Zonido silensiá" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Modèl di teklado pa usa" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Konfigurashon di e zona di orario pa e sistema." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL pa usa pa e sirbidó jabber." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL kaminda e backup ta wardá." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Koló di usadó" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Nòmber di usadó" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Nòmber di usadó usá na e desktop." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Nivel di volúmen" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Nivel di volúmen pa e aparato di zonidu." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Si bo klek riba un símbolo faborito den e funshonalidat di reanudashon esaki " +"lo pone ku lo reanudá e drentada pa e aktividat ei." + +#: ../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: ATENSHON, a haña mas ku un opshon ku e mesun nòmber: %s " +"modulo: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "sugar-control-panel: klave=%s no ta un opshon disponibel" + +#: ../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. +#. 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 "" +"Uso: sugar-control-panel [ opshon ] tekla [ argumentonan ... ] \n" +" Kontròl pa e ambiente di suku.\n" +" Opshonnan: \n" +" -h mustra e mensahe di yudansa aki i sali \n" +" -l lista tur opshon disponibel \n" +" -h klave mustra informashon riba e klave aki \n" +" -g klave haña e balor aktual di e klave aki \n" +" -s klave sèt e balor aktual di e klave aki \n" +" -c klave kita e balor aktual di e klave aki \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +#, fuzzy +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Pa apliká bo kambionan bo tin ku inisiá suku di nobo.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Kidou" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Kambionan ta rekerí inisiá di nobo" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Kanselá kambionan" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Despues" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "re-inisiá awor" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Kla" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Vershon %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Konfirmá limpiamentu" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Konfirmá limpiamentu: bo ke lipia %s permanentemente?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Mantené" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Limpia" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Kita faborito" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Krea faborito" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Forma liber" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Renchi" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spiral" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Kaha" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Triángulo" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "E registrashon a frakasá" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Registrashon eksitoso" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Bo ta registrá ku e sirbidó di bo skol." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Registrá" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Aktualisashon di programa" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "Aktualisá bo aktividatnan pa hasi nan kompatibel ku e programa nobo" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Kontrolá awòr" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Bista di lista" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Bista di faboritonan" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Tipo di Tekla:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Tipo di outentikashon:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 Personal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Seguridat sin waya:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Reanudá" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Djòin" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Reda di router independiente %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "No por konektá ku e sirbidó." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "E sirbidó no por kompletá e petishon." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Rechasá" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s di %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Hasi tranferensia di %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Aseptá" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Retirá" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Transferí na %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Eliminá" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Habri" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Habri ku" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s kòrta" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Besindario" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Nòmber:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Klek pa kambia koló:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Bèk" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Siguiente" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Sin título" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Sin bista previo" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Sorto: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Deskonosí" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Fecha: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Tamaño: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Sin fecha" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Partisipantenan:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Deskripshon:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Etikèt:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Diario" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Buska" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Kualke momento" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Awe" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "For di ayera" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Siman pasá" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Luna pasá" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Aña pasá" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Kualke hende" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Mi amigunan" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Mi klas" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Kualker kos" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Kuminsá" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Bo diario ta bashí" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "No tin drentada ku ta korespondé" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Klara búskeda" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Bo diario ta yen" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "Por fabor, eliminá algun drentada bieu pa traha lugá pa drentada nobo." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Mustra diario" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Skohe un obheto" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Sera" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Reanudá ku" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Inisiá ku" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "No tin aktividat pa inisiá drentada" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Manda na" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Mira detaye" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "No tin ningun amigu presente" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "No a topa ningun konekshon bálido" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "No tin aktividat pa reanudá drentada" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB disponibel" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Eliminá amigu" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Sera amistat" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Paga" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Mèldu ku ta bai" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Mi konfigurashon" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Invitá pa %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Kuminsando..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Mira fuente" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Stòp" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Kuminsá ku unu nobo" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Mustra kontenido" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Eliminá" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Fuente Instantáneo" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Fuente" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Fuente di pakete di aktividat" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Mira fuente: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Mira fuente: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..e30df62 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,1860 @@ +# 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 , YEAR. +# translation of pl.po to Polish +# Piotr Drąg , 2007. +msgid "" +msgstr "" +"Project-Id-Version: pl\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-11 17:56+0200\n" +"Last-Translator: Marcin \n" +"Language-Team: Polish \n" +"Language: pl\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==1 ? 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 "Imię i Kolor" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Musisz wprowadzić nazwę." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "kreska: kolor=%s odcień=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "kreska: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "wypełnienie: kolor=%s odcień=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "wypełnienie: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Błąd w podanych kodach kolorów." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Błąd w podanych kolorach." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Kliknij aby zmienić swój kolor:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Mój komputer" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Niedostępne" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Dane techniczne" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Numer seryjny:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Oprogramowanie" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Wersja:" + +# Jak ma się po polsku nazywać Sugar?!? +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Wersja OS Bajtek.edu.pl:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Wbudowane:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Wbudowane łączności bezprzewodowej:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Prawa autorskie i licencja" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"Bajtek.edu.pl jest graficznym interfejsem użytkownika, na który patrzysz. " +"Bajtek.edu.pl jest wolnym oprogramowaniem, podlegającym zapisom licencji GNU " +"General Public License. Mile widzialne jest zmiana i/lub dystrybuowanie " +"jego kopii w ramach warunków opisanych w owej licencji." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Pełna licencja:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Data i czas" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Błąd, strefa czasowa nie istnieje." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Strefa czasowa" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Ustawienia Ramki" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Wartość musi być liczbą całkowitą." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "nigdy" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "natychmiastowy" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +#, python-format, +msgid "%s seconds" +msgstr "%s sekund(y)" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Opóźnienie pokazania" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Róg" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Krawędź" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Klawiatura" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Model klawiatury" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Klawisz(e) służące do zmiany układu" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Układ(y) klawiatury" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Język" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Brak dostępu do ~/.i18n. Stwórz ustawienia standardowe." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Nie można określić języka dla kodu=%s." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Przykro mi, nie mówię w języku '%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 "" +"Dodaj języki w preferowanej kolejności. Jeżeli tłumaczenie nie będzie " +"dostępne, będzie użyty kolejny język z listy." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Konfiguracja modemu" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Musisz wprowadzić następujące informacje aby skonfigurować modem " +"szerokopasmowej łączności bezprzewodowej w sieci 3G." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Użytkownik:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Hasło:" + +# chyba telefonu... +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Numer (telefonu):" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Nazwa punktu dostępu (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Numer PIN:" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Sieć" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Stan nieznany." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Błąd w podanym argumencie radia użyj Włącz/Wyłącz." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Błąd w podanym argumencie, użyj 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Bezprzewodowy" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Wyłącz łączność bezprzewodową (radio) aby oszczędzać baterie" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"Usuń historię połączeń sieciowych jeżeli masz problemy z połączeniem się z " +"siecią" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Usuń historię połączeń sieciowych" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Współpraca" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Serwer jest odpowiednikiem tego, w jakim pokoju się znajdujesz. Osoby na tym " +"samym serwerze będą mogły widzieć się nawzajem, nawet jeżeli nie są w tej " +"samej sieci." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Serwer:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Zasilanie" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "" +"Błąd w argumencie (trybu automatycznego) modułu zasilania, użyj " +"Włącz/Wyłącz." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Błąd w argumencie modułu zasilania, użyj Włącz/Wyłącz." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Zarządzanie zasilaniem" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Automatyczne zarządzanie zasilaniem (zwiększa żywotność baterii)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Oszczędne zarządzanie zasilaniem (wyłącza łączność bezprzewodową, zwiększa " +"czas pracy baterii)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Aktualizacja oprogramowania" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Aktualizacja oprogramowania usuwa jego błędy, poprawia zabezpieczenia i " +"dodaje nowe funkcje." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Sprawdzam %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Pobieram %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Uaktualniam %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Używasz najnowszej wersji oprogramowania" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Możesz zainstalować %s uaktualnienie" +msgstr[1] "Możesz zainstalować %s uaktualnienia" +msgstr[2] "Możesz zainstalować %s uaktualnień" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Szukam uaktualnień..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Instaluję uaktualnienia..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "Zostało zainstalowane %s uaktualnienie" +msgstr[1] "Zostały zainstalowane %s uaktualnienia" +msgstr[2] "Zostało zainstalowane %s uaktualnień" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Zainstaluj zaznaczone" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Rozmiar pobieranych plików: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Z wersji %(current)s do %(new)s (Rozmiar: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Zero" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Moja bateria" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Usunięto" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Ładuję baterię" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Bardzo niski stan naładowania baterii" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "Pozostało %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Naładowana" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Adres IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Rozłącz" + +# 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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Łączenie..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Połączony" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "Brak połączenia bezprzewodowego" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kanał" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Sieć przewodowa" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Prędkość" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Modem bezprzewodowy" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Proszę czekać..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Połącz" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Rozłączony" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Anuluj" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Próbuj połączyć ponownie" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Błąd: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Wskazówka: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +#, python-format, +msgid "Connected for %s" +msgstr "Połączono z %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Sprawdź konfigurację numerów PIN i PUK." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Sprawdź konfigurację nazwy punktu dostępu (APN)" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Sprawdź jaki podałeś w konfiguracji numer (telefonu)." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Sprawdź konfigurację (sieci)." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Sieć" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, python-format, +msgid "Mesh Network %s" +msgstr "Sieć kratowa %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "Brak połączenia GSM." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "Stwórz połączenie w panelu sterowania." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "Mowa" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "Powiedz zaznaczony tekst" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "Zatrzymaj odtwarzanie" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "Wysokość tonu" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "Tempo" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "Wstrzymaj odtwarzanie" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Moje głośniki" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Włącz głos" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Wycisz" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "palec" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "rysik" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "Mój gładzik" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Krata" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Grupa" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Dom" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Czynność" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Zrzut ekranu" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Zrzut ekranu z \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"nieaktywny\" aby poprosić o nazwę użytkownika podczas inicjalizacji; " +"\"system\" aby użyć nazwy konta UNIX jako nazwy użytkownika." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "Dodatkowe katalogi, które mogą zawierać (uaktualnione) tłumaczenia." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "URL dla kopii zapasowej" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "Identyfikatory (ID) chronionych Aktywności" + +#: ../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 "" +"Kolor ikony XO, który jest używany na pulpicie. Należy go złożyć w postaci " +"ciągu znaków (w formacie kolorów rgb używanych w sieci) z koloru kreski i " +"koloru wypełnienia. Np: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Opóźnienie (w rogu)" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Domyślna czcionka" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Domyślny rozmiar czcionki" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Domyślna nazwa użytkownika" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Opóźnienie pojawienia się ramki używając rogów ekranu." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Opóźnienie pojawienia się ramki używając krawędzi ekranu." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "Katalog, gdzie są szukane pliki tłumaczeń" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Opóźnienie (na krawędzi)" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Układ ulubionych" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Tryb przywracania ulubionych" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Czcionka używana na pulpicie." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Rozmiar czcionki używany na pulpicie." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "GSM network APN (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "GSM network PIN (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "GSM network PUK (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "GSM network access point name configuration (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "GSM network number (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "GSM network password (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "GSM network password configuration (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "GSM network telephone number configuration (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "GSM network username (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "GSM network username configuration (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Jeżeli TAK, Bajtek.edu.pl sprawi, że będziemy do odnalezienia przez innych " +"użytkowników serwera Jabber." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Jeżeli TAK, Bajtek.edu.pl pokaże opcję \"Wyloguj się\"." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Jeżeli TAK, Bajtek.edu.pl pokaże opcję \"Restartuj\"." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"Jeżeli TAK, Bajtek.edu.pl pokaże domyślne sieci ad-hoc dla kanałów 1,6 i 11. " +"Jeżeli Bajtek.edu.pl nie będzie widział \"znanej\" sieci podczas startu " +"systemu wtedy automatycznie połączy się z siecią ad-hoc." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Serwer Jabbera" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Układy klawiatur" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Model klawiatury" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Opcje klawiatury" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Układ widoku ulubionych." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Lista układów klawiatur. Każdy wpis powinien być w postaci układ(zmienna)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Lista opcji klawiatury." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "Wysokość tonu dla usługi mowy Bajtek.edu.pl" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "Wysokość tonu używana przez usługę mowy w systemie Bajtek.edu.pl" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Kontrola zasilania - automatyczna" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Kontrola zasilania - oszczędna" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Publikuj do gadżetu" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "Tempo dla usługi mowy Bajtek.edu.pl" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "Tempo używane przez usługę mowy Bajtek.edu.pl" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Ustawienia wyciszania dźwięku." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Pokaż \"Wyloguj się\"" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Pokaż \"Restartuj\"" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Pokaż sieci ad-hoc" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Dźwięk wyciszony" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Model klawiatury, który ma być użyty" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Ustawienia strefy czasowej systemu." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL serwera Jabbera, który ma być użyty." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL, gdzie ma być zapisywana kopia zapasowa." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Kolor użytkownika" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Nazwa uzytkownika" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Nazwa użytkownika, która jest używana na pulpicie." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "Użytkownicy nie będą mogli usunąć tych czynności z listy." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Poziom głośności" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Poziom głośności urządzenia dźwiękowego." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"W trybie przywracania, kliknięcie na ikonę ulubionych spowoduje przywrócenie " +"ostatniego wpisu dla tej czynności." + +#: ../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: OSTRZEŻENIE, znaleziono więcej niż jedną opcję o tej " +"samej nazwie: %s moduł: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "sugar-control-panel: nie ma zmiennej o nazwie %s" + +#: ../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 "" +"Sposób użycia: sugar-control-panel [ opcja ] zmienna [ argumenty ... ] \n" +" Konfiguracja środowiska pracy Bajtek.edu.pl, ustawianie zmiennych " +"środowiska. \n" +" Opcje: \n" +" -h pokazuje tę wiadomość i kończy pracę \n" +" -l pokazuje listę wszystkich dostępnych opcji \n" +" -h zmienna pokazuje informację na temat podanej zmiennej \n" +" -g zmienna zwraca wartość podanej zmiennej \n" +" -s zmienna ustawia wartość podanej zmiennej \n" +" -c zmienna czyści wartość podanej zmiennej \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Aby zastosować zmiany należy uruchomić ponownie środowisko Bajtek.edu.pl.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Ostrzeżenie" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Zmiany wymagają restartu" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Anuluj zmiany" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Odłóż na później" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Restartuj teraz" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Zakończono" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Wersja %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Potwierdź usunięcie" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Potwierdź usunięcie: Czy chcesz na stałe usunąć %s?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Zachowaj" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Usuń" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Usuń ulubione" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Ustaw jako ulubione" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Dowolne" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Krąg" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spirala" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Kwadratowe" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Trójkątne" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Rejestracja nie powiodła się" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Rejestracja zakończona sukcesem" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Jesteś od teraz zarejestrowany na serwerze szkolnym." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Zarejestruj" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "Zarejestruj ponownie" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Uaktualnienie oprogramowania" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Uaktualnij swoje \"czynności\" aby zapewnić ich zgodność z nowym " +"(uaktualnionym) oprogramowaniem" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Sprawdź teraz" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Wszystkie Aktywności" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Moje Aktywności" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" +"Bezprzewodowy klucz szyfrujący jest wymagany\n" +"przez sieć bezprzewodową '%s'." + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Rodzaj klucza:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Rodzaj uwierzytelniania:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 Personal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Zabezpieczenia sieci bezprzewodowej:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Wznów" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Dołącz" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Sieć ad-hoc %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +#, python-format, +msgid "Mesh Network %d" +msgstr "Sieć kratowa %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Nie mogę połączyć się z serwerem." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Serwer nie może wykonać polecenia." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Odmawiam" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +#, python-format, +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s z %s" + +# Transfer a może przenieś a może przenoszenie... +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Przenieś z %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Akceptuję" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Odrzuć" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "Druga osoba anulowała przesłanie pliku" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Przenieś do %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "Usuń" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Otwórz" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Otwórz z" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +#, python-format, +msgid "%s clipping" +msgstr "%s (do schowka)" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Sąsiedztwo" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Imię:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Kliknij aby zmienić kolor:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Wstecz" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Dalej" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Bez tytułu" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Brak podglądu" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Rodzaj: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Nieznany" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Data: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Rozmiar: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Bez daty" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Uczestnicy:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Opis:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Tagi:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Dziennik" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Szukaj" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Zawsze" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Dziś" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Od wczoraj" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Ubiegłym tygodniu" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Ubiegłym miesiącu" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Ubiegłym roku" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Ktokolwiek" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Moi przyjaciele" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Moja klasa" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Cokolwiek" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "Kopiuj do" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Duplikuj" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "Błąd podczas kopiowania wpisu: %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Błąd" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Uruchom" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "Sortuj wg daty modyfikacji" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "Sortuj wg daty utworzenia" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "Sortuj wg rozmiaru" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "Sortowanie" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Twój dziennik jest pusty" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "Twój katalog z dokumentami jest pusty" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "Nie ma nic na urządzeniu" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Brak pasujących wpisów" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Wyczyść wyszukiwanie" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "Starsza wersja czynności \"%s\"" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "Czy chcesz cofnąć do wersji %s" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Twój dziennik jest pełny" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "" +"Usuń proszę jakieś starsze wpisy Dziennika aby zrobić miejsce dla nowych." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Pokaż Dziennik" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Wybierz obiekt" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Zamknij" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Wznów z" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Rozpocznij z" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Brak czynności aby otworzyć wpis" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Wyślij do" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Pokaż szczegóły" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "Wpisy bez pliku nie będą wysłane." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "Nie można skopiować wpisów bez pliku." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Schowek" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Przyjaciele są nieobecni" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Nie znaleziono połączenia" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Brak czynności aby wznowić wpis" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "Dokumenty" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB wolnego miejsca" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "Nieznany jest powód zmiany stanu urządzenia." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "Zmiana stanu jest normalna." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "Urządzenie jest pod kontrolą." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "Nie kontroluję już urządzenia." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "Urządzenie nie może być przygotowane do konfiguracji." + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"Nie można skonfigurować adresu IP (brak adresu w puli serwera DHCP, " +"przekroczony czas oczekiwania lub inne)." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "Konfiguracja adresu IP zdezaktualizowała się (nie jest już poprawna)." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "Były wymagane \"sekretne dane\" ale nie zostały dostarczone." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "Dostawca 802.1X rozłączył z punktu dostępu lub serwera autoryzacji." + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "Konfiguracja dostawcy protokołu 802.1X nie powiodła się." + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "Dostawca protokołu 802.1X nieoczekiwanie zepsuł się lub odłączył." + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "Zbyt długo trwała autoryzacja dostawcy protokołu 802.1X." + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" +"Usługa PPP uruchamia się za długo, nie zdążyła się uruchomić w dozwolonym " +"czasie." + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "Usługa PPP nieoczekiwanie rozłączyła połączenie." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "Usługa PPP nieoczekiwanie zepsuła się lub odłączyła." + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" +"Usługa DHCP uruchamia się za długo, nie zdążyła się uruchomić w dozwolonym " +"czasie." + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "Usługa DHCP nieoczekiwanie zgłosiła błąd." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "Usługa DHCP nieoczekiwanie zepsuła się lub odłączyła." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" +"Usługa współdzielonego połączenia (shared connection) nie zdołała się " +"uruchomić." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" +"Usługa współdzielonego połączenia (shared connection) nieoczekiwanie zepsuła " +"się lub odłączyła." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "Usługa AutoIP nie zdołała się uruchomić." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "Usługa AutoIP nieoczekiwanie zgłosiła błąd." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "Usługa AutoIP nieoczekiwanie zepsuła się lub odłączyła." + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "Nie można się dodzwonić, gdyż linia telefoniczna jest zajęta." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" +"Nie można się dodzwonić, gdyż nie ma sygnału telefonicznego (sprawdź " +"podłączenie kabla telefonicznego)." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" +"Nie można się dodzwonić, gdyż nie ma tzw. sygnału nośnego (czy pod podanym " +"nr tel na pewno jest modem?)." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "Próby dodzwonienia się trwały za długo." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "Próby dodzwonienia się nie powiodły się." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "Nie powiodła się inicjalizacja modemu." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "Nie można wybrać podanego APN sieci GSM" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "Nie szukam sieci." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "Odmówiono rejestracji w sieci." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "Próba rejestracji w sieci trwała zbyt długo." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "Nie powiodła się rejestracja w sieci GSM." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "Podano zły kod PIN." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "Być może brakuje odpowiedniego oprogramowania (firmware) urządzenia." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "Urządzenie zostało usunięte." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "Menadżer sieci (NetworkManager) przeszedł w stan uśpienia." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "Aktywne połączenie urządzenia zostało usunięte lub zniknęło." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "Użytkownik lub klient zażądał rozłączenia." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "Zmienił się sygnał nośny lub połączenie urządzenia." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "Przyjmujemy, że będzie używane istniejące połączenie." + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "\"Supplicant\" jest już dostępny." + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "Nie można znaleźć modemu w systemie." + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" +"Połączenie Bluetooth nie powiodło się lub próbowano zbyt długo się połączyć." + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "Nieużywane." + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Usuń przyjaciela" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Uczyń przyjacielem" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Zakończ" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Uruchom ponownie" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Wyloguj" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Ustawienia" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Zaproś do %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "Nie udało się uruchomić %s." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Uruchamiam..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "Czynność nie mogła wystartować" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Pokaż źródło" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Zatrzymaj" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Uruchom nowy" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Pokaż zawartość" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Usuń" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Źródło instancji" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Źródło" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Źródło pakietu czynności" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Źródło Narzędzi Bajtek.edu.pl" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Pokaż źródło: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Pokaż źródło: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Bajtek.edu.pl w oknie" diff --git a/po/ps.po b/po/ps.po new file mode 100644 index 0000000..9006c16 --- /dev/null +++ b/po/ps.po @@ -0,0 +1,1824 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:13+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: ps\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 "زما په اړه" + +#: ../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 "ټک: رنګ=%s چیغه=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "ټک: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "ټک: ډکول=%s چیغه=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "ډکول: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "د رنګ د بدلون لپاره ټك كړئ:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "زما د کمپیوټر په اړه" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "موجود ندی" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "پیژندنه" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "لړیزه شمیره" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "پوستکالی" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "جوړول:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "شوګر:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "منځکالی:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "بېسیمه سختاری:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "کاپي-حق او جواز" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"شوګر کښنیز کارن مخیال دی چې ته یې وینې. شوګر یو وړیا ساوتري دی٬ چې په GNU " +"عمومي ولسي جواز سره جوړ شوی٬ او تاسې ته ښه راغلاست ویل کېږي که دا بدلول یا د " +"دې نقلونه نورو خلکو ته ورکول غواړئ خو د هغو خاصو شرایطو سره سم چې دلته " +"تشریح کېږي." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s ثانیې" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "د فعالولو ځنډ" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "ګوټ" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "څنډه" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "لاسرسی ونشو ~/.i۱۸n. کره امستنې جوړې کړه." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "د كوډ=%s لپاره ژبه مالومه نكړاى شوه." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "بښنه غواړم زه خبرې نه كوم '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "بېسیم" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "د بیسیم راډیو تڼۍ بنده کړئ تر څو د بټرۍ ژوند وساتئ" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "رادیو" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "د جال مخینه وغورځوئ که تاسې د جال سره په پیوستېدو کې ستونځه لرئ" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "د جال مخینه غورځول" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "ملګرتیا" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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 "تیروتنه په خپلکاری pm ارزښتوړی کې، روښانول/بندول وکاروئ." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "تیروتنه د پای pm ارزښتوړي کې، روښانول/بندول وکاروئ." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "د بریښنا سمبالښت" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "د برېښنا خپلکاری سمبالښت (د بټرۍ ژوند زیاتوي)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "د بریښنا زیات سمبالښت (بیسیم رادیو بندوي، د بټرۍ ژوند زیاتوي)" + +#: ../extensions/cpsection/updater/__init__.py:21 +#, fuzzy +msgid "Software update" +msgstr "هډوتري اوسمهالول" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "وشو" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "زما بیټري" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "لیرې شو" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "چارج کېږي" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d2d پاتې دي" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "چارج شو" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP پته : %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "ناپيوستول" + +# Only show disconnect when there's a mesh device, because mesh takes<br />
+# priority over the normal wireless device.<span class="translation-space"> </span>
+# <span class="translation-space"> </span>
+# NM doesn't have a "disconnect"<br />
+# method for a device either (for various reasons) so this doesn't<br />
+# have a good mapping +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "پیوستېږي ..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "پیوست شو" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "چېنل" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "سیمي جال" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "چټکتيا" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "پیوستول" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "ناپيوسته شو" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "لغوه" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +#, fuzzy +msgid "%d KB" +msgstr "%dKB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +# only temporarily +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "بڼلې جال" + +# only temporarily +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, fuzzy +msgid "Mesh Network %s" +msgstr "بڼلې جال" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "زما لوړغږي" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "غږیز" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "بېغږه" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "بڼ" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "ډله" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "کور" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "چارندتیا" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "پرده انځور" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +#, python-format, fuzzy +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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "شاتړ یوارایل" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../data/sugar.schemas.in.h:6 +#, fuzzy +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 "" +"د ایکس او نښکې رنګ چې په ټول ډېسکټاپ کارول کېږي. سلسله د وار او ډکولو د رنګ " +"نه جوړه شوې. بڼه یې د rbg رنګونو ده. بېلګه: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "د ګوټ ځنډ" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "د ګوټونو په کارولو د چوکاټ د فعالولو ځنډ." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "د څنډو په کارولو د چوکاټ د فعالولو ځنډ." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "د څنډې ځنډ" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "د خوښې هډوانه" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "د خوښو د راګرځولو اکر" + +#: ../data/sugar.schemas.in.h:18 +#, fuzzy +msgid "Font face that is used throughout the desktop." +msgstr "هغه کارن نوم چې په ټول ډېسکټاپ کارول کېږي." + +#: ../data/sugar.schemas.in.h:19 +#, fuzzy +msgid "Font size that is used throughout the desktop." +msgstr "هغه کارن نوم چې په ټول ډېسکټاپ کارول کېږي." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"که ریښتیا وي. شوګر به مونږ د جیبر پالنګر د نورو کاروونکو لپاره د لټون وړ " +"کړي. " + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "جیبر پالنګر" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "د خوښو د لید هډوانه" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "خپلکارې برېښنا" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "د برېښنا اخري حد" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "هوښیار توکي ته خپرول" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "د غږ وزلې د بندولو امستنه." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "غږ بند شو" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "سیستم لپاره د وخت د ساحې امستنې." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "کارولو لپاره د جیبر پالنګر یوارایل." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "د هغه ځای یوارایل چې شاتړ پکې خوندي شوی." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "کارن رنګ" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "کارن نوم" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "هغه کارن نوم چې په ټول ډېسکټاپ کارول کېږي." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "د غږ کچه" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "د غږ وزلې لپاره د غږ کچه." + +#: ../data/sugar.schemas.in.h:66 +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 "" +"شوګر-مهار-پاڼه: خبرداری، له یو څخه زیات غوراوي د ورته نوم لپاره پیدا شو: %s " +"موډول: %r " + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "شوګر-مهار-پاڼه: كيلي=%s يو ناموجود غوراوی دی" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr " شوګر-مهار-پاڼه %s" + +# TRANS: Translators, there's a empty line at the end of this string,
+# which must appear in the translated string (msgstr) as well. +#. 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 "" +"شوګر-مهار-پاڼه[] کیلی [] \n" +" مهار د د بوری چاپیریال لپاره. \n" +" غوراوی: \n" +" -h دغه د مرستې استوزه وښایه او ووځه \n" +" -l شته غوراوی وښایه \n" +" -h کیلی د دې کیلی په اړه خبرتیاوې وښایه \n" +" -g کیلی د کیلی شته ارزښت تر لاسه کړۍ \n" +" -s کیلی اوسنی ارزښت د کیلی لپاره وټاکۍ \n" +" -c کیلی د کیلی لپاره اوسنی ارزښت پاک کړۍ \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "د خپلو بدلونونو د تطبیقولو لپاره باید شوګر بیاچالان كړئ.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "خبرداری" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "بدلونونه بیا بیاچالانول غواړي" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "بدلونونه لغوه کول" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "وروسته" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "اوس بیاچالان کړه" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "وشو" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "هو" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "لرېکول باوري کړئ" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "لرېکول باوري کړئ: آیا د تل لپاره غواړئ %s لېرې کړئ؟ " + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "خوندي کول" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "لرې کول" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "خواپوری لرې کول" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "خواپورې جوړول" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "ازاده بڼه" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "زنګ" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "سپیرال" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "بکس" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "درې ګوټه" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "ثبتېدل ونشول" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "ثبتېدل بریالي شول" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "تاسې اوس د خپل ښوونڅی د پالنګر سره ثبت شوي یاست." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "ثبتول" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "هډوتري اوسمهالول" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "نوي ساوتري سره د توافق د باوري کولو لپاره خپلې چارې اوسمهال کړئ" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "اوس وګوره" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "جدول لید" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr " ۲" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "د غورو لید" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "۱" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "د كیلي ډول:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "د كره توب ډول:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 شخصي" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "بېسیمه امنیت:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "راګرځول" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "ګډون کول" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +# only temporarily +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +#, fuzzy +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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "ردول" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s of %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, fuzzy +msgid "Transfer from %s" +msgstr "څخه لېږدول" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "منل" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "لېرې کول" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, fuzzy +msgid "Transfer to %s" +msgstr "ته لېږدول" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "لرې كول" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "پرانېستل" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "سره پرانېستل" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +#, python-format, fuzzy +msgid "%s clipping" +msgstr "کلیپول" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "ګاونډ" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "نوم:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "د رنګ بدلولو لپاره کلیک کړئ:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "شا ته" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "بل" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "ناسرلیکی" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "مخکتنه نشته" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "نېټه نشته" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "برخه اخیستونکي:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "تشریح:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "علامې" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "ژورنال" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "لټون" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "هر وخت" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "نن" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "له پرونه" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "تېره اونۍ" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "تېره میاشت" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "تېر کال" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "هر څوک" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "زما دوستان" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "زما ټولګی" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "هر څه" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "پیل" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "ستا ژورنال خالي دی" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +#, fuzzy +msgid "No matching entries" +msgstr "ورته توري نشته" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "لټون پاکول" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "ژورنال ښودل" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "یو څیز غوره کړه" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "بندول" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "سره راګرځول" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "سره پېلول" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "د لیکنې د پېلولو لپاره فعالیت نشته" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "ته لېږل" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "جزييات کتل" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "دوستان موجود ندي" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "باوري پېوستون ونه موندل شو" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "د لیکنې راګرځولو لپاره فعالیت نشته" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB خالی" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "ملګري لېرې کړه" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "ملګري جوړ کړه" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "بندول" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "بیاچالانول" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "وتل" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "زما امستنې" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "%s ته بلنه ورکول" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "پيلونه..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "سرچینه کتل" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "درول" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "منځپانګې ښودل" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "لرې كول" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "سمدستي سرچینه" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "سرچینه" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "د فعالیت بنډل سرچینه" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, fuzzy +msgid "View source: %s" +msgstr "سرچینه کتل: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +#, python-format, fuzzy +msgid "View source: %r" +msgstr "سرچینه کتل: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/pt.po b/po/pt.po new file mode 100644 index 0000000..249d751 --- /dev/null +++ b/po/pt.po @@ -0,0 +1,1849 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-26 16:17+0200\n" +"Last-Translator: Eduardo H. \n" +"Language-Team: LANGUAGE \n" +"Language: pt\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 "Sobre Mim" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Precisas de introduzir um nome." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "traço: cor=%s tom=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "traço: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "preenchimento: cor=%s tom=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "preenchimento: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Erro nos modificadores de cor especificados." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Erro nas cores especificadas." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Clica para mudar a tua cor:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Sobre o meu Computador" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Não disponível" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identidade" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Número de Série:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Software" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Build:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Firmware da Rede Sem Fios:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Copyright e Licença" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"O Sugar é a interface gráfica de utilizador que estás a utilizar. O Sugar é " +"software livre, licenciado sob a GNU General Public License, e és bem vindo " +"a fazer alterações a ele e/ou a distribuir cópias dele, segundo certas " +"condições descritas a seguir." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Licença completa:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Data & Hora" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Erro: fuso horário não existe." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Fuso Horário" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Moldura" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "O valor tem que ser um número inteiro." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "nunca" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "imediato" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s segundos" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Demora da Ativação" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Canto" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Lado" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Teclado" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Modelo de Teclado" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Tecla(s) para mudar disposição" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Disposições de teclado" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Idioma" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Não foi possível aceder a ~/.i18n. Cria definições normais." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Não foi possível determinar o idioma para o código=%s." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Desculpa, eu não falo '%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 "" +"Adiciona idiomas na ordem que preferires. Se uma tradução não estiver " +"disponível, será utilizada a próxima da lista." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Configuração do Modem" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Precisarás de fornecer as seguintes informações para configurar uma ligação " +"de banda larga móvel a uma rede de telemóvel (3G)." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Nome de Utilizador:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Palavra-Passe:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Número:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Nome do Ponto de Acesso (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Número de Identificação Pessoal (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Rede" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "O estado é desconhecido." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Erro no argumento de rádio especificado, utiliza on/off." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Erro no argumento especificado, utiliza 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Rede Sem Fios" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Desliga o rádio da rede sem fios para poupar na carga de bateria" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Rádio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "Descarta o histórico de rede se tiveres problemas em ligar à rede" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Descartar histórico de rede" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Colaboração" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"O servidor é o equivalente ao quarto em que tu estás; pessoas no mesmo " +"servidor poderão ver-se umas às outras, mesmo que não estejam na mesma rede." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Servidor:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Energia" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Erro no argumento de gestão de energia automática, utiliza on/off." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Erro no argumento de gestão de energia extrema, utiliza on/off." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Gestão de Energia" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Gestão automática de energia (aumenta o tempo de bateria)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Gestão extrema de energia (desliga o rádio de rede sem fios, aumenta o tempo " +"de bateria)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Atualização de Software" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Atualizações de software corrigem erros, eliminam vulnerabilidades de " +"segurança, e fornecem novas funcionalidades." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "A verificar %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "A transferir %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "A atualizar %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "O teu software está atualizado" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Podes instalar %s atualização" +msgstr[1] "Podes instalar %s atualizações" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "A verificar por atualizações..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "A instalar atualizações..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s atualização foi instalada" +msgstr[1] "%s atualizações foram instaladas" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Instalar selecionados" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Tamanho da transferência: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Da versão %(current)s para a versão %(new)s (Tamanho: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Nenhum" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "A Minha Bateria" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Removida" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "A recarregar" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Muito pouca energia restante" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d restantes" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Recarregada" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Endereço IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Desligar" + +# 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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "A Ligar..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Ligado" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "Sem ligação de rede sem fios" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Canal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Rede Com Fios" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Velocidade" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Modem Sem Fios" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Por favor aguarda..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Ligar" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Desligado" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Cancelar" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Tenta ligar novamente" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Erro: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Sugestão: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +#, python-format, +msgid "Connected for %s" +msgstr "Ligado há %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Verifica a configuração do teu PIN/PUK." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Verifica a configuração do teu Nome do Ponto de Acesso (APN)" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Verifica a configuração do Número." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Verifica a tua configuração." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Rede Mesh" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Rede Mesh %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "Nenhuma ligação GSM disponível." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "Cria uma ligação no painel de controlo." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "Fala" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "Dizer texto selecionado" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "Parar reprodução" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "Altura" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "Velocidade" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "Pausar reprodução" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Os Meus Altifalantes" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Retirar do Silêncio" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Silenciar" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "dedo" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "caneta" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "O Meu touchpad" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Mesh" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Grupo" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Casa" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Atividade" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Captura de Ecrã" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Captura de Ecrã de \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"disabled\" para pedir por um nome na inicialização; \"system\" para reutilizar " +"o nome longo da conta UNIX." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "Diretórios adicionais que podem conter traduções atualizadas." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "URL da Cópia de Segurança" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "Bundle IDs de atividades protegidas" + +#: ../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 "" +"A cor do ícone XO que é utilizada em todo o ambiente gráfico. O texto é " +"composto pela cor de traço e de preenchimento, e o formato é o das cores " +"RGB. Por exemplo: #AC32FF, #9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Demora no Canto" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Tipo de letra por omissão" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Tamanho de letra por omissão" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Nome por omissão" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Demora da ativação da moldura utilizando os cantos." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Demora da ativação da moldura utilizando os lados." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "Diretório para procurar por traduções" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Demora no Lado" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Disposição dos Favoritos" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Modo de continuação dos favoritos" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Tipo de letra que é utilizado no ambiente gráfico." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Tamanho de letra que é utilizado no ambiente gráfico." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "APN da rede GSM (OBSOLETO/NÃO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "PIN da rede GSM (OBSOLETO/NÃO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "PUK da rede GSM (OBSOLETO/NÃO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" +"Configuração do nome do ponto de acesso da rede GSM (OBSOLETO/NÃO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "Número da rede GSM (OBSOLETO/NÃO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "Palavra-Passe da rede GSM (OBSOLETO/NÃO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "Configuração da palavra-passe da rede GSM (OBSOLETO/NÃO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" +"Configuração do número de identificação pessoal da rede GSM (OBSOLETO/NÃO " +"UTILIZADO)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" +"Configuração da chave pessoal de desbloqueamento da rede GSM (OBSOLETO/NÃO " +"UTILIZADO)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "Configuração do número de telefone da rede GSM (OBSOLETO/NÃO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "Nome de utilizador da rede GSM (OBSOLETO/NÃO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "Configuração do nome de utilizador da rede GSM (OBSOLETO/NÃO UTILIZADO)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Se TRUE (verdadeiro), o Sugar irá tornar-nos pesquisáveis pelos outros " +"utilizadores do servidor Jabber." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" +"Se TRUE (verdadeiro), o Sugar irá mostrar uma opção de \"Terminar a sessão\"." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Se TRUE (verdadeiro), o Sugar irá mostrar uma opção de \"Reiniciar\"." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"Se TRUE (verdadeiro), o Sugar irá mostrar as redes Ad-hoc por omissão para " +"os canais 1, 6 e 11. Se o Sugar não ver nenhuma rede \"conhecida\" quando " +"iniciar, liga-se automaticamente a uma rede Ad-hoc." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Servidor Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Disposições de teclado" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Modelo de teclado" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Opções de teclado" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Disposição da vista de favoritos." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Lista de disposições de teclado. Cada entrada deve estar no formato " +"disposição(variante)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Lista de opções de teclado." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "Valor de altura para o serviço de fala do sugar" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "Valor de altura utilizado pelo serviço de fala no Sugar" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Energia Automática" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Energia Extrema" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Publicar ao Gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "Valor de velocidade para o serviço de fala do sugar" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "Valor de velocidade utilizado pelo serviço de fala no Sugar" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Definição para silenciar o dispositivo de som." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Mostrar Terminar a sessão" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Mostrar Reiniciar" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Mostrar redes Ad-hoc no Sugar" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Som Silenciado" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "O modelo de teclado a ser utilizado" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Definição do fuso horário para o sistema." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "O URL do servidor jabber a utilizar." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "O URL onde a cópia de segurança é gravada." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Cor do Utilizador" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Nome do Utilizador" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Nome de utilizador que é usado no ambiente gráfico." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"Não será permitido aos utilizadores eliminarem estas atividades na vista de " +"lista." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Volume de Som" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Volume de som para o dispositivo de som." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Quando está no modo de continuação, clicar num ícone favorito irá fazer com " +"que seja continuada a última entrada dessa atividade." + +#: ../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: AVISO, foram encontradas mais que uma opção com o mesmo " +"nome: módulo %s: %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 não é uma opção disponível" + +#: ../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. +#. 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 "" +"Utilização: sugar-control-panel [ opção ] key [ args ...] \n" +" Controle do ambiente sugar. \n" +" Opções: \n" +" -h mostrar esta mensagem de ajuda e sair \n" +" -l listar todas as opções disponíveis \n" +" -h key mostrar informação sobre esta chave \n" +" -g key obter o valor atual desta chave \n" +" -s key colocar o valor atual desta chave \n" +" -c key eliminar o valor atual desta chave \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Para aplicar as alterações tens que reiniciar o Sugar.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Aviso" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "As alterações necessitam que reinicies" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Cancelar alterações" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Mais tarde" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Reiniciar agora" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Finalizar" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Versão %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Confirma apagar" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Confirma apagar: Queres apagar permanentemente %s?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Guardar" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Apagar" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Remover favorito" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Tornar favorito" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Disposição Livre" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Anel" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Espiral" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Caixa" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Triângulo" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "O Registo Falhou" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "O Registo Teve Sucesso" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Estás agora registado com o teu servidor escolar." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Registar" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "Registar novamente" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Atualização de Software" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Atualiza as tuas atividades para assegurar compatibilidade com o teu novo " +"software" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Verificar agora" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Vista de Lista" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Vista de Favoritos" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" +"É necessária uma chave de encriptação sem fios para\n" +" a rede sem fios '%s'." + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Tipo de Chave:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Tipo de Autenticação:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA e WPA2 pessoal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Segurança da Rede Sem Fios:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Continuar" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Juntar-me" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Rede Ad-hoc %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Rede Mesh %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Não foi possível ligar ao servidor." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Não foi possível ao servidor completar o pedido." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Recusar" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s de %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Transferência de %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Aceitar" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Ignorar" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "O outro participante cancelou a transferência de ficheiro" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Transferir para %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "Remover" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Abrir" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Abrir com" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "Recorte de %s" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Vizinhança" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Nome:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Clica para mudar a cor:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Voltar" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Próximo" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Sem Título" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Sem pré-visualização" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Tipo: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Desconhecido" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Data: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Tamanho: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Sem data" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Participantes:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Descrição:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Etiquetas:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Diário" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Procurar" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Qualquer Altura" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Hoje" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Desde ontem" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Última semana" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Último mês" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Último ano" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Qualquer Pessoa" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Os meus amigos" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "A minha turma" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Qualquer Coisa" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "Copiar para" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Duplicar" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "Erro ao copiar a entrada. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Erro" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Iniciar" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "Ordenar por data de alteração" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "Ordenar por data de criação" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "Ordenar por tamanho" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "Ordenar vista" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "O teu Diário está vazio" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "A tua pasta documentos está vazia" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "O dispositivo está vazio" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Sem entradas correspondentes" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Limpar a busca" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "Versão Mais Antiga da Atividade %s" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "Queres reverter para a versão %s" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "O teu Diário está cheio" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "" +"Por favor apaga algumas entradas antigas do teu Diário para libertar espaço " +"para novas." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Mostrar Diário" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Escolhe um objeto" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Fechar" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Continuar com" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Iniciar com" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Nenhuma atividade para iniciar a entrada" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Enviar para" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Ver Detalhes" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "Não podem ser enviadas entradas sem ficheiro." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "Não podem ser copiadas entradas sem ficheiro." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Área de Transferência" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Nenhum amigo presente" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Nenhuma ligação válida encontrada" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Nenhuma atividade para continuar a entrada" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "Documentos" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB Livres" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "A razão para a mudança de estado do dispositivo é desconhecida." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "A mudança de estado é normal." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "O dispositivo é agora controlado." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "O dispositivo não é mais controlado." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "O dispositivo não pôde ser preparado para configuração." + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"A configuração IP não pôde ser reservada (sem endereços disponíveis, tempo " +"limite de espera ultrapassado, etc)." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "A configuração IP deixou de ser válida." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "Foram necessários segredos que não foram fornecidos." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" +"O suplicante 802.1X desligou-se do ponto de acesso ou do servidor de " +"autenticação." + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "A configuração do suplicante 802.1X falhou." + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "O suplicante 802.1x terminou ou falhou inesperadamente." + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "O suplicante 802.1X demorou muito tempo para autenticar." + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "Não foi possível iniciar o serviço PPP dentro do tempo concedido." + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "O serviço PPP desligou-se inesperadamente." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "O serviço PPP terminou ou falhou inesperadamente." + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "Não foi possível iniciar o serviço DHCP dentro do tempo concedido." + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "O serviço DHCP relatou um erro inesperado." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "O serviço DHCP terminou ou falhou inesperadamente." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "Não foi possível iniciar o serviço de ligação partilhada." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "O serviço de ligação partilhada terminou ou falhou inesperadamente." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "Não foi possível iniciar o serviço AutoIP." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "O serviço AutoIP relatou um erro inesperado." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "O serviço AutoIP terminou ou falhou inesperadamente." + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "A marcação do número falhou porque este estava ocupado." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "A marcação do número falhou porque não havia sinal de linha." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "A marcação do número falhou porque não havia \"carrier\"." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "A marcação do número expirou o limite de tempo." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "A marcação do número falhou." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "A inicialização do modem falhou." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "Não foi possível selecionar o APN GSM especificado" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "Não procurando por redes." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "O registo de rede foi recusado." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "O registo de rede expirou o limite de tempo." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "Não foi possível registar com a rede GSM pedida." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "A verificação do PIN falhou." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "Pode estar a faltar o firmware necessário para o dispositivo." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "O dispositivo foi removido." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "O NetworkManager adormeceu." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "A ligação ativa do dispositivo foi removida ou desapareceu." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "Um utilizador ou cliente pediu a desconexão." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "O \"carrier/link\" do dispositivo mudou." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "A ligação existente do dispositivo foi assumida." + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "O suplicante está agora disponível." + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "O modem não pôde ser encontrado." + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "A ligação Bluetooth falhou ou expirou o limite de tempo." + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "Não utilizado." + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Remover amigo" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Fazer amigo" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Desligar" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Reiniciar" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Terminar Sessão" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "As Minhas Definições" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Convidar para %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +#, python-format, +msgid "%s failed to start." +msgstr "Não foi possível iniciar %s." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "A Iniciar..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "Não foi possível iniciar a atividade" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Ver Código-fonte" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Parar" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Iniciar novo" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Mostrar os conteúdos" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Remover" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Código-fonte da Instância" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Código-fonte" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Código-fonte do Pacote de Atividade" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Código-fonte do Sugar Toolkit" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Ver código-fonte: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Ver código-fonte: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar numa janela" diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..10a093e --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,1834 @@ +# translation of sugar-pt_BR.po to Brazilian Portuguese +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Diego Búrigo Zacarão , 2007. +msgid "" +msgstr "" +"Project-Id-Version: olpc-sugar-pt_BR\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:15+0200\n" +"Last-Translator: Chris \n" +"Language-Team: Brazilian Portuguese \n" +"Language: pt_BR\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 "Sobre mim" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Você precisa digitar um nome." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "traço: cor=%s tonalidade=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "traço: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "preenchimento: cor=%s tonalidade=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "preenchimento: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Erro nos alteradores de cor selecionados." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Erro nas cores especificadas." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Clique para mudar a cor:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Sobre meu Computador" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Não disponível" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identidade" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Número de Série:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Software" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Construção:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Firmware sem Fio:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Direito Autoral e Licença" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 é um interface gráfico para usuário que você estava procurando. Sugar " +"é software livre, coberto pela Licença Geral Pública GNU, e você está " +"convidado(a) para modificá-lo e/ou distribuir copias dele, sob certas " +"condições descritas na Licença." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Licença Completa:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Data e Hora" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Erro: fuso horário não existe." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Fuso horário" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Moldura" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Valor precisa ser um inteiro." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "nunca" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "instantâneo" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s segundos" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Atraso de Ativação" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Canto" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Borda" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Teclado" + +# in Brasil we have keyboard: US-International, abnt, abnt-2 (abnt-associação brasileira de normas técnicas) +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Modelo do Teclado" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Teclas(s) para trocar a configuração" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Disposições de Teclado" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Idioma" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Não foi possível acessar ~/.i18n. Crie configurações padrão." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Não foi possível determinar a língua para o código=%s." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Desculpe, eu não falo '%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 "" +"Adicione idiomas na ordem que preferir. Se uma tradução não estiver " +"disponível, a próxima da lista será usada." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Configuração do Modem" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Você precisará fornecer as seguintes informações para configurar uma conexão " +"de banda larga móvel a uma rede (3G) celular." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Nome de usuário:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Senha:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Número:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Ponto de acesso:" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Numero de identificaçao personal:" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "rede" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Estado desconhecido." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Erro no argumento de rádio especificado, use on/off." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Erro no argumento de rádio especificado, use ligado / desligado." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "rede sem fio" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" +"Desligue a placa sem fio para economizar energia e aumentar a durabilidade " +"da bateria" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"Desprezar o histórico da rede se você tem problemas para conectar a rede" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Desprezar o histórico da rede" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Colaboração" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"O servidor é o equivalente a uma sala na qual você está. Pessoas no mesmo " +"servidor são capazes de ver umas às outras, mesmo quando elas não estão na " +"mesma rede." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Servidor:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Energia" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Erro no argumento automático pm, use ligado / desligado." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Erro no argumento pm extremo, usar ligar/desligar." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Gerenciamento de energia" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Gerenciamento de energia automático (aumenta a duração da bateria)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Gerenciamento de energia extremo (desliga o wireless, aumentando a duração " +"da bateria)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Atualização de software" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Atualização de software corrige erros, elimina vulnerabilidades de " +"segurança, e fornece novas funcionalidades." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Verificando %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Transferindo %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Atualizando %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Seu software está atualizado" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Você pode instalar %s atualização" +msgstr[1] "Você pode instalar %s atualizações" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Verificando atualizações..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Instalando atualizações..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "A atualização %s foi instalada" +msgstr[1] "As atualizações %s foram instaladas" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Instalar selecionados" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Tamanho da transferência: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Da versão %(current)s para %(new)s (Tamanho: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Nulo" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Minha bateria" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Removido" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Carregando" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Resta um pouquinho de energia" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "resta %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Carregada" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Endereço IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Desconectar" + +# 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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Conectando..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Conectado" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Canal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Rede por fio" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Velocidade" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Modem wireless" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Por favor espere..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Conectar" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Desconectado" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Cancelar" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Rede Mesh" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Rede Mesh %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Meus Alto-falantes" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Não mudo" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Mudo" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Mesh" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Grupo" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Casa" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Atividade" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Foto da tela" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Tela capturada de \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"desativado\" para pedir apelido na inicialização; \"sistema\" para reusar nome " +"completo da conta UNIX." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "URL de backup" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../data/sugar.schemas.in.h:6 +#, fuzzy +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 "" +"Cor para o ícone XO que é usado na área de trabalho. A string é composta " +"pela cor do contorno e preenchimento, no formato de cores rgb. Exemplo: " +"#AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Atraso do Canto" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Fonte padrão" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Tamanho padrão da fonte" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Apelido padrão" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Atraso para ativação da moldura usando os cantos." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Atraso para a ativação da moldura usando bordas." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Atraso da Borda" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Disposição dos Favoritos" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Modo de resumo dos favoritos" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Fonte que é utilizada por toda área de trabalho." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Tamanho da fonte que é utilizada por toda área de trabalho." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Se VERDADEIRO, o Sugar nos tornará buscáveis por outros usuários do servidor " +"Jabber." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Se TRUE (verdadeiro), o Sugar mostrará uma opção \"Deslogar\"." + +#: ../data/sugar.schemas.in.h:34 +#, fuzzy +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Se TRUE (verdadeiro), o Sugar mostrará uma opção \"Deslogar\"." + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "Servidor Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Disposições de teclado" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Modelo do teclado" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Opções do teclado" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Disposição da visão de favoritos." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Lista de disposições de teclado. Cada entrada deve estar no esquema (forma " +"variante)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Lista de opções do teclado." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Gerenciamento de Energia Automático" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Gerenciamento de Energia Extremo" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Publicar para Dispositivos" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Configurar ou silenciar o dispositivo de som." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Motrar Deslogar" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Som mudo" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Modelo de teclado a ser usado" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Configuração de fuso-horário do sistema." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL do servidor Jabber para usar." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL onde o backup é salvo." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Cor do Usuário" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Nome do Usuário" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Nome do usuário que é usado por toda área de trabalho." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Nível do volume" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Nível do volume para o dispositivo de som." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Quando estiver no modo continuar, clicando num ícone favorito fará com que a " +"última entrada para essa atividade seja retomada." + +#: ../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: AVISO, encontrado mais de uma opção com o mesmo nome: %" +"s módulo: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "sugar-control-panel: chave=%s não é uma opção válida" + +#: ../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 "" +"Uso: sugar-control-panel[opção] chave [argumentos ...] \n" +" Controle para o ambiente do sugar. \n" +" Opções: \n" +" -h mostrar esta mensagem de ajuda e sair \n" +" -l lista todas as opções disponíveis \n" +" -h chave mostrar informações sobre essa chave \n" +" -g chave pegar o valor atual da chave \n" +" -s chave definir o valor atual da chave \n" +" -c chave limpar o valor atual da chave \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Para terminar suas mudanças você deve reiniciar o Sugar.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Aviso" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "As mudanças exigem um reinício" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Cancele as mudanças" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Posterior" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Reiniciar agora" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Pronto" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Versão %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Confirmar a remoção" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Confirmar remoção: Você deseja remover %s permanentemente?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Manter" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Apagar" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Remover favorito" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Tornar favorito" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Forma livre" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Anel" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Espiral" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Caixa" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Triângulo" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Cadastro falhou" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Cadastrado com sucesso" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Você está cadastrado no servidor de sua escola agora." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Cadastrar" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Atualização de software" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Atualize suas atividades para assegurar compatibilidade com seu novo " +"software" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Verificar agora" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Visão de lista" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Visão de favoritos" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Tipo de chave:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Tipo de Autenticação:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 Pessoal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Segurança do Wireless:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Continuar" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Juntar-se" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Rede Mesh %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Não consegui conectar com o servidor." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "O servidor não completou a requisição." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Recusar" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s de %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Transferência de %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Aceitar" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Dispensar" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Transferir para %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Remover" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Abrir" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Abrir com" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "Recorte de %s" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Vizinhança" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Nome:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Clique para mudar a cor:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Voltar" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Próximo" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Sem título" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Sem previsão" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Tipo: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Desconhecido" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Data: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Tamanho: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Sem data" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Participantes:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Descrição:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Etiquetas:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Diário" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Buscar" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Em qualquer momento" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Hoje" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Desde ontem" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Última semana" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Último mês" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Último ano" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Qualquer um" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Meus amigos" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Minha turma" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Qualquer coisa" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Iniciar" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Seu Diário está vazio" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Nenhuma entrada correspondente" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Limpar busca" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Seu Diário está cheio" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "" +"Por favor, remova algumas entradas antigas do Diário para liberar mais " +"espaço para as novas." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Mostar Diário" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Escolher um objeto" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Fechar" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Continuar com" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Iniciar com" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Nenhuma atividade para iniciar a entrada" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Enviar para" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Ver Detalhes" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Nenhum amigo presente" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Nenhuma conexão válida encontrada" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Nenhuma atividade para continuar a entrada" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB Livre" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Remover amigo" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Fazer amigo" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Desligar" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Encerrar" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Minhas configurações" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Convidar para %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Iniciando..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Ver fonte" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Parar" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Iniciar novo" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Mostar conteúdos" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Remover" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Instância de Fonte" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Fonte" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Pacote Fonte da Atividade" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Ver fonte: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Ver fonte: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/quz.po b/po/quz.po new file mode 100644 index 0000000..0a06a05 --- /dev/null +++ b/po/quz.po @@ -0,0 +1,2003 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-24 06:02+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: quz\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 % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" +"X-Generator: Pootle 2.0.5\n" + +# "Acerca de mí" +#: ../extensions/cpsection/aboutme/__init__.py:24 +msgid "About Me" +msgstr "Nuqamanta" + +# "Debe ingresar un nombre." +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Sutiykitapuni churay." + +# "borde: color=%s tonalidad=%s" +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "muyunkuna: lipi=%s tonalidad=%s" + +# "borde: %s" +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "muyunkuna: %s" + +# "relleno: color=%s tonalidad=%s" +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "hunt'ana: llimp'i=%s tonalidad=%s\"" + +# "relleno: %s" +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "hunt'ana: %s" + +# "Error en modificadores de color especificados." +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Pantay aqllasqa llimp'ikunapi." + +# "Error en colores especificados." +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Pantay aqllasqa llimp'ikunapi." + +# "Clic para cambiar su color:" +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Llimp'iykita aqllanapaq klik ruway:" + +# "Acerca de mi computadora" +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Computadoraymanta" + +# "No disponible" +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Mana jap'ikunchu" + +# "Identidad" +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Kawsaypi" + +# "Número de serie:" +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Yupana serial nisqa:" + +# "Software" +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Software" + +# "Ensamble:" +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Ruwasqa kuti:" + +# "Azúcar:" +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Misk'i:" + +# "Firmware:" +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +# "Firmware de la red inalámbrica:" +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Firmware jila llika inala:" + +# "Licencia y derechos de autor" +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Mañakuy Nocaq Ruaskaita" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" + +# "Licencia completa:" +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Lli'punte mañakuy:" + +# "Fecha y hora" +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Punchaypis Horapis" + +# "Error, zona horaria no existe." +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Pantay: horaqpa suyun mana kanchu." + +# "Zona horaria" +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Horaqpa suyun" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "" + +# "El valor debe ser un número entero." +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Tukuy kanan huk llipin yupana." + +# "nunca" +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "ni haykaqpis" + +# "instantáneo" +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "usqhay" + +# "%s segundos" +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s segundokuna" + +# "Retraso de activación" +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Qallarinapaq qhipay" + +# "Esquina" +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Muyurina" + +# "Borde" +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Muyumnim" + +# "Teclado" +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Ñit'ina" + +# "Modelo de teclado" +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Sumaq ñit'ina chhalay" + +# "Tecla(s) para cambiar el diseño" +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Ñit'ina wakpaq ñit'ina(kuna)" + +# "Diseño(s) de teclado" +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Ñit'ina(kuna) chhalay" + +# "Idioma" +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Simi" + +# "No se puede acceder a ~/.i18n. Crear configuración internacional estándar." +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Mana ~/.i18n\"pi yaykuyta atikunchu." + +# "El lenguaje del código=%s no pudo ser determinado." +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Chimpu=%s, chay simi mana riqsisqachu." + +# "Lo siento, yo no hablo '%s'." +#: ../extensions/cpsection/language/model.py:152 +#, python-format +#, python-format, +msgid "Sorry I do not speak '%s'." +msgstr "Sentine, mana rimanichi '%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 "" + +# "Configuración del módem" +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Modem nisqata kamachina" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" + +# "Nombre de usuario:" +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Runa suti:" + +# "Contraseña:" +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Pakasqa simi:" + +# "Número:" +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Yupana:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +# "Red" +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Llik'a" + +# "Estado desconocido." +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Ima mana riqsisqa." + +#: ../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 "" + +# "Inalámbrica" +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Inalámbrica" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +# "Radio" +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Uyarinapaq" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +# "Descarte historial de la red" +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Llik'amanta yuyarinata chinkachiy" + +# "Colaboración" +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Yanapanakuna" + +#: ../extensions/cpsection/network/view.py:130 +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 "" + +# "Servidor:" +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Sirwidur:" + +# "Energía" +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Atina" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +# "Manejo de energía" +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Energia nisqap kamachinan" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +# "Actualización de software" +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Software kunanchana" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +# "Probando %s..." +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "%s ta mallichkan..." + +# "Descargando %s..." +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "%s ta urayachispa..." + +# "Actualizando %s..." +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "%s ta kunanchachkan..." + +# "Tu software esta actualizado" +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Softwara nisqaykita kunanchanña" + +# "Puedes instalar %s actualización" +# "Puedes instalar %s actualizaciones" +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "%s kunanchanata churayta atinki" +msgstr[1] "" + +# "Buscando actualizaciones..." +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Kunanchanakunata maskhachkan..." + +# "Instalando actualizaciones..." +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Kunanchanakunata churachkan..." + +# "%s actualización fue instalada" +# "%s actualizaciones fueron instaladas" +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s kunanchanata churaran" +msgstr[1] "%s kunanchanakunata churaran" + +# "Instalación seleccionada" +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Aqllasqa churanapaq" + +# "Tamaño de descarga: %s" +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Urayachinapaq jayk'a: %s" + +# "Desde la version %(current)s hacia %(new)s (Size: %(size)s)" +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "%(current)s kutimanta %(new)s kutiman (Jayk'a: %(size)s)" + +# "Ninguno" +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Ni ima" + +# "1 KB" +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +# "%.0f KB" +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +# "%.1f MB" +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +# "Mi batería" +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Bateria nisqay" + +# "Eliminado" +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Mana t'inkisqa" + +# "Cargando" +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Hunt'achkan" + +# "Queda muy poca batería" +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Bateriamanta pisillata kachkan" + +# "Quedan %(hour)d:%(min).2d" +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d qhipachkan" + +# "Cargada" +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Huntasqaña" + +# "Direccion IP: %s" +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Direccion IP: %s" + +# "Desconectar" +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "T'aqachiy" + +# "Conectando..." +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "T'inkichachkan..." + +# "Conectado" +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "T'inkisqa" + +# "No hay conexión inalámbrica" +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "Inalámbrica t'inkina mana kanchu" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +# "Red Cableada" +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Cableada llik'a" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +# "Módem inalámbrico" +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Módem inalámbrico" + +# "Espere por favor..." +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Suyariy..." + +# "Conectar" +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "T'inkiy" + +# "Desconectado" +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Mana t'inkisqachu" + +# "Cancelar" +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Chinkachiy" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +# "Error: %s" +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Pantay: %s" + +# "Sugerencia: %s" +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Allinchanapaq: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +# "%d KB" +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +# "Revise la configuración de su Pin/Puk." +#: ../extensions/deviceicon/network.py:350 +#, fuzzy +msgid "Check your PIN/PUK configuration." +msgstr "PIN/PUK kamachinaykita chiqaqchay." + +# "Revise la configuración del nombre de su punto de acceso (APN)" +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Nombre de punto de acceso (APN) kamachinata chiqaqchay" + +# "Revise el Número en la configuración." +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Yupanap kamachinanta chiqaqchay." + +# "Revise su configuración." +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Kamachinaykita chiqaqchay." + +# "Red Malla" +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Red Malla" + +# "Red Malla %s" +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Red Malla %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +# "Mis parlantes" +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Parlante nisqaykuna" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +# "Silenciar" +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Ch'inyachiy" + +# "dedo" +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "ruk'ana" + +# "estilo" +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "qillqana" + +# "Mi superficie táctil" +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "Mi superficie táctil" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +# "Grupo" +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Huñu" + +# "Hogar" +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Wasi" + +# "Actividad" +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Ruwana" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +# "Retraso de las Esquinas" +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "K'uchupi suyana" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +# "Diseño(s) de teclado" +#: ../data/sugar.schemas.in.h:37 +#, fuzzy +msgid "Keyboard layouts" +msgstr "Ñit'ina(kuna) chhalay" + +# "Modelo de teclado" +#: ../data/sugar.schemas.in.h:38 +#, fuzzy +msgid "Keyboard model" +msgstr "Sumaq ñit'ina chhalay" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +# "Mostrar Terminar Sesión" +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Lluqsinata rikhurichiy" + +# "Mostrar Reiniciar" +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Qallarinata rikhurichiy" + +# "Mostrar redes específicas de Azúcar" +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Azucarpa llik'akunanta rikhurichiy" + +# "Sonido silenciado" +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Ch'inyachisqa" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +# "Color del usuario" +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Hap'iqmasip llimp'in" + +# "Nombre de usuario" +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Hap'iqmasip sutin" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +# "Nivel de volumen" +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Hayk'a chanra" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "" + +# "Advertencia" +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Willay" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +# "Cancelar cambios" +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "T'krasqakunata chinkachiy" + +# "Después" +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Qhipamanta" + +# "Reiniciar ahora" +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Kunan qallariy" + +# "Hecho" +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Ruwasqaña" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +# "Versión %s" +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Kuti %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +# "Guardar" +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Kikinchata waqaychay" + +# "Borrar" +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Chinkachiy" + +# "Remover favorito" +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Aqllasqata chinkachiy" + +# "Hacer favorito" +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Aqllasqata ruway" + +# "Forma libre" +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Qispi siq'ichasqa" + +# "Anillo" +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Siwi" + +# "Espiral" +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Espiral" + +# "Caja" +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Tawak'uchu" + +# "Triángulo" +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Kimsak'uchu" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +# "Registro" +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Qillqachina" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +# "Actualización de Software" +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Software kunanchana" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +# "Pruebe ahora" +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Kunan chiqaqchay" + +# "Vista en lista" +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Siqipi qhaway" + +# "2" +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +# "Vista de favoritos" +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Aqllasqakuna qhaway" + +# "1" +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# "Retomar" +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Hukmanta ruway" + +# "Unirse" +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Huñunakuy" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +# "Red Malla %s" +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +#, python-format, fuzzy +msgid "Mesh Network %d" +msgstr "Red Malla %d" + +# "No se puede conectar al servidor." +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Servidorman mana t'inkiyta atinchu." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "" + +# "Rechazar" +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Ama niy" + +# "%dB" +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +# "%dKB" +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +# "%dMB" +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +# "%s de %s" +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s de %s" + +# "Transferencia desde %s" +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "%s manta apachina" + +# "Aceptar" +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Ari niy" + +# "Descartar" +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Qhichuy" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +# "Transferir a %s" +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "%s man apachiy" + +# "Eliminar" +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "Chinkachiy" + +# "Abrir" +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Kichay" + +# "Abrir con" +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Imawan kichay" + +# "recorte de %s" +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s nisqaqpa rutuynin" + +# "Vecindario" +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Suyucha" + +# "F1" +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +# "F2" +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +# "F3" +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +# "F4" +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +# "Nombre:" +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Suti:" + +# "Clic para cambiar de color:" +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Llimp'ita tikranapaq klik ruway:" + +# "Atrás" +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Kutichiy" + +# "Siguiente" +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Qatiq" + +# "Sin título" +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Mana sutiyuq" + +# "Sin vista previa" +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Qhawanaraq mana kanchu" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +# "Desconocido" +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Mana riqsisqachu" + +# "Fecha: %s" +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Punchay: %s" + +# "Tamaño: %s" +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Sayaynin: %s" + +# "Sin fecha" +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Mana p'unchawyuq" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +# "Descripción:" +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Aswan willay:" + +# "Etiquetas:" +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Sutichaq:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +# "Buscar" +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Maskhay" + +# "Cualquier momento" +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Tukuy pacha" + +# "Hoy" +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Kunan p'unchaw" + +# "Desde ayer" +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Qaynamanta" + +# "Última semana" +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Ñawpaq semana" + +# "Último mes" +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Ñawpaq killa" + +# "Último año" +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Ñawpaq wata" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +# "Mis amigos" +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Masiykuna" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +# "Copiar a" +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "Mayman kikinchay" + +# "Duplicar" +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Kikinchay" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +# "Error" +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Pantay" + +# "Iniciar" +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Qallariy" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +# "Ordenar por tamaño" +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "Sayayninwan siqichay" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +# "Su diario está vacío" +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Diario nisqaykiqa chusaq kachkan" + +# "Tu carpeta de documentos está vacía" +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "Wayaqaykiqa chusaq kachkan" + +# "El dispositivo está vacío" +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "Dispositivo nisqaqa chusaq kachkan" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +# "Limpiar búsqueda" +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Maskhanata pichay" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +# "¿Desea instalar la versión %s, mas antigua? " +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "Mawk'a %s churayta munankichu?" + +# "Su diario está lleno" +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Diario nisqaykiqa hunt'asqa" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "" + +# "Mostrar diario" +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Diario nisqata rikhurichiy" + +# "Escoja un objeto" +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Huk imata aqllay" + +# "Cerrar" +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Wisq'ay" + +# "Reiniciar con" +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Imawan hukmanta qallariy" + +# "Empezar con" +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Imawan qallariy" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +# "Enviar a" +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Piman apachiy" + +# "Ver detalles" +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Aswan qhaway" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +# "Portapapeles" +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Laphikunata apaq" + +# "No hay amigos presentes" +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Mana masikunaqa kankuchu" + +# "No se encontró una conexión válida" +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Mana allin t'inkinata maskhasqachu" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +# "Documentos" +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "Qillqa q'ipikuna" + +# "%(free_space)d MB libres" +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB Qispisqa" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +# "La configuración IP ya no es válida." +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "IP kamachinaqa mana allinñachu." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +# "Llamada falló." +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "Waqyanaqa pantaran." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +# "Remover amigo" +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Masita chinkachiy" + +# "Agregar amigo" +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Masita yapay" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +# "Reiniciar" +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Hukmanta qallariy" + +# "Salir" +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Lluqsiy" + +# "Mis ajustes" +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Aqllasqaykuna" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +# "%s falló al iniciar." +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s qallarispa pantaran." + +# "Iniciando..." +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Qallarichkan..." + +# "Actividad falló al iniciar" +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "Ruwanaqa qallarispa pantaran" + +# "Ver fuente" +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Chimputa qhaway" + +# "Parar" +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Sayachiy" + +# "Empezar nuevo" +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Musuqta qallariy" + +# "Mostrar contenidos" +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Ukhunpi qhaway" + +# "Quitar" +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Qhichuy" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +# "Ver código fuente: %r" +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Qhaway chimputa: %s" + +# "Ver código fuente: %r" +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Qhaway chimputa: %r" + +# "Sugar en una ventana" +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Juk qhawanapi Azucar" + +# "%(interface)s: %(version)s" +#, python-format +#~ msgid "%(interface)s: %(version)s" +#~ msgstr "%(interface)s: %(version)s" + +# "%s" +#, python-format +#~ msgid "%s" +#~ msgstr "%s" + +# "%s (%s)" +#, python-format +#~ msgid "%s (%s)" +#~ msgstr "%s (%s)" diff --git a/po/ro.po b/po/ro.po new file mode 100644 index 0000000..192ed97 --- /dev/null +++ b/po/ro.po @@ -0,0 +1,1789 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 07:28+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: ro\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==1 ? 0 : (n==0 || (n%100 > 0 && 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 "Eroare la specificarea modificatorului de culoare." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Eroare la culoarea specificată." + +#: ../extensions/cpsection/aboutme/view.py:235 +#, fuzzy +msgid "Click to change your color:" +msgstr "Clic pentru a schimba culoarea:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Indisponibil" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +msgstr "" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Eroare, fusul orar nu există." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +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 "%s secunde" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "Nu s-a putut accesa ~/.i18n. Se crează configurări standard." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Nu s-a putut determina limba pentru codul %s." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Îmi pare rău, nu vorbesc „%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Stare necunoscută." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Eroare la argumentul radio specificat. Folosiţi pornit/oprit." + +#: ../extensions/cpsection/network/model.py:152 +#, fuzzy +msgid "Error in specified argument use 0/1." +msgstr "Eroare la argumentul radio specificat. Folosiţi pornit/oprit." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, 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:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "Gata" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "Elimină" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +#, fuzzy +msgid "Disconnect" +msgstr "Deconectat" + +# 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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +#, fuzzy +msgid "Connecting..." +msgstr "Deconectează..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Canal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Deconectat" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Anulează" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Reţea plasă" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Reţea plasă %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Grup" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Acasă" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Activitate" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Captură ecran" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "Pentru a activa modificările trebuie să reporniţi Sugar.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Gata" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Păstrează" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Șterge" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Înregistrează" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Tip cheie:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Tip autentificare:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Reia" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Alătură-te" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Reţea plasă %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Elimină" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Deschide" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Vecinătate" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Nume:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Clic pentru a schimba culoarea:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Înapoi" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Următor" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Fără titlu" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Fără previzualizare" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Fără dată" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Descriere:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Etichete:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Jurnal" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Caută" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Oricând" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Azi" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "De ieri" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "De săptămâna trecută" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "De luna trecută" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "De anul trecut" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Oricine" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Prietenii mei" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Clasa mea" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Orice" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Start" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Şterge prieten" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Adaugă prieten" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Opreşte" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Invită la %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Se porneşte..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Oprește" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Elimină" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..9ee7503 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,1835 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:12+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: ru\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 "линия: цвет=%s тон=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "линия: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "заливка: цвет=%s тон=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "заливка: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "Кликните для изменения цвета:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "О компьютере" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Не доступно" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Идентификация" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Серийный номер:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Программное обеспечение" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Сборка:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Прошивка:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Прошивка сетевого оборудования:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Лицензионная информация" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 это графический интерфейс пользователя, который вы сейчас видите. Это " +"свободный программный продукт, защищенный лицензией GNU General Public " +"License и вы можете свободно изменять и/или распространять его так как " +"определено лицензией приведенной здесь." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s секунд" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Активация отложена" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Угол" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Сторона" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Клавиатура" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Модель клавиатуры" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Клавиша(ши) смены раскладки" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "Нет доступа к ~/.i18n. Создайте стандартные настройки." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Язык с кодом=%s не определен." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Я не говорю по '%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 "" +"Добавьте языки в порядке релевантности. Если перевод недоступен, будет " +"использован следующий по списку." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Настройки модема" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "Имя пользователя:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Пароль:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Номер:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "Ошибка выбора, используйте 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Беспроводной" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" +"Выключить беспроводную радио-сеть для того, чтобы сберечь больше жизни " +"батареи" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Радио" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"Отбрасывать историю сетевых подключений если у есть проблемы соединения с " +"сетью" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Отбрасывать историю сетевых подключений" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Совместная работа" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Ошибка в пределах значения параметра, укажите его явно." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Управление питанием" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" +"Автоматическое управление питанием (увеличивает срок службы аккумулятора)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Экстремальное управление питанием (запрещает беспроводную связь, увеличивает " +"срок службы аккумулятора)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Обновление программ" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Обновления программного обеспечения исправляет ошибки, устраняет уязвимости " +"в системе безопасности, и добавляет новые возможности." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Проверка %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Загрузка %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Обновление %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Ваше ПО обновлено" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Вы можете установить %s обновление" +msgstr[1] "Вы можете установить %s обновления" +msgstr[2] "Вы можете установить %s обновление" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Проверка обновлений.." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Установка обновлений..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s обновление было установлено" +msgstr[1] "%s обновления было установлено" +msgstr[2] "%s обновлений было установлено" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Установить выбранное" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Загружаемый объём: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "От версии %(current)s к %(new)s (размер: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Ничего" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 КБ" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f КБ" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f МБ" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Мой аккумулятор" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Удалён" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Зарядка" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d осталось" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Заряжен" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP адрес: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Соединение..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Соединен" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Канал" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Проводная сеть" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Скорость" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Беспроводной модем" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Пожалуйста ждите..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Соединить" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Не подключен" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Отмена" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Mesh Сеть" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Сеть Mesh %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +#, fuzzy +msgid "Rate" +msgstr "Дата" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Мои звуковые колонки" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Включить звук" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Выключить звук" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Mesh" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Группа" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Дом" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Активность" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Снимок экрана" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Скриншот \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"disabled\" - спрашивать ник при инициализации; \"system\" - для использования " +"длинного UNIX-аккаунта" + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "Адрес бэкапа" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../data/sugar.schemas.in.h:6 +#, fuzzy +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 "" +"Цвет иконки XO используется на все площади рабочего стола. Строчка " +"составляется из цвета каймы и цвета заливки человечка. Цвет задается в " +"формате rgb.Например: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Задержка углов" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Шрифт по-умолчанию" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Размер шрифта по-умолчанию" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Ник по-умолчанию" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Задержка активации фрейма с использованием углов." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Задержка активации фреймов с использованием сторон." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Задержка сторон" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Способ расположения значков Избранного" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Режим возобновления" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Шрифт, используемый на рабочем столе" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Шрифт, используемый на рабочем столе" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Сделать Sugar доступным для поиска для других пользователей Jabber сервера." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Если TRUE, Sugar будет показывать опцию \"Завершить сеанс\"." + +#: ../data/sugar.schemas.in.h:34 +#, fuzzy +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Если TRUE, Sugar будет показывать опцию \"Завершить сеанс\"." + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "Сервер Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Раскладки клавиатуры" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Модель клавиатуры" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Опции клавиатуры" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Способ расположения элементов для элементов Избранного." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Список раскладок клавиатуры. Каждая запись должна быть в форме варианта " +"раскладки" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Список опций клавиатуры" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Автоматическое управление памятью" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Экстремальное управление питанием" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Публиковать на Gadget'е" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Настройка отключения звука." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Показывать Завершение сеанса" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Звук отключён" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Модель используемой клавиатуры" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Настройки часового пояса для системы." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "Адрес используемого сервера Jabber." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "Адрес для хранения бэкапов." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Цвет ползователя" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Имя пользователя" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Имя пользователя, используемое везде в пределах системы." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Уровень громкости" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Уровень громкости для устройства воспроизведения звука." + +#: ../data/sugar.schemas.in.h:66 +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 "" +"sugar-control-panel: ПРЕДУПРЕЖДЕНИЕ, найдено более чем одна опция с одним и " +"тем же именем: %s модуля: %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 не является допустимой опцией" + +#: ../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. +#. 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 "" +"Использование: sugar-control-panel [ option ] key [ args ... ] \n" +"Управление для окружения Sugar \n" +"Опции: \n" +"-h отобразить это справочное сообщение и выйти \n" +"-l список всех допустимых опций \n" +"-h key отобразить информацию о ключе key \n" +"-g key получать значение ключа key \n" +"-s key установить значение ключа key \n" +"-c key сбросить текущее значение ключа key \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Чтобы применить изменения перезапустите Sugar.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Предупреждение" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Изменения требуют перезапуска" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Отменить изменения" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Потом" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Перезапустить сейчас" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Готово" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ок" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Версия: %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Подтвердите удаление" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" +"Подтвердите удаление: Вы действительно хотите удалить %s без возможности " +"восстановления?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Хранить" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Удалить" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Удалить предпочтение" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Создать предпочтение" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Свободный вид" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Кольцо" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Спираль" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Квадрат" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Треугольник" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Ошибка регистрации" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Регистрация завершена успешно" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Теперь вы зарегистрированы на вашем школьном сервере." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Зарегистрироваться" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Обновление программ" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Обновите свои свои активности чтобы быть удостовериться с совместимости с " +"вашими новыми программами" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Проверить сейчас" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Список" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Любимые" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Тип ключа:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Тип аутентификации:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA и WPA2 Personal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Режим безопастности:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Продолжить" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Присоединиться" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Сеть Mesh %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Понижение" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s из %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Перенос из %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Принять" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Запретить" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Перенос в %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Удалить" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Открыть" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Открыть с" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s из буфера" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Соседи" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Имя:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Кликните для изменения цвета:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Назад" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Далее" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Без имени" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Нет пред-просмотра" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Возможность: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Неизвестный" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Дата: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Размер: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Без даты" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Участники:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Описание:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Тэги:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Журнал" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Поиск" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Любое время" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Сегодня" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Со вчерашнего дня" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "За неделю" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "За месяц" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "За год" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Все" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Мои друзья" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Мой класс" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Всё" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Старт" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Ваш Журнал пуст" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Нет совпадений" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Очистить поиск" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "Показать Журнал" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Выбрать объект" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Закрыть" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Возобновить" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Открыть" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Нет активностей для открытия записи" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Отослать" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Детали" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Нет друзей" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Нет доступных соединений" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Нет активностей для возобновления записи" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "Свободно %(free_space)d MB" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Убрать друга" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Создать друга" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Выключить" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Перезапуск" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Выход" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Настройки" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Пригласить в %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Запуск..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Исходный код" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Стоп" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Запустить новую" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Отобразить содержимое" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Удалить" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Исходный код" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Исходный код" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Исходный код пакета активности" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Исходный код: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Исходный код: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/rw.po b/po/rw.po new file mode 100644 index 0000000..f24ac43 --- /dev/null +++ b/po/rw.po @@ -0,0 +1,1818 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Chris Leonard , 2012. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-05-01 00:34-0400\n" +"PO-Revision-Date: 2012-05-30 05:09+0200\n" +"Last-Translator: Chris \n" +"Language-Team: Sugar Labs\n" +"Language: rw\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 "Ibinyerecyeyeho" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Ugomba kwinjiza izina." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "stroke: ibara=%s igihu=%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 igihu=%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 "Ikosa mu mpindura y'ibara yavuzwe." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Ikosa mu mabara yavuzwe." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Kanda kugirango uhindure ibara:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Ibyerekeye mudasobwa yanjye" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Ntibibashije kuboneka" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Ikiranga" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Numero ya seri:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Porogaramu" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Kubaka:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Wireless Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Uburenganzira bw'ikoporora n'amabwiriza" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 ni garafike user interface muri kureba.Sugar ni software " +"y'ubuntu,igengwa na Lisense ya GNU,kandi ushobora kuyihindura cyangwa " +"gutanga amacopies ukurikije uburenganzira bugenga ikoporora buhari." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Uburenganzira bwuzuye:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Itariki n'igihe" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Ikosa timezone ntiribaho." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Igihe fatizo" + +#: ../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 "umubare ugomba kuba udafite undi mubare inyuma yakitso." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "ntibizongere" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "by'ako kanya" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s amasegonda" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Gutinda kwa activation" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Inguni" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Inkuta" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Keyboard" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "ubwoko bwa keyboard" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Infunguzo zihindura imimerere" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Imimerere ya keyboard" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Ururimi" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Ntibishobotse kwinjira ~/.i18n. Rema ibipimo nyabyo." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Ururimi rwa code=%s ntirushoboye kuboneka." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Ihangane sinshoboye kuvuga '%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 "" +"Ongeraho indimi mu buryo ushaka.Niba ubusobanuro butabonetse,urukurira ku " +"rutonde nirwo rukoreswa." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Gutunganya Modem" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Ugomba gutanga amakuru akurikira kugirango connection ya mobile broadband " +"(3G) ikore." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Izina ukoresha:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Ijambo ry'ibanga:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Umubare:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Izina rya Access Point(APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Ikiranga Umuntu Cyihariye(PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Rezo" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "States ntizizwi." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Ikosain specified radio argument use on/off." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Ikosa muri argument yasobanuwe koresha 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Rezo itagira intsinga" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Zimya wireless radio kugirango ubike umuriro" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radiyo" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "Kuraho uko rezo zakurikiranye niba ufite ikibazo cyo kujya kuri rezo" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Kuraho uko rezo zakurikiranye" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Ubufatanye" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Seriveri ihwanye n'icyumba urimo;abantu bari kuri seriveri imwe babasha " +"kubonana ku murongo,niyo bataba bari kuri rezo zimwe." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Seriveri:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Ingufu" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Ikosa muri automatic pm argument,koresha on/off." + +#: ../extensions/cpsection/power/view.py:45 +msgid "Power management" +msgstr "Ubugenzuzi bw`ingufu" + +#: ../extensions/cpsection/power/view.py:55 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Ubugenzuzi bw`ingufu buri otomatike (ongera ubuzima bwa batiri)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Ishyirwa ku gihe rya software" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Amakosa nyayo mu gushyira ku gihe software,kuraho ububi,kandi utange ibindi " +"bishya." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "kugenzura %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Kuzana ikintu %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Gushyira ku gihe %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Software yawe yashizwe ku gihe" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "ushobora kwinjiza %s y'ivugurura" +msgstr[1] "ushobora kwinjiza %s y'amavugurura" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Kugenzura ibiri ku gihe..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Gushyiramo ibiri ku gihe..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s ikiri ku gihe cyashizwemo" +msgstr[1] "%s ibiri ku gihe byashyizwemo" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Shyiramo ibyo wahisemo" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Zana ibingana na: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Kuva kuri verisiyo %(current)s kujya kuri %(new)s (Ingano: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Nta nakimwe" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "KB 1" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Batiri yanjye" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Yakuweho" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Gusharija" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Hasiagaye ingufu nke cyane" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d isigaye" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Yasharijwe" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP address: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Tandukanya" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Ihuza..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Byahujwe" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "Nta guhuzwa kw'umurongo udakoresha intsinga" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Umuyoboro" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Network y'insinga" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Umuvuduko" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Modemu idakoresha intsinga" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "ihangane gato..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Huza" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Byatandukanijwe" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Kuraho" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Ongera ugerageze guhuza" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Ikosa: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "ibyifuzo: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "Bihujwe kuri %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Genzura uko PIN/PUK yawe imeze." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Genzura uko umurongo uguhuza wawe umeze(APN)" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Genzura umubare w'iboneza." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Genzura iboneza ryawe." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Urusobe rwa rezo" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Rezo ya Mesh %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "Nta guhuzwa kwa GSM guhari." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "Kora ihuza muri control panel." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "Ijambo" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "Vuga interuro yahiswemo" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "Hagarika Gukina" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "Pitch" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "Ikigereranyo" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "Hagarika akanya gato gukina" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Imizindaro Yanjye" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Subizaho ijwi" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Kuraho ijwi" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "urutoki" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "stylus" +msgstr "stylus" + +#: ../extensions/deviceicon/touchpad.py:64 +msgid "My touchpad" +msgstr "Touchpad yanjye" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Urusobekerane" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Itsinda" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Murugo" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Igikorwa" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Ekara ntoya" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "ifoto ya ekara \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"disabled\" kubaza nick mu itangira; \"system\" kongera gukoresha izina " +"rirerire rya konte UNIX." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "Ububiko bwinyongera bushobora kugira ubusemuro bugezweho." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "Garura URL" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "Ibirango by'ibizingo by'ibikorwa birinzwe" + +#: ../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 "" +"Ibara ry'akarango ryakoreshejwe kuri mudasobwa. String igizwe na stroke " +"color ndetse na fill color, foruma ni rgb. urugero: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Gutinda kw'inguni" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Imyandikire yicyitegererezo" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Ingano y'amagambo y'ikitegerezo" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Nick yicyitegererezo" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Gutinda kwemeza frame ukoresheje inguni." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Gutinda kwemeza frame ukoresheje impera." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "Umuyoboro w'ishakiro ry'ubusemuro" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Gutinda kw'impande" + +#: ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Imicungire yo mu rwego rwo hejuru y'umuriro (ihagarikwa rya radiyo " +"idakoresha urusinga, byongera ubuzima bwa bateri)" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Ingano wihitiyemo" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Uburyo bw'isubukura wihitiyemo" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Akarango gakoreswa kuri desktop hose." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Ingano ikoreswa kuri desktop hose." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "APN y'umuyoboro GSM (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "PIN y'umuyoboro GSM (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "PUK y'umuyoboro GSM (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "iboneza ry'izina rya access point y'umuyoboro GSM(DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "umubare w'umuyoboro GSM (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "ijambo banga ry'umuyoboro GSM (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "iboneza ry'ijambo banga ry'umuyoboro GSM (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "Iboneza ry'umubare uranga bwite ry'umuyoboro GSM (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "Iboneza ry'urufunguzo bwite rw'umuyoboro GSM (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "iboneza rya numero ya telefoni y'umuyoboro GSM (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "Izina ry'ukoresha umuyoboro GSM (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "Iboneza ry'izina ry'ukoresha umuyoboro GSM (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "If TRUE, Sugar izatuma tubonekera abandi bakoresha seriveri Jabber." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "If TRUE, Sugar irerekana amahitamo yo \"Kuvamo\"." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "If TRUE, Sugar irerekana amahitamo yo \"Kongera gutangira\"." + +#: ../data/sugar.schemas.in.h:35 +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 irerekana imiyoboro Ad-hoc y'mirongo 1,6 na 11. Iyo Sugar " +"itabonye imiyoboro \"izwi\" mu itangira, ihita yihuza ku miyoboro Ad-hoc." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Seriveri Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Imimerere ya keyboard" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "ubwoko bwa keyboard" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "ihitamo rya Keyboard" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Ingano y'ishusho wihitiyemo." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Rondora imigargarire ya Keyboard. Ikinjijwe kigomba kuba mu " +"buryolayout(variant)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Irondora ry'ubwoko bwa keyboard." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "Agaciro ka Pitch ka serivise ya speech" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "Agaciro ka Pitch kakoreshejwe na serivise ya speech muri sugar" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Umuriro otomatike" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Umuriro ku mpera" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Amamaza kuri Gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "Tanga agaciro ka serivisi ya speech muri sugar" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "Tanga agaciro k'ibikoreswa muri serivise ya speech muri sugar" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Setinga kuzimya ijwi ry'igikoresho." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Erekana Log out" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Erekana Kongera gutangiza" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Erekana imiyooboro ya Sugar Ad-hoc" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Ijwi rya zimijwe" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Ubwoko bwa Keyboard bwo gukoreswa" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Gushyira ku gihe systeme." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL ya server jabber yo gukoreswa." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL y'aho backup ibikwa." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Koresha Ibara" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Izina ry'ukoresha" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "izina rikoreswa kuri desktop hose." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"Abakoresha mudasobwa ntabwo bazemererwa gusiba igikorwa banyuze kureba " +"irondora." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "ingano y'ijwi" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "ingano y'ijwi y'igikoresho gisohora amajwi." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Uri mu buryo bw'isubukura, gukanda kucyo wahisemo biratuma ibyakozwe " +"bwanyuma kuri icyo gikorwa bisubukurwa." + +#: ../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: urufunguzo=%s uburyo ntibushoboye kuboneka" + +#: ../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. +#. 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 "" +"Imikoreshereze: sugar-control-panel [ option] urufunguzo [ args ...] \n" +" Ikontororwa ry'imimerere ya sugar. \n" +" Uburyo: \n" +" -h yerekana inyandiko yo gufasha no kurekeraho \n" +" -l itondagura uburyo bwose buboneka \n" +" -h urufunguzo yerekana inkuru ijyanye n'uru rufunguzo\n" +" -g urufunguzo izana agaciro k'urufunguzo \n" +" -s urufunguzo ihindura agaciro k'urufunguzo \n" +" -c urufunguzo Kuraho agaciro gasanzwe k'urufunguzo \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Kugirango ibyahinduwe bikore ugomba kongera gutangira Sugar.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Icyitonderwa" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "impinduka zikenera kongera gutangira" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Kureka impinduka" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "nyumaho gato" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "kongera gutangira ubu" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Icyakozwe" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Nibyo" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +#, python-format, +msgid "Version %s" +msgstr "Verisiyo %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Emeza gusiba" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Emeza gusiba: Urashaka gusiba burundu %s?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Gumana" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Gusiba" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Kuraho icyo ukunda" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Kora icyo ukunda" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Freeform" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Isone" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spiral" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Agasanduku" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Mpandeshatu" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Kwiyandikisha birananiranye" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Kwiyandikisha byatunganye" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Ubu wanditswe muri server y`ishuri." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Kwiyandikisha" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "Ongera wiyandikishe" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Ihindurwa rya software" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "Hindura ibikorwa byawe kugirango bihuze na progaramu nshya yawe" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Genzura ubu" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Ibigaragara ku rutonde" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Reba ibyagushimishije" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" +"Urufunguzo rwa \n" +"rezo idakoresha itsinga rurakenewe '%s'." + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Ubwoko bw'Urufunguzo:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Ubwoko bwo Kwivuga:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 yihariye" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Umutekano w'umuyoboro udakoresha intsinga:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Subukura" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Huza" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Umuyoboro Ad-hoc %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Urusobe rwa rezo %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Ntishoboye kwihuza na seriveri." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Seriveri ntishoboye kurangiza ibisabwa." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Kwanga" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +#, python-format, +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s bya %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "Vana kuri %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Emeza" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Sezerera" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "undi mufatanyije yahagaritse iyohereza ry'ubutumwa" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "Ohereza kuri %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "Kuraho" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Fungura" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Fungura na" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s birengeje" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Ubuturanyi" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Izina:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Kanda uhindure ibara:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Inyuma" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Ibikurikira" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Nta mutwe w`amagambo" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Nta kibanziriza" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Ubwoko: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Kitazwi" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Itariki: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Ingano: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Nta tariki" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Abagize uruhare:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Igisobanuro:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Tags:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Ikinyamakuru" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Shaka" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Igihe icyo aricyo cyose" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Uyu munsi" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Kuva ejo hashize" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Icyumweru gishize" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Ukwezi gushize" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Umwaka ushize" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Uwo ariwe wese" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Inshuti zanjye" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Ishuri ryanjye" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Icyo aricyo cyose" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "Kopororera ku" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Subiramo" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "Ikosa mu gukoporora icyinzizwa. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Ikosa" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Tangira" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "Tandukanya uhereye ku itariki byahinduriweho" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "Tandukanya uhereye ku itariki byakorewe" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "Tandukanya uhereye ku ngano" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "Tandukanya ukureba" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Ikinyamakuru cyawe ntakintu cyanditsemo" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "Ububiko bw'inyandiko zawe burimo ubusa" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "Igikoresho kiriho ubusa" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Nta bihuye n'ibyinjijwe bibonetse" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Kuraho ishakisha" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "Verisiyo ya kera y'igikorwa %s" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "Ese ushako kumanura kuri versio %s" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Ikinyamakuru cyawe kiruzuye" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "Siba ibishaje mu kinyamakuru kugirango ubone umwanya w'ibishya." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Erekana ikinyamakuru" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Hitamo ikintu" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Funga" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Subukura na" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Tangiza" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Nta Gikorwa cyafungura ibyinjijwe" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Ohereza kuri" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Reba Birambuye" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "Ibyinjijwe bidafite ububiko ntibishobora kwoherezwa." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "ibinjijwe bidafite ububiko ntibishobora gukopororwa." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "Clipboard" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Nta shuti zihari" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Nta muyoboro ubonetse" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Nta gikorwa cyasubukura icyinjizwe" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "Inyandiko" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB Free" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "Impamvu y'ihinduka ry'imiterere y'igikororesho ntizwi." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "Ihinduka rirasanzwe." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "Ubu igikoresho kiragenzuwe." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "Igikoresho ntikikigenzuwe." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "Igikoresho nticyashoboye gutungannwa ngo kibonezwe." + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"Iboneza rya IP ntiryabashije kubikwa(nta aderesi ihari, igihe " +"cyarangiye,...)." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "Iboneza rya IP ntirigifite agaciro." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "Amabanga yasabwe, ariko ntiyatanzwe." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "Servise ya PPP yananiwe gutangira mu gihe kemewe." + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "Sevise ya PPP yavuye kumurongo bitunguranye." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "Service ya PPP yavuyeho cyangwa yananiwe bitunguranye." + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "Service ya DHCP yananiwe gutangira mu gihe cyemewe." + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "Service ya DHCP yagaragaje ikosa ritunguranye." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "Service ya DHCP yavuyeho cyangwa yananiwe bitunguranye." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "Service y'umuyoboro uhuriweho yananiwe gutangira." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "Service y'umuyoboro uhuriweho yavuyeho cyangwa yananiwe bitunguranye." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "Service ya AutoIP yananiwe gutangira." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "Service ya AutoIP yagaragaje ikosa ritunguranye." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "Service ya AutoIP yavuyeho cyangwa yananiwe bitunguranye." + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "Guhamagara byananiranye kubera umurongo wari uri gukoreswa." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "Guhamagara byananiranye kubera nta jwi rihamagara ririmo." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "Guhamagara byananiranye kubera nta cyohereza gihari." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "Guhamagara byarengeje igihe." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "Guhamagara byananiranye." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "Ihitamo rya GSM APN yagaragajwe ryananiranye" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "Ntabwo uri gushakisha imiyoboro." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "Kwandikisha umuyoboro byahakanwe." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "Kwandikisha umuyoboro byarengeje igihe." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "Kwandikisha ukoresheje umuyoboro GSM wasabwe byananiranye." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "Igenzura rya PIN ryananiranye." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "Firmware ikenewe y'igikoresho ishobora kuba ibura." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "Igikoresho cyakuweho." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "NetworkManager yagiye gusinzira." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "Ukwihuza kw'igikoresho kwakuweho cyangwa cyabuze." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "Uwukoresha cyangwa umukiriya yasabwe kwitandukanya ku muyoboro." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "Carrier/link y'igikoresho yahinduwe." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "Ukwihuza kwigikoresho kwaraketswe." + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "Supplicant arahari noneho." + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "Modemu ntiyabashije kuboneka." + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "Ukwihuza kwa Bluetooth kwananiranye cyangwa kwarengeje igihe." + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "Ntikoreshejwe." + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Kuraho inshuti" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Gira inshuti" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Zimya" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Ongera utangire" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Vamo" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Amahitamo yanjye" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Tumira ku %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s yananiwe gutangira." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Gutangira..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "Igikorwa cyananiwe gutangira" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Reba inkomoko" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Hagarara" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Tangira igisha" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Erekana ibigize" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Kuraho" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Inkomoko itunguranye" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Inkomoko" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Inkomoko ya Activity Bundle" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Inkomoko ya Sugar Toolkit" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Reba inkomoko: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Reba inkomoko: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar mu idirishya" + +#~ msgid "Error in extreme pm argument, use on/off." +#~ msgstr "Ikosa muri extreme pm argument, use on/of." diff --git a/po/sd.po b/po/sd.po new file mode 100644 index 0000000..844f1ff --- /dev/null +++ b/po/sd.po @@ -0,0 +1,1775 @@ +# 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 , YEAR. +# 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 , YEAR. +# 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 , YEAR. +# 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 , YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/si.po b/po/si.po new file mode 100644 index 0000000..cb0180b --- /dev/null +++ b/po/si.po @@ -0,0 +1,1833 @@ +# translation of sugar.po to Sinhala +# Rashan Anushka , 2008. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +msgid "" +msgstr "" +"Project-Id-Version: sugar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-23 08:50+0200\n" +"Last-Translator: Danishka Navin \n" +"Language-Team: Sinhala \n" +"Language: si\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 "මා ගැන" + +#: ../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 "පහර: වර්ණය=%s පැහැය=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "පහර: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "පිරවුම: වර්ණය=%s පැහැය=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "පිරවුම: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "ඔබගේ පාට වෙනස් කිරීමට ක්ලික් කරන්න:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "මගේ පරිගණකය ගැන" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "නොපවතී" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "අනන්‍යතාව" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "අනුක්‍රමික අංකය:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "මෘදුකාංගය" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "ගොඩ නැඟුම:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "ස්ථීරාංග:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "රැහැන් රහිත ස්ථිරාංග:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "කතු හිමිකම හා වරපත" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 යනු ඔබ බලා සිටින මෙම චිත්‍රක පරිශීලක අතුරුමුහුණතයි. Suger GNU සාධාරණ " +"පොදු බලපත්‍රය මගින් ආවරණය වන නිදහස් මෘදුකාංගයක් වන අතර එහි සඳහන් ඇතැම් " +"කොන්දේසි වලට යටත්ව මෙය වෙනස් කිරීමට හා/හෝ පිටපත් බෙදාහැරීමට ඔබට හැකිය." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "තත්පර %s" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "සක්‍රියන ප්‍රමාදය" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "මුල්ල" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "අයින" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "යතුරුපුවරුව" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "යතුරුපුවරු ආකාරය" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "ආකෘතිය වෙනස් කිරීමට යතුර(රු)" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "~/.i18n වෙත ප්‍රවේශ විය නොහැක. සම්මත සැකසුම් සාදන්න." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "කේතය=%s සඳහා භාෂාව නිර්ණය කළ නොහැක." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "සමාවන්න මම '%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 "" +"ඔබ වඩා කැමති අනුපිළිවෙලට භාෂා එක් කරන්න. පරිවර්තනයක් නැතිනම්, ලැයිස්තුවේ ඊළඟ " +"එක භාවිතා වනු ඇත." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "මොඩම වින්‍යාසගත කිරීම" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"ජංගම (3G) ජාලයකට පුළුල් පරාස සම්බන්ධතාවයක් ඇති කිරීමට ඔබට පහත තොරතුරු " +"ලබාදීමට අවශ්‍ය වනු ඇත." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "පරිශීලක නාමය:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "මුරපදය:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "අංකය:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "ප්‍රවේශන ස්තාන නාමය (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "පුද්ගලික හදුනා ගැණිමේ අංකය (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "නිරූපිත රේඩියෝ විතර්කයේ දෝෂයකි on/off භාවිතා කරන්න." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "නිරූපිත විතර්කයේ දෝෂයකි 0/1 භාවිතා කරන්න." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "රැහැන් රහිත" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "බැටරි ආයු කාලය සුරැකීම සඳහා රැහැන් රහිත රේඩියෝව නිවා දමන්න" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "රේඩියෝව" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "ඔබට ජාලයට සම්බන්ධ වීමේ ගැටළු ඇතිනම් ජාල ඉතිහාසය ඉවතලන්න" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "ජාල ඉතිහාසය ඉවතලන්න" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "සහයෝගීතාව" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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 "ස්වයංක්‍රීය pm විස්තාරකයේ දෝෂයකි, සක්‍රීයයි/අක්‍රීයයි භාවිතා කරන්න." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "ආන්තික pm විස්තාරකයේ දෝෂයකි, සක්‍රීයයි/අක්‍රීයයි භාවිතා කරන්න." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "බල කළමණාකරණය" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "ස්වයංක්‍රීය බල කළමණාකරණය (බැටරි ආයු කාලය වැඩි කරයි)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"උපරිම බල කළමණාකරණය ( රැහැන් රහිත රේඩියෝව අක්‍රිය කරයි, බැටරි ආයු කාලය වැඩි " +"කරයි)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "මෘදුකාංග යාවත්කාල" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "මෘදුකාංග යාවත්කාල දෝෂ නිරාකරණය කර, ආරක්ෂක අනතුරු ඉවත් කර නව අංග සපයයි." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "%s පරීක්ෂා කරමින්..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "%s බාගත කරමින්..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "%s උඩුගත කරමින්..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "ඔබගේ මෘදුකාංගය යාවත්කාල වී ඇත" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +#, python-format, +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "ඔබට %s යාවත්කාලය ස්ථාපනය කල හැක" +msgstr[1] "ඔබට %s යාවත්කාල ස්ථාපනය කල හැක" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "යාවත්කාල සඳහා පරීක්ෂා කරමින්..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "යාවත්කාල ස්ථාපනය කරමින්..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +#, python-format, +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s යාවත්කාලය ස්ථාපනය කරන ලදි" +msgstr[1] "%s යාවත්කාල ස්ථාපනය කරන ලදි" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "තේරූ ඒවා ස්ථාපනය කරන්න" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "බාගත ප්‍රමාණය: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "%(current)s වෙළුමේ සිට %(new)s ට (ප්‍රමාණය: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "කිසිසේත් නැත" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "මගේ බැටරිය" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "ඉවත් කරන ලදී" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "ආරෝපණය වෙමින්" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d ඉතිරියි" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "ආරෝපිතයි" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP ලිපිනය: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "සම්බන්ධවෙමින්..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "සම්බන්ධ විය" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "රැහැන් රහිත සම්බන්ධතා නැත" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "නාලිකාව" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "රැහැන් සහිත ජාලය" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "වේගය" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "රැහැන් රහිත මොඩමය" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "කරුණාකර රැදී සිටින්න..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "සම්බන්ධ වෙන්න" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "විසන්ධිවී ඇත" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "අවලංගු කරන්න" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "සම්බන්ධතාවය නැවත උත්සහ කරන්න" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "දෝශය: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "යෝජනාව: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "%s සඳහා සම්බන්ධ විය" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "ඔබගේ PIN/PUK වින්‍යාසගත කිරීම පරීක්ෂා කරන්න." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "ඔබගේ ප්‍රවේශ අග්‍ර නාම (APN) වින්‍යාසගත කිරීම පරීක්ෂා කරන්න" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "ඔබගේ අංක වින්‍යාසගත කිරීම පරීක්ෂා කරන්න." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "ඔබගේ වින්‍යාසගත කිරීම පරීක්ෂා කරන්න." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "දැල් ජාලය" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "දැල් ජාලය %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "GSM සම්බන්ධතා නැත." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "පාලක පැනලයේ සම්බන්ධතාවයක් තනන්න." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "කතාව" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "තෝරාගත් පෙළ කියවන්න" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "පිළිවැයීම නවත්වන්න" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "තාරතාව" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "අනුපාතය" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "පිළිවැයීම විරාමය" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "මගේ ස්පීකර" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "නිෂ්ශබ්දතාව නවතන්න" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "නිශ්ශබ්ද කරන්න" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "ඇගිල්ල" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "පන්හිඳ" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "මගේ ස්පර්ශ පුවරුව" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "දැලැස" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "සමූහය" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "නිවස" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "ක්‍රියාකාරකම" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "තිරපිටපත" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "\"%s\" හි තිරපිටපත" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"ආරම්භයේදී විකට නාමය ඇසීමට \"අක්‍රිය කර ඇත\"; UNIX ගිණුම් දීර්ඝ නාමය නැවත " +"භාවිතා කිරීමට \"පද්ධතිය\"." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "යාවත්කාල කල පරිවර්තන අඩංගු විය හැකි අමතර නාමාවලි." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "උපස්ථ URL" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "ආකර්ෂා කල ක්‍රියාකාරකම් ID එකට එක් කරන්න" + +#: ../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 "" +"වැඩතලය පුරා භාවිතා වන XO අයිකනය සඳහා වර්ණය. වර්ණය ඉරි වර්ණයෙන් සහ පිරවුම් " +"වර්ණයෙන් තැනී ඇත, ආකෘතිය rgb වර්ණ ආකෘතිය වේ. උදාහරණ: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "මුළු ප්‍රමාදය" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "පෙරනිමි ෆොන්ට වර්ගය" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "පෙරනිමි ෆොන්ට ප්‍රමාණය" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "පෙරනිමි විකට නම" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "මුළු භාවිත කර රාමුව සක්‍රිය කිරීමේ ප්‍රමාදය." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "දාර භාවිත කර රාමුව සක්‍රිය කිරීමේ ප්‍රමාදය." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "පරිවර්ථන සඳහා සෙවීමට නාමාවලිය" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "දාර ප්‍රමාදය" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "ප්‍රියතම වින්‍යාසය" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "ප්‍රියතම නැවත ඇරඹුම් ආකාරය" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "වැඩතලය පුරා භාවිත වන ෆොන්ට නාමය." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "වැඩතලය පුරා භාවිත වන ෆොන්ට ප්‍රමාණය." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "GSM ජාල APN (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "GSM ජාල PIN (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "GSM ජාල PUK (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "GSM ජාල ප්‍රවේශන ස්ථාන නාමය සකසන්න (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "GSM ජාල අංකය (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "GSM ජාල මුරපදය (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "GSM ජාල මුරපදය සකසන්න (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "GSM ජාල පුද්ගලික හැඳිනුම් අංකය සකසන්න (DEPRECATED/UNUSED) " + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "GSM ජාල පරිශීලක නාමය (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "GSM ජාල පරිශීලක නාමය සකසන්න (DEPRECATED/UNUSED)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"සත්‍ය නම්, Jabber සේවාදායයේ අනෙකුත් පරිශීලකයන් සඳහා Suger අපව සෙවිමට හැකි " +"කරයි." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "TRUE නම්, Sugar \"පරිශීලක ඉවත් වීම\" විකල්පයක් පෙන්වනු ඇත." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "TRUE නම්, Sugar \"නැවත ආරම්භ කරන්න\" විකල්පයක් පෙන්වනු ඇත." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"TRUE නම්, Sugar නාලිකා 1,6 සහ 11 සඳහා පෙරනිමි Ad-hoc ජාල පෙන්වනු ඇත. Sugar " +"ආරම්භ කරන අවස්ථාවේ එක \"දන්නා\" ජාල නොදකීනම්, එය ස්වයංව Ad-hoc ජාලයකට සම්බන්ධ " +"වනු ඇත." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Jabber සේවාදායකය" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "යතුරුපුවරු පිරිසැලසුම්" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "යතුරුපුවරු වර්ගය" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "යතුරු පුවරු විකල්ප" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "ප්‍රියතම දැක්ම සඳහා වින්‍යාසය." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"යතුරු පුවරු ලැයිස්තු පිරිසැලසුම්. සෑම ප්‍රවේශයක්ම පිරිසැලසුම් (විචල) ආකාරයේ " +"විය යුතුය" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "යතුරු පුවරු විකල්ප ලැයිස්තුව." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "බලය ස්වයංක්‍රීය" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "බලය උපරිම" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "ගැජට්ටුවේ පළකරන්න" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "ශබ්ද උපාංගහ නිහඬ‍කිරීමට සැකසුම." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "පරිශීලක ඉවත් වීම පෙන්වන්න" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "නැවත ආරම්භ කිරීම පෙන්වන්න" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Sugar Ad-hoc ජාල පෙන්වන්න" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "ශබ්දය නිහඬය" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "භාවිතා කිරීමට යතුරු පුවරු වර්ගය" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "පද්ධතිය සඳහා වේලාකලාප සැකසුම්." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "Jabber සේවාදායකය භාවිතය සඳහා වන URLය." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "උපස්ථය සුරකිය යුතු ස්ථානයේ URLය." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "පරිශීලක වර්ණය" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "පරිශීලක නමය" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "වැඩතලය පුරා භාවිත වන පරිශීලක නම." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"පරිශීලකයින්ට ලැයිස්තු දසුන හරහා මෙම ක්‍රියාකාරකම් මැකීමට අවසර නොදෙනු ඇත." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "ශබ්ද මට්ටම" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "ශබ්ද උපාංගය සඳහා ශබ්ද මට්ටම." + +#: ../data/sugar.schemas.in.h:66 +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 "" +"sugar-control-panel: අවවාදයයි, එකම නම සහිත විකල්ප කිහිපයක් හමු විය: %s " +"මොඩියුලය: %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 පවතින විකල්පයක් නොවේ" + +#: ../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. +#. 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 "" +"භාවිතය: sugar-control-panel [ විකල්පය ] key [ තර්ක ... ] \n" +" sugar පරිසරය සඳහා පාලනය. \n" +" විකල්ප: \n" +" -h මෙම උදව් පණිවිඩය පෙන්වා පිටවන්න\n" +" -l සියළු විකල්ප ලැයිස්තුගත කරන්න\n" +" -h key key ගැන විස්තර පෙන්වන්න \n" +" -g key key හි පවතින අගය පෙන්වන්න \n" +" -s key key හි අගය සිටුචම් කරන්න \n" +" -c key key හි දැනට පවතින අගය මකන්න\n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "ඔබගේ වෙනස්කිරීම් බලපෑම සඳහා ෂුගර් යළි ඇරඹිය යුතුය.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "අවවාදයයි" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "වෙනස්කිරීම සඳහා යළි ඇරඹුමක් අවශ්‍යවේ" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "වෙනස් කිරීම් අවලංගු කරන්න" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "පසුව" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "දැන් යළි ආරම්භ කරන්න" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "කළා" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "හරි" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "%s වෙළුම" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "මකා දැමීම ස්ථීර කරන්න" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "මකා දැමීම ස්ථීරයි: ඔබට %s සදහටම මකා දැමීමට අවශ්‍යයද?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "තබාගන්න" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "මකන්න" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "අභිරුචිය ඉවත් කරන්න" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "අභිරුචියක් කරන්න" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "නිදහස් පෝර්මය" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "කවය" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "සර්පිලය" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "පෙට්ටිය" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "ත්‍රිකෝණය" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "ලියාපදිංචිය අසාර්ථකයි" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "ලියාපදිංචිය සාර්ථකයි" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "ඔබ දැන් ඔබගේ පාසල් සේවාදායකය සමඟ ලියාපදිංචි වී ඇත." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "ලියාපදිංචි කරන්න" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "නැවත ලියාපදිංචි වෙන්න" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "මෘදුකාංග යාවත්කාල කිරීම" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "ඔබගේ නව මෘදුකාංගය සමඟ අනුකූලතාව සඳහා ඔබගේ ක්‍රියාකාරකම් යාවත්කාල කරන්න" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "දැන් පරික්ෂා කරන්න" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "ලැයිස්තු දසුන" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "කැමති දසුන" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "යතුරු වර්ගය:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "සත්‍යාපන වර්ගය:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 පෞද්ගලික" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "රැහැන් රහිත ආරක්ෂණය:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "නැවත අරඹන්න" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "එකතු වෙන්න" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "%d Ad-hoc ජාලය" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "දැල් ජාලය %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "ප්‍රතික්ෂේප කරනවා" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s න් %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "%s සිට හුවමාරු කරන්න" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "අනුමත කරනවා" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "නිෂ්ප්‍රභ කරනවා" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "%s ට හුවමාරු කරන්න" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "ඉවත් කරන්න" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "විවෘත කරන්න" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "විවෘත කළ යුත්තේ" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "කප්පාදුව %s" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "වටපිටාව" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "නම:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "පාට වෙනස් කිරීමට ක්ලික් කරන්න:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "ආපසු" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "ඊළඟ" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "ශීර්ෂ පාඨ නොමැති" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "පූර්වදර්ශනයක් නැත" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "වර්ගය: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "නොදනී" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "දිනය: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "ප්‍රමාණය: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "දිනයක් නැත" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "සහභාගිවන්නන්:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "විස්තරය:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "හැඳුනුම් වදන්:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "ජ'නලය" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "සෙවිම" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "ඕනෑම වෙලාවක" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "අද" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "ඊයේ සිට" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "පසුගිය සතිය" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "පසුගිය මාසය" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "පසුගිය වසර" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "ඕනෑම අයෙක්" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "මාගේ මිතුරන්" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "මාගේ පන්තිය" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "ඕනෑ දෙයක්" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "වෙත පිටපත් කරන්න" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "අනුපිටපත" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "ප්‍රවේශය පිටපත් කිරීමේදී දෝෂයක්. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "දෝශය" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "ආරම්භ කරන්න" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "විකරණ කල දිනය අනුව සුබෙදන්න" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "තැනුම් දිනය අනුව සුබෙදන්න" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "ප්‍රමාණය අනුව සුබෙදන්න" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "දසුන සුබෙදන්න" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "ඔබගේ ජර්නලය හිස්ය" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "ගැළපෙන ප්‍රවේශ නැත" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "සෙවීම පවිත්‍ර කරන්න" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "%s ක්‍රියාකාරකමේ පෙර වෙළුම" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "ඔබට %s වෙළුමට වෙළුම පහත් කිරීමට අවශ්‍යද?" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "ජර්නලය පෙන්වන්න" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "වස්තුවක් තෝරන්න" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "චසාදමන්න" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "සමඟ නැවත අරඹන්න" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "සමඟ ආරම්භ කරන්න" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "ආරම්භක ප්‍රවේශය සඳහා ක්‍රියාකාරකමක් නොමැත" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "වෙත යවන්න" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "තොරතුරු දර්ශනය කරන්න" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "ගොනුවක් නැතිව ප්‍රවේශයක් යැවිය නොහැක." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "ගොනුවක් නැතිව ප්‍රවේශයක් පිටපත් කල නොහැක." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "පසුරු පුවරුව" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "දැනට මිතුරන් නොමැත" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "වලංගු සබඳතාවක් හමුනොවුණි" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "නැවත ඇරඹුම් ප්‍රවේශය සඳහා ක්‍රියාකාරකමක් නොමැත" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "ලිපි" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB ඉතිරියි" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "මෙවලම් තත්ව වෙනස් වීමට හේතුව නොදනී." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "තත්ව මාරුව සාමාන්‍යයි." + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "දැන් මෙවලම කළමණාකරණය කර ඇත." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "මෙවලම තවදුරටත් කළමණාකරණය නොවනු ඇත." + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "මෙවලම වින්‍යසගත කිරීම සඳහා නැවත ඇමතීමට නොහැකි විය." + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"IP වින්‍යාසගත කිරීම ආපසු කිරීමට නොහැකි විය (ලිපිනය නැත, කාලය ඉක්මවීම ආදිය)." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "IP වින්‍යාසගත කිරීම තචදුරටත් වලංගු නැත." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "රහස් අවශ්‍ය වුවත් සපයා නැත." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" +"802.1X supplicant ප්‍රවේශ අග්‍රයෙන් හෝ අවසර දීමේ සේවාදායකයෙන් විසන්ධි විය." + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "802.1X supplicant හි වින්‍යාසගත කිරීම අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "802.1X supplicant බලාපොරොත්තු නොවූ ලෙස ඉවත් විය හෝ අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "802.1X supplicant අවසර දීමට බොහෝ කාලයක් ගනු ලැබුනි." + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "PPP සේවාව අවසර දුන් කාලය ඇතුළත ආරම්භ කිරීම අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "PPP සේවාව බලාපොරොත්තු නොවූ විසන්ධි විය." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "PPP සේවාව බලාපොරොත්තු නොවූ ලෙස ඉවත් විය හෝ අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "DHCP සේවාව අවසර දුන් කාලය ඇතුළත ආරම්භ කිරීම අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "DHCP සේවාව බලාපොරොත්තු නොවූ ලෙස දෝෂයක් වාර්තා කරන ලදි." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "DHCP සේවාව බලාපොරොත්තු නොවූ ලෙස ඉවත් විය හෝ අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "හවුල් කල සම්බන්ධතා සේවාව ආරම්භ කිරීම අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "හවුල් කල සම්බන්ධතා සේවාව බලාපොරොත්තු නොවූ ලෙස ඉවත් විය හෝ අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "AutoIP සේවාව ආරම්භ කිරීම අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "AutoIP සේවාව බලාපොරොත්තු නොවූ ලෙස දෝෂයක් වාර්තා කරන ලදි." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "AutoIP සේවාව බලාපොරොත්තු නොවූ ලෙස ඉවත් විය හෝ අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "මාර්ගය කාර්ය බහුල වීම නිසා ඇමතීම අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "ඇමතීමේ නාදයක් නොමැති වීම නිසා ඇමතීම අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "වාහකයෙක් නොමැති වීම නිසා ඇමතීම අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "ඇමතීමේ කාලය අවසාන විය." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "ඇමතීම අසාර්ථකයි." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "මොඩමය ආරම්භ වීම අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "විශේෂණය කල GSM APN තේරීමට අසාර්ථක විය" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "ජාල සඳහා නොසොයමින්." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "ජාල ලියාපදිංචි කිරීම ප්‍රතික්ෂේප කරන ලදි." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "ජාල ලියාපදිංචියේ කාලය ඉක්ම විය." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "ඉල්ලීම කල GSM ජාලය සමඟ ලියාපදිංචි වීමට අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "PIN පරීක්ෂා කිරීම අසාර්ථක විය." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "මෙවමට අවශ්‍ය firmware නැතිවී තිබෙන්නට හැක." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "මෙවලම ඉවත් කරන ලදි." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "NetworkManager නිද්‍රාවට පත් විය." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "මෙවලමේ සක්‍රිය සම්බන්ධතාවය ඉවත් කරන ලද හෝ නොපෙනී යන ලදි." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "පරිශීලක හෝ සේවාදායකයෙක් විසන්ධි කිරීම ඉල්ලා සිටින ලදි." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "මෙවලමේ වාහකයා/සබැඳිය වෙනස් විය." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "භාවිත නොකළ." + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "මිතුරා ඉවත් කරන්න" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "මිතුරු වන්න" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "වසා දමන්න" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "යළි ආරම්භ කරන්න" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "පිවිසුමෙන් ඉවත්වන්න" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "මගේ සැකසුම්" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "%s ට අඬගහන්න" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s ආරම්භ කිරීමට අසාර්ථක විය." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "ආරම්භවේ..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "ක්‍රියාකාරකම ආරම්භ කිරීම අසාර්ථක විය" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "මූලය පෙන්වන්න" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "නවත්වන්න" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "නව ආරම්භ කරන්න" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "අන්තර්ගතය පෙන්වන්න" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "ඉවත් කරන්න" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "අවස්ථානික මූලය" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "මූලාශ්‍රය" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "මූල පොදි ක්‍රියාකාරකම" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Sugar මෙවලම් මූලය" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "මූලය පෙන්වන්න: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "මූලය පෙන්වන්න: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar කවුළුවක" diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..2592152 --- /dev/null +++ b/po/sk.po @@ -0,0 +1,1766 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-16 17:36+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: sk\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==1) ? 0 : (n>=2 && n<=4) ? 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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, 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:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Zrušiť" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Udržať" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Pokračovať" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Späť" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Bez mena" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Bez náhľadu" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Bez dátumu" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Spolupracovníci:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Popis:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Označenie:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Denník" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Hľadanie" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Kedykoľvek" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Dnes" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Od včera" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Minulý týždeň" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Minulý mesiac" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Minulý rok" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Ktokoľvek" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Moji kamaráti" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Moja trieda" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Čokoľvek" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Štart" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Tvoj denník je prázdny" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Neboli nájdené žiadne vyhovujúce záznamy" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Tvoj denník je plný" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "Prosím vymaž staré záznamy z denníka, aby sa uvoľnilo miesto pre nové." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Zobraziť denník" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Vybrať objekt" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Zavrieť" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/sl.po b/po/sl.po new file mode 100644 index 0000000..5cf2bd6 --- /dev/null +++ b/po/sl.po @@ -0,0 +1,1829 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:17+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || " +"n%100==4 ? 2 : 3);\n" +"X-Generator: Pootle 2.0.5\n" + +#: ../extensions/cpsection/aboutme/__init__.py:24 +msgid "About Me" +msgstr "O meni" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Vpisati morat ime." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "pisalo: barva=%s odtenek=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "pisalo: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "zapolni: barva=%s odtenek=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "zapolni: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Napačno določena sprememba barve." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Napačno določena barva." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Klikni za spremembo barve:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "O mojem računalniku" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Ni na voljo" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identiteta" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Serijska številka:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Program" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Različica:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Brezžična oprema:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Lastnik pravic" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 je grafični vmesnik, ki ga uporabljate. Je brezplačen, avtorske " +"pravice glede njegove uporabe pa ureja GNU General Public License. Zato ga " +"lahko spreminjate in/ali distribuirate, a pod nekaterimi pogoji, zapisanimi " +"v omenjeni licenci." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Licenčne pravice:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Datum in ura" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Napaka: časovno območje ne obstaja." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Časovno območje" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Okvir" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Vrednost mora biti številka." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "nikoli" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "takojšnji" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s sekund" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Zamik aktivacije" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Kot" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Rob" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Jezik" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Dostop do ~/.i18n ni mogoče. Ustvari standardne nastavitve." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Jezika za kodo=%s ni bilo mogoče določiti." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Oprosti, ne govorim '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Omrežje" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Neznana država." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Napaka pri določanju stanja radijske povezave (vključen/izključen)." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Napaka pri uporabi podatka 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Brezžično" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Izklopi brezžično radijsko povezavo za podaljšanje trajanja baterije" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radijska povezava" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "Zavrži zgodovino mreže, če imate težave pri povezavi z mrežo" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Zavrži zgodovino mreže" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Sodelovanje" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Strežnik predstavlja sobo v kateri se nahajate. Uporabniki na istem " +"strežniku se lahko vidijo, tudi če niso priključeni na isto omrežje." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Strežnik:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Energija" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Napaka pri samodejni rabi ukaza pm, uporabi izklop/vklop." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Napaka pri ekstremni vrednosti ukaza pm, uporabi izklop/vklop." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Nazdor porabe električne energije" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" +"Samodejni nadzor porabe električne energije (podalšuje življenjsko dobo " +"baterije)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Ekstremni nadzor porabe električne energije (ugasnjen radijski del, podaljša " +"življenjsko dobo baterije)" + +#: ../extensions/cpsection/updater/__init__.py:21 +#, fuzzy +msgid "Software update" +msgstr "Nadgradnja programa" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "Končano" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Moja baterija" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Odstranjeno" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Polnjenje" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Baterija je skoraj prazna" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "Ostaja %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Polno" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP naslov: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Prekini" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Povezujem..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Povezan" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kanal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Žično omrežje" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Hitrost" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Poveži" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Odklopljen" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Prekliči" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Omrežje Mesh" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Omrežje Mesh %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Moji zvočniki" + +# malo težko je UNMUTE prevest drugače +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Glasno" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Tiho" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Mesh" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Skupina" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Domov" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Aktivnost" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Slika zaslona" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "Nadomestni spletni naslov" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../data/sugar.schemas.in.h:6 +#, fuzzy +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 "" +"Barva ikone XO, ki jo uporabljate na celotnem namizju. Zaporedje je " +"sestavljeno iz barve črte in barve polnila v formatu RGB. Primer: " +"#AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Zamik pri kotu" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Zamik pri prikazu okvirja ob premiku v kot." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Zamik pri prikazu okvirja ob premiku na rob." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Zamik ob robu" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Izgled priljubljenih" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Način ponovitve priljubljenih" + +#: ../data/sugar.schemas.in.h:18 +#, fuzzy +msgid "Font face that is used throughout the desktop." +msgstr "Uporabnikovo ime, ki se uporablja po celotnem namizju." + +#: ../data/sugar.schemas.in.h:19 +#, fuzzy +msgid "Font size that is used throughout the desktop." +msgstr "Uporabnikovo ime, ki se uporablja po celotnem namizju." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Če je oznaka DA, bo Sugar omogočil vidnost drugim uporabnikom na strežniku " +"Jabber." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "Strežnik Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Izgled pogleda priljubljenih." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Samodejno upravljanje z elektriko" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Ekstremno upravljanje z elektriko" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Objavi v napravi" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Nastavitev utišanja zvočne naprave." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Zvok utišan" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Nastavitev časovnega pasu za sistem." + +#: ../data/sugar.schemas.in.h:58 +#, fuzzy +msgid "URL of the jabber server to use." +msgstr "Spletni naslov uporabljenega strežnika jabber." + +#: ../data/sugar.schemas.in.h:59 +#, fuzzy +msgid "URL where the backup is saved to." +msgstr "Spletni naslov arhiva." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Barva uporabnika" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Uporabnikovo ime" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Uporabnikovo ime, ki se uporablja po celotnem namizju." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Raven glasnosti" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Raven glasnosti za zvočno napravo." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"V načinu nadaljevanja s klikom na priljubljeno ikono v aktivnosti " +"nadaljujete pri zadnji shranjeni spremembi." + +#: ../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 "" +"nadzorna plošča programa sugar: OPOZORILO, najdena je več kot ena možnost z " +"enakim imenom: %s modul: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "nadzorna plošča programa sugar: ključ=%s ni veljavna možnost" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "nadzorna plošča programa sugar: %s" + +# TRANS: Translators, there's a empty line at the end of this string, +# which must appear in the translated string (msgstr) as well. +#. 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 "" +"Uporaba: nadzorna plošča programa sugar [ možnost ] tipka [ ukaz ... ] \n" +" Nadzor v okolju sugar. \n" +" Možnosti: \n" +" -h prikaži to sporočilo in končaj \n" +" -l prikaži vse možnosti, ki so na voljo \n" +" -h tipka prikaži informacije za to tipko \n" +" -g tipka pridobi trenutno vrednost tipke \n" +" -s tipka nastavi trenutno vrednost tipke \n" +" -c tipka izbriši trenurno vrednost tipke \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Za uveljavitev sprememb je potreben ponovni zagon programa Sugar.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Opozorilo" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Sprembe zahtevajo ponovni zagon" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Prekliči spremembe" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Kasneje" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Ponovni zagon" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Končano" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "V redu" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Potrdi brisanje" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Potrdi brisanje: Želiš dokočno izbrisati %s?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Obdrži" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Izbriši" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Odstrani priljubljeno" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Nastavi priljubljeno" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Prostoročno" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Obroč" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spirala" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Okvir" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Trikotnik" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Registracija ni uspela" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Uspešna registracija" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Vpisan si v šolski strežnik." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Registracija" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Nadgradnja programa" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Nadgradite aktivnosti, da zagotovite ustreznost z novo programsko opremo" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Preveri zdaj" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Seznam" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Priljubljene" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Tip ključa:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Tip prepoznave:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA in WPA2 Osebni ključ" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Varovanje brezžičnega omrežja:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Nadaljuj" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Pridruži se" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Omrežje Mesh %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Povezava s strežnikom ni mogoča." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Strežnik ne more izpolniti zahteve." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Zavrni" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s od %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Prenesi z %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Sprejmi" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Prenesi na %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Odstrani" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Odpri" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Odpri z" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s strižem" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Soseščina" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Ime:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Klikni za spremembo barve:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Nazaj" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Naslednji" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Neimenovan" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Predogled ni na voljo" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Brez datuma" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Udeleženci:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Opis:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Oznake:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Beležka" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Išči" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Kadarkoli" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Danes" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Od včeraj" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "V zadnjem tednu" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "V zadnjem mesecu" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "V zadnjem letu" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Kdorkoli" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Moji prijatelji" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Moj razred" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Karkoli" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Zaženi" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Tvoja beležka je prazna" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +#, fuzzy +msgid "No matching entries" +msgstr "Ne najdem vsebine za" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Počisti iskanje" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Tvoja beležka je polna" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "Izbriši starejše vpise v beležko, da narediš prostor za nove." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Prikaži beležko" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Izberi predmet" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Zapri" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Nadaljuj z" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Začni z" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Ni aktivnosti za začetek" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Pošlji" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Poglej podrobnosti" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Prisoten ni noben prijatelj" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Na voljo ni nobena veljavna povezava" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Ni aktivnosti za nadaljevanje" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +#, fuzzy +msgid "Documents" +msgstr "Dokument" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB prosto" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Odstrani prijatelja" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Dodaj prijatelja" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Zaustavitev" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Ponovni zagon" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Odjava" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Moje nastavitve" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Povabi na %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Zaganjam..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Poglej izvor" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Ustavi" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Prikaži vsebino" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Odstrani" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Primer izvora" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Izvor" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Izvor kompleta aktivnosti" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Poglej vir: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Poglej vir: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/sq.po b/po/sq.po new file mode 100644 index 0000000..837eb0f --- /dev/null +++ b/po/sq.po @@ -0,0 +1,1782 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:18+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: sq\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 "Rreth Meje" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Vetem emri duhet shkruar." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "goditje: color=%s hue=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "goditje: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "mbushje: color=%s hue=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "mbushje: %s" + +#: ../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 "Gabim në ngjyrat e specifikuara." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Kliko për ta ndrryshuar ngjyrën:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Rreth Kompjuterit tim" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Nuk gjindet" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identiteti" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Numri Serik:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Softueri" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Ndërto:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Liqencë me Leje Kopjimi" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 është ndërlidhja grafikore në të cilën ju jeni duke shikuar. Sugar " +"është program falas, i mbuluar nga GNU General Public License, dhe ju jeni i " +"mirëseardhur të ndryshibu atë dhe/ose shpërndani kopje të tij duke " +"përfillur kushtet e përshkruara në të." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Liqencë e plotë:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Data & Koha" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Gabim zona e kohës nuk ekziston." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Zona e kohës" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Fërmi" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Shifra duhet të jetë integer." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "kurrë" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "i menjëhershëm" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s sekonda" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Koha e aktivizimit" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Qoshe" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Skaj" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Tastiera" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Modeli i tastierës" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Gjuhë" + +#: ../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 "Më vjen keq unë nuk flas '%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 "" +"Shtoni gjuhët sipas renditjes që ju preferoni. Nëse një përkthim nuk është i " +"mundur, i ardhshmi në listë do të përdoret." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Rrjet" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Shtet i panjohur." + +#: ../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:61 +msgid "Wireless" +msgstr "Pa tela" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Fikeni radion pa tela për të ruajtur baterinë" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Radio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "Hidhni historinë e rrjetit nëse keni problem me kyçjen në rrjet" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Hidhni historinë e rrjetit" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Bashkëpunim" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Serveri është si dhoma në të cilën ju gjendeni tani; njerëzit në serverin e " +"njëjtë do të kenë mundësi ta shohin njeri tjetrin, edhe nëse nuk janë ne te " +"njëjtin rrjet." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Server:" + +#: ../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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Menagjimi i energjisë" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +#, fuzzy +msgid "Software update" +msgstr "Përditsim Softueri" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Duke kontrolluar %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Duke shkarkuar %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Duke përditësuar %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Ju mund të instaloni %s përditësim" +msgstr[1] "Ju mund të instaloni %s përditësime" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Duke kontrolluar për përditësime..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Duke instaluar përditësimet..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s përditësim janë instaluar" +msgstr[1] "%s përditësime janë instaluar" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Instaloni të selektuarat" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Madhësia e shkarkimit: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Asnjë" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Baterija Ime" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "E fshirë" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Duke u mbushur" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Shumë pak energji ka mbetur" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d kanë mbetur" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "I mbushur" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP addresa: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Shkëputu" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Duke u lidhur..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "I lidhur" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kanali" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Rrjet i Quditshëm" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Shpejtësija" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Lidhu" + +#: ../extensions/deviceicon/network.py:276 +#, fuzzy +msgid "Disconnected" +msgstr "Shkëputu" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Anulo" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +#, python-format, +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Spikerët e mi" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Lësho zërin" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Hiqe zërin" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Grupi" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Shtëpija" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Aktiviteti" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Sekuencë ekrani" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "Rikthe URL-në" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Modeli i tastierës" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Opsionet e tastierës" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Ngjyra e përdoruesit" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Emri i përdoruesit" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Niveli i Volumit" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Niveli i volumit për pajisjen." + +#: ../data/sugar.schemas.in.h:66 +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 "Për të aplikuar ndryshimet e juaja ju duhet ta ri-startoni Sugarin.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Paralajmërim" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Ndrryshimet kanë nevojë për rinisje" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Anulo ndrryshimet" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Më vonë" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Rinis tani" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "E kryer" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Në rregull" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Versioni %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Konfirmo fshirjen" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Konfirmo fshirjen: A doni që përgjithmonë ta fshini %s?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Mbaje" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Fshije" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Fshije favoritin" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Bëje favorit" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Formë e lirë" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Unazë" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spirale" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Kuti" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Trekëndësh" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Regjistrimi Dsëhtoi" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Regjistrimi u krye me Sukses" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Ju jeni regjistruar në serverin e shkollës suaj." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Regjistrohu" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Përditsim Softueri" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Shiqo tani" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Pamje në listë" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Shfaq favoritët" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Sigurija e rrjetit pa tela:" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Vazhdo" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Bashkohu" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Mos prano" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s prej %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Transfer nga %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Prano" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Pusho" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Transfer tek %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Fshije" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Hape" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Hape me" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Lagjja" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Emri:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Kliko për ta ndrruar ngjyrën:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Prapa" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Përpara" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "E paemërtuar" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Pa provë" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Data: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Madhësia: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Pa datë" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Përshkrimi:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Etiketat:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Ditar" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Kërko" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Gjithnjë" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Sot" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Që dje" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Java e kaluar" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Muaji i kaluar" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Viti i kaluar" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Gjithkush" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Shokët e mi" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Klasa ime" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Gjithqka" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Fillo" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Ditari juaj është i thatë" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Pastro kërkimin" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Ditari yt është mbushur" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "" +"Ju lutem fshini disa gjëra nga Ditari juaj për të lëshuar vend për të reja." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Shfaq ditarin" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Zgjidh një objekt" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Mbyll" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Vazhdo me" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Fillo me" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Qo në" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Shiko detalet" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB e lirë" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Fshije mikun" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Bëje mik" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Ndale" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Rinis" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Dil" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Fto në %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Duke filluar..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Shfaq Burimin" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Ndalo" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Shfaq përmbajtjen" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Fshije" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Burimi" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Shiko burimin: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Shiko burimin: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..d03cf33 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,1837 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-22 21:21+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: sv\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 "Om mig" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Du måste ange ett namn." + +# Varför ska detta översättas? Är det inte direkta kommandon till grafikuppritaren? +#: ../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 "Fel i de specificerade färgmodifikatorerna." + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Fel i angivna färger." + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Klicka för att ändra din färg:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Om min dator" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Finns inte tillgänglig" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Identitet" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Serienummer:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Programvara" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Byggnummer:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sockerversion:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Fast mjukvara:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Trådlös fast mjukvara:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Copyright och Licens" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"Socker är det grafiska användargränssnittet som du använder just nu. Socker " +"är fri programvara och licenserad under GNU GPL vilket innebär att du fritt " +"får ändra programmet och/eller sprida vidare kopior av programmet." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Detaljerad licens:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Datum och tid" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Fel: Tidszonen finns inte." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Tidszon" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Ram" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Talet måste vara ett heltal." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "aldrig" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "direkt" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "efter %s sekunder" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Tid tills aktivering" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Hörn" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Kant" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Tangentbord" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Tangentbordstyp" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "Tangent för att växla mellan tangentbordstyper" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Tangentbordstyp" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Språk" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Kunde inte komma åt ~/.i18n. Skapar standardinställningar." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Kunde inte avgöra vilket språk det är som har koden %s." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Tyvärr så pratar jag inte '%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 "" +"Lägg till språk i den ordningen du förstår dem. Finns det inte en " +"översättning i det översta språket kommer texten visas i den näst översta " +"osv." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Modemkonfiguration" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "Användarnamn:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Lösenord:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Nummer:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Nätverk" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Status är okänd." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Fel i angiven trådlös nätverksinställning. Använd på eller av." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Fel i angivet argument. Använd 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Trådlöst nätverk" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Stäng av det trådlösa nätverket för att få batteriet att räcka längre" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Trådlöst nätverk" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"Ta bort nätverkshistoriken om du har problem med att ansluta till ett " +"nätverk" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Ta bort nätverkshistorik" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Samarbete" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Servern motsvarar det rum som du är i; de som är på samma server kan se " +"varandra även när de inte är på samma nätverk." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Server:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Ström" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Fel i angiven strömbesparingsinställning. Använd på eller av." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "Fel i angiven extrem strömbesparingsinställning. Använd på eller av." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Strömhantering" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Automatisk strömhantering (förlänger tiden som batteriet varar)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Extrem strömsparning (stänger av det trådlösa nätverket, allt för att öka " +"tiden innan batteriet laddas ur)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Mjukvaruuppdatering" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Mjukvaruuppdateringar rättar till fel, tar bort säkerhetsrisker och lägger " +"till nya funktioner." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Kontrollerar %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Laddar ned %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Uppdaterar %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Den senaste versionen av mjukvaran är redan installerad" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Det finns %s tillgänglig uppdatering" +msgstr[1] "Det finns %s tillgängliga uppdateringar" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Letar efter uppdateringar..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Installerar uppdateringar..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s uppdatering installerades" +msgstr[1] "%s uppdateringar installerades" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Installera de valda objekten" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Nedladdningsstorlek: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Frän version %(current)s till %(new)s (Storlek: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Inget" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f kb" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Mitt batteri" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Borttaget" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Laddar" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Batteriet är nästan slut" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d återstår" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Fulladdad" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP-adress: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Avbryt anslutning" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Kopplar upp..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Ansluten" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kanal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Trådbundet nätverk" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Hastighet" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Trådlöst modem" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Vänligen vänta..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Anslut" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Inte ansluten" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Avbryt" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Fel: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +# only temporarily +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Meshnätverk" + +# only temporarily +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Meshnätverk %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Mina högtalare" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Slå på ljud" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Stäng av ljud" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Mesh" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Grupp" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Hem" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Aktivitet" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Skärmbild" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "\"%s\"-Skärmbild" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"\"avaktivera\" för att fråga efter alias under uppstarten; \"system\" för att " +"återanvända UNIX långa kontonamn." + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "URL för säkerhetskopiering" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +# Error in original string! Never heard of "rbg colors". +#: ../data/sugar.schemas.in.h:6 +#, fuzzy +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 "" +"Den färg som används för XO-ikonen överallt på skrivbordet. Det skall vara " +"en sträng som består av streckfärg och fyllnadsfärg båda formaterade som " +"rgb-färger. Exempel: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Hörnfördröjning" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Standardteckensnitt" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Standardstorlek på text" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Standardalias" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Fördröjning innan aktivering av ramen med hjälp av hörnen." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Fördröjning innan aktivering av ramen med hjälp av kanterna." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Kantfördröjning" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Utseende på favoriter" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Fortsättningsläge för favoriter" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Teckensnitt som används över hela skrivbordet." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Teckenstorlek som används över hela skrivbordet." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"Om SANT, så gör Sugar så att vi kan sökas fram av andra användare av jabber-" +"servern." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Om SANT, så kommer Sugar att visa ett utloggningsalternativ." + +#: ../data/sugar.schemas.in.h:34 +#, fuzzy +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Om SANT, så kommer Sugar att visa ett utloggningsalternativ." + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "Jabber-server" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Tangentbordstyp" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Tangentbordstyp" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Tangentbordsalternativ" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Hur favoritvyn ser ut." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"Lista över tangentbordslayouter. Varje post bör vara i formen " +"layout(variant)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Lista över Tangentbordsval." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Automatisk ström" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Extrem ström" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Publicera till Gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Inställningar för att stänga av ljudenheten." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Visa utloggning" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Visa Starta om" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Ljud avstängt" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Tangentbordstyp som kommer att användas" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Systemets tidszonsinställning." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL för den jabber-server som skall användas." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL för den plats där säkerhetskopieringar skall lagras." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Användarfärg" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Användarnamn" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Det användarnamn som används överallt på skrivbordet." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Volymnivå" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Ljudenhetens volymnivå." + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Om fortsättningsläge är aktiverat så kommer ett klick på en favoritikon " +"innebära att den senaste posten för den aktiviteten kommer att återupptas." + +#: ../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: VARNING, Hittade mer än ett alternativ med samma namn: " +"%s modul: %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 är inte ett giltigt val" + +#: ../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. +#. 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 "" +"Användning: sugar-control-panel [ val ] nyckel [ parametrar ... ] \n" +" Ställ in Sockermiljön. \n" +" Val: \n" +" -h visar hjälpmeddelande och avslutar. \n" +" -l listar upp alla möjliga val \n" +" -h nyckel Visar information om nyckeln \n" +" -g nyckel Hämtar nuvarande värde på nyckel \n" +" -s nyckel Sätter nuvarande värde på nyckel \n" +" -c nyckel Rensar nuvarande värde på nyckel \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "För att förändringarna ska träda i kraft behöver du starta om Socker.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Varning" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Ändringarna kräver omstart" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Ångra ändringar" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Senare" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Starta om nu" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Klar" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Ok" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Version %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Bekräfta borttagning" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Bekräfta borttagning: Vill du verkligen ta bort %s för alltid?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Spara" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Ta bort" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Ta bort från favoriter" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Lägg till till favoriter" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Frihand" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Ring" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Spiral" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Låda" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Triangel" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Registreringen misslyckades" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Registreringen lyckades" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Du är nu registread hos din skolserver." + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Registrera" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Mjukvaruuppdatering" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" +"Uppdatera dina aktiviteter så att du är säker på att de fungerar ihop med " +"din nya mjukvara" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Kontrollera nu" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Listvy" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr " + 2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Favoritvy" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr " + 1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Huvudtyp:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Verifieringstyp:" + +# Uncertain whether Personal here refers to both protocols or WPA2 only. +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 Personal" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Trådlös säkerhet:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Återuppta" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Gå med i" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +# only temporarily +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Meshnätverk %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Kunde inte komma åter servern." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Servern misslyckades med att fullfölja förfrågan." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Avstå" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +# This really needs a TRANS! +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s av %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Överföring från %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Godta" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Avvisa" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Överföring till %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Ta bort" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Öppna" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Öppna med" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s urklipp" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Grannar" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Namn:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Klicka för att ändra färg:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Tillbaka" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Nästa" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Ingen titel" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Ingen förhandsvisning" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Typ: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Okänd" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Datum: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Storlek: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Inget datum" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Medverkande:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Beskrivning:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Nyckelord:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Dagbok" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Sök" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "När som helst" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Idag" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Sedan igår" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Förra veckan" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Senaste månaden" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Senaste året" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Vem som helst" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Mina vänner" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Mina klasskompisar" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Vad som helst" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Starta" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Din dagbok är tom" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Kunde inte hitta matchande data" + +# Uncertain if this is used to clear the search criteria or the search results. A TRANS would be nice. +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Rensa sökning" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Din dagbok är full" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "Ta bort gamla dagboksinlägg för att få plats med nya." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Visa Dagbok" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Välj ett objekt" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Stäng" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Återuppta med" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Börja med" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "Ingen aktivitet att börja med" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Skicka till" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Se detaljer" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "Inga kompisar närvarande" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Ingen giltig anslutning hittad" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "Ingen aktivitet att fortsätta med" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +#, fuzzy +msgid "Documents" +msgstr "Dokument" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB ledigt" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Ta bort kompis" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Bli kompis med" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Stäng av" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Starta om" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Logga ut" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Mina inställningar" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Bjud in till %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Startar..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Se källa" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Avsluta" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Öppna ny" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Visa innehåll" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Ta bort" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Instanskälla" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Källa" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Källa för aktivitetspaket" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Se källa: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Se källa: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/sw.po b/po/sw.po new file mode 100644 index 0000000..1621cc8 --- /dev/null +++ b/po/sw.po @@ -0,0 +1,1786 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 07:39+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: sw\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 "Kunihusu" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Lazima uingize jina lako" + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "kiharusi: rangi =%s hue =%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "kiharusi: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "kujaza: rangi=%s hue=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "kujaza: %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "kosa katika rangi maalum imebadilishwa" + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Hitilafu kwenye rangi zilizoelezwa" + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Bofya kwa kubadilisha rangi:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Kuhusu Kompyuta yangu or kuhusu tarakilishi yangu" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Haipo" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Utambulisho" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Serial namba" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Software" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Jenga:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sukari:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Firmware" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Wireless Firmware" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Haki miliki na leseni" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 ni graphical user interface kwamba wewe ni kuangalia. Sugar ni " +"software ya bure, inafunikwa na GNU Leseni la jumla umma , na mwakaribishwa " +"kwa mabadiliko hayo na / au kwa kusambaza nakala yake katika hali fulani " +"inavyoelezwa humo." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Leseni kamili:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Tarehe & Saa" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "kosa wakati eneo haipo" + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "wakatiEneo" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Fremu" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Thamani lazima integer" + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "mwiko" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "papo" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s sekunde" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Activation wachelewa" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Kona" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Pembeni" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Kinanda" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "mfano wa kinanda" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "funguo za kubadilisha kuweka" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "kinanda kuweka" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Lugha" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "Haikuweza kufikia ~/.i18n. Tengeneza standard setting" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Lugha kwa code =%s hakuweza kuamua." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Samahani si wezi kuongea '%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 "" +"Ongeza lugha kwa namna unapendelea. Kama tafsiri hazipatikani, Yanafuata " +"katika orodha zitatumika" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Upangiaji wa Modem" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Unahitaji kutoa taarifa zifuatazo kwa kuanzisha bendi pana uhusiano na " +"mtandao wa simu za mkononi (3G)" + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "jina la mtumiaji" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "neno ili upite" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "idadi" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "jina ya kupata uhakika (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Idadi ya Identity ya binafsi" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Mtandao" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Hali haijulikani" + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "kosa katika maalum hoja ya redio yatumia on / off." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "kosa katika maalum hoja ya tumiya 0 / 1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Isiyonawiya" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Zima redio isiyotumiawiya kunusuru maisha ya betri" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Redio" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "kuondokana na historia ya mtandao kama una shida ya kuunganisha mtandao" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Kuondokana na historia ya mtandao" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "ushirikiano" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Server ni sawa na kile chumba uko ndani, watu watumiya ya server moja " +"watakuwa na uwezo wa kuona kila mmoja, hata kama hawako kwa mtandao moja." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Server:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "moto" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "kosa katika pm automatic hoja , tumiya on / off" + +#: ../extensions/cpsection/power/model.py:120 +#, fuzzy +msgid "Error in extreme pm argument, use on/off." +msgstr "kosa katika pm automatic hoja , tumiya on / off" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +# unaweza kusema 'kujichanora' kwa maana ya 'up to date' +#: ../extensions/cpsection/updater/__init__.py:21 +#, fuzzy +msgid "Software update" +msgstr "Ifanye software iwe ya kisasa" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Usasishaji %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Bila" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Betri yangu" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "Ondoa" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Inachaji" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Imebakiza nguvu (umeme) kidogo" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d zimebaki" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Ina umeme" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Anwani ya IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Tenganisha" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Inaunganisha..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Imeunganishwa" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Mkondo" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Kasi" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Tafadhari subiri..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Unganisha" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Imetenganishwa" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Ghahiri" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Kosa: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Spika zangyu" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Rudisha sauti" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Kata sauti" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Kundi" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "mwanzo/kaya" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Kazi" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Fonti ya chaguo-msingi" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Saizi fonti ya chaguo-msingi" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +#, fuzzy +msgid "Keyboard layouts" +msgstr "kinanda kuweka" + +#: ../data/sugar.schemas.in.h:38 +#, fuzzy +msgid "Keyboard model" +msgstr "mfano wa kinanda" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Rangi la mtumiaji" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Jina la mtumiaji" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 +#, fuzzy +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Ili kuweka mabadiliko yako inabidi kuanzisha upya sukari.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Tahadhari" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Mabadiliko yanahitaji kuanzisha upya" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Ghairisha mabadiliko" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Baadae" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Anzisha sasa" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Gotoka" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Sawa" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Toleo %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Thibitisha kufuta" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Thibitisha kufuta: Unataka ifutwe moja kwa moja %s?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Hifadhi" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Futa" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Muundo huria" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Kisanduku" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Pembetatu" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Kujiandikisha" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +# unaweza kusema 'kujichanora' kwa maana ya 'up to date' +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Ifanye software iwe ya kisasa" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "Zifanye kazi zako kuwa za kisasa ilikusudi ziendane na software mpya" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Tafuta sasa" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Ona orodha" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Zinazoonwa sana" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Aina ya namba ya siri:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Endelea" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Ingia/unganisha" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Haiwezi kuunganisha kwenye seva." + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Seva haiwezi kukamilisha ombi." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Kataa" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Kubali" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Ondoa" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Fungua" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Fungua kwa" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s pogoa" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Jina:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Bofya kubadilisha rangi:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Rejesha" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Nyingine" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Isiyojina" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Haijulikani" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Tarehe: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Saizi : %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Maelezo:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Shajara" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Tafuta" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Leo" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Marafiki yangu" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "Mara mbili" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Kosa" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Kuanza" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Kufunga" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Ondoa rafiki" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Kutana na rafiki" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Zima" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Kuanziliya" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Karibisha kwa %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Kuacha" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Ondoa" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Chanzo" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/ta.po b/po/ta.po new file mode 100644 index 0000000..8d5b5ab --- /dev/null +++ b/po/ta.po @@ -0,0 +1,1846 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-03-28 17:03+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: ta\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 "என்னைப் பற்றி" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "நீங்கள் பெயரை பதிவு செய்யுங்கள்." + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +#, python-format, fuzzy +#, python-format, , +msgid "stroke: color=%s hue=%s" +msgstr "வீச்சு: நிறம்=%s சாயல்=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +#, python-format, fuzzy +#, python-format, , +msgid "stroke: %s" +msgstr "வீச்சு: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "நிரப்பு:........நிறம்=%s hue=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "நிரப்பு:.....%s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "நிறத்தை மாற்ற சொடுக்கு்" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "என்னுடைய கணினியைப் பற்றி" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "கிடைக்கக்கூடிய வாய்ப்பில்லை." + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "அடையாளம்" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "தொடர் இலக்கம்" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "மென்பொருள்" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "கட்டியெழுப்பு" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "சுகர்" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "கூட்டுப்பொருள்" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "இணைப்பில்லாத கூட்டுப்பொருள்" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "பிரதிசெய்து உறுதிப்படுத்து" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"சுகர் என்பது பாவனையாளருக்கு பார்த்து தலையீடு செய்வ தற்கு சிறப்பாக " +"அமைக்கப்பட்டுள்ளது.சுகர் இலவச மென்பொருளானதோடு,இது GNU பொது மக்கள் " +"அனுமதியின்கீழ் கையாளப்படுகின்றதை மாற்றுவதற்கோ பிரதிகளை விநியோகிப்பதற்கோ " +"குறித்த சில நிபந்தனைகளின்கீழ் இதனை மாற்றவோ இதன் பிரதிக ளை விநியோகிக்கவோ " +"முடியும்." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s செக்கன்கள்-" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "செயற்படுதல் தாமதம்" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "மூலை" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "விளிம்பு" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "விசைத்தட்டு" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "விசைத்தட்டு மாதிரி" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "தளக்கோலங்களை மாற்றுவதற்கான விசை" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "அடையவில்லை~/.i18n. தரமானவற்றை உருவாக்கு" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "மொழி பரிபாஷை=%s முடிவுசெய்யவில்லை" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +#, python-format, +msgid "Sorry I do not speak '%s'." +msgstr "மன்னிக்கவும் நான் பேசவில்லை '%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 "" +"உங்களது விருப்பத்திற்கு ஏற்றவாறு மொழிகளைச் சேர். ஏதாவது மொழிமாற்றம் " +"கிடைக்காவிடில் அடுத்த பட்டியல் பாவிக்கப்படும்." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "மோடம் அமைப்புகள்" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"நகரும் அகலகற்றை இணைப்பை 3ஜி கைபேசி வலைதளத்துடன் அமைக்க மேற்க்கண்ட தகவல்களைக் " +"கொடுத்தாக வேண்டும்." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "பயனர் பெயர்:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "கடவுச்சொல்:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "எண்:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "அனுகு புள்ளியின் பெயர் (APN);" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "சுயவிவர அடையாள எண் (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "குறித்த வானொலி விவாதம் தவறு.உபயோகியுங்கள்on/off." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "குறித்த வானொலி விவாதம் தவறு..உபயோகியுங்கள்0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "இணைப்பில்லாத" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "இணைப்பில்லாத வானொலியை நிறுத்தி மின்கலத்தை சேமி" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "வானொலி" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"வ லையமைப்பு இணைக்கும்போது பிரச்சினைகள் இருப்பின் வலையமைப்பை துண்டித்து " +"மீண்டும் வலையமைப்பை இணைக்க." + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "வலையமைப்பை துண்டிக்கவும்" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "உதவி" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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 "தன்னியக்க pmவிவாதத்தில் தவறு. உபயோகிon/off." + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "கடுமையான pm விவாதம் தவறு . உபயோகி on/off." + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "வலு முகாமைத்துவம்" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "தன்னியக்க வலு முகாமைத்துவம் (மின் கலத்தின் வலுவைக் கூட்டுதல்)." + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"கடுமையான வலு முகாமைத்துவம் (கம்பித் தொடுகையற்ற கதிருக்கு மின்கலத்தின் மூலம் " +"ஆயுளை கொடுத்தல்)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "மென்பொருளைப் புதுப்பித்தல்" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"மென்பொருள் புதுபித்தலின் பிழைகளை திருத்து, பாதுகாப்பு தடையங்களை நீக்கவும் " +"மற்றும் புதிய பண்புகளை கொடுக்கவும்" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "சோதிக்கிறது %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "பதிவிறக்கப்படுகிறது %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "புதிப்பிக்கப்படுகிறது %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "உங்களுடைய மென்பொருள் புத்தம் புதியது" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "நீங்கள் மேம்பாட்டை %s நிறுவலாம்" +msgstr[1] "நீங்கள் மேம்பாடுகளை %s நிறுவலாம்" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "மேம்பாடுகளுக்கு சோதிக்கிறது..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "மேம்பாடுகள் நிறுவப்படுகிறது..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s மேம்பாடு நிறுவப்பட்டது" +msgstr[1] "%s மேம்பாடுகள் நிறுவப்பட்டன" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "தெறிவு செய்தவைகளை நிறுவு" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "பதிவிறக்கிய அளவு: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "வெளியீட்டு எண் %(current)s யிலிருந்து %(new)s க்கு (அளவு: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "ஒன்றுமில்லை" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "எனது மின்கலம்" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "அகற்று" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "மின்னேற்றல்" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +#, python-format, +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d எஞ்சியுள்ளது" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "மின்னேற்றம்" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP விலாசம்%s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "இணைப்பை துண்டி" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "இணைத்தல்" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "இணைக்கப்பட்டுள்ளது" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "ஒரு கம்பில்லா இணைப்பு கூட இல்லை" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "தடம்" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "கம்பி வலையமைப்பு" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "வேகம்" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "கம்பில்லா மோடம்" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "தயவு செய்து காத்திருக்கவும்..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "இணை" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "இணைப்பு துண்டிக்கப்பட்டது" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "இரத்துசெய்" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "மறுமுறை இணைப்பை முயற்சிக்கவும்" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "தவறு: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "ஆலோசனை: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "%s க்கு இணைக்கப்பட்டுள்ளது" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +#, python-format, +msgid "%d KB" +msgstr "%d கேபி" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "உங்களுடைய PIN/PUK அமைப்புகளை சரிபார்க்கவும்." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "அனுகு புள்ளியின் (APN) பெயர் அமைப்புகளை சரிபார்க்கவும்." + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "எண் அமைப்புகளை சரிபார்க்கவும்." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "உங்களுடைய அமைப்புகளை சரிபார்க்கவும்." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "மெஷ் பிணையம்" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "மெஷ் பிணையம் %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "GSM இணைப்புகள் ஏதும் இல்லை." + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "கட்டுப்பாடு பட்டையில் ஒரு இணைப்பை உருவாக்கவும்." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "பேச்சு" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "தெரிவு செய்ததை சொல்" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "பின்னியக்கியை நிறுத்து" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "சுருதி" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "விகிதம்" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "பின்னியக்கியை இடைநிறுத்து" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "எனது ஒலி பெருக்கிகள்" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "ஒலியை ஆரம்பி" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "ஒலியை நிறுத்து" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "விரல்" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "தட்டி" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "எண் தொடுப்பட்டை" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "மெஷ்" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "குழு" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "வீடு" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "செயற்பாடு" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "திரை வடிவம்" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "\"%s\" யின் திரையின் படம்" + +#: ../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 "Additional directories which can contain updated translations." +msgstr "மேம்பட்ட மொழியாக்கங்களை அதிகமான அடைவுகள் வைத்திருக்க முடியும்." + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "URL ஊடாக மேலே செல்" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "ID களின் தடுக்கப்பட்ட செயற்பாடுகளுக்கான கட்டு" + +#: ../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 "" +"நிறந்தீட்டிய XO வடிவத்தை திரைக்குப் பயன்பரடுத்தலாம்.நூலினை வடிவமைப்பதற்கு " +"நிறத்தினையும் நிரப்பிய நிறத்தினையும்,rbg நிறக்கலவையினுாடாகப் " +"பெற்றுக்கொள்ளலாம். எ.கா #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "மூலை தாமதம்" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "தன்னார்ந்த எழுத்துரு முகம்" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "தன்னார்ந்த எழுத்துரு அளவு" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "தன்னார்ந்த புனை" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "மூலையைப் பயன்படுத்துவதனால் சட்டகத்தின் செயற்பாடு தாமதம் அடைகின்றது" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" +"ஒரத்தினைப் பயன் படுத்துவதனால் சட்டகச் செயற்பாட்டில் தாமதம் ஏற்படுகின்றது" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "மொழியாக்கங்களை தேடுவதற்க்கான அடைவு" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "ஒரத்தின் தாமதம்" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "விருப்பமான தளக்கோலம்" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "விருப்பத்துக்குரியதை மீழ ஆரம்பி" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "திரையினூடாக உட்செல்வதற்கு உபயோகிக்கும் பெயரைப் பயன்படுத்து" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "திரையினூடாக உட்செல்வதற்கு உபயோகிக்கும் பெயரைப் பயன்படுத்து" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "ஜிஎஸ்எம்(GSM) ஏபிஎன் பிணையம்(நீக்கப்பட்டது/பயன்படுத்தப்படவில்லை)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "ஜிஎஸ்எம்(GSM) பிணையம் பிஐஎன் (நீக்கப்பட்டது/பயன்படுத்தப்படவில்லை)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "ஜிஎஸ்எம்(GSM) பிணையம் பியுகே(நீக்கப்பட்டது/பயன்படுத்தப்படவில்லை)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" +"ஜிஎஸ்எம்(GSM) பிணைய அணுகு புள்ளியின் பெயர் கட்டமைப்பு " +"(நீக்கப்பட்டது/பயன்படுத்தப்படவில்லை)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "ஜிஎஸ்எம்(GSM) பிணைய எண் (நீக்கப்பட்டது/பயன்படுத்தப்படவில்லை)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "ஜிஎஸ்எம்(GSM) பிணைய கடவுச்சொல் (நீக்கப்பட்டது/பயன்படுத்தப்படவில்லை)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" +"ஜிஎஸ்எம்(GSM) பிணைய கடவுச்சொல்லின் கட்டமைப்பு " +"(நீக்கப்பட்டது/பயன்படுத்தப்படவில்லை)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" +"ஜிஎஸ்எம்(GSM) பிணையத்தின் அடையாள எண்ணின் கட்டமைப்பு " +"(நீக்கப்பட்டது/பயன்படுத்தப்படவில்லை)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" +"ஜிஎஸ்எம்(GSM) பிணையத்தின் பூட்டு திறக்கும் சாவியின் கட்டமைப்பு " +"(நீக்கப்பட்டது/பயன்படுத்தப்படவில்லை)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" +"ஜிஎஸ்எம்(GSM) பிணையத்தின் தொலைதொடர்பு எண்ணின் கட்டமைப்பு " +"(நீக்கப்பட்டது/பயன்படுத்தப்படவில்லை)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" +"ஜிஎஸ்எம்(GSM) பிணையத்தின் பயனர்பெயர் (நீக்கப்பட்டது/பயன்படுத்தப்படவில்லை)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" +"ஜிஎஸ்எம்(GSM) பிணையத்தின் பயனர்பெயரின் கட்டமைப்பு " +"(நீக்கப்பட்டது/பயன்படுத்தப்படவில்லை)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"உண்மையாயின் Sugar எங்களை Jabberவழங்கி (கணினி)யின் ஊடக தேடல் நிலைக்கு இட்டுச் " +"செல்லும்" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "உண்மையாகில், Sugar \"வெளிச்செல்\" தேரிவைக் காட்டும்." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "உண்மையாகில், Sugar \"வெளிச்செல்\" தேரிவைக் காட்டும்." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"இது உண்மை என்றால், சுகரானது Ad-hoc பிணையத்தை இயல்பாக தடங்கள் 1,6 மற்றம் 11 " +"காட்டும். இல்லையென்றால் தெரிந்த பிணையத்தை பார்க்காது. இது " +"தொடங்கும்பொருட்டு Ad-hoc பிணையத்தை தானாக இணைக்காது." + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Jabber வழங்கி (கணினி)" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "விசைப்பலகை தளக்கோலங்கள்" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "விசைப்பலகை மாதிரி" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "விசைப்பலகை விருப்பங்கள்" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "விருப்பத்தித்குரிய செயற்பாட்டின் தளக்கோலதின் பார்வை" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" +"விசைப்பலகை மாதிறிகளின் பட்டியல். அனைத்து மாதிறிகளும் தளக்கோல வடிவத்தில் " +"இருக்கனும்" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "விசைப்பலகை மாதிறிகளின் பட்டியல்." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "பேச்சு சுகர் சேவைக்கான சுருதி எண்" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "சுகரினுள் பேச்சு சேவையால் சுருதி எண் பயன்படுத்படுகிறது" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "தன்னியக்க வலு" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "கூடுதலான வலு" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "கருவிக்கு வெளிப்படுத்து" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "பேச்சு சுகர் சேவைக்கான விகித எண்" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "சுகரினுள் பேச்சு சேவையால் விகித எண் பயன்படுத்படுகிறது" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "ஒலித்திட்டமிடலை இல்லாமல் செய்வதற்கான செயற்பாடு" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "வெளிச் செல்கையைக் காட்டு" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "மீள் ஆரம்பிப்பதை காட்டு" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "சுகர் Ad-hoc பிணையங்களை காட்டு" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "ஒலியை நிறுத்து" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "இந்த விசைப்பலகை மாதிறி பயன்படுத்தப்படும்" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "நேர வலையமைப்பை செயற்படுத்துவதற்கான அமைப்பு" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "jabber வழங்கி (கணினி)யிலுள்ள URL ஐ உபயோகி" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL எதனுள் சேமிக்கப்பட்டுள்ளது" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "உபயோகிப்பவரின் நிறம்" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "உபயோகிப்பவரின் பெயர்" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "திரையினுாடாக உட்செல்வதற்கு உபயோகிக்கும் பெயரைப் பயன்படுத்து" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"பட்டியல் பார்வையின் மூலமாக இந்த செயற்பாடுகளை அழிக்க பயனாளர்களை அனுமதிக்கபட " +"மாட்டாது." + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "சத்தத்தின் அளவு" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "ஒலிஉபகரணத்திற்கான சத்தத்தின் அளவு" + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"மீழ ஆரம்பிப்பதற்கு விரும்பிய icon மீது அழுத்தியவுடன் இறுதியாக செய்த " +"செயற்பாடுகளைப் பெற்றுக் கொள்ளலாம்" + +#: ../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 -கட்டுப்பாட்டு-பகுதி:எச்சரிக்கை அதே பெயருக்குரிய ஒன்றுக்கு மேற்பட்ட " +"தெரிவுகளை தேடுதல்:%s மாற்றியமை %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "சுகர்-கட்டுப்பாட்டு-பட்டியல்:சாவி=%s கிடைக்கப்பெறாத தேர்வு" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "சுகர்-கட்டுப்பாட்டு-பட்டியல்:%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 "" +"பயன்பாடு :சுகர்-கட்டுப்பாட்டு-பட்டியல்[ தேர்வு] சாவி[ args ... ] \n" +"------சுகர் சூழலுக்கான கட்டுப்பாடு\n" +"-----தேர்வு\n" +"------h ------உதவிக்கான தகவலைப் பார்ப்பதுடன் வெளியாகு\n" +"-------l-----பயன்படுத்தக் கூடிய தேர்வுகளைப் பட்டியல் இடு\n" +"-------hசாவி----இந்த சாவிக்கான தகவலைக் காட்டு\n" +"------g சாவி---- தற்போதைய சாவிக்கான பெறுமதியினைப் பெற்றுக்கொள்\n" +"-----s சாவி------ தற்போதைய சாவிக்கான பெறுமதியினை ஒழுங்குபடுத்து \n" +"------c சாவி----- தற்போதைய சாவிக்கான பெறுமதியினை நீக்கு \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "உங்களுடைய மாற்றங்களைப் பதிவதற்கு சுகரை மீள் ஆரம்பி\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "எச்சரிக்கை" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "மாற்றத்தினை மீள் ஆரம்பிப்பதற்கான கோரிக்கை" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "மாற்றத்தினை இரத்துசெய்" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "பின்னர்" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "இப்போது மீள் ஆரம்பி" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "முடிந்து விட்டது" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "சரி" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +#, python-format, +msgid "Version %s" +msgstr "பதிப்பு %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "அழிப்பதை உறுதி செய்" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "அழிப்பதை உறுதி செய்:உங்களுக்கு நிரந்தரமாக அழிக்க வேண்டுமா %s?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "வைத்திரு" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "அழி" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "விரும்பியதை அகற்று" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "விரும்பியதை உருவாக்கு" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "இலவச படிவம்" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "வளையம்" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "சுருள்" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "பெட்டி" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "முக்கோணம்" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "பதிவுப்பிழை" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "பதிவு வெற்றிகரமானது" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" +"நீங்கள் தற்போது உங்கள் பாடசாலையிலுள்ள வழங்கி (கணினி) யில் பதிவு " +"செய்யப்பட்டுள்ளீர்" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "பதிவு" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "மறுபடியும் பதி" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "மென் பொருளைப் புதுப்பித்தல்" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "உங்கள் புதிய மென் பொருளுடன் செயற்பாடுகளை உறுதிப்படுத்துவதி புதுப்பி" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "தற்போது பரிசீலி" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "பட்டியல் பார்வை" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "விருப்புக்குரிய பார்வை" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "சாவி டைப்/வகை" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "நம்பத்தகுந்த டைப்/வகை" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 தனிப்பட்ட" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "இணைப்பற்ற பாதுகாப்பு" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "மீழ ஆரம்பி" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "இணை" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Ad-hoc பிணையம் %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "மெஷ் பிணையம் %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "கோடு" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +#, python-format, fuzzy +#, python-format, +msgid "%s of %s" +msgstr "%s of %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "%s லிருந்து மாற்று" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "ஏற்றுக்கொள்" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "இல்லாமல் செய்" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "கோப்பு பதிவேற்றத்தை மற்ற இணைப்பாளர் இரத்துசெய்து விட்டார்" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "%s க்கு மாற்றம் செய்" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "அகற்று" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "திற" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "திறத்தலுடன்" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s சிறிதாக்குதல்" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "அயல்" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "பெயர்" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "நிற மாற்றத்திற்காக அழுத்து" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "பின்" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "அடுத்தது" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "பெயரிடப்படாத" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "பார்வை இன்மை" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "அன்பான: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "அறியப்படாதது" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "திகதி: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "அளவு: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "திகதியில்லை" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "பங்குபற்றுநர்" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "விளக்கம்" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "இணைக்கயிறு" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "சஞ்சிகை" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "தேடு" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "எந்நேரம்" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "இன்று" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "நேற்று வரை" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "கடந்த வாரம்" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "கடந்த மாதம்" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "கடந்த வருடம்" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "யாராவது" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "எனது நண்பர்" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "எனது வகுப்பு" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "ஏதாவது" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "க்கு பிரதி செய்" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "நகல்" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "இருப்பதை %s பிரதி செய்யும்பொழுது பிழை" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "தவறு" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "ஆரம்பி" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "மாற்றப்பற்ற திகதிகளின்படி வைக்கவும்" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "உருவாக்கப்பட்ட திகதிகளின்படி வைக்கவும்" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "அளவுகளின் படி வைக்கவும்" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "வைப்பு பார்வை" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "உங்களுடைய சஞ்சிகை வெறுமையானது" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "உங்களுடைய ஆவணஅடைவு ஆனது காலியாக உள்ளது" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "கருவி காலியாகவுள்ளது" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "பொருத்தமற்றப் பதிவுகள்" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "தேடலை நீக்கு" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "செயற்பாட்டின் பழைய வெளியீட்டு எண் %s" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "நீங்கள் வெளியீட்டு எண்ணை %s குறைக்க விரும்புகிறீர்களா" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "சஞ்சிகையைக் காட்டு" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "பொருளைத் தெரிவுசெய்" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "மூடு" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "மீழ ஆரம்பித்தலுடன்" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "ஆரம்பி" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "ஆரம்பிப்பதற்கான செயற்பாடு இல்லை" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "அனுப்பு" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "தகவல் பார்வை" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "இருக்கின்றவையில் கோப்பில்லாதவைகளை அனுப்பி வைக்க முடியாது." + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "இருக்கின்றவையில் கோப்பில்லாதவைகளை பிரதி செய்ய முடியாது." + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "மறைப்பலகை" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "தற்போது நண்பர்கள் இல்லை" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "அனுமதிக்கப்பட்ட இணைப்பு இடப்படவில்லை" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "மீழ ஆரம்பிப்பதற்கான செயற்பாடு இல்லை" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "கோப்புகள்" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +#, python-format, +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d எம்பி மிகுதி" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "கருவியின் நிலை மாற்றமாற்றத்திற்கு எந்த காரணமும் இல்லை." + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "நிலைமாற்றம் சரியாக உள்ளது" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "கருவியானது மேலாண்மை செய்யப்பட்டது." + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "கருவியானது இனிமேலும் மேலாண்மை செய்யப்படமாட்டாது" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "கருவியின் அமைப்புகளை படிக்க முடியவில்லை" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" +"IP இன் அமைப்புகளை முன்பதிவு செய்யமுடியவில்லை(முகவரி இல்லை, நேரம் இல்லை, " +"etc)." + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "IP இன் அமைப்பானது இனிமேல் செல்லாது." + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "இரகசியங்கள் தேவைப்பட்டன, ஆனால் கொடுக்கப்படவில்லை." + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" +"802.1x ஏற்ப்பியானது அனுகு புள்ள (அ) உரிம வழங்கி (கணினி) யிலிருந்து " +"விலகிவிட்டது." + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "802.1x ஏற்ப்பியின் அமைப்புகள் தோழ்வியுற்றது." + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "802.1x ஏற்ப்பியினாது எதிர்பாராமல் தோழ்வியுற்றது (அ) வெளியேறிவிட்டது" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "802.1x ஏற்ப்பியானது உரிமத்தை சோதிக்க அதிக நேரம் எடுக்கிறது." + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "கொடுக்கப்பட்ட நேரத்திற்குள் PPP சேவையானது தொடங்காமல் தோழ்வியுற்றது." + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "PPP சேவையானது எதிர்பாராமல் விலகியது." + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "PPP சேவையானது எதிர்பாராமல் தோழ்வியுற்றது (அ) வெளியேறிவிட்டது." + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "கொடுக்கப்பட்ட நேரத்திற்குள் DHCP சேவையானது தொடங்காமல் தோழ்வியுற்றது." + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "DHCP சேவையானது எதிர்பாராது பிழையை தெறிவிக்கிறது." + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "DHCP சேவையானது எதிர்பாராமல் தோழ்வியுற்றது (அ) வெளியேறிவிட்டது." + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "பங்கீட்டில் இருந்த இணைப்பு சேவை தொடங்காமல் தோழ்வியுற்றது." + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" +"பங்கீட்டில் இருந்த இணைப்பு சேவை எதிர்பாராமல் தோழ்வியுற்றது (அ) " +"வெளியேறிவிட்டது." + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "தானியக்க IP சேவை தொடங்காமல் தோழ்வியுற்றது." + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "தானியக்க IP சேவை எதிர்பாராத பிழையை தெரிவிக்கிறது." + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "தானியக்க IP சேவை எதிர்பாராமல் தோழ்வியுற்றது (அ) வெளியேறிவிட்டது" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "இணைப்பு தடமானது சேவையிலிருப்பதால் அழைப்பானது தோழ்வியுற்றது." + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "அழைப்பு ஓலி இல்லாததனால் அழைப்பு தோழ்வியுற்றது." + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "தடம் ஏற்றி ஏதும் இல்லாததால் அழைப்பு தோழ்வியுற்றது." + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "அழைப்பு நேர விரையம் ஆனது." + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "அழைப்பு தோழ்வியுற்றது." + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "மோடத்தின் தொடக்கம் தோழ்வியுற்றது." + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "தெரிவிக்கப்பட்ட GSM APN ஐ தெரிவு செய்ய முடியவில்லை" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "பிணையங்களுக்காக தேடவில்லை." + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "பிணையங்களுடனான பதிப்பு மறுக்கப்பட்டது." + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "பிணையங்களுடனான பதிப்பு நேர விரையம் ஆகிவிட்டது." + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "கேட்க்கப்பட்ட GSM பிணையத்துடனான பதிப்ப தோழ்வியுற்றது." + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "PIN சோதித்தல் தோழ்வி." + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "கருவிக்குத்தேவையான இயங்கு மென்பொருள் இல்லாமற் போயிருக்கலாம்." + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "கருவியானது நீக்கப்பட்டது." + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "பிணைய மேலாளர் தூங்கிவிட்டார்." + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "கருவியின் செயல்பாட்டு இணைப்பானது நீக்கப்பட்டது (அ) மாயமானது." + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "ஒரு பயனாளர் (அ) கிளைகணினியானது இணைப்பிலிருந்து விலக வலியுறுத்துகிறது." + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "கருவியின் தடம்/இணைப்பு மாற்றப்பட்டுள்ளது." + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "சாதனத்தின் ஏற்கனவேயுள்ள இணைப்பு கருதப்பட்டது." + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "இணைப்பு வேண்டுபவர் இப்பொழுது இல்லை." + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "மோடத்தை கண்டறிய முடியவில்லை." + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "ப்ளூடூத் இணைப்பு தோல்வியுற்றது அல்லது காலாவதியானது." + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "உபயோகித்தில் இல்லை." + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "நண்பணை அகற்று" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "நண்பணை உருவாக்கு" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "திரையை மூடுதல்" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "மீள் ஆரம்பி" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "பதிவை அகற்று" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "எனது அமைப்பு" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "அழை %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s ஆரம்பமானது தோழ்வியுற்றது." + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "ஆரம்பி" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "செயற்பாடானது தெடங்கும்பொருட்டு தோழ்வியுற்றது." + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "வளப்(மூலம்)பார்வை" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "நிறுத்து" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "புதிதை ஆரம்பி" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "உள்ளடக்கியதைக் காட்டு" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "அகற்று" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "மாதிரி வளம் (மூலம்)" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "வளம் (மூலம்)" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "செயற்பாட்டு வளத் (மூலம்) தொகுதி" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "சுகரின் மூலக் கருவிப்பட்டை" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "வளப் (மூலம்)பார்வை:%s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "வளப் (மூலம்)பார்வை:%r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "சாளரத்தினுள் சுகர்" diff --git a/po/te.po b/po/te.po new file mode 100644 index 0000000..b0d555b --- /dev/null +++ b/po/te.po @@ -0,0 +1,1799 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 07:47+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: te\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 "నాగురించి" + +#: ../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 "కుంచె: color=%s hue=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "కుంచె: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "నింపు: color=%s hue=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "నింపు: %s" + +#: ../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:235 +#, fuzzy +msgid "Click to change your color:" +msgstr "రంగు మార్చడానికి నొక్కు" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "అలభ్యం" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "ఉనికి" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "వరుస సంఖ్య:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "సాఫ్ట్​వేర్" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "బిల్డ్:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "ఫర్మ్​వేర్:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "కాలమానం" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "ఫ్రేమ్" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +#, fuzzy +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 "%s సెకనులు" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "మొదలుపెట్టడంలో ఆలస్యమైంది" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "మూల" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "అంచు" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 +#, fuzzy +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 "కోడ్=%s కు భాష తెలియ లేదు." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "మన్నించాలి నేను '%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 "" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 +#, fuzzy +msgid "Error in specified argument use 0/1." +msgstr "రేడియొ నిర్దేసించడంలో పొరబాటు. ఉంది/లేదు వాడనా ." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "నిస్తం​త్రి" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +#, fuzzy +msgid "Radio" +msgstr "రేడియే" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "అమోఘమైన విద్యుత్తు నిర్వహణలో తప్పుజరింది, ఉంది/లేదు వాడు" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "విద్యుత్తు నిర్వహణ" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "దానంతట అదే విద్యుత్తు నిర్వహణ(బేటరీ ఆయువు పెంచుతుంది)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"అమోఘమైన విద్యుత్తు నిర్వహణ( నిస్తం​త్రిని ఆపుతుంది, బేటరీ ఆయువు పెంచుతుంది)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "పూర్తి అయినది" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "నా బేటరీ" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "తీసివేయి" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "చార్జి అవుతుంది" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d మిగిలిఉంది" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "చార్జీ అయింది" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +#, fuzzy +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +#, fuzzy +msgid "Connecting..." +msgstr "వేరుచేయి . . ." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "తగిలించబడినది" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "ప్రసారమార్గం" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "తగిలించు" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "వేరుచేయబడింది" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "రద్దు చేయి" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "మెష్ వల" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, fuzzy +msgid "Mesh Network %s" +msgstr "మెష్ వల %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "నా స్పీకరులు" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "పలికించు" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "నిశ్శబ్దంగా ఉంచు" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "మెష్ వల" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "గుంపు" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "ఇల్లు" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "వ్యాపకం" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "తెరముద్ర" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "" +"షుగర్-కంట్రోల్-పేనల్: గమనిక, అదేపేరుతో ఒకటికన్నా ఎక్కువ అవకాశాలు ఉన్నవి: %s " +"module: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "షుగర్-కంట్రోల్-పేనల్: key=%s అవకాశం లేదు" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "షుగర్-కంట్రోల్-పేనల్: %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 "" + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "మీ మార్పులు పనిచేయడానికి సుగరును తిరిగి మొదలు పెట్టండి.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "గమనిక" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "మార్పులు తిరిగి మొదలుపెట్తినతర్వాతే పనిచేస్తాయి" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "మార్పులు రద్దుచేయి" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "తరవాత" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "ఇప్పుడు మరలామొదలుపెట్టు" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "పూర్తి అయినది" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "సరి" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "చెరిపివేయుట నిర్ద్దారణ చేయి" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "చెరిపివేయుట నిర్ద్దారణ చేయుట: %s శాశ్వతంగా చెరిపివేయబడుట ఇష్టమేనా?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "ఉంచు" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "చెరిపివేయి" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "ఇష్టమైనదానిని తొలగించు" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "ఇష్టమైనదానిగా తయారుచేయి" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "కలగలుపుగా" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "వ్రుత్తము" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "రిజిస్టరుచేయడం విఫలమైంది" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "రిజిస్టరుచేయడం విజయవంతమైంది" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "ఇప్పుడు మీరు బడి సెర్వరుతో రిజిస్టరుచేయబడిఉన్నారు" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "దాఖలు చేయి" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "వరసగా చూడు" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "ఇష్టమైనవి చూచుటకు" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "తాళం రకము:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "దృడపరచుకొనే రకము:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "పునరారంభించు" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "కలువు" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +#, fuzzy +msgid "Mesh Network %d" +msgstr "మెష్ వల %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "నిరస్కరించు" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "తీసివేయి" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "తెరువు" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "తో తెరువు" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "చుట్టుపక్కలవారు" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "పేరు" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "రంగు మార్చడానికి నొక్కు" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "వెనుకకు" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "తర్వాత" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "పేరు లేని" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "రిహార్సు లేదు" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "తేదీలేదు" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "పాల్గొనేవాళ్ళు:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "వివరణ:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "గుర్తింపు చీటీ:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "పద్దు" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "వెతుకు" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "ఎప్పటిదైనా" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "ఈరోజు" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "నిన్నటినుంచి" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "గత వారం నుంచి" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "గత నెల నుంచు" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "గత సంవత్సరం నుంచి" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "ఎవరైనా" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "నా స్నేహితులు" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "నా తరగతి" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "ఏదైనా" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "మొదలుపెట్టు" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "నీ పద్దు ఖాళీగా ఉంది" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +#, fuzzy +msgid "No matching entries" +msgstr "సరిజత లేదు" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "ఒక విషయాన్ని ఎంచుకో" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "ముగించు" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB ఖాళీ" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "స్నేహం తీసివేయి" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "స్నేహం చేయి" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "ఫూర్తిగా ఆపు" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "తిరిగి మొదలుపెట్టు" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "%s కు పిలువు" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "మొదలవుతుంది..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "ఆపు" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "విషయాలను చూపు" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "తీసివేయి" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/th.po b/po/th.po new file mode 100644 index 0000000..88ccebc --- /dev/null +++ b/po/th.po @@ -0,0 +1,1804 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-17 04:50+0200\n" +"Last-Translator: Meechai \n" +"Language-Team: LANGUAGE \n" +"Language: th\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-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 "การลากขนแปรง: สี=%s ความสว่างของสี=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "การลากขนแปรง %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "เติม: สี=%s ความสว่างของสี=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "เติม: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "คลิกเพื่อเปลี่ยนสีของคุณ:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "เกี่ยวกับคอมพิวเตอร์ของฉัน" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "ไม่สามารถใช้ได้" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "เอกลักษณ์" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Serial Number:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "ซอฟต์แวร์" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "สร้าง:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "เฟิร์มแวร์:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "เฟิร์มแวร์ ไร้สาย:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "ลิขสิทธิ์และใบอนุญาต" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"ชูการ์เป็นส่วนติดต่อผู้ใช้งานแบบกราฟฟิก ชูการ์เป็นโปรแกรมฟรีและคุ้มครองโดย " +"GNU Gneral Public License และคุณสามารถปรับเปลี่ยน ทำเพิ่มเติมหรือแจกจ่ายได้ " +"ภายในเงื่อนไขที่กำหนดภายใต้ลิขสิทธิ์นั้น" + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s วินาที" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "ความล่าช้าของการเปิดใช้งาน" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "มุม" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "ขอบ" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "แป้นพิมพ์" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "รุ่นแป้นพิมพ์" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "คีย์เพื่อเปลี่ยนเค้าโครง" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "ไม่สามารถเข้าถึง ~/.i18n สร้างการตั้งค่ามาตรฐาน" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "ภาษาสำหรับรหัส=%s ไม่สามารถกำหนด" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "ขออภัยฉันไม่ได้พูด '%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 "เพิ่มภาษาที่คุณต้องการ ถ้าการแปลไม่มี รายการต่อไปในรายการจะถูกใช้" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "การกำหนดค่าโมเด็ม" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"คุณจะต้องให้ข้อมูลต่อไปนี้เพื่อตั้ง การเชื่อมต่อบรอดแบนด์โทรศัพท์มือถือ กับ " +"เครือข่ายโทรศัพท์มือถือ (3G)" + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "ชื่อผู้ใช้:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "รหัสผ่าน:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "หมายเลข:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "ชื่อจุดเชื่อม (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "หมายเลขประจำตัว (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "ข้อผิดพลาดในการใช้อาร์กิวเมนต์ที่ระบุ 0/1" + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "ไร้สาย" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "ปิดวิทยุไร้สายเพื่อประหยัดแบตเตอรี่" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "วิทยุ" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "ละทิ้งประวัติเครือข่ายหากคุณมีปัญหากับการเชื่อมต่อเครือข่าย" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "ละทิ้งประวัติเครือข่าย" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "การทำงานร่วมกัน" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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 "ข้อผิดพลาดในอาร์กิวเมนต์ pm อัตโนมัติ ใช้เปิด/ปิด" + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "ข้อผิดพลาดในอาร์กิวเมนต์ pm ใช้เปิด/ปิด" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "การจัดการพลังงาน" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "การจัดการพลังงานอัตโนมัติ (เพิ่มอายุแบตเตอรี่)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "การจัดการพลังงานแบบสุดขีด (ปิดวิทยุไร้สายจะเพิ่มขึ้นแบตเตอรี่)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "ปรับปรุงซอฟต์แวร์" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"การปรับปรุงซอฟแวร์แก้ไขข้อผิดพลาดขจัดช่องโหว่ความปลอดภัยและให้ลูกเล่นใหม่ ๆ" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "กำลังตรวจสอบ %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "กำลังดาวน์โหลด %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "กำลังปรับปรุง %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "ซอฟต์แวร์ของคุณเป็นปัจจุบัน" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "คุณสามารถติดตั้งโปรแกรมปรับปรุง %s" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "การตรวจสอบสำหรับการปรับปรุง..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "การกำลังติดตั้งการปรับปรุง..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "ได้ทำการปรับปรุงซอฟต์แวร์ %s" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "ติดตั้งที่เลือก" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "ดาวน์โหลดขนาด: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "จากรุ่น %(current)s ไป %(new)s (ขนาด : %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "ไม่มี" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "แบตเตอรี่ของฉัน" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "ลบออกแล้ว" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "การประจุไฟ" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "เหลืออยู่ %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "ประจุไฟแล้ว" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP address: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "ตัดการเชื่อมต่อ" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "กำลังเชื่อมต่อ..." + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "เชื่อมต่อแล้ว" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "ไม่มีการเชื่อมต่อแบบไร้สาย" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "ช่อง" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "เครือข่ายมีสาย" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "ความเร็ว" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "โมเด็มไร้สาย" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "กรุณารอสักครู่..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "เชื่อมต่อ" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "ตัดการเชื่อมต่อแล้ว" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "ยกเลิก" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "ลองเชื่อมต่ออีกครั้ง" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "ข้อผิดพลาด: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "ข้อเสนอแนะ: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "เชื่อมต่อแล้วสำหรับ %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "ตรวจการกำหนดค่า PIN/PUK ของคุณ" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "ตรวจสอบการตั้งค่าชื่อจุดเชื่อมต่อ (APN) ของคุณ" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "ตรวจสอบการตั้งหมายเลข" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "ตรวจสอบการตั้งค่าของคุณ" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "เครือข่ายตาข่าย" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "เครือข่ายตาข่าย %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "ไม่มีการเชื่อมต่อระบบ GSM ที่ใช้ได้" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "สร้างการเชื่อมต่อบนแผงควบคุม" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "การพูด" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "กล่าวว่าข้อความที่เลือก" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "หยุดเล่น" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "ระดับเสียง" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "อัตรา" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "หยุดเล่นชั่วคราว" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "ลำโพงของฉัน" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "เปิดเสียง" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "ตัดเสียง" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "นิ้ว" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "ปากกา" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "ทัชแพดของฉัน" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "ตาข่าย" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "กลุ่ม" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "บ้าน" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "กิจกรรม" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "ภาพหน้าจอ" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "ภาพหน้าจอของ \"%s\"" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "\"หยุดทำงาน\" ที่ถามชื่อย่อ; \"ระบบ\" เพื่อกลับมาใช้ระบบชื่อแบบยาวของ UNIX" + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "ไดเรกทอรีเพิ่มเติมที่ใส่ค่าการแปลใหม่" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "URL สำรอง" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "บันเดิลรหัสของกิจกรรมที่ป้องกัน" + +#: ../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 "" +"สีสำหรับไอคอน XO จะถูกใช้ที่หน้าจอ " +"ค่าจะประกอบด้วยการระบายสีและใส่สีในรูปแบบของสี rbg ตัวอย่าง : #AC32FF, " +"#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "หน่วงเวลาของ Corner" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "รูปแบบตัวอักษรเริ่มต้น" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "ขนาดตัวอักษรเริ่มต้น" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "ชื่อย่อเริ่มต้น" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "การหน่วงเวลาสำหรับการเปิดใช้งานของกรอบการใช้มุม" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "การหน่วงเวลาสำหรับการเปิดใช้งานของเฟรมโดยใช้ขอบ" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "ไดเรกทอรีที่จะค้นหาคำแปล" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "ความหน่วงเวลาของขอบ" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "เค้าโครงที่โปรดปราน" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "รายการโปรดโหมดการทำงานต่อ" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "แบบอักษรที่ใช้ในพื้นที่ทำงาน" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "ขนาดตัวอักษรที่ใช้ในพื้นที่ทำงาน" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "APN ของเครือข่าย GSM (เลิกใช้/ไม่ได้ใช้)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "PIN ของเครือข่าย GSM (เลิกใช้/ไม่ได้ใช้)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "PUK ของเครือข่าย GSM (เลิกใช้/ไม่ได้ใช้)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "การตั้งค่าจุดเชื่อมต่อของเครือข่าย GSM (เลิกใช้/ไม่ได้ใช้)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "หมายเลขเครือข่าย GSM (เลิกใช้/ไม่ได้ใช้)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "รหัสผ่านเครือข่าย GSM (เลิกใช้/ไม่ได้ใช้)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "การตั้งค่ารหัสผ่านเครือข่าย GSM (เลิกใช้/ไม่ได้ใช้)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "การตั้งค่าหมายเลขประจำตัวบุคคลของเครือข่าย GSM (เลิกใช้/ไม่ได้ใช้)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "การตั้งค่ากุญแจปลดล็อคส่วนบุคคลของเครือข่าย GSM (เลิกใช้/ไม่ได้ใช้)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "การตั้งค่าหมายเลขโทรศัพท์เครือข่าย GSM (เลิกใช้/ไม่ได้ใช้)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "ชื่อผู้ใช้เครือข่าย GSM (เลิกใช้/ไม่ได้ใช้)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "การตั้งค่าชื่อผู้ใช้เครือข่าย GSM (เลิกใช้/ไม่ได้ใช้)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"ถ้าเป็นจริง ชูการ์จะทำให้เราค้นหาได้สำหรับผู้ใช้อื่นๆ ของเซิร์ฟเวอร์ Jabber" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "ถ้าเป็นจริง ชูการ์จะโชว์ทางเลือก \"ออกจากระบบ\"" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "ถ้าเป็นจริง ชูการ์จะโชว์ทางเลือก \"เริ่มระบบใหม่\"" + +#: ../data/sugar.schemas.in.h:35 +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 "" +"ถ้าเป็นจริง ชูการ์จะแสดงเครือข่าย Ad-hoc เริ่มต้นสำหรับช่อง 1,6 และ 11 " +"ถ้าชูการ์ยังไม่มีเครือข่าย \"รู้จัก\" ก็จะเชื่อมต่ออัตโนมัติกับเครือข่าย Ad-" +"hoc" + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "เซิร์ฟเวอร์ Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "ผังแป้นพิมพ์" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "รุ่นแป้นพิมพ์" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "ตัวเลือกแป้นพิมพ์" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "เค้าโครงจากมุมมองในรายการโปรด" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "รายชื่อของผังแป้นพิมพ์ แต่ละรายการควรจะอยู่ในรูปแบบฟอร์ม(แตกต่าง)" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "รายการของตัวเลือกแป้นพิมพ์" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "ค่าระดับเสียงสำหรับบริการเสียงพูดในชูการ์" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "ค่าระดับเสียงใช้บริการเสียงพูดในชูการ์" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "พลังงานแบบอัตโนมัติ" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "พลังงานสูงสุด" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "เผยแพร่ไปยัง Gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "ค่าอัตราการบริการเสียงพูดในชูการ์" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "ค่าอัตราการใช้การบริการเสียงพูดในชูการ์" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "การตั้งค่าเพื่อปิดอุปกรณ์เสียง" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "แสดง ออกจากระบบ" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "แสดง เริ่มระบบใหม่" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "แสดงเครือข่าย Ad-hoc ของชูการ์" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "ปิดเสียง" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "รูปแบบแป้นพิมพ์ที่จะใช้" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "การตั้งค่าเขตเวลาสำหรับระบบ" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "URL ของเซิร์ฟเวอร์ Jabber ที่จะใช้" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "URL ที่สำรองจะถูกบันทึกไว้" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "สีของผู้ใช้" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "ชื่อผู้ใช้" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "ชื่อผู้ใช้งานที่ถูกนำมาใช้ทั้งพื้นที่ทำงาน" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "ผู้ใช้จะไม่ได้รับอนุญาตให้ลบกิจกรรมเหล่านี้ผ่านมุมมองรายการ" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "ระดับเสียง" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "ระดับเสียงสำหรับอุปกรณ์เสียง" + +#: ../data/sugar.schemas.in.h:66 +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 +#, python-format, +msgid "" +"sugar-control-panel: WARNING, found more than one option with the same name: " +"%s module: %r" +msgstr "" +"แผงควบคุมชูการ์: คำเตือน พบมากกว่าหนึ่งตัวเลือกที่มีชื่อเดียวกัน: %s โมดูล: " +"%r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +#, python-format, +msgid "sugar-control-panel: key=%s not an available option" +msgstr "แผงควบคุมชูการ์: คีย์=%s ไม่สามารถตัวเลือกที่ใช้ได้" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +#, python-format, +msgid "sugar-control-panel: %s" +msgstr "แผงควบคุมชูการ์: %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 "ถ้าคุณต้องการใช้การเปลี่ยนแปลงของคุณ คุณจะต้องเริ่้มต้นระบบใหม่\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "คำเตือน" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "การเปลี่ยนแปลงที่จำเป็นต้องรีสตาร์ท" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "ยกเลิกการเปลี่ยนแปลง" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "ภายหลัง" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "ภายหลัง" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "เรียบร้อยแล้ว" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "ตกลง" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "รุ่น %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "ยืนยันการลบ" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "ยืนยันการลบ : คุณต้องการที่จะลบ %s อย่างถาวรหรือไม่?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "เก็บไว้" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "ลบ" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "ลบรายการโปรด" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "สร้างรายการโปรด" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "รูปแบบอิสระ" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "วง" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "เกลียว" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "กล่อง" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "สามเหลี่ยม" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "การลงทะเบียนล้มเหลว" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "การลงทะเบียนสำเร็จ" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "ขณะนี้คุณกำลังลงทะเบียนที่เครื่องเซิร์ฟเวอร์ที่โรงเรียนของคุณ" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "ลงทะเบียน" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "ลงทะเบียนอีกครั้ง" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "การปรับปรุงซอฟต์แวร์" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "ปรับปรุงกิจกรรมของคุณเพื่อให้แน่ใจว่าเข้ากันได้กับซอฟต์แวร์ใหม่ของคุณ" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "ตรวจสอบเดี๋ยวนี้" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "แสดงแบบรายการ" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "แสดงรายการโปรด" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" +"คีย์การเข้ารหัสเป็นสิ่งจำเป็นสำหรับ \n" +"เครือข่ายไร้สาย '%s'" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "ชนิดกุญแจ:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "รูปแบบการยืนยันตัวบุคคล:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA & WPA2 ส่วนบุคคล" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "ความปลอดภัยของเครือข่ายไร้สาย:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "ทำต่อ" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "ร่วม" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "เครือข่าย Ad-hoc %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "เครือข่ายตาข่าย %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "ปฏิเสธ" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s จาก %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "โอนย้ายจาก %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "ยอมรับ" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "ไม่สนใจ" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "อีกฝ่ายยกเลิกการโอนย้าย" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "โอนย้ายไป %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "เอาออก" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "เปิด" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "เปิดด้วย" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +#, python-format, +msgid "%s clipping" +msgstr "การตัด %s" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "เพื่อนบ้าน" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "ชื่อ:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "คลิกเพื่อเปลี่ยนสี:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "กลับ" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "ถัดไป" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "ไม่มีชื่อ" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "ไม่มีตัวอย่าง" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "ชนิด: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "ไม่ทราบ" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "วันที่: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "ขนาด: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "ไม่มีวันที่" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "ผู้เข้าร่วม:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "รายละเอียด:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "ป้ายกำกับ:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "บันทึกประจำวัน" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "ค้นหา" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "ทุกเวลา" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "วันนี้" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "ตั้งแต่เมื่อวานนี้" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "สัปดาห์ที่แล้ว" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "เดือนที่แล้ว" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "ปีที่แล้ว" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "ทุกคน" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "เพื่อนของฉัน" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "ชั้นเรียนของฉัน" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "ทุกอย่าง" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "คัดลอกไปยัง" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "ทำซ้ำ" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "เกิดข้อผิดพลาดขณะคัดลอก %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "ข้อผิดพลาด" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "เริ่ม" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "เรียงตามวันที่แก้ไข" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "เรียงตามวันที่สร้าง" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "เรียงตามขนาด" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "แสดงแบบจัดเรียง" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "บันทึกประจำวันของคุณว่างเปล่า" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "โฟลเดอร์เอกสารของคุณว่างเปล่า" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "อุปกรณ์ว่างเปล่า" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "ไม่มีรายการที่ตรงกัน" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "ล้างการค้นหา" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "รุ่นเก่าของกิจกรรม %s" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "คุณต้องการที่จะลดระดับรุ่น %s" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "แสดงบันทึกประจำวัน" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "เลือกวัตถุ" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "ปิด" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "ทำต่อโดย" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "เริ่มด้วย" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "ไม่มีรายการกิจกรรมที่จะเริ่ม" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "ส่งไปที่" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "ดูรายละเอียด" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "การกรอกข้อมูลโดยไม่มีไฟล์ไม่สามารถส่ง" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "การกรอกข้อมูลโดยไม่มีไฟล์ไม่สามารถคัดลอก" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "คลิปบอร์ด" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "ไม่พบเพื่อน" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "ไม่พบการเชื่อมต่อ" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "ไม่มีกิจกรรมที่จะทำต่อ" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "เอกสาร" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "พื้นที่ว่าง %(free_space)d MB" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "ไม่ทราบสาเหตุการเปลี่ยนสถานะของอุปกรณ์" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "การเปลี่ยนแปลงสถานะเป็นปกติ" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "อุปกรณ์ถูกการจัดการในขณะนี้" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "อุปกรณ์ไม่ถูกการจัดการอีกต่อไป" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "อุปกรณ์ไม่พร้อมสำหรับการกำหนดค่า" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "การกำหนดค่า IP ไม่สามารถสงวนได้ (ไม่มี address ว่าง, หมดเวลารอ, ฯลฯ)" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "การกำหนดค่า IP ไม่ถูกต้อง" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "รหัสลับถูกเรียกร้อง แต่ไม่ได้กำหนด" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "802.1X ตัดการเชื่อมต่อจากจุดเชื่อมต่อหรือเซิร์ฟเวอร์การตรวจสอบสิทธิ์" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "การกำหนดค่าของ 802.1X ล้มเหลว" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "ผู้ขอ 802.1X หยุดการทำงานโดยไม่ทราบสาเหตุ" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "ผู้ขอ 802.1X นานเกินไปในการตรวจสอบ" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "ไม่สามารถเริ่มบริการ PPP ได้ในเวลาที่กำหนด" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "บริการ PPP ตัดการเชื่อมต่อโดยไม่ทราบสาเหตุ" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "บริการ PPP หยุดการทำงานโดยไม่ทราบสาเหตุ" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "ไม่สามารถเริ่มบริการ DHCP ในเวลาที่กำหนด" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "บริการ DHCP รายงานข้อผิดพลาดที่ไม่ทราบสาเหตุ" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "บริการ DHCP หยุดการทำงานโดยไม่ทราบสาเหตุ" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "บริการการเชื่อมต่อที่ใช้ร่วมกันล้มเหลวในการเริ่มต้น" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "บริการการเชื่อมต่อที่ใช้ร่วมกันหยุดการทำงานโดยไม่ทราบสาเหตุ" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "บริการ AutoIP ล้มเหลวในการเริ่มต้น" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "บริการ AutoIP รายงานข้อผิดพลาดที่ไม่ทราบสาเหตุ" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "บริการ AutoIP เลิกหรือล้มเหลวโดยไม่ทราบสาเหตุ" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "การเรียกเลขหมายล้มเหลวเพราะสายไม่ว่าง" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "การเรียกเลขหมายล้มเหลวเพราะไม่มีเสียงโทร" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "การเรียกเลขหมายล้มเหลวเนื่องจากไม่มีพาหะ" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "การเรียกเลขหมายหมดเวลา" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "การเรียกเลขหมายล้มเหลว" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "การเริ่มต้น Modem ล้มเหลว" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "ล้มเหลวในการเลือกที่ระบุ GSM APN" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "ไม่ค้นหาสำหรับเครือข่าย" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "การลงทะเบียนเครือข่ายถูกปฏิเสธ" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "การลงทะเบียนเครือข่ายหมดเวลา" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "การลงทะเบียนกับเครือข่าย GSM ที่ร้องขอล้มเหลว" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "การตรวจ PIN ล้มเหลว" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "เฟิร์มแวร์ที่จำเป็นสำหรับอุปกรณ์อาจหายไป" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "อุปกรณ์ถูกเอาออก" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "ตัวจัดการเครือข่ายเข้าสู่โหมดการหลับ" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "การเชื่อมต่ออุปกรณ์ถูกยกเลิกหรือหายไป" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "ผู้ใช้ขอยกเลิกการเชื่อมต่อ" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "การเชื่อมต่ออุปกรณ์มีการเปลี่ยนแปลง" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "การเชื่อมต่อที่มีอยู่ของอุปกรณ์ที่ถูกสมมุติ" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "ผู้ขอใช้ได้ในขณะนี้" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "ไม่พบโมเด็ม" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "การเชื่อมต่อบลูทูธล้มเหลวหรือหมดเวลา" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "ไม่ได้ใช้" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "ลบเพื่อน" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "เป็นเพื่อน" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "ปิดเครื่อง" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "เริ่มระบบใหม่" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "ออกจากระบบ" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "การตั้งค่าของฉัน" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "เชิญเข้าร่วม %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s ไม่สามารถเริ่มได้" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "กำลังเริ่ม..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "กิจกรรมไม่สามารถเริ่มได้" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "ดูที่มา" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "หยุด" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "เริ่มใหม่" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "แสดงเนื้อหา" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "ลบออก" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "ที่มาของตัวอย่าง" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "ที่มา" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Activity Bundle Source" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Sugar Toolkit Source" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "ดูที่มา: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "ดูที่มา: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar ในหน้าต่าง" diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 0000000..e4fc2fb --- /dev/null +++ b/po/tr.po @@ -0,0 +1,1805 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-11 07:52+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.5\n" + +#: ../extensions/cpsection/aboutme/__init__.py:24 +msgid "About Me" +msgstr "Benim Hakkımda" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Bir isim girmeniz gerekiyor" + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "fırça darbesi:_ renk=%s renk=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "fırça darbesi:_ %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "doldurma:_ renk=%s renk=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "doldurma:_ %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Belirtilen renk değiştiricilerinde hata" + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "Belirtilen renklerde hata" + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Renk değiştirmek için tıklayınız:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Mevcut değil" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Kimlik" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Seri Numarası:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Yazılım" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Yapı:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Aygıt Yazılımı:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Telif Hakkı ve Lisans" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 gördüğünüz grafiksel kullanıcı arayüzüdür. Sugar, GNU General Public " +"Lisansı'na sahip, ücretsiz bir yazılımdır. İstediğiniz takdirde yazılımı " +"değiştirebilir ve/veya burada açıklanan belli koşullar altında kopyasını " +"dağıtabilirsiniz." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Tam Lisans:" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Tarih ve Zaman" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Hatalı zaman dilimi yok" + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Saat Dilimi" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Çerçeve" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Değer bir tamsayı olmalı" + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "asla" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "anlık" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s saniyeler" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "Aktivasyon Gecikmesi" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Köşe" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Kenar" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Dil" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "~/.i18n e girilemiyor. Standart ayarları oluşturunuz" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "kod=%s için dil tanımlanamadı" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Üzgünüm, %s konuşmuyorum" + +#: ../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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Ağ" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Durum bilinmiyor" + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Belirtilen bağlantı noktasında hata vardır, açma kapama yapınız" + +#: ../extensions/cpsection/network/model.py:152 +#, fuzzy +msgid "Error in specified argument use 0/1." +msgstr "Belirtilen bağlantı noktasında hata vardır, açma kapama yapınız" + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Kablosuz Bağlantı" + +#: ../extensions/cpsection/network/view.py:69 +#, fuzzy +msgid "Turn off the wireless radio to save battery life" +msgstr "Pil ömrünü arttırmak için kablosuz bağlantı özelliğini kapatınız." + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Bağlantı " + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "Ağa bağlanmada sorun yaşıyorsanız ağ geçmişini silebilirsiniz." + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Ağ geçmişini siliniz." + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +msgid "Server:" +msgstr "Sunucu:" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Güç" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Otomatik pm değişkeninde hata vardır, açma kapama yapınız" + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "En uçtaki pm değişkeninde hata vardır, açma kapama yapınız" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "Güç Kontrolü" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Otomatik güç kontrolü (pil ömrünü uzatır)" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +#, fuzzy +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Aşırı güç kontrolü (kablosuz bağlantı özelliğini etkisiz kılar, şarj ömrünü " +"uzatır)" + +#: ../extensions/cpsection/updater/__init__.py:21 +#, fuzzy +msgid "Software update" +msgstr "Yazılım Güncelleme" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +#, fuzzy +msgid "None" +msgstr "Kapat" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Pil Durumu" + +#: ../extensions/deviceicon/battery.py:147 +#, fuzzy +msgid "Removed" +msgstr "Kaldır" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Şarj" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Çok az şarj kaldı" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d kaldı" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Şarj edildi" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Bağlantıyı kes" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Bağlanıyor..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Bağlı" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kanal" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Bağlan" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Bağlantı kesildi" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "İptal" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Mesh Ağı" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Mesh Ağı %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Hoparlör" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "Sesi açık" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Sessiz" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "Mesh" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Grup" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Ana ekran" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Aktivite" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Ekran Resmi" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "" +"sugar-kontrol-paneli: UYARI, aynı isimle birden fazla seçenek buldu: %s " +"birim: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "sugar-kontrol-panel: anahtar=%s geçerli bir seçenek değil" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "sugar-kontrol-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. +#. 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 "" +"Kullanım: sugar-kontrol-paneli [ seçenek ] anahtar [ args ... ] \n" +"Sugar ortamı için kontrol \n" +"Seçenekler:\n" +"-h Bu yardım mesajını göster ve çık \n" +"-l Tüm uygun seçenekleri listele \n" +"-h anahtarı Bu anahtar hakkındaki bilgileri göster \n" +"-g anahtarı Bu anahtarın son değerini al \n" +"-s anahtarı Bu anahtarın son değerini kur \n" +"\t" + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Değişikliklerinizin etkinleşmesi için bilgisayarı tekrar başlatmanız " +"gerekiyor\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Uyarı" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Değişiklikler bilgisayarın tekrar başlatılmasını gerektiriyor" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Değişiklikleri İptal Et" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Daha Sonra" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Şimdi Tekrar Başlat" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Kapat" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Tamam" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Silmeyi Onayla" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Silme Onayı: %s i tamamen silmek mi istiyorsunuz?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Kaydet" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Silme" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Favorilerimden kaldır" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Favorilerime ekle" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "dağınık görünüm" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "çember görünümü" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "sarmal" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "kutu" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "üçgen" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Kayıt Başarısız" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Kayıt Başarılı" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Şu an okul sunucunuza kayıt oldunuz" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Kaydol" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Yazılım Güncelleme" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "Aktivitelerinizi yeni yazılıma uygun hale getirmek için güncelleyiniz" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Şimdi Kontrol Et" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Liste Görünümü" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Favoriler Görünümü" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Tuş Çeşidi:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Kimlik Denetleme Çeşidi:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Devam Et" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Katıl" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Mesh Ağı %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Sunucuya Bağlanamıyor" + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Sunucu İsteği Tamamlayamıyor" + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Azalmak" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "Kaldır" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Aç" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Birlikte Aç" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s Kırp" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Komşular" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "İsim:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Renk değiştirmek için tıkla:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Geri" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "İleri" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "İsimsiz" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Ön izleme yok" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Tarih yok" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Katılımcılar:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Tanım:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Etiketler:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Günlük" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Arama" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Herhangi bir zaman" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Bugün" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Dünden itibaren" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Geçen hafta" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Geçen ay" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Geçen yıl" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Herhangi biri" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Arkadaşlarım" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Sınıfım" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "Herhangi bir şey" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Başlat" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Günlüğünüz boş" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +#, fuzzy +msgid "No matching entries" +msgstr "Eşleşen bir giriş yok_" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "Günlüğünüz dolu" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "" +"Yeni girişler yapabilmek için lütfen günlükteki eski kayıtlardan bir kısmını " +"siliniz" + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Günlüğü göster" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Bir nesne seçiniz" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Kapat" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB boş" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Arkadaşı Kaldır" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Arkadaş Ekle" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Kapat" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Yeniden Başlat" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Davet et %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Başlıyor..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Durdur" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "İçeriklerini göster" + +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "Kaldır" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/tvl.po b/po/tvl.po new file mode 100644 index 0000000..6a0b88d --- /dev/null +++ b/po/tvl.po @@ -0,0 +1,1763 @@ +# 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 , YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.3.0\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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/tzo.po b/po/tzo.po new file mode 100644 index 0000000..6b3491b --- /dev/null +++ b/po/tzo.po @@ -0,0 +1,1763 @@ +# 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 , YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.7.0\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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/ug.po b/po/ug.po new file mode 100644 index 0000000..49cb7fe --- /dev/null +++ b/po/ug.po @@ -0,0 +1,1762 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-02-27 06:25+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: ug\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "مەنبە" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/ur.po b/po/ur.po new file mode 100644 index 0000000..04c4619 --- /dev/null +++ b/po/ur.po @@ -0,0 +1,1993 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2012-04-09 19:10+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: ur\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 "ميرے بارے ميں" + +#: ../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 "سٹروک: رنگ=%s ہيو=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "سٹروک: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "بھر ديں: رنگ=%s ہيو=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "بھر ديں: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "رنگ تبديل کرنے کے ليے کلک کريں:" + +# کمپیوٹر کے بارے میں +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "کمپیوٹر کے بارے میں" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "دستیاب نہيں" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "پہچان" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "سيريل نمبر:" + +# سافٹ ویئر +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "سافٹ ویئر" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "سسٹم:" + +# شوگر +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "شوگر" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "فرم ویئر" + +# وائرلیس فرم وئر: +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "وائرلیس فرم وئر:" + +# کاپی رائٹ اور لائسنس +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "کاپی رائٹ اور لائسنس" + +# شوگر گرافیکل یوزر انٹرفیس ہے جسے آپ دیکھ رہے ہیں ہے. شوگ مفت سافٹ ویئر یے، GNU جنرل پبلک لائسنس کے تحت، اور آپ کو اسے تبدیل کرنے یا تقسیم کرنے کا اختیار دیا جاتا ہے ہے مخصوص شرائط کے تحت۔ +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 "" +"شوگر گرافیکل یوزر انٹرفیس ہے جسے آپ دیکھ رہے ہیں ہے. شوگ مفت سافٹ ویئر یے، " +"GNU جنرل پبلک لائسنس کے تحت، اور آپ کو اسے تبدیل کرنے یا تقسیم کرنے کا " +"اختیار دیا جاتا ہے ہے مخصوص شرائط کے تحت۔" + +# مکمل لائسنس : +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "فوری" + +# %s سيکنڈ +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s سيکنڈ" + +# چالو کرنے میں تاخیر +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "چالو کرنے میں تاخیر" + +# کونہ +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "کونہ" + +# کنارہ +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "کنارہ" + +# کی بورڈ +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "کی بورڈ" + +# کی بورڈ ماڈل +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "کی بورڈ ماڈل" + +# ترتیب تبدیل کرنے کی کی +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "ترتیب تبدیل کرنے کی کی" + +# کی بورڈ ترتیب +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "کی بورڈ ترتیب" + +# زبان +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "زبان" + +# رسائی ممکن نہيں~/.n18. سٹينڈرڈ بنائيں. +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "رسائی ممکن نہيں~/.n18. سٹينڈرڈ بنائيں." + +# کوڈ=%s کی زبان کا تعین نہیں کیا جا سکا۔ +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "کوڈ=%s کی زبان کا تعین نہیں کیا جا سکا۔" + +# معاف کيجيے ہم '%s' نہيں سمجھتے۔ +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "معاف کيجيے ہم '%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 "" +"آپ کو ترجیح دیتے ہیں اپنی مرزی سے زبانوں کو شامل کریں. اگر ترجمہ دستیاب نہیں " +"یوگا تو فہرست سے اگلا استعمال کیا جائے گا." + +# موڈیم کی ترتیب +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "موڈیم کی ترتیب" + +# سیلولر نیٹ ورک (3G) اور موبائل براڈبینڈ کنکشن قائم کرنے کے لئے آپ کو مندجہ زیل معلومات فرہم کرنا ہونگی۔ +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"سیلولر نیٹ ورک (3G) اور موبائل براڈبینڈ کنکشن قائم کرنے کے لئے آپ کو مندجہ " +"زیل معلومات فرہم کرنا ہونگی۔" + +# صارف کا نام +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "صارف کا نام" + +# پاس ورڈ +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "پاس ورڈ" + +# نمبر +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "نمبر" + +# رسائی نقطہ کا نام (APN) +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "رسائی نقطہ کا نام (APN)" + +# ذاتی شناختی نمبر (PIN) +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "ذاتی شناختی نمبر (PIN)" + +# نيٹ ورک +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "مخصوص کردہ ریڈیو آرگیومنٹ میں نقص، آن/آف استعمال کریں۔" + +# مخصوص آرگیومنٹ میں نقص ہو تو، 0/1 استعمال کریں۔ +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "مخصوص آرگیومنٹ میں نقص ہو تو، 0/1 استعمال کریں۔" + +# وائرلیس +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "وائرلیس" + +# وائرلیس ریڈیو کو بند کر دیں، بیٹری کی زندگی بچانے کے لئے۔ +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "وائرلیس ریڈیو کو بند کر دیں، بیٹری کی زندگی بچانے کے لئے۔" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +# نیٹ ورک کی تاریخ کو ضائع کر دیا جائے، اگر آپ کو نیٹ ورک کے ساتھ منسلک کرنےمیں پریشانی یے۔ +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" +"نیٹ ورک کی تاریخ کو ضائع کر دیا جائے، اگر آپ کو نیٹ ورک کے ساتھ منسلک " +"کرنےمیں پریشانی یے۔" + +# نیٹ ورک کی تاریخ ضائع کر دیا جائے +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "نیٹ ورک کی تاریخ ضائع کر دیا جائے" + +# تعاون +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "تعاون" + +# سرور اس چیز کے برابر ہوتا ہے، جدہر آپ موجود ہوتے ہیں، لوگ آپس میں ایک دوسرے کو دیکھ سکتے ہیں، اگرچہ وہ ایک ہی نئٹ ورک پہ موجود نہ ہوں۔ +#: ../extensions/cpsection/network/view.py:130 +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:140 +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 "خودکار pm برہان میں نقص، آن/آف استعمال کریں۔" + +#: ../extensions/cpsection/power/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "ایکسٹریم pm برہان میں نقص، آن/آف استعمال کریں۔" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "پاور کنٹرول" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "آٹو ميٹک پاور کنٹرول(بیٹری کا دورانيہ ذيادہ کرنے کے ليے)" + +# انتہائی پاور مینجمنٹ (وائرلیس ریڈیو کو غیر فعال کر دیتے ہیں، بیٹری کی زندگی کو بڑھاتا ہے) +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"انتہائی پاور مینجمنٹ (وائرلیس ریڈیو کو غیر فعال کر دیتے ہیں، بیٹری کی زندگی " +"کو بڑھاتا ہے)" + +# سافٹ ویئر اپ ڈیٹ +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "سافٹ ویئر اپ ڈیٹ" + +# سافٹ ویئر اپ ڈیٹس غلطیاں درست کرتا ہے، سیکورٹی کے خطرات کے خاتمے، اور نئی خصوصیات کی فراہمی. +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"سافٹ ویئر اپ ڈیٹس غلطیاں درست کرتا ہے، سیکورٹی کے خطرات کے خاتمے، اور نئی " +"خصوصیات کی فراہمی." + +# ..s٪ جانچ کی جا رہی +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "..%s جانچ کی جا رہی" + +# s٪ ڈاؤن لوڈ کیا جا رہا ہے... +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "%s ڈاؤن لوڈ کیا جا رہا ہے..." + +# s٪ اپ ڈیٹ کیا جا رہا ہے... +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "%s اپ ڈیٹ کیا جا رہا ہے..." + +# آپ کا سافٹ ویئر اپ ڈیٹ ہے +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "آپ کا سافٹ ویئر اپ ڈیٹ ہے" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +# اپ ڈیٹس کے لئے جانچ کی جا رہی... +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "اپ ڈیٹس کے لئے جانچ کی جا رہی..." + +# اپ ڈیٹس کی انسٹالیشن ہورہی ہے... +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "اپ ڈیٹس کی انسٹالیشن ہورہی ہے..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +# منتخب کردہ انسٹال کریں +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "منتخب کردہ انسٹال کریں" + +# ڈاؤن لوڈ کا سائز : s٪ +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "ڈاؤن لوڈ کا سائز : %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +# کچھ نہیں +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "کچھ نہیں" + +# ترجمہ : بہت چھوٹے اپ ڈیٹس کے ڈاؤن لوڈ کا سائز +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +# ترجمہ : بہت چھوٹے اپ ڈیٹس کے ڈاؤن لوڈ کا سائز, مثال 250 KB +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +# ترجمہ : اپ ڈیٹس کے ڈاؤن لوڈ کا سائز، مثال 2.3 MB +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "ميری بيٹری" + +# خارج کر دیا +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "خارج کر دیا" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "چارج کر رہا ہے" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d رہ گئے ہيں" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "چارج ہو گئی ہے" + +# IP ایڈریس : s٪ +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP ایڈریس : %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "کنيکشن مل رہا ہے۔۔۔" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "کنيکشن ہو گيا ہے" + +# کوئی وائرلیس کنکشن نہیں +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "کوئی وائرلیس کنکشن نہیں" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "چينل" + +# وائرڈ نیٹ ورک +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "وائرڈ نیٹ ورک" + +# رفتار +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "رفتار" + +# وائرلیس موڈیم +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "وائرلیس موڈیم" + +# براہ مہربانی انتظار کریں... +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "براہ مہربانی انتظار کریں..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "کنيکٹ" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "منقطع ہو گیا" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "منسوخ کريں" + +# کنکشن کی پھر سے کوشش کریں +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "کنکشن کی پھر سے کوشش کریں" + +# غلطی s% +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "غلطی %s" + +# تجاویز s% +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "تجاویز %s" + +# منسلک ہے s% +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "منسلک ہے %s" + +# %d KB +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +# اپنا PIN / Puk ترتیب چیک کریں. +#: ../extensions/deviceicon/network.py:350 +#, fuzzy +msgid "Check your PIN/PUK configuration." +msgstr "اپنا PIN / PUK ترتیب چیک کریں." + +# اپنئ رسائی نقطہ کے نام کی ترتیب (APN) چیک کریں +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "اپنئ رسائی نقطہ کے نام کی ترتیب (APN) چیک کریں" + +# نمبر ترتیب کو چیک کریں. +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "نمبر ترتیب کو چیک کریں." + +# اپنی کنفیگریشن کو چیک کریں. +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "اپنی کنفیگریشن کو چیک کریں." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "ميش نيٹ ورک" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, python-format, +msgid "Mesh Network %s" +msgstr "ميش نيٹ ورک %s" + +# کوئی GSM کنکشن دستیاب نہیں ہے. +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "کوئی GSM کنکشن دستیاب نہیں ہے." + +# کنٹرول پینل میں ایک کنکشن بنائیں. +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "کنٹرول پینل میں ایک کنکشن بنائیں." + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +#, fuzzy +msgid "Pitch" +msgstr "سطح" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "ميرے سپيکرز" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "ان ميوٹ" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "ميوٹ" + +# انگلی کریں +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "انگلی کریں" + +# اسٹاہلس +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "اسٹاہلس" + +# میرا ٹچ پیڈ +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "میرا ٹچ پیڈ" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "ميش" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "گروپ" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "گھر" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "سرگرمی" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "سکرين شاٹ" + +# "s%" کے اسکرین شاٹ +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "\"%s\" کے اسکرین شاٹ" + +# ابتدا پر نک پوچھنے کو "غیر فعال کر دیا گیا"، UNIX "نظام" اکاؤنٹ کے تہت طویل نام کو دوبارہ استعمال کرنے کے لئے. +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"ابتدا پر نک پوچھنے کو \"غیر فعال کر دیا گیا\"، UNIX \"نظام\" اکاؤنٹ کے تہت طویل " +"نام کو دوبارہ استعمال کرنے کے لئے." + +# اضافی ڈائرکٹری جس میں اپ ڈیٹ ترجمے ہوسکتے ہیں. +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "اضافی ڈائرکٹری جس میں اپ ڈیٹ ترجمے ہوسکتے ہیں." + +# بیک اپ URL +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "بیک اپ URL" + +# محفوظ سرگرمیوں کی پوٹلی کی شناخت +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "محفوظ سرگرمیوں کی پوٹلی کی شناخت" + +# XO آئکن کے لئے رنگ جو ڈیسک ٹاپ بھر میں استعمال کیا جاتا ہے. سٹرنگ سٹروک رنگ اور بھرنے کے رنگ پر مشتمل ہے، فارمیٹ ہے RGB رنگوں کا .مثال کے طور پر : # AC32FF، 9A5200 # +#: ../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 "" +"XO آئکن کے لئے رنگ جو ڈیسک ٹاپ بھر میں استعمال کیا جاتا ہے. سٹرنگ سٹروک " +"رنگ اور بھرنے کے رنگ پر مشتمل ہے، فارمیٹ ہے RGB رنگوں کا .مثال کے طور پر : # " +"AC32FF، 9A5200 #" + +# کارنر کی تاخیر +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "کارنر کی تاخیر" + +# پہلے سے مقرر شدہ فانٹ کا چہرہ +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "پہلے سے مقرر شدہ فانٹ کا چہرہ" + +# پہلے سے مقرر شدہ فونٹ سائز +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "پہلے سے مقرر شدہ فونٹ سائز" + +# پہلے سے طے شدہ نک +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "پہلے سے طے شدہ نک" + +# کونے کونے کا استعمال کرتے ہوئے فریم کی ایکٹیویشن کے لئے تاخیر. +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "کونے کونے کا استعمال کرتے ہوئے فریم کی ایکٹیویشن کے لئے تاخیر." + +# کناروں کو استعمال کرتے ہوئے فریم کی ایکٹیویشن کے لئے تاخیر. +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "کناروں کو استعمال کرتے ہوئے فریم کی ایکٹیویشن کے لئے تاخیر." + +# ترجمہ کی تلاش کے لئے ڈائرکٹری +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "ترجمہ کی تلاش کے لئے ڈائرکٹری" + +# ایج تاخیر +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "ایج تاخیر" + +# پسنديدہ خاکہ +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "پسنديدہ خاکہ" + +# پسنديدہ موڈ کو دوبارہ شروع کرنے کے لٰے +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "پسنديدہ موڈ کو دوبارہ شروع کرنے کے لٰے" + +# فونٹ جو ڈیسک ٹاپ بھر میں استعمال کیا جاتا ہے +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "فونٹ جو ڈیسک ٹاپ بھر میں استعمال کیا جاتا ہے" + +# فونٹ سائزجو ڈیسک ٹاپ بھر میں استعمال کیا جاتا ہے. +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "فونٹ سائزجو ڈیسک ٹاپ بھر میں استعمال کیا جاتا ہے." + +#: ../data/sugar.schemas.in.h:20 +#, fuzzy +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "GSM نیٹ ورک APNGSM نیٹ ورک APN" + +#: ../data/sugar.schemas.in.h:21 +#, fuzzy +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "GSM نیٹ ورک PIN" + +#: ../data/sugar.schemas.in.h:22 +#, fuzzy +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "GSM نیٹ ورک PUK" + +#: ../data/sugar.schemas.in.h:23 +#, fuzzy +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "GSM نیٹ ورک تک رسائی کے نقطہ نام کی ترتیب" + +#: ../data/sugar.schemas.in.h:24 +#, fuzzy +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "GSM نیٹ ورک نمبر" + +#: ../data/sugar.schemas.in.h:25 +#, fuzzy +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "GSM نیٹ ورک پاس ورڈ" + +#: ../data/sugar.schemas.in.h:26 +#, fuzzy +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "GSM نیٹ ورک پاس ورڈ کی ترتیب" + +#: ../data/sugar.schemas.in.h:27 +#, fuzzy +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "GSM نیٹ ورک کی ذاتی شناختی نمبر کی ترتیب" + +#: ../data/sugar.schemas.in.h:28 +#, fuzzy +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "GSM نیٹ ورک کی ذاتی کھولنے کی کلید کی ترتیب" + +#: ../data/sugar.schemas.in.h:29 +#, fuzzy +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "GSM نیٹ ورک ٹیلی فون نمبر کی ترتیب" + +#: ../data/sugar.schemas.in.h:30 +#, fuzzy +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "GSM نیٹ ورک صارف کا نام" + +#: ../data/sugar.schemas.in.h:31 +#, fuzzy +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "GSM نیٹ ورک صارف کا نام کی ترتیب" + +# اگر یہ سچ ہے تو شوگر ہمیں جیبر سرور کے دیگر صارفین کے لئے تلاش کرنا آسان بنا دے گا. +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"اگر یہ سچ ہے تو شوگر ہمیں جیبر سرور کے دیگر صارفین کے لئے تلاش کرنا آسان بنا " +"دے گا." + +# اگر یہ سچ ہے تو، شوگر "لاگ آؤٹ" کا اختیار دے گا. +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "اگر یہ سچ ہے تو، شوگر \"لاگ آؤٹ\" کا اختیار دے گا." + +# اگر یہ سچ ہے تو، شوگر "Restart" کا اختیار دے گا. +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "اگر یہ سچ ہے تو، شوگر \"Restart\" کا اختیار دے گا." + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +# کی بورڈ ترتیب +#: ../data/sugar.schemas.in.h:37 +#, fuzzy +msgid "Keyboard layouts" +msgstr "کی بورڈ ترتیب" + +# کی بورڈ ماڈل +#: ../data/sugar.schemas.in.h:38 +#, fuzzy +msgid "Keyboard model" +msgstr "کی بورڈ ماڈل" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +# فونٹ جو ڈیسک ٹاپ بھر میں استعمال کیا جاتا ہے +#: ../data/sugar.schemas.in.h:62 +#, fuzzy +msgid "User name that is used throughout the desktop." +msgstr "فونٹ جو ڈیسک ٹاپ بھر میں استعمال کیا جاتا ہے" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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 "شوگر-کنٹرول-پينل:ايک ہی نام کے ساتھہ کافی آپشن ملی ہيں: %s موڈيول: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "شوگر-کنٹرول-پينل: کی=%s يہ آپشن موجود نہيں ہے" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "شوگر-کنٹرول-پينل:%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 "" + +#: ../src/jarabe/controlpanel/cmd.py:52 +#, fuzzy +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "نئی تبديلیاں عمل میں لانے کے لیے آپ کو شوگر پھر شروع کرنا ہو گا۔\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "وارننگ" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "دوبارہ چلا کر تبديلياں عمل ميں لائيں" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "تبديلياں ختم کريں" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "بعد ميں" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "ابھی دوبارہ چلائيں" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "مکمل" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "ٹھیک ہے" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "مٹانا کنفرم کريں" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "مٹانا تصدیق کريں: کيا آپ مستقل طور پر اس کو مٹانا چاھتے ہيں %s؟" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "رکھيں" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "مٹائيں" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "پسنديدہ ختم کريں" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "پسندیدہ بنائيں" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "فری فارم" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "پليٹ" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "رجسٹريشن نہيں ہوئی" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "رجسٹريشن ہو گئی" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "اب آپ اپنے سکول سرور کے ساتھہ رجسٹرڈ ہيں۔" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "رجسٹر کريں" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +# سافٹ ویئر اپ ڈیٹ +#: ../src/jarabe/desktop/homebox.py:66 +#, fuzzy +msgid "Software Update" +msgstr "سافٹ ویئر اپ ڈیٹ" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "فہرست نظارہ" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "پسندیدگان نظارہ" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "اصل قسم:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "اجاذت دينے کی قسم:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "پھر شروع کريں" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "شرکت کريں" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +#, python-format, +msgid "Mesh Network %d" +msgstr "ميش نيٹ ورک %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "منظور نہیں ہوا" + +# %d KB +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +#, python-format, fuzzy +msgid "%dB" +msgstr "%dB" + +# %d KB +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +#, python-format, fuzzy +msgid "%dKB" +msgstr "%dKB" + +# %d KB +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +#, fuzzy +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +# خارج کر دیا +#: ../src/jarabe/frame/clipboardmenu.py:56 +#, fuzzy +msgctxt "Clipboard" +msgid "Remove" +msgstr "خارج کر دیا" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "کھوليں" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "اس کے ساتھہ کھولیں" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "ميرے پڑوسی" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "نام:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "رنگ تبديل کرنے کے ليے کلک کريں:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "واپس" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "آگے" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "شروع کريں" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB dخالی" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "دوست کو ہٹائيں" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "دوست بنائيں" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "بند کريں" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "دوبارہ چلائيں" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "%s کی دعوت دیں" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "شروع ہو رہا ہے ..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "روکیں" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "مشمولات دکھائيں" + +# خارج کر دیا +#: ../src/jarabe/view/palettes.py:229 +#, fuzzy +msgctxt "Volume" +msgid "Remove" +msgstr "خارج کر دیا" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" + +# GSM نیٹ ورک صارف کا نام کی ترتیب +#~ msgid "GSM network username configuration" +#~ msgstr "GSM نیٹ ورک صارف کا نام کی ترتیب" + +# زاتی ان بلاکینگ کی (PUK) +#~ msgid "Personal Unblocking Key (PUK):" +#~ msgstr "زاتی ان بلاکینگ کی (PUK)" + +# GSM نیٹ ورک پاس ورڈ کی ترتیب +#~ msgid "GSM network password configuration" +#~ msgstr "GSM نیٹ ورک پاس ورڈ کی ترتیب" + +# GSM نیٹ ورک نمبر +#~ msgid "GSM network number" +#~ msgstr "GSM نیٹ ورک نمبر" + +# GSM نیٹ ورک ٹیلی فون نمبر کی ترتیب +#~ msgid "GSM network telephone number configuration" +#~ msgstr "GSM نیٹ ورک ٹیلی فون نمبر کی ترتیب" + +# GSM نیٹ ورک کی ذاتی کھولنے کی کلید کی ترتیب +#~ msgid "GSM network personal unlock key configuration" +#~ msgstr "GSM نیٹ ورک کی ذاتی کھولنے کی کلید کی ترتیب" + +# GSM نیٹ ورک پاس ورڈ +#~ msgid "GSM network password" +#~ msgstr "GSM نیٹ ورک پاس ورڈ" + +# %(interface)s: %(version)s +#, python-format +#~ msgid "%(interface)s: %(version)s" +#~ msgstr "%(interface)s: %(version)s" + +# GSM نیٹ ورک PIN +#~ msgid "GSM network PIN" +#~ msgstr "GSM نیٹ ورک PIN" + +# GSM نیٹ ورک کی ذاتی شناختی نمبر کی ترتیب +#~ msgid "GSM network personal identification number configuration" +#~ msgstr "GSM نیٹ ورک کی ذاتی شناختی نمبر کی ترتیب" + +# GSM نیٹ ورک APN +#~ msgid "GSM network APN" +#~ msgstr "GSM نیٹ ورک APN" + +# GSM نیٹ ورک PUN +#~ msgid "GSM network PUK" +#~ msgstr "GSM نیٹ ورک PUN" + +#, python-format +#~ msgid "%s" +#~ msgstr "%s" + +# GSM نیٹ ورک صارف کا نام +#~ msgid "GSM network username" +#~ msgstr "GSM نیٹ ورک صارف کا نام" + +# GSM نیٹ ورک تک رسائی کے نقطہ نام کی ترتیب +#~ msgid "GSM network access point name configuration" +#~ msgstr "GSM نیٹ ورک تک رسائی کے نقطہ نام کی ترتیب" diff --git a/po/vi.po b/po/vi.po new file mode 100644 index 0000000..7a75b85 --- /dev/null +++ b/po/vi.po @@ -0,0 +1,1838 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-05-01 00:34-0400\n" +"PO-Revision-Date: 2012-05-19 18:45+0200\n" +"Last-Translator: Chris \n" +"Language-Team: LANGUAGE \n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.5\n" + +#: ../extensions/cpsection/aboutme/__init__.py:24 +msgid "About Me" +msgstr "Giới thiệu về bản thân mình" + +#: ../extensions/cpsection/aboutme/model.py:48 +msgid "You must enter a name." +msgstr "Bạn cần phải nhập 1 tên" + +#: ../extensions/cpsection/aboutme/model.py:75 +#, python-format +msgid "stroke: color=%s hue=%s" +msgstr "nét vẽ: màu=%s sắc=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "nét vẽ: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "tô màu : màu=%s sắc=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "tô màu : %s" + +#: ../extensions/cpsection/aboutme/model.py:94 +msgid "Error in specified color modifiers." +msgstr "Có lỗi trong việc sửa đổi 1 màu xác định" + +#: ../extensions/cpsection/aboutme/model.py:97 +msgid "Error in specified colors." +msgstr "lỗi trong màu sắc được chỉ định" + +#: ../extensions/cpsection/aboutme/view.py:235 +msgid "Click to change your color:" +msgstr "Nhấp chuột để thay đổi màu sắc :" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "Giới thiệu về cái máy tính này" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "Không sẵn sàng (không có sẵn) để sử dụng" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "Cá tính , bản sắc" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "Số sản xuất:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "Phần mềm" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "Bản xây dựng:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "Phần vững:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "Phần vững kết nối không dây:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "Tác quyền và Giấy phép" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 là giao diện người dùng đồ họa thích hợp với bạn. Sugar là phần mềm " +"miễn phí, được bảo đảm bởi Giấy Phép Công Cộng GNU (GPL), bạn có quyền sửa " +"đổi và/hay phân phối lại bản sao nó với các điều kiện GPL." + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +msgstr "Giấy phép đầy đủ :" + +#: ../extensions/cpsection/datetime/__init__.py:21 +msgid "Date & Time" +msgstr "Ngày và Giờ" + +#: ../extensions/cpsection/datetime/model.py:92 +msgid "Error timezone does not exist." +msgstr "Lỗi: múi giờ không tồn tại." + +#: ../extensions/cpsection/datetime/view.py:70 ../data/sugar.schemas.in.h:56 +msgid "Timezone" +msgstr "Múi giờ" + +#: ../extensions/cpsection/frame/__init__.py:21 +msgid "Frame" +msgstr "Khung" + +#: ../extensions/cpsection/frame/model.py:41 +#: ../extensions/cpsection/frame/model.py:66 +msgid "Value must be an integer." +msgstr "Giá trị bắt buộc phải là một số nguyên." + +#: ../extensions/cpsection/frame/view.py:27 +msgid "never" +msgstr "không bao giờ" + +#: ../extensions/cpsection/frame/view.py:28 +msgid "instantaneous" +msgstr "ngay lập tức" + +#: ../extensions/cpsection/frame/view.py:29 +#, python-format +msgid "%s seconds" +msgstr "%s giây" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "thời gian chờ kích hoạt" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "Góc" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "Cạnh" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "Bàn phím" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "Mô hình bàn phím" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "(Tổ hợp) phím để chuyển đổi bố trí" + +#: ../extensions/cpsection/keyboard/view.py:319 +msgid "Keyboard Layout(s)" +msgstr "Bố trí Bàn phím" + +#: ../extensions/cpsection/language/__init__.py:21 +#: ../extensions/cpsection/language/view.py:33 +msgid "Language" +msgstr "Ngôn ngữ" + +#: ../extensions/cpsection/language/model.py:30 +msgid "Could not access ~/.i18n. Create standard settings." +msgstr "" +"Không thể truy cập đến thư mục « ~/.i18n ». Hãy tạo thiết lập tiêu chuẩn." + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "Không thể quyết định ngôn ngữ cho mã=%s." + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "Tiếc là chương trình này không hiểu « %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 "" +"Thêm vào các ngôn ngữ bạn thích. Nếu không có bản dịch thì máy sẽ dùng ngôn " +"ngữ kế tiếp trong danh sách này." + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "Cấu hình mô-đêm" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "" +"Bạn cần cung cấp các thông tin sau đây để thiết lập kết nối băng rộng di " +"động tới mạng di động 3G." + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "Tên người dùng:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "Mật khẩu :" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "Số :" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "Tên điểm truy nhập" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "Số định danh cá nhân (PIN) (số mật mã) :" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +msgid "Network" +msgstr "Mạng" + +#: ../extensions/cpsection/network/model.py:73 +msgid "State is unknown." +msgstr "Không rõ tình trạng." + +#: ../extensions/cpsection/network/model.py:101 +msgid "Error in specified radio argument use on/off." +msgstr "Lỗi trong đối số chọn một đã ghi rõ bật/tắt." + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "Lỗi trong đối số chỉ định: dùng 0/1." + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "Không dây" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "Tắt máy thu thanh không dây để tiết kiệm thời gian chạy bằng pin" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "Thu thanh" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "Hủy lịch sử mạng nếu bạn gặp khó khăn trong việc kết nối tới mạng" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "Hủy lịch sử mạng" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "Hợp tác" + +#: ../extensions/cpsection/network/view.py:130 +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 "" +"Máy phục vụ giống như một phòng chứa vài người khác nhau : những người cùng " +"phòng (trên cùng một máy phục vụ) thì có thể liên lạc với nhau, ngay cả khi " +"không phải làm cùng một việc (trên cùng một mạng)." + +#: ../extensions/cpsection/network/view.py:140 +msgid "Server:" +msgstr "Máy phục vụ :" + +#: ../extensions/cpsection/power/__init__.py:21 +msgid "Power" +msgstr "Năng lượng" + +#: ../extensions/cpsection/power/model.py:90 +msgid "Error in automatic pm argument, use on/off." +msgstr "Lỗi trong đối số tự động pm: dùng on/off." + +#: ../extensions/cpsection/power/view.py:45 +msgid "Power management" +msgstr "Quản lý năng lượng" + +#: ../extensions/cpsection/power/view.py:55 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "Tự động quản lý năng lượng (tăng thời gian chạy bằng pin)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "Cập nhật phần mềm" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" +"Bản cập nhật phần mềm thì sửa chữa lỗi, loại trừ trường hợp có thể bị lỗ " +"hổng bảo mật, và cung cấp tính năng mới." + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "Đang kiểm tra %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "Đang tải về %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "Đang cập nhật %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "Phần mềm vẫn còn hiện thời" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "Bạn có dịp cài đặt %s bản cập nhật" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "Đang kiểm tra có bản cập nhật chưa..." + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "Đang cài đặt bản cập nhật..." + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "%s bản cập nhật đã được cài đặt" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "Cài đặt mục đã chọn" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "Kích cỡ tải về: %s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "Từ phiên bản %(current)s lên %(new)s (Kích cỡ : %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "Không có" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "Pin của mình" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "Bị bỏ" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "Đang sạc" + +#: ../extensions/deviceicon/battery.py:153 +msgid "Very little power remaining" +msgstr "Pin yếu tới hạn" + +#. TRANS: do not translate %(hour)d:%(min).2d it is a variable, +#. only translate the word "remaining" +#: ../extensions/deviceicon/battery.py:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "%(hour)d:%(min).2d còn lại" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "Sạc đầy" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "Địa chỉ IP: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "Ngắt kết nối" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "Đang kết nối..." + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "Đã kết nối" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "Không có kết nối không dây" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "Kênh" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "Mạng theo dây" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "Tốc độ" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "Mô-đem vô tuyến" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "Hãy đợi..." + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "Kết nối" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "Bị ngắt kết nối" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "Thôi" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "Thử kết nối lại" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "Lỗi: %s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "Gợi ý: %s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "Đã kết nối cho %s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d KB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "Kiểm tra cấu hình PIN/PUK." + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "Kiểm tra cấu hình Tên điểm kết nối (APN)" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "Kiểm tra cấu hình Số." + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "Kiểm tra cấu hình." + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "Mạng mắc lưới" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "Mạng mắc lưới %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "Không tồn tại kết nối GSM nào" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "Tạo 1 kết nối trong bảng điều khiển" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "phát biểu" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "đoạn văn bản được chọn" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "dừng phát lại" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "độ cao thấp" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "mật độ" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "tạm dừng phát lại" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "Loa âm thanh của tôi" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "bật tiếng" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "Câm" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "ngón tay" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "stylus" +msgstr "bút cảm ứng" + +#: ../extensions/deviceicon/touchpad.py:64 +msgid "My touchpad" +msgstr "chuột laptop của tôi" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "lưới" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "Nhóm" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "Nhà" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "Hoạt động" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "Ảnh chụp màn hình" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "Ảnh chụp màn hình « %s »" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "" +"«bị khóa» để yêu cầu tên hiệu khi khởi tạo;«hệ thống» để sử dụng lại tên dài " +"của tài khoản UNIX" + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "những thư mục thêm vào có thể bao gồm các bản dịch đã được cập nhập" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "URL sao lưu" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "Các gói xác nhận của những hoạt động bảo hộ" + +#: ../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 "" +"Màu của biểu tượng XO được sử dụng xuyên suốt màn hình chính.Các chuỗi bao " +"gồm màu viền và màu tô đầy, định dạng màu là RGB. Ví dụ: #AC32FF ,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "Góc ngăn" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "Kiểu chữ mặc định" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "Cỡ chữ mặc định" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "Tên hiệu mặc định" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "Khoảng đợi khi kích hoạt khung dùng góc." + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "Khoảng đợi khi kích hoạt khung dùng cạnh." + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "Thư mục để tìm các bản dịch" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "Trễ cạnh" + +#: ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" +"Quản lý năng lượng tối đa (tắt máy thu thanh không dây, tăng thời gian chạy " +"bằng pin)" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "Bố trí Ưa thích" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "Chế độ tiếp tục lại mục ưa thích" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "Mặt phông chữ được sử dụng trên toàn bộ môi trường." + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "Kích cỡ phông chữ được sử dụng trên toàn bộ môi trường." + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" +"một giao thức máy tính cho phép của người dùng máy tính để truy cập vào mạng " +"bằng cách sử dụng hệ thống truyền thông di động toàn cầu" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" +"Mật khẩu của người dùng để truy cập vào mạng bằng cách sử dụng hệ thống " +"truyền thông di động toàn cầu" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" +"Mật khẩu của nhà điều hành mạng cung cấp để truy cập vào mạng bằng cách sử " +"dụng hệ thống truyền thông di động toàn cầu" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" +"tên cấu hình điểm truy cập mạng bằng cách sử sụng hệ thống truyền thông di " +"động toàn cầu" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" +"số truy cập mạng bằng cách sử dụng hệ thống truyền thông di động toàn cầu" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" +"Mật khẩu của người dùng để truy cập vào mạng bằng cách sử dụng hệ thống " +"truyền thông di động toàn cầu" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" +"số cấu hình mạng điện thoại sử dụng hệ thống truyền thông di động toàn cầu" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" +"số cấu hình mạng cá nhân sử dụng hệ thống truyền thông di động toàn cầu" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" +"mạng lưới cá nhân mở khóa quan trọng cấu hình sử dụng hệ thống truyền thông " +"di động toàn cầu" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" +"số cấu hình mạng điện thoại sử dụng hệ thống truyền thông di động toàn cầu" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "tên người dùng mạng sử dụng hệ thống truyền thông di động toàn cầu" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" +"tên người dùng cấu hình mạng sử dụng hệ thống truyền thông di động toàn cầu" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" +"nếu Đúng thì Sugar sẽ cấp các người khác trên máy phục vụ Jabber có quyền " +"tìm kiếm qua chúng ta." + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "Nếu Đúng thì Sugar hiển thị một tùy chọn « Đăng xuất »." + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "Nếu Đúng, Sugar sẽ hiển thị một tùy chọn \"Khởi động lại\"." + +#: ../data/sugar.schemas.in.h:35 +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 "" +"Nếu Đúng, Sugar sẽ hiển thị mặc ​​định của mạng Ad-hoc cho kênh 1,6 và 11. " +"Nếu đường thấy không có mạng \"nổi tiếng\" khi nó bắt đầu, nó tự động kết nối " +"đến một mạng Ad-hoc.)" + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Máy phục vụ Jabber" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "Bố trí bàn phím" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "Mô hình bàn phím" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "Tuỳ chọn bàn phím" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "Bố trí của ô xem các mục ưa thích." + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "Danh sách các bố trí bàn phím. Mỗi mục nên có dạng « bố_trí(biến_đổi) »" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "Danh sách các tuỳ chọn về bàn phím." + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "Giá trị cao thấp cho dịch vụ phát âm sugar" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "Giá trị cao thấp được sử dụng bởi dịch vụ phát âm trong Sugar" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "Tự động năng lượng" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "Năng lượng cực" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "Xuất tới Gadget" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "Giá trị tỉ lệ cho dịch vụ phát âm Sugar" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "Giá trị tỉ lệ được sử dụng bởi dịch vụ phát âm trong Sugar" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "Thiết lập im lặng thiết bị âm thanh." + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "Hiện Đăng xuất" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "Hiện khởi động lại" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "Hiển thị mạng Ad-hoc Sugar" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "Tắt tiếng" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "Mô hình bàn phím cần dùng" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "Thiết lập múi giờ cho hệ thống." + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "Địa chỉ URL của máy phục vụ Jabber cần dùng." + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "Địa chỉ URL vào đó lưu bản sao lưu." + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "Màu người dùng" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "Tên người dùng" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "Tên người dùng được sử dụng trên toàn bộ môi trường." + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" +"Người dùng sẽ không được phép xóa các hoạt động này thông qua việc xem danh " +"sách" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "Mức âm lượng" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "Mức âm lượng cho thiết bị âm thanh" + +#: ../data/sugar.schemas.in.h:66 +msgid "" +"When in resume mode, clicking on a favorite icon will cause the last entry " +"for that activity to be resumed." +msgstr "" +"Khi ở chế độ tiếp tục lại, nhấn vào biểu tượng yêu thích thì sẽ tạo ra dữ " +"liệu nhập cuối cùng cho hoạt động đó được nối lại" + +#: ../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: CẢNH BÁO : tìm nhiều tùy chọn cùng tên: mô-đun %s: %r" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "sugar-control-panel: khoá=%s không phải là một tùy chọn sẵn sàng" + +#: ../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. +#. 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 "" +"Sử dụng: sugar-control-panel [ tùy_chọn ] khoá [ đối_số ... ]\n" +" Điều khiển môi trường sugar.\n" +" Tùy chọn:\n" +" -h hiển thị trợ giúp này và thoát\n" +" -l liệt kê tất cả các tùy chọn sẵn sàng\n" +" -h khoá hiển thị thông tin về khoá này\n" +" -g khoá lấy giá trị hiện thời của khoá này\n" +" -s khoá đặt giá trị hiện thời của khoá này\n" +" -c khoá xoá giá trị hiện thời của khoá\\ n " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "Để áp dụng các thay đổi thì cần phải khởi chạy lại Sugar.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "Cảnh báo" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "Thay đổi yêu cầu khởi động lại" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "Hủy bỏ thay đổi" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "Sau đó" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "Khởi động lại ngay" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "Hoàn tất" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "Đồng ý" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "Phiên bản %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "Xác nhận việc xoá" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "Xác nhận việc xoá: bạn có muốn xoá hẳn %s không?" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "Giữ" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "Xoá" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "Bỏ Ưa thích" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "Đặt Ưa thích" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "Dạng tự do" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "Vòng" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "Xoắn ốc" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "Hộp" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "Hình tam giác" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "Đăng ký thất bại" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "Đang ký thành công" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "Bây giờ bạn đã đăng ký với máy chủ của trường bạn" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "Đăng ký" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "Đăng ký lại" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "Cập nhật Phần mềm" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "Cập nhật các hoạt động để đảm bảo tính tương thích với phần mềm mới" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "Kiểm tra ngay" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "Xem danh sách" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "Tổ hợp phím 2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "Xem Ưa thích" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "Tổ hợp phím 1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" +"Một nhân tố mã hóa không dây được yêu cầu cho\n" +" mạng không dây '%s'." + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "Kiểu khoá:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "Cách xác thực:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA và WPA2 Cá nhân" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "Bảo mật Không dây:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "Tiếp tục / Hồi phục lại" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "Vào/tham gia" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Mạng không dự tính trước, không theo thể thức %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "Mạng mắc lưới %d" + +#: ../src/jarabe/desktop/schoolserver.py:143 +msgid "Cannot connect to the server." +msgstr "Không thể kết nối tới máy chủ" + +#: ../src/jarabe/desktop/schoolserver.py:150 +msgid "The server could not complete the request." +msgstr "Máy chủ không thể hoàn tất yêu cầu." + +#: ../src/jarabe/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "Từ chối" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s trên %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "Truyền từ %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "Chấp nhận" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "Hủy" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "Những người tham gia khác đã ngưng truyền tập tin" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "Truyền tới %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "bỏ" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "Mở" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "Mở bằng" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "đoạn trích %s" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "Mạng lân cận" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "Tên:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "Nhấn vào để thay đổi mảu:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Trở lại" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "Tiếp theo" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "Không có tiêu đề" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "Không xem thử" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "Loại : %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "Không rõ" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "Ngày: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "Kích cỡ : %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "Không có ngày tháng" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "Người dự :" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "Mô tả:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "Thẻ:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "Nhật ký" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Tìm kiếm" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "Bất cứ lúc nào" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "Hôm nay" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "Kể từ ngày hôm qua" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "Tuần qua" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "Tháng qua" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "Năm qua" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "Bất cứ ai" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "Bạn bè của tôi" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "Lớp học của tôi" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "bất cứ cái gì" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "sao chép đến" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "bản sao" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format, +msgid "Error while copying the entry. %s" +msgstr "lỗi trong khi đang sao chép mục. %s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "Lỗi" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "Khởi chạy" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "Sắp xếp theo ngày sửa đổi" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "Sắp xếp theo ngày khởi tạo" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "Sắp xếp theo kích cỡ" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "sắp xếp hiển thị" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "Nhật ký của bạn còn trống" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "danh mục tài liệu của bạn trống rỗng" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "không có thiết bị" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "Không tìm thấy" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "Xoá trường tìm" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format, +msgid "Older Version Of %s Activity" +msgstr "Phiên bản cũ hơn của %s hoạt động" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format, +msgid "Do you want to downgrade to version %s" +msgstr "Bạn có muốn hạ cấp xuống phiên bản %s" + +#: ../src/jarabe/journal/modalalert.py:64 +msgid "Your Journal is full" +msgstr "nhật ký của bạn đã đầy" + +#: ../src/jarabe/journal/modalalert.py:68 +msgid "Please delete some old Journal entries to make space for new ones." +msgstr "" +"Hãy xoá một số mục nhập Nhật ký cũ để giải phóng thêm sức chứa cho mục nhập " +"mới." + +#: ../src/jarabe/journal/modalalert.py:80 +msgid "Show Journal" +msgstr "Hiện Nhật ký" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "Chọn một đối tượng" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "Đóng" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "Tiếp tục lại với" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "Bắt đầu với" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "ngừng hoạt động để bắt đầu việc đăng nhập" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "Gửi cho" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "Xem chi tiết" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "mục không có tập tin nào thì không thể gửi được" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "mục không có tập tin nào thì không thể sao chép được" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "bảng ghi tạm" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "hiện tại không có bạn bè" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "Không tìm thấy kết nối hợp lệ" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "ngừng hoạt động để phục hồi lại đăng nhập" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "tài liệu" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "%(free_space)d MB còn trống" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "lí do thay đổi trạng thái của thiết bị là không rõ" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "thay đổi trạng thái là bình thường" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "hiện tại thiết bị được quản lí" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "thiết bị không được quản lí nữa" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "thiết bị không thể sẵn sàng cho cấu hình" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "cấu hình IP không thể bảo lưu (không có sẵn địa chỉ, thời gian chờ..)" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "cấu hình IP không còn hợp lệ" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "các bí mật được yêu cầu, nhưng không được cung cấp" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" +"802.1X hổ trợ khi mất kết nối từ điểm truy cập hoặc thẩm định từ máy chủ" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "cấu hình của 802.1X hổ trợ bị thất bại" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "802.1 không hổ trợ hoặc bất ngờ thất bại" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "802.1 đã hổ trợ quá dài để xác thực" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "Khởi chạy dịch vụ PPP trong thời gian cho phép thất bại" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "Dịch vụ PPP mất kết nối đột ngột" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "Dịch vụ PPP bị thoát ra không mong muốn" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "Khởi chạy dịch vụ DHCP trong thời gian cho phép thất bại" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "Dịch vụ DHCP ghi nhận lỗi không mong muốn" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "Dịch vụ DHCP bị thoát ra không mong muốn" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "Khởi chạy dịch vụ chia sẻ kết nối thất bại" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "Dịch vụ chia sẻ kết nối bị thoát ra không mong muốn" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "Dịch vụ AutoIP khởi chạy thất bại" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "Dịch vụ AutoIP ghi nhận lỗi không mong muốn" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "Dịch vụ AutoIP bị thoát ra không mong muốn" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "Quay số thất bại vì đường dây đang bận" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "Quay số thất bại vì không có tín hiệu" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "Quay số thất bại vì không có nhà cung cấp dịch vụ" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "Quay số đã quá hạn" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "Quay số thất bại" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "Khởi tạo modem thất bại" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "Lựa chọn GSM APN được chỉ định thất bại" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "Không tìm kiếm mạng lưới" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "Đăng ki mạng lưới bị từ chối" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "Đăng kí mạng lưới đã quá hạn" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "Thất bại trong việc đăng ký vs bằng mạng lưới GSM đã yêu cầu" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "Kiểm tra mã PIN thất bại" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "Phần vữa cần thiết cho thiết bị có thể bị thiếu" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "Thiết bị đã bị gỡ bỏ" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "Trình quản lí mạng lưới đã chuyển qua chế độ ngủ" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "Kết nối hiện thời của thiết bị đã bị loại bỏ hoặc mất kết nối" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "Người sử dụng hoặc máy khách yêu cầu ngắt kết nối" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "Nhà cung cấp dịch vụ/đường dẫn của thiết bị đã thay đổi" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "kết nối đã tồn tại của thiết bị đã được giả định" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "Nguồn cung cấp bây giờ đã có." + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "modem k thể tìm thấy" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "kết nối Bluetooth bị thất bại hoặc quá thời gian" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "ko sử dụng" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "Bỏ bạn" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "Kết bạn" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "Tắt máy" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "Khởi chạy lại" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "Đăng xuất" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "Thiết lập của mình" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "Mời vào %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s thất bại trong việc khởi chạy" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "Đang khởi chạy..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "hoạt động thất bại trong việc khởi chạy" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "Xem nguồn" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "Dừng" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "Khởi chạy mới" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "Hiện nội dung" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "Bỏ" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "Nguồn mẫu" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "Nguồn" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "Nguồn các gói hoạt động" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Nguồn bộ dụng cụ Sugar" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "Xem nguồn: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "Xem nguồn: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "Sugar trong 1 cửa sổ" + +#~ msgid "Error in extreme pm argument, use on/off." +#~ msgstr "Lỗi trong đối số extreme pm: dùng on/off." diff --git a/po/wa.po b/po/wa.po new file mode 100644 index 0000000..844f1ff --- /dev/null +++ b/po/wa.po @@ -0,0 +1,1775 @@ +# 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 , YEAR. +# 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 , YEAR. +# 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 , YEAR. +# 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 , YEAR. +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1rc4\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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/yo.po b/po/yo.po new file mode 100644 index 0000000..82de794 --- /dev/null +++ b/po/yo.po @@ -0,0 +1,1763 @@ +# translation of sugar.po to Yoruba +# This file is distributed under the same license as the PACKAGE package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. +# Fajuyitan, Sunday , 2006. +# Fajuyitan, Sunday Ayo , 2006. +msgid "" +msgstr "" +"Project-Id-Version: sugar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-11 00:33-0400\n" +"PO-Revision-Date: 2006-07-07 09:48+0100\n" +"Last-Translator: Fajuyitan, Sunday Ayo \n" +"Language-Team: Yoruba\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.10\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:235 +msgid "Click to change your color:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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:113 +msgid "Edge" +msgstr "" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "" + +#: ../extensions/cpsection/keyboard/view.py:319 +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:67 +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:77 +msgid "Username:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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:61 +msgid "Wireless" +msgstr "" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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/model.py:120 +msgid "Error in extreme pm argument, use on/off." +msgstr "" + +#: ../extensions/cpsection/power/view.py:48 +msgid "Power management" +msgstr "" + +#: ../extensions/cpsection/power/view.py:58 ../data/sugar.schemas.in.h:3 +msgid "Automatic power management (increases battery life)" +msgstr "" + +#: ../extensions/cpsection/power/view.py:86 ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "" +msgstr[1] "" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +msgstr "" + +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "" + +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "" + +#: ../extensions/deviceicon/speaker.py:141 +msgid "Mute" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:38 +msgid "finger" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:39 +msgid "stylus" +msgstr "" + +#: ../extensions/deviceicon/touchpad.py:68 +msgid "My touchpad" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "" + +#: ../extensions/globalkey/screenshot.py:74 +#, 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 "Additional directories which can contain updated translations." +msgstr "" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "" + +#: ../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 "" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "" + +#: ../data/sugar.schemas.in.h:35 +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:36 +msgid "Jabber Server" +msgstr "" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "" + +#: ../data/sugar.schemas.in.h:66 +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:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "" + +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "" + +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "" + +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "" + +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "" + +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, 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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "Padà Sẹ́yìn" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "Wádìí" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "" + +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "" + +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "" + +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "" + +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +msgid "View source: %s" +msgstr "" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..d1c8ebf --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,1874 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-05-01 00:34-0400\n" +"PO-Revision-Date: 2012-05-09 16:12+0200\n" +"Last-Translator: lite \n" +"Language-Team: LANGUAGE \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-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 "画笔: 颜色=%s 色调=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "画笔: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "填充: 颜色=%s 色调=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "填充: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "点击改变颜色:" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "关于我的电脑" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "不可用" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "身份" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "序列号:" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "软件" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "构建" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "固件:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "无线固件:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "版权与许可" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 是您目前所看到的图像用户界面。Sugar 是一个免费软件,以 GNU 的 GPL 授权。欢迎您依据授权条例更改或散布本软件。" + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s 秒" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "显示边框的延迟时间" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "角落" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "边缘" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "键盘" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "键盘型号" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "改变布局的快捷键" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "无法读取~/.i18n. 创建标准设置。" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "无法确定代码为 %s 的语言。" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "对不起,我不会说 '%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 "请根据你的喜好添加语言。如果所选的语言未有翻译提供,便会采用列表上的下一种语言。" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "调制解调器配置" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "为建立移动宽带连接到移动(3G)网络,你需要提供以下信息。" + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "用户名:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "密码∶" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "号码:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "接入点名称 (APN):" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "个人身份号码 (PIN):" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "指定的参数错误,请使用0/1。" + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "无线" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "关闭无线网络信号以增加电池使用时间" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "无线信号" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "如果你无法连接网络,请尝试清除网络历史资料" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "清除网络历史资料" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "协作" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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:3 +msgid "Automatic power management (increases battery life)" +msgstr "自动省电管理(延长电池寿命)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "软件更新" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "软件更新会修正错误,消除安全漏洞,以及提供新的功能。" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "正在检查 %s..." + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "正在下载 %s..." + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "正在更新 %s..." + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "您的软件是最新的" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "你可以安装 %s个更新" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "正在检查更新…" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "正在安装更新…" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "已安装 %s个更新" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "安装已选择的更新" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "下载大小:%s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "從版本 %(current)s 更新到 %(new)s (大小:%(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "无" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1千字节" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f 千字节" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f 兆字节" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "我的电池状态" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "已删除" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "充电中" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "剩余电量 %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "充电完毕" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "IP 位址:%s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "正在连线…" + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "已连接" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "没有无线网络" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "频道" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "有线网络" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "速度" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "无线数据机" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "请稍候…" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "连接" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "已切断" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "取消" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "请再尝试连线" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "错误:%s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "建议:%s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "已连接到%s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%d 千字节" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "请检查你的PIN/PUK配置。" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "请检查你的接入点名称(APN)配置。" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "请检查号码配置。" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "请检查你的配置。" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "无线网格网络" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +#, python-format, +msgid "Mesh Network %s" +msgstr "无线网格网络 %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "没有可用的GSM连接。" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "在控制面板中创建新的连接。" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "语音" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "朗读选中文字" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "停止播放" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "音高" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "速率" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "暂停播放" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "我的扬声器" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "取消静音" + +#: ../extensions/deviceicon/speaker.py:141 +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/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "网状网络" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "我的群组" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "我的家" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "活动" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "屏幕抓图" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "\"%s\"的截屏" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "\"disabled\" 当初始化的时候会询问昵称; \"system\"重用了UNIX系统账户。" + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "额外的目录中包含已更新的翻译。" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "备份网址" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "受保护活动的包编号" + +#: ../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 "XO的图标颜色使用于整个桌面。笔触和填充颜色组成的字符串格式是RGB颜色。例如:#AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "转角延迟" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "默认字体" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "默认字体大小" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "默认昵称" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "屏幕四角触发边框显示的延迟时间。" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "屏幕边缘触发边框显示的延迟时间。" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "搜索翻译的目录" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "边沿延迟" + +#: ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "极低电源管理(关闭无线,增加电池使用时间)" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "偏好布局" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "最爱的恢复模式" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "整个桌面使用的字体。" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "整个桌面使用的字体大小。" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "GSM网络的APN(不推荐/未使用)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "GSM网络的PIN(不推荐/未使用)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "GSM网络的PUK(不推荐/未使用)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "GSM网络的接入点配置(不推荐/未使用)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "GSM网络号码(不推荐/未使用)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "GSM网络密码(不推荐/未使用)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "GSM网络密码配置(不推荐/未使用)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "GSM网络个人识别号码配置(不推荐/未使用)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "GSM网络个人解锁码配置(不推荐/未使用)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "GSM网络电话号码配置(不推荐/未使用)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "GSM网络用户名(不推荐/未使用)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "GSM网络用户名配置(不推荐/未使用)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "如果为TRUE,Sugar可以让我们被Jabber服务器的其他用户搜索。" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "如果为TRUE,Sugar会显示“注销”选项。" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "如果为TRUE,Sugar会显示“重启”选项。" + +#: ../data/sugar.schemas.in.h:35 +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 "" +"如果为TRUE,Sugar会显示频道为1,6和11的缺省Ad-hoc网络。如果启动时没有发现任何“已知”网络,Suger不会自动连接到Ad-hoc网络。" + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Jabber服务器" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "键盘布局" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "键盘型号" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "键盘选项" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "偏好模式的布局。" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "键盘布局列表。每一个条目应当在窗体布局(改版)中" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "键盘选项列表" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "Sugar语音服务的音调值" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "Sugar语音服务中使用的音调值" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "功率自动" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "功率极限" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "发布到“道具”" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "Sugar语音服务的速率值" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "Sugar语音服务中使用的速率值" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "设备设置为静音。" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "显示“注销”" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "显示“重启”" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "显示“Sugar Ad-hoc 网络”" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "已静音" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "要使用的键盘型号" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "系统时区设置。" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "要使用的Jabber服务器网址" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "保存备份的网址。" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "用户颜色" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "用户名" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "整个桌面使用的用户名。" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "在列表视图中不能擦除活动。" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "音量大小" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "声音设备的音量。" + +#: ../data/sugar.schemas.in.h:66 +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, , +#, python-format, +msgid "" +"sugar-control-panel: WARNING, found more than one option with the same name: " +"%s module: %r" +msgstr "Sugar控制台:警告,发现重复的选项名称:%s存在于模组%r 中" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "sugar控制面板:key=%s 不是一个可选选项" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "sugar控制面板:%s" + +# TRANS: Translators, there's a empty line at the end of this string, +# which must appear in the translated string (msgstr) as well. +#. 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 "" +"用法:sugar-控制面板 【选项】键值【参数...】\n" +" sugar环境控制。\n" +" 选项:\n" +" -h 显示帮助信息并退出 \n" +" -l 列出所有可用选项 \n" +" -h key 显示该键相关信息 \n" +" -g key 获得该键当前键值 \n" +" -s key 设置该键当前键值 \n" +" -c key 清除该键当前键值 \n" +" " + +# 如何翻译sugar? +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "重启系统使改变生效.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "警告" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "更改需重启系统" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "取消更改" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "稍后" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "立即重启" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "完成" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "确定" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "版本%s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "确认删除" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "确认删除:是否永久删除 %s ?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "保存" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "删除" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "移除偏好" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "指定偏好" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "自由形式" + +# if it means the shape of the layout, maybe "环形" +# if it means the content of the layout, maybe "铃声" +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "环形" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "螺旋形" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "方形" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "三角形" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "注册失败" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "注册成功" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "您已成功注册到校园服务器。" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "注册" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "重新注册" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "软件更新" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "更新活动使其与新版软件兼容" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "立即检查" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "列表模式" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "偏好模式" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "" +"无线网络“%s”\n" +"需要一个无限密钥。" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "密钥类型:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "验证类型:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "WPA&WPA2个人" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "无线安全:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "恢复" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "加入" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Ad-hoc网络%d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +#, python-format, +msgid "Mesh Network %d" +msgstr "网状网络%d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "拒绝" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%d字节" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +#, python-format, +msgid "%dKB" +msgstr "%d千字节" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%d兆字节" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s 中的 %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +msgid "Transfer from %s" +msgstr "传送自 %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "接受" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "关闭" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "对方已取消档案传输" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +msgid "Transfer to %s" +msgstr "传送到 %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "删除" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "打开" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "打开方式" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s 裁剪" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "邻居" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "姓名:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "点击改变颜色:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "后退" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "下一步" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "无标题" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "无预览" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "种类: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "未知" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "日期: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "大小:%s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "无日期" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "参与者:" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "说明:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "标签:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "日志" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "搜索" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "任何时间" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "今天" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "一天内" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "上一周" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "上个月" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "上一年" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "任何人" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "我的好友" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "我的类别" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "所有类型" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "复制到" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "复制" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "复制条目出错。%s" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "错误" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "启动" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "按修改日期排序" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "按新建日期排序" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "按大小排序" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "排序方式" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "你的日志是空的" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "你的文件夹是空的" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "设备为空" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "没有匹配的条目" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "清除搜索" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "旧版本的%s活动" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "要降级到版本%s" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "显示日志" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "选择对象" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "关闭" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "恢复" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "开始" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "没有活动要开始" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "发送到" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "查看详细信息" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "不能发送没有文件的条目。" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "不能复制没有文件的条目。" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "剪贴板" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "朋友不存在" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "未找到有效的连接" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "没有活动要恢复" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "文档" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "剩余%(free_space)d MB 空间" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "设备状态变化的原因未知。" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "状态变化是正常的。" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "设备管理中。" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "设备不在管理中。" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "设备未就绪。" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "IP配置不能保留(没有可用的地址,超时等)。" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "IP配置不再合法。" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "需要密钥,请提供。" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "802.1X请求被接入点或认证服务器断开。" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "802.1X请求配置失败。" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "802.1X请求退出或意外失败。" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "802.1X请求认证超时。" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "PPP服务启动超时。" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "PPP服务意外断开。" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "PPP服务退出或意外失败。" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "DHCP服务启动超时。" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "DHCP服务意外错误。" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "DHCP服务退出或意外失败。" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "共享连接服务启动失败。" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "共享连接服务退出或意外失败。" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "自动IP服务​​无法启动。" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "自动IP服务​​意外错误。" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "自动IP服务退出或意外失败。" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "拨号失败,线路忙。" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "拨号失败,没有拨号音。" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "拨号失败,没有运营商网络。" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "拨号超时。" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "拨号失败。" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "调制解调器初始化失败。" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "无法选择指定的GSM的APN" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "不搜索网络。" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "网络注册被拒绝。" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "网络注册超时。" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "无法注册请求的GSM网络。" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "PIN检查失败。" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "设备必需的固件可能会丢失。" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "设备已被删除。" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "“网络管理员”进入休眠状态。" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "设备的活动连接被删除或消失。" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "用户或客户端请求断开。" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "设备的运营商/链路改变。" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "采用设备的现有连接。" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "请求者可用。" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "无法找到调制解调器。" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "蓝牙连接失败或超时。" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "未使用。" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "删除好友" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "结交好友" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "关机" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "重启" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "注销" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "我的设置" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "邀请到%s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s启动失败。" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "启动中..." + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "活动启动失败。" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "查看源代码" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "停止" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "开始新的" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "显示内容" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "删除" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "实例源代码" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "源代码" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "活动包源代码" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Sugar工具包源代码" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "查看源代码:%s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "查看源代码:%r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "窗口化Sugar" + +#~ msgid "Error in extreme pm argument, use on/off." +#~ msgstr "极度省电管理开关发生错误。" + +#~ msgid "GSM network username configuration" +#~ msgstr "GSM网络用户名配置" + +#~ msgid "Personal Unblocking Key (PUK):" +#~ msgstr "个人解锁码 (PUK):" + +#~ msgid "GSM network password configuration" +#~ msgstr "GSM网络密码配置" + +#~ msgid "Power Automatic." +#~ msgstr "功率自动。" + +#~ msgid "GSM network number" +#~ msgstr "GSM网络号码" + +#~ msgid "GSM network telephone number configuration" +#~ msgstr "GSM网络电话号码配置" + +#~ msgid "GSM network personal unlock key configuration" +#~ msgstr "GSM网络个人解锁密钥配置" + +# 如何翻译sugar? +#~ msgid "To apply your changes you have to restart sugar.\n" +#~ msgstr "你需要重新启动系统, 让改变生效.\n" + +#~ msgid "GSM network password" +#~ msgstr "GSM网络密码" + +#, python-format +#~ msgid "%(interface)s: %(version)s" +#~ msgstr "%(interface)s: %(version)s" + +#~ msgid "GSM network PIN" +#~ msgstr "GSM网络PIN" + +#~ msgid "GSM network personal identification number configuration" +#~ msgstr "GSM网络个人身份号码配置" + +#~ msgid "GSM network APN" +#~ msgstr "GSM网络APN" + +#~ msgid "Check your Pin/Puk configuration." +#~ msgstr "请检查你的PIN/PUK配置。" + +#~ msgid "GSM network PUK" +#~ msgstr "GSM网络PUK" + +#~ msgid "Power Extreme." +#~ msgstr "功率极限。" + +#~ msgid "Url of the jabber server to use." +#~ msgstr "要使用的Jabber服务器网址" + +#, python-format +#~ msgid "%s" +#~ msgstr "%s" + +#~ msgid "GSM network username" +#~ msgstr "GSM网络用户名" + +#, python-format +#~ msgid "%s (%s)" +#~ msgstr "%s (%s)" + +#~ msgid "Url where the backup is saved to." +#~ msgstr "保存备份的网址。" + +#~ msgid "GSM network access point name configuration" +#~ msgstr "GSM网络接入点名称配置" diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..fbeea98 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,1799 @@ +# 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 , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: Sugar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-05-01 00:34-0400\n" +"PO-Revision-Date: 2012-05-09 16:14+0200\n" +"Last-Translator: lite \n" +"Language-Team: Yuan CHAO \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-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 "畫筆: 顏色=%s 色澤明暗=%s" + +#: ../extensions/cpsection/aboutme/model.py:78 +#, python-format +msgid "stroke: %s" +msgstr "畫筆: %s" + +#: ../extensions/cpsection/aboutme/model.py:80 +#, python-format +msgid "fill: color=%s hue=%s" +msgstr "填滿: 顏色=%s 色澤明暗=%s" + +#: ../extensions/cpsection/aboutme/model.py:82 +#, python-format +msgid "fill: %s" +msgstr "填滿: %s" + +#: ../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:235 +msgid "Click to change your color:" +msgstr "點選改變顏色" + +#: ../extensions/cpsection/aboutcomputer/__init__.py:21 +msgid "About my Computer" +msgstr "我的電腦" + +#: ../extensions/cpsection/aboutcomputer/model.py:43 +msgid "Not available" +msgstr "不存在" + +#: ../extensions/cpsection/aboutcomputer/view.py:59 +msgid "Identity" +msgstr "身份識別" + +#: ../extensions/cpsection/aboutcomputer/view.py:68 +msgid "Serial Number:" +msgstr "序號" + +#: ../extensions/cpsection/aboutcomputer/view.py:90 +msgid "Software" +msgstr "軟體" + +#: ../extensions/cpsection/aboutcomputer/view.py:99 +msgid "Build:" +msgstr "建立:" + +#: ../extensions/cpsection/aboutcomputer/view.py:114 +msgid "Sugar:" +msgstr "Sugar:" + +#: ../extensions/cpsection/aboutcomputer/view.py:129 +msgid "Firmware:" +msgstr "韌體:" + +#: ../extensions/cpsection/aboutcomputer/view.py:144 +msgid "Wireless Firmware:" +msgstr "無線網路韌體:" + +#: ../extensions/cpsection/aboutcomputer/view.py:167 +msgid "Copyright and License" +msgstr "版權與授權資料" + +#: ../extensions/cpsection/aboutcomputer/view.py:185 +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 是您目前所看到的使用者界面,Sugar 是一個自由軟體,以 GNU 的 GPL 授權。歡迎您依據授權條例修改與散佈本軟體。" + +#: ../extensions/cpsection/aboutcomputer/view.py:197 +msgid "Full license:" +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:70 ../data/sugar.schemas.in.h:56 +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 "%s秒" + +#: ../extensions/cpsection/frame/view.py:54 +msgid "Activation Delay" +msgstr "啟用延遲" + +#: ../extensions/cpsection/frame/view.py:78 +msgid "Corner" +msgstr "角落" + +#: ../extensions/cpsection/frame/view.py:113 +msgid "Edge" +msgstr "邊緣" + +#: ../extensions/cpsection/keyboard/__init__.py:21 +#: ../extensions/cpsection/keyboard/view.py:32 +msgid "Keyboard" +msgstr "鍵盤" + +#: ../extensions/cpsection/keyboard/view.py:190 +msgid "Keyboard Model" +msgstr "鍵盤型式" + +#: ../extensions/cpsection/keyboard/view.py:250 +msgid "Key(s) to change layout" +msgstr "按鍵改變樣式" + +#: ../extensions/cpsection/keyboard/view.py:319 +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 "無法讀取 ~/.i18n。 建立標準設定。" + +#: ../extensions/cpsection/language/model.py:129 +#, python-format +msgid "Language for code=%s could not be determined." +msgstr "語系編碼 %s 無法判定" + +#: ../extensions/cpsection/language/model.py:152 +#, python-format +msgid "Sorry I do not speak '%s'." +msgstr "抱歉我不會說'%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 "請依序加入你使用的語言。如果優先選定的語言缺少翻譯,則使用次優先的語言翻譯。" + +#: ../extensions/cpsection/modemconfiguration/__init__.py:21 +msgid "Modem Configuration" +msgstr "數據機設定" + +#: ../extensions/cpsection/modemconfiguration/view.py:67 +msgid "" +"You will need to provide the following information to set up a mobile " +"broadband connection to a cellular (3G) network." +msgstr "你需要提供下列資訊以設定手機的3G寬頻網路。" + +#: ../extensions/cpsection/modemconfiguration/view.py:77 +msgid "Username:" +msgstr "使用者帳號:" + +#: ../extensions/cpsection/modemconfiguration/view.py:83 +msgid "Password:" +msgstr "密碼:" + +#: ../extensions/cpsection/modemconfiguration/view.py:89 +msgid "Number:" +msgstr "撥接號碼:" + +#: ../extensions/cpsection/modemconfiguration/view.py:95 +msgid "Access Point Name (APN):" +msgstr "連接點名稱(apn)" + +#: ../extensions/cpsection/modemconfiguration/view.py:101 +msgid "Personal Identity Number (PIN):" +msgstr "手機個人識別碼(pin)" + +#: ../extensions/cpsection/network/__init__.py:21 +#: ../extensions/cpsection/network/view.py:29 +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 "錯誤的無線網路信號開關設定,請指定on/off。" + +#: ../extensions/cpsection/network/model.py:152 +msgid "Error in specified argument use 0/1." +msgstr "無線網路信號開關只能設為 0/1。" + +#: ../extensions/cpsection/network/view.py:61 +msgid "Wireless" +msgstr "無線網路" + +#: ../extensions/cpsection/network/view.py:69 +msgid "Turn off the wireless radio to save battery life" +msgstr "關閉無線網路信號來增加電池使用時間" + +#: ../extensions/cpsection/network/view.py:82 +msgid "Radio" +msgstr "無線網路信號" + +#: ../extensions/cpsection/network/view.py:98 +msgid "Discard network history if you have trouble connecting to the network" +msgstr "如果您遇到連線上的問題,請嘗試清除舊的網路歷史資料" + +#: ../extensions/cpsection/network/view.py:107 +msgid "Discard network history" +msgstr "清除舊的網路歷史資料" + +#: ../extensions/cpsection/network/view.py:122 +msgid "Collaboration" +msgstr "協同合作" + +#: ../extensions/cpsection/network/view.py:130 +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:140 +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:3 +msgid "Automatic power management (increases battery life)" +msgstr "自動電源管理模式 (增加電池使用時間)" + +#: ../extensions/cpsection/updater/__init__.py:21 +msgid "Software update" +msgstr "軟體更新" + +#: ../extensions/cpsection/updater/view.py:63 +msgid "" +"Software updates correct errors, eliminate security vulnerabilities, and " +"provide new features." +msgstr "軟體更新會修正錯誤,消除安全上的弱點,以及增加新的功能。" + +#: ../extensions/cpsection/updater/view.py:125 +#, python-format +msgid "Checking %s..." +msgstr "檢查 %s 中…" + +#: ../extensions/cpsection/updater/view.py:127 +#, python-format +msgid "Downloading %s..." +msgstr "下載 %s 中…" + +#: ../extensions/cpsection/updater/view.py:129 +#, python-format +msgid "Updating %s..." +msgstr "更新 %s 中…" + +#: ../extensions/cpsection/updater/view.py:139 +msgid "Your software is up-to-date" +msgstr "您的軟體已經是最新版本" + +#: ../extensions/cpsection/updater/view.py:141 +#, python-format +msgid "You can install %s update" +msgid_plural "You can install %s updates" +msgstr[0] "您可以安裝 %s 個更新" + +#: ../extensions/cpsection/updater/view.py:159 +msgid "Checking for updates..." +msgstr "檢查更新中…" + +#: ../extensions/cpsection/updater/view.py:164 +msgid "Installing updates..." +msgstr "安裝更新中…" + +#: ../extensions/cpsection/updater/view.py:173 +#, python-format +msgid "%s update was installed" +msgid_plural "%s updates were installed" +msgstr[0] "已安裝 %s 個更新" + +#: ../extensions/cpsection/updater/view.py:255 +msgid "Install selected" +msgstr "安裝選用的" + +#: ../extensions/cpsection/updater/view.py:276 +#, python-format +msgid "Download size: %s" +msgstr "下載檔案大小:%s" + +#: ../extensions/cpsection/updater/view.py:364 +#, python-format +msgid "From version %(current)s to %(new)s (Size: %(size)s)" +msgstr "由版本 %(current)s 更新至 %(new)s (大小: %(size)s)" + +#. TRANS: download size is 0 +#: ../extensions/cpsection/updater/view.py:382 +msgid "None" +msgstr "無" + +#. TRANS: download size of very small updates +#: ../extensions/cpsection/updater/view.py:385 +msgid "1 KB" +msgstr "1 KB" + +#. TRANS: download size of small updates, e.g. '250 KB' +#: ../extensions/cpsection/updater/view.py:388 +#, python-format +msgid "%.0f KB" +msgstr "%.0f KB" + +#. TRANS: download size of updates, e.g. '2.3 MB' +#: ../extensions/cpsection/updater/view.py:391 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: ../extensions/deviceicon/battery.py:71 +msgid "My Battery" +msgstr "我的電池狀態" + +#: ../extensions/deviceicon/battery.py:147 +msgid "Removed" +msgstr "移除" + +#: ../extensions/deviceicon/battery.py:150 +msgid "Charging" +msgstr "充電中" + +#: ../extensions/deviceicon/battery.py:153 +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:160 +#, python-format +msgid "%(hour)d:%(min).2d remaining" +msgstr "剩餘 %(hour)d:%(min).2d" + +#: ../extensions/deviceicon/battery.py:163 +msgid "Charged" +msgstr "充電完成" + +#: ../extensions/deviceicon/network.py:49 +#, python-format +msgid "IP address: %s" +msgstr "網路地址: %s" + +#: ../extensions/deviceicon/network.py:93 +#: ../extensions/deviceicon/network.py:292 +#: ../src/jarabe/desktop/networkviews.py:129 +#: ../src/jarabe/desktop/networkviews.py:492 +msgid "Disconnect" +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 +#: ../extensions/deviceicon/network.py:101 +#: ../extensions/deviceicon/network.py:284 +#: ../src/jarabe/desktop/networkviews.py:238 +#: ../src/jarabe/desktop/networkviews.py:529 +#: ../src/jarabe/desktop/networkviews.py:663 +msgid "Connecting..." +msgstr "連線中…" + +# TODO: show the channel number +#: ../extensions/deviceicon/network.py:106 +#: ../extensions/deviceicon/network.py:174 +#: ../src/jarabe/desktop/networkviews.py:245 +#: ../src/jarabe/desktop/networkviews.py:535 +#: ../src/jarabe/desktop/networkviews.py:669 +msgid "Connected" +msgstr "已連線" + +#: ../extensions/deviceicon/network.py:119 +msgid "No wireless connection" +msgstr "沒有無線網路連線" + +#: ../extensions/deviceicon/network.py:133 +msgid "Channel" +msgstr "頻道" + +#: ../extensions/deviceicon/network.py:148 +msgid "Wired Network" +msgstr "有線網路" + +#: ../extensions/deviceicon/network.py:177 +msgid "Speed" +msgstr "速度" + +#: ../extensions/deviceicon/network.py:202 +msgid "Wireless modem" +msgstr "無線網路數據機" + +#: ../extensions/deviceicon/network.py:270 +msgid "Please wait..." +msgstr "請稍待…" + +#: ../extensions/deviceicon/network.py:275 +#: ../src/jarabe/desktop/networkviews.py:125 +#: ../src/jarabe/desktop/networkviews.py:488 +#: ../src/jarabe/desktop/networkviews.py:619 +msgid "Connect" +msgstr "連線" + +#: ../extensions/deviceicon/network.py:276 +msgid "Disconnected" +msgstr "已切斷" + +#: ../extensions/deviceicon/network.py:283 +#: ../src/jarabe/controlpanel/toolbar.py:119 +#: ../src/jarabe/desktop/homebox.py:71 +#: ../src/jarabe/frame/activitiestray.py:603 +#: ../src/jarabe/frame/activitiestray.py:705 +#: ../src/jarabe/frame/activitiestray.py:733 +msgid "Cancel" +msgstr "取消" + +#: ../extensions/deviceicon/network.py:322 +msgid "Try connection again" +msgstr "重試連線" + +#: ../extensions/deviceicon/network.py:325 +#, python-format +msgid "Error: %s" +msgstr "錯誤:%s" + +#: ../extensions/deviceicon/network.py:329 +#, python-format +msgid "Suggestion: %s" +msgstr "建議:%s" + +#: ../extensions/deviceicon/network.py:338 +#, python-format +msgid "Connected for %s" +msgstr "連線到%s" + +#: ../extensions/deviceicon/network.py:344 +#: ../extensions/deviceicon/network.py:345 +#, python-format +msgid "%d KB" +msgstr "%dKB" + +#: ../extensions/deviceicon/network.py:350 +msgid "Check your PIN/PUK configuration." +msgstr "檢查你的PIN/PUK設定資訊" + +#: ../extensions/deviceicon/network.py:353 +msgid "Check your Access Point Name (APN) configuration" +msgstr "檢查你的連線點(apn)名稱" + +#: ../extensions/deviceicon/network.py:357 +msgid "Check the Number configuration." +msgstr "檢查撥號號碼" + +#: ../extensions/deviceicon/network.py:359 +msgid "Check your configuration." +msgstr "檢查你的設定" + +#: ../extensions/deviceicon/network.py:597 +msgid "Mesh Network" +msgstr "網狀網路" + +#: ../extensions/deviceicon/network.py:641 +#, python-format +msgid "Mesh Network %s" +msgstr "mesh網路 %s" + +#: ../extensions/deviceicon/network.py:757 +msgid "No GSM connection available." +msgstr "沒有gsm連線" + +#: ../extensions/deviceicon/network.py:758 +msgid "Create a connection in the control panel." +msgstr "在控制台建立新連線" + +#: ../extensions/deviceicon/speech.py:52 +msgid "Speech" +msgstr "語音" + +#: ../extensions/deviceicon/speech.py:77 +#: ../extensions/deviceicon/speech.py:138 +#: ../extensions/deviceicon/speech.py:143 +msgid "Say selected text" +msgstr "朗讀選取的文字" + +#: ../extensions/deviceicon/speech.py:83 +msgid "Stop playback" +msgstr "停止播放" + +#: ../extensions/deviceicon/speech.py:97 +msgid "Pitch" +msgstr "音高" + +#: ../extensions/deviceicon/speech.py:106 +msgid "Rate" +msgstr "速度" + +#: ../extensions/deviceicon/speech.py:133 +msgid "Pause playback" +msgstr "暫停播放" + +#: ../extensions/deviceicon/speaker.py:61 +msgid "My Speakers" +msgstr "我的喇叭" + +#: ../extensions/deviceicon/speaker.py:138 +msgid "Unmute" +msgstr "取消靜音" + +#: ../extensions/deviceicon/speaker.py:141 +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/globalkey/screenshot.py:59 +msgid "Mesh" +msgstr "網狀網路" + +#: ../extensions/globalkey/screenshot.py:61 +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "Group" +msgstr "我的群組" + +#: ../extensions/globalkey/screenshot.py:63 +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "Home" +msgstr "我的家" + +#: ../extensions/globalkey/screenshot.py:69 +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "Activity" +msgstr "活動" + +#: ../extensions/globalkey/screenshot.py:72 +msgid "Screenshot" +msgstr "畫面抓圖" + +#: ../extensions/globalkey/screenshot.py:74 +#, python-format +msgid "Screenshot of \"%s\"" +msgstr "%s 的畫面抓圖" + +#: ../data/sugar.schemas.in.h:1 +msgid "" +"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account " +"long name." +msgstr "點選「停用」將於啟動時詢問代號,點選「系統」則恢復使用 UNIX 名稱。" + +#: ../data/sugar.schemas.in.h:2 +msgid "Additional directories which can contain updated translations." +msgstr "能包含新版翻譯的額外目錄" + +#: ../data/sugar.schemas.in.h:4 +msgid "Backup URL" +msgstr "備份網址" + +#: ../data/sugar.schemas.in.h:5 +msgid "Bundle IDs of protected activities" +msgstr "保護活動的Bundle ID" + +#: ../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 "您選取的顏色將使用在整個桌面當中。顏色指定字串包含了筆畫顏色與填充顏色,格式為紅藍綠三原色的強度。例如: #AC32FF,#9A5200" + +#: ../data/sugar.schemas.in.h:7 +msgid "Corner Delay" +msgstr "角落觸發延遲" + +#: ../data/sugar.schemas.in.h:8 +msgid "Default font face" +msgstr "預設字型" + +#: ../data/sugar.schemas.in.h:9 +msgid "Default font size" +msgstr "預設字體大小" + +#: ../data/sugar.schemas.in.h:10 +msgid "Default nick" +msgstr "預設代號" + +#: ../data/sugar.schemas.in.h:11 +msgid "Delay for the activation of the frame using the corners." +msgstr "當游標移到畫面四角時浮現邊框的延遲時間" + +#: ../data/sugar.schemas.in.h:12 +msgid "Delay for the activation of the frame using the edges." +msgstr "當游標移到畫面邊緣時浮現邊框的延遲時間" + +#: ../data/sugar.schemas.in.h:13 +msgid "Directory to search for translations" +msgstr "到檢索翻譯的目錄" + +#: ../data/sugar.schemas.in.h:14 +msgid "Edge Delay" +msgstr "邊緣觸發延遲" + +#: ../data/sugar.schemas.in.h:15 +msgid "" +"Extreme power management (disables wireless radio, increases battery life)" +msgstr "積極電源管理模式 (關閉無線網路,增加電池使用時間)" + +#: ../data/sugar.schemas.in.h:16 +msgid "Favorites Layout" +msgstr "偏好的顯示方式" + +#: ../data/sugar.schemas.in.h:17 +msgid "Favorites resume mode" +msgstr "偏好的回復模式" + +#: ../data/sugar.schemas.in.h:18 +msgid "Font face that is used throughout the desktop." +msgstr "預設字型將套用於整個桌面環境" + +#: ../data/sugar.schemas.in.h:19 +msgid "Font size that is used throughout the desktop." +msgstr "預設字體大小將套用於整個桌面環境" + +#: ../data/sugar.schemas.in.h:20 +msgid "GSM network APN (DEPRECATED/UNUSED)" +msgstr "GSM網路APN (過時不再使用)" + +#: ../data/sugar.schemas.in.h:21 +msgid "GSM network PIN (DEPRECATED/UNUSED)" +msgstr "GSM網路PIN (過時不再使用)" + +#: ../data/sugar.schemas.in.h:22 +msgid "GSM network PUK (DEPRECATED/UNUSED)" +msgstr "GSM網路PUK (過時不再使用)" + +#: ../data/sugar.schemas.in.h:23 +msgid "GSM network access point name configuration (DEPRECATED/UNUSED)" +msgstr "GSM網路APN設定 (過時不再使用)" + +#: ../data/sugar.schemas.in.h:24 +msgid "GSM network number (DEPRECATED/UNUSED)" +msgstr "GSM網路號碼 (過時不再使用)" + +#: ../data/sugar.schemas.in.h:25 +msgid "GSM network password (DEPRECATED/UNUSED)" +msgstr "GSM網路密碼 (過時不再使用)" + +#: ../data/sugar.schemas.in.h:26 +msgid "GSM network password configuration (DEPRECATED/UNUSED)" +msgstr "GSM網路密碼設定 (過時不再使用)" + +#: ../data/sugar.schemas.in.h:27 +msgid "" +"GSM network personal identification number configuration (DEPRECATED/UNUSED)" +msgstr "GSM網路PIN設定 (過時不再使用)" + +#: ../data/sugar.schemas.in.h:28 +msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)" +msgstr "GSM網路PUK設定 (過時不再使用)" + +#: ../data/sugar.schemas.in.h:29 +msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)" +msgstr "GSM網路號碼設定 (過時不再使用)" + +#: ../data/sugar.schemas.in.h:30 +msgid "GSM network username (DEPRECATED/UNUSED)" +msgstr "GSM網路使用者名稱 (過時不再使用)" + +#: ../data/sugar.schemas.in.h:31 +msgid "GSM network username configuration (DEPRECATED/UNUSED)" +msgstr "GSM網路使用者名稱設定 (過時不再使用)" + +#: ../data/sugar.schemas.in.h:32 +msgid "" +"If TRUE, Sugar will make us searchable for the other users of the Jabber " +"server." +msgstr "選擇「是」的話,Sugar 將會讓其他 Jabber 伺服器的使用者可以搜尋到我們" + +#: ../data/sugar.schemas.in.h:33 +msgid "If TRUE, Sugar will show a \"Log out\" option." +msgstr "選擇「是」的話,Sugar 將會顯示『登出』的選項" + +#: ../data/sugar.schemas.in.h:34 +msgid "If TRUE, Sugar will show a \"Restart\" option." +msgstr "選擇「是」的話,Sugar 將會顯示『重新啟動』的選項" + +#: ../data/sugar.schemas.in.h:35 +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 "" +"選擇「是」的話,Sugar 將會顯示預設在頻道1, 6, 和11的『Ad-hoc』網路。(如果Sugar找不到已知網路,就會自動連到其中一個Ad-" +"hoc網路。" + +#: ../data/sugar.schemas.in.h:36 +msgid "Jabber Server" +msgstr "Jabber 伺服器" + +#: ../data/sugar.schemas.in.h:37 +msgid "Keyboard layouts" +msgstr "鍵盤排列" + +#: ../data/sugar.schemas.in.h:38 +msgid "Keyboard model" +msgstr "鍵盤型號" + +#: ../data/sugar.schemas.in.h:39 +msgid "Keyboard options" +msgstr "鍵盤選項" + +#: ../data/sugar.schemas.in.h:40 +msgid "Layout of the favorites view." +msgstr "我的最愛顯示方式" + +#: ../data/sugar.schemas.in.h:41 +msgid "" +"List of keyboard layouts. Each entry should be in the form layout(variant)" +msgstr "鍵盤排列列表,每個項目應該在排列列表中" + +#: ../data/sugar.schemas.in.h:42 +msgid "List of keyboard options." +msgstr "鍵盤排列列表" + +#: ../data/sugar.schemas.in.h:43 +msgid "Pitch value for the speech sugar service" +msgstr "Sugar語音合成音高" + +#: ../data/sugar.schemas.in.h:44 +msgid "Pitch value used by the speech service in Sugar" +msgstr "Sugar語音合成服務的音高值" + +#: ../data/sugar.schemas.in.h:45 +msgid "Power Automatic" +msgstr "自動省電模式" + +#: ../data/sugar.schemas.in.h:46 +msgid "Power Extreme" +msgstr "極度省電模式" + +#: ../data/sugar.schemas.in.h:47 +msgid "Publish to Gadget" +msgstr "發佈到小工具" + +#: ../data/sugar.schemas.in.h:48 +msgid "Rate value for the speech sugar service" +msgstr "Sugar語音合成服務的速度值" + +#: ../data/sugar.schemas.in.h:49 +msgid "Rate value used by the speech service in Sugar" +msgstr "Sugar語音合成服務的速度值" + +#: ../data/sugar.schemas.in.h:50 +msgid "Setting for muting the sound device." +msgstr "音效設備靜音設定。" + +#: ../data/sugar.schemas.in.h:51 +msgid "Show Log out" +msgstr "顯示登出" + +#: ../data/sugar.schemas.in.h:52 +msgid "Show Restart" +msgstr "顯示重新啟動" + +#: ../data/sugar.schemas.in.h:53 +msgid "Show Sugar Ad-hoc networks" +msgstr "顯示Sugar的Ad-hoc網路" + +#: ../data/sugar.schemas.in.h:54 +msgid "Sound Muted" +msgstr "靜音" + +#: ../data/sugar.schemas.in.h:55 +msgid "The keyboard model to be used" +msgstr "選用的鍵盤型式" + +#: ../data/sugar.schemas.in.h:57 +msgid "Timezone setting for the system." +msgstr "系統的時區設定" + +#: ../data/sugar.schemas.in.h:58 +msgid "URL of the jabber server to use." +msgstr "Jabber 伺服器的網址。" + +#: ../data/sugar.schemas.in.h:59 +msgid "URL where the backup is saved to." +msgstr "備份主機的網址。" + +#: ../data/sugar.schemas.in.h:60 +msgid "User Color" +msgstr "使用者顏色" + +#: ../data/sugar.schemas.in.h:61 +msgid "User Name" +msgstr "使用者名稱" + +#: ../data/sugar.schemas.in.h:62 +msgid "User name that is used throughout the desktop." +msgstr "使用者名稱將用於整個桌面上" + +#: ../data/sugar.schemas.in.h:63 +msgid "" +"Users will not be allowed to erase these activities through the list view." +msgstr "使用者將不允許在列表檢視中刪除這些活動" + +#: ../data/sugar.schemas.in.h:64 +msgid "Volume Level" +msgstr "音量" + +#: ../data/sugar.schemas.in.h:65 +msgid "Volume level for the sound device." +msgstr "音效設備的音量" + +#: ../data/sugar.schemas.in.h:66 +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 +#, python-format, +msgid "" +"sugar-control-panel: WARNING, found more than one option with the same name: " +"%s module: %r" +msgstr "Sugar控制台:警告,發現重複的選項名稱:%s於模組 %r 中" + +#: ../src/jarabe/controlpanel/cmd.py:30 +#, python-format +msgid "sugar-control-panel: key=%s not an available option" +msgstr "Sugar控制台: 鍵值=%s 並非可用的選項" + +#: ../src/jarabe/controlpanel/cmd.py:31 +#, python-format +msgid "sugar-control-panel: %s" +msgstr "Sugar控制台: %s" + +# TRANS: Translators, there's a empty line at the end of this string, +# which must appear in the translated string (msgstr) as well. +#. 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 "" +"用法: sugar-control-panel [ 選項 ] 鍵值 [ 參數 ... ] \n" +" Sugar 環境設定工具. \n" +" 選項: \n" +" -h 顯示本說明文字並離開 \n" +" -l 列出所有的選項 \n" +" -h key 顯示本鍵值的說明 \n" +" -g key 取得本件值的資料 \n" +" -s key 設定本鍵值的資料 \n" +" -c key 清除本鍵值的資料 \n" +" " + +#: ../src/jarabe/controlpanel/cmd.py:52 +msgid "To apply your changes you have to restart Sugar.\n" +msgstr "需要重新啟動系統使變更生效.\n" + +#: ../src/jarabe/controlpanel/gui.py:297 ../src/jarabe/journal/palettes.py:161 +#: ../src/jarabe/journal/palettes.py:246 ../src/jarabe/journal/palettes.py:279 +#: ../src/jarabe/journal/volumestoolbar.py:307 +msgid "Warning" +msgstr "警告" + +#: ../src/jarabe/controlpanel/gui.py:298 +#: ../src/jarabe/controlpanel/sectionview.py:41 +msgid "Changes require restart" +msgstr "改變須要重新啟動才能生效" + +#: ../src/jarabe/controlpanel/gui.py:301 +msgid "Cancel changes" +msgstr "取消改變" + +#: ../src/jarabe/controlpanel/gui.py:306 ../src/jarabe/desktop/homebox.py:73 +msgid "Later" +msgstr "稍候" + +#: ../src/jarabe/controlpanel/gui.py:310 +msgid "Restart now" +msgstr "馬上重新啟動" + +#: ../src/jarabe/controlpanel/toolbar.py:63 ../src/jarabe/intro/window.py:208 +msgid "Done" +msgstr "完成" + +#: ../src/jarabe/controlpanel/toolbar.py:125 +#: ../src/jarabe/desktop/favoritesview.py:347 +msgid "Ok" +msgstr "確定" + +#: ../src/jarabe/desktop/activitieslist.py:231 +#, python-format +msgid "Version %s" +msgstr "版本 %s" + +#: ../src/jarabe/desktop/activitieslist.py:357 +msgid "Confirm erase" +msgstr "確認刪除" + +#: ../src/jarabe/desktop/activitieslist.py:359 +#, python-format +msgid "Confirm erase: Do you want to permanently erase %s?" +msgstr "確認刪除:您確定要永久地刪除 %s 嗎?" + +# 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) +#: ../src/jarabe/desktop/activitieslist.py:363 +#: ../src/jarabe/frame/clipboardmenu.py:67 +#: ../src/jarabe/view/viewsource.py:280 +msgid "Keep" +msgstr "保存" + +#: ../src/jarabe/desktop/activitieslist.py:366 +#: ../src/jarabe/desktop/activitieslist.py:420 +#: ../src/jarabe/journal/journaltoolbox.py:413 +#: ../src/jarabe/journal/palettes.py:126 +msgid "Erase" +msgstr "刪除" + +#: ../src/jarabe/desktop/activitieslist.py:436 +msgid "Remove favorite" +msgstr "移除偏好活動" + +#: ../src/jarabe/desktop/activitieslist.py:440 +msgid "Make favorite" +msgstr "指定偏好活動" + +# TRANS: label for the freeform layout in the favorites view +#. TRANS: label for the freeform layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:127 +msgid "Freeform" +msgstr "自由格式" + +# TRANS: label for the ring layout in the favorites view +#. TRANS: label for the ring layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:215 +msgid "Ring" +msgstr "活動環" + +# TRANS: label for the spiral layout in the favorites view +#. TRANS: label for the spiral layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:402 +msgid "Spiral" +msgstr "螺旋" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:472 +msgid "Box" +msgstr "方型" + +# TRANS: label for the box layout in the favorites view +#. TRANS: label for the box layout in the favorites view +#: ../src/jarabe/desktop/favoriteslayout.py:515 +msgid "Triangle" +msgstr "三角形" + +#: ../src/jarabe/desktop/favoritesview.py:338 +msgid "Registration Failed" +msgstr "註冊失敗" + +#: ../src/jarabe/desktop/favoritesview.py:341 +msgid "Registration Successful" +msgstr "註冊成功" + +#: ../src/jarabe/desktop/favoritesview.py:342 +msgid "You are now registered with your school server." +msgstr "您已經成功註冊到校園主機" + +#: ../src/jarabe/desktop/favoritesview.py:644 +msgid "Register" +msgstr "註冊" + +#: ../src/jarabe/desktop/favoritesview.py:646 +#: ../src/jarabe/desktop/favoritesview.py:663 +msgid "Register again" +msgstr "重新註冊" + +#: ../src/jarabe/desktop/homebox.py:66 +msgid "Software Update" +msgstr "軟體更新" + +#: ../src/jarabe/desktop/homebox.py:67 +msgid "Update your activities to ensure compatibility with your new software" +msgstr "更新您的活動來確保新軟體的相容性" + +#: ../src/jarabe/desktop/homebox.py:76 +msgid "Check now" +msgstr "現在就檢查" + +#: ../src/jarabe/desktop/homebox.py:197 +msgid "List view" +msgstr "檢視清單" + +#: ../src/jarabe/desktop/homebox.py:198 +msgid "2" +msgstr "2" + +#: ../src/jarabe/desktop/homebox.py:253 +msgid "Favorites view" +msgstr "偏好檢視" + +#: ../src/jarabe/desktop/homebox.py:254 +msgid "1" +msgstr "1" + +#: ../src/jarabe/desktop/keydialog.py:91 +#, python-format +msgid "" +"A wireless encryption key is required for\n" +" the wireless network '%s'." +msgstr "無線網路 '%s' 需要加密密碼" + +#: ../src/jarabe/desktop/keydialog.py:140 +msgid "Key Type:" +msgstr "金鑰類型:" + +#: ../src/jarabe/desktop/keydialog.py:160 +msgid "Authentication Type:" +msgstr "認證類型:" + +#: ../src/jarabe/desktop/keydialog.py:223 +msgid "WPA & WPA2 Personal" +msgstr "個人的 WPA & WPA2 加密" + +#: ../src/jarabe/desktop/keydialog.py:232 +msgid "Wireless Security:" +msgstr "無線網路加密:" + +# TRANS: Action label for resuming an activity. +#. TRANS: Action label for resuming an activity. +#: ../src/jarabe/desktop/meshbox.py:82 +#: ../src/jarabe/journal/journaltoolbox.py:509 +#: ../src/jarabe/journal/palettes.py:71 ../src/jarabe/view/palettes.py:84 +msgid "Resume" +msgstr "回復" + +#: ../src/jarabe/desktop/meshbox.py:87 +#: ../src/jarabe/frame/activitiestray.py:182 +msgid "Join" +msgstr "加入" + +#: ../src/jarabe/desktop/networkviews.py:484 +#, python-format +msgid "Ad-hoc Network %d" +msgstr "Ad-hoc 網路 %d" + +#: ../src/jarabe/desktop/networkviews.py:616 +#, python-format +msgid "Mesh Network %d" +msgstr "網狀網路 %d" + +#: ../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/frame/activitiestray.py:187 +#: ../src/jarabe/frame/activitiestray.py:575 +msgid "Decline" +msgstr "拒絕" + +#: ../src/jarabe/frame/activitiestray.py:523 +#, python-format +msgid "%dB" +msgstr "%dB" + +#: ../src/jarabe/frame/activitiestray.py:525 +#, python-format +msgid "%dKB" +msgstr "%dKB" + +#: ../src/jarabe/frame/activitiestray.py:527 +#, python-format +msgid "%dMB" +msgstr "%dMB" + +#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024 +#: ../src/jarabe/frame/activitiestray.py:545 +#, python-format +msgid "%s of %s" +msgstr "%s 之 %s" + +#: ../src/jarabe/frame/activitiestray.py:559 +#, python-format +#, python-format, +msgid "Transfer from %s" +msgstr "傳送自 %s" + +#: ../src/jarabe/frame/activitiestray.py:570 +msgid "Accept" +msgstr "接受" + +#: ../src/jarabe/frame/activitiestray.py:627 +#: ../src/jarabe/frame/activitiestray.py:640 +#: ../src/jarabe/frame/activitiestray.py:758 +msgid "Dismiss" +msgstr "拒絕" + +#: ../src/jarabe/frame/activitiestray.py:644 +msgid "The other participant canceled the file transfer" +msgstr "對方已取消檔案傳輸" + +#: ../src/jarabe/frame/activitiestray.py:692 +#, python-format +#, python-format, +msgid "Transfer to %s" +msgstr "傳送給 %s" + +#: ../src/jarabe/frame/clipboardmenu.py:56 +msgctxt "Clipboard" +msgid "Remove" +msgstr "移除" + +#: ../src/jarabe/frame/clipboardmenu.py:62 +#: ../src/jarabe/frame/clipboardmenu.py:85 +msgid "Open" +msgstr "開啟" + +#: ../src/jarabe/frame/clipboardmenu.py:90 +msgid "Open with" +msgstr "開啟使用" + +#: ../src/jarabe/frame/clipboardobject.py:50 +#, python-format +msgid "%s clipping" +msgstr "%s 裁剪" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "Neighborhood" +msgstr "我的鄰居" + +#: ../src/jarabe/frame/zoomtoolbar.py:43 +msgid "F1" +msgstr "F1" + +#: ../src/jarabe/frame/zoomtoolbar.py:45 +msgid "F2" +msgstr "F2" + +#: ../src/jarabe/frame/zoomtoolbar.py:47 +msgid "F3" +msgstr "F3" + +#: ../src/jarabe/frame/zoomtoolbar.py:49 +msgid "F4" +msgstr "F4" + +#: ../src/jarabe/intro/window.py:103 +msgid "Name:" +msgstr "姓名:" + +#: ../src/jarabe/intro/window.py:133 +msgid "Click to change color:" +msgstr "點選改變顏色:" + +#: ../src/jarabe/intro/window.py:197 ../src/jarabe/journal/detailview.py:105 +msgid "Back" +msgstr "上一步" + +#: ../src/jarabe/intro/window.py:211 +msgid "Next" +msgstr "下一步" + +#: ../src/jarabe/journal/expandedentry.py:156 +#: ../src/jarabe/journal/listmodel.py:144 ../src/jarabe/journal/palettes.py:64 +#: ../src/jarabe/journal/volumestoolbar.py:130 +msgid "Untitled" +msgstr "未命名" + +#: ../src/jarabe/journal/expandedentry.py:245 +msgid "No preview" +msgstr "沒有預覽" + +#: ../src/jarabe/journal/expandedentry.py:264 +#, python-format +msgid "Kind: %s" +msgstr "類別: %s" + +#: ../src/jarabe/journal/expandedentry.py:264 +#: ../src/jarabe/journal/listmodel.py:150 +#: ../src/jarabe/journal/listmodel.py:158 +msgid "Unknown" +msgstr "未知" + +#: ../src/jarabe/journal/expandedentry.py:265 +#, python-format +msgid "Date: %s" +msgstr "日期: %s" + +#: ../src/jarabe/journal/expandedentry.py:266 +#, python-format +msgid "Size: %s" +msgstr "大小: %s" + +#: ../src/jarabe/journal/expandedentry.py:294 +#: ../src/jarabe/journal/misc.py:108 +msgid "No date" +msgstr "無日期" + +#: ../src/jarabe/journal/expandedentry.py:301 +msgid "Participants:" +msgstr "參與者" + +#: ../src/jarabe/journal/expandedentry.py:323 +msgid "Description:" +msgstr "說明:" + +#: ../src/jarabe/journal/expandedentry.py:348 +msgid "Tags:" +msgstr "標籤:" + +#: ../src/jarabe/journal/journalactivity.py:115 +#: ../src/jarabe/journal/journaltoolbox.py:468 +#: ../src/jarabe/journal/palettes.py:198 +#: ../src/jarabe/journal/volumestoolbar.py:368 +msgid "Journal" +msgstr "日誌" + +#: ../src/jarabe/journal/journaltoolbox.py:72 +msgid "Search" +msgstr "搜尋" + +#: ../src/jarabe/journal/journaltoolbox.py:139 +msgid "Anytime" +msgstr "任何時間" + +#: ../src/jarabe/journal/journaltoolbox.py:141 +msgid "Today" +msgstr "今天" + +#: ../src/jarabe/journal/journaltoolbox.py:143 +msgid "Since yesterday" +msgstr "一天內" + +# TRANS: Filter entries modified during the last 7 days. +#. TRANS: Filter entries modified during the last 7 days. +#: ../src/jarabe/journal/journaltoolbox.py:145 +msgid "Past week" +msgstr "一週內" + +# TRANS: Filter entries modified during the last 30 days. +#. TRANS: Filter entries modified during the last 30 days. +#: ../src/jarabe/journal/journaltoolbox.py:147 +msgid "Past month" +msgstr "一個月內" + +# TRANS: Filter entries modified during the last 356 days. +#. TRANS: Filter entries modified during the last 356 days. +#: ../src/jarabe/journal/journaltoolbox.py:149 +msgid "Past year" +msgstr "一年內" + +#: ../src/jarabe/journal/journaltoolbox.py:156 +msgid "Anyone" +msgstr "任何人" + +#: ../src/jarabe/journal/journaltoolbox.py:158 +msgid "My friends" +msgstr "我的好友" + +#: ../src/jarabe/journal/journaltoolbox.py:159 +msgid "My class" +msgstr "我的類別" + +# TRANS: Item in a combo box that filters by entry type. +#: ../src/jarabe/journal/journaltoolbox.py:301 +msgid "Anything" +msgstr "所有類別" + +#: ../src/jarabe/journal/journaltoolbox.py:396 +#: ../src/jarabe/journal/palettes.py:93 +msgid "Copy to" +msgstr "複製給" + +#: ../src/jarabe/journal/journaltoolbox.py:404 +#: ../src/jarabe/journal/palettes.py:104 ../src/jarabe/view/viewsource.py:274 +msgid "Duplicate" +msgstr "副本" + +#: ../src/jarabe/journal/journaltoolbox.py:437 +#: ../src/jarabe/journal/palettes.py:141 ../src/jarabe/journal/palettes.py:254 +#: ../src/jarabe/journal/volumestoolbar.py:315 +#, python-format +msgid "Error while copying the entry. %s" +msgstr "複製檔案(%s)時發生錯誤" + +#: ../src/jarabe/journal/journaltoolbox.py:438 +#: ../src/jarabe/journal/palettes.py:142 ../src/jarabe/journal/palettes.py:255 +#: ../src/jarabe/journal/volumestoolbar.py:316 +msgid "Error" +msgstr "錯誤" + +# TRANS: Action label for starting an entry. +#. TRANS: Action label for starting an entry. +#: ../src/jarabe/journal/journaltoolbox.py:512 +#: ../src/jarabe/journal/palettes.py:74 +msgid "Start" +msgstr "啟動" + +#: ../src/jarabe/journal/journaltoolbox.py:540 +msgid "Sort by date modified" +msgstr "以日期變更來排序" + +#: ../src/jarabe/journal/journaltoolbox.py:541 +msgid "Sort by date created" +msgstr "以建立日期來排序" + +#: ../src/jarabe/journal/journaltoolbox.py:542 +msgid "Sort by size" +msgstr "以大小排序" + +#: ../src/jarabe/journal/journaltoolbox.py:551 +msgid "Sort view" +msgstr "以檢視來排序" + +#: ../src/jarabe/journal/listview.py:317 +msgid "Your Journal is empty" +msgstr "空白的日誌內容" + +#: ../src/jarabe/journal/listview.py:320 +msgid "Your documents folder is empty" +msgstr "空白的文件夾" + +#: ../src/jarabe/journal/listview.py:322 +msgid "The device is empty" +msgstr "設備中無資料" + +#: ../src/jarabe/journal/listview.py:324 +msgid "No matching entries" +msgstr "沒有相符的紀錄" + +#: ../src/jarabe/journal/listview.py:398 +msgid "Clear search" +msgstr "清除搜尋項目" + +#: ../src/jarabe/journal/misc.py:273 +#, python-format +msgid "Older Version Of %s Activity" +msgstr "更早版本的 %s 活動" + +#: ../src/jarabe/journal/misc.py:274 +#, python-format +msgid "Do you want to downgrade to version %s" +msgstr "是否想要把版本降回 %s ?" + +#: ../src/jarabe/journal/modalalert.py:64 +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:80 +msgid "Show Journal" +msgstr "顯示日誌" + +#: ../src/jarabe/journal/objectchooser.py:146 +msgid "Choose an object" +msgstr "選擇物件" + +#: ../src/jarabe/journal/objectchooser.py:151 +#: ../src/jarabe/view/viewsource.py:410 +msgid "Close" +msgstr "關閉" + +#: ../src/jarabe/journal/palettes.py:72 +msgid "Resume with" +msgstr "回復活動" + +#: ../src/jarabe/journal/palettes.py:75 +msgid "Start with" +msgstr "開始活動" + +#: ../src/jarabe/journal/palettes.py:88 ../src/jarabe/journal/palettes.py:357 +msgid "No activity to start entry" +msgstr "找不到可以開始的活動" + +#: ../src/jarabe/journal/palettes.py:112 +msgid "Send to" +msgstr "傳送給" + +#: ../src/jarabe/journal/palettes.py:121 +msgid "View Details" +msgstr "檢視詳細內容" + +#: ../src/jarabe/journal/palettes.py:160 +msgid "Entries without a file cannot be sent." +msgstr "沒有選擇要傳送的檔案" + +#: ../src/jarabe/journal/palettes.py:245 ../src/jarabe/journal/palettes.py:278 +#: ../src/jarabe/journal/volumestoolbar.py:306 +msgid "Entries without a file cannot be copied." +msgstr "沒有選擇要複製的檔案" + +#: ../src/jarabe/journal/palettes.py:267 +msgid "Clipboard" +msgstr "剪貼簿" + +#: ../src/jarabe/journal/palettes.py:322 +msgid "No friends present" +msgstr "沒有好友上線" + +#: ../src/jarabe/journal/palettes.py:327 +msgid "No valid connection found" +msgstr "找不到有效的網路連線" + +#: ../src/jarabe/journal/palettes.py:355 +msgid "No activity to resume entry" +msgstr "找不到可以回復的活動" + +#: ../src/jarabe/journal/volumestoolbar.py:209 +msgid "Documents" +msgstr "文件" + +#: ../src/jarabe/journal/volumestoolbar.py:391 +#: ../src/jarabe/view/palettes.py:202 ../src/jarabe/view/palettes.py:254 +#, python-format +msgid "%(free_space)d MB Free" +msgstr "剩餘 %(free_space)d MB 空間" + +#: ../src/jarabe/model/network.py:211 +msgid "The reason for the device state change is unknown." +msgstr "未知設備改變的理由" + +#: ../src/jarabe/model/network.py:213 +msgid "The state change is normal." +msgstr "正常的狀態改變" + +#: ../src/jarabe/model/network.py:215 +msgid "The device is now managed." +msgstr "設備已經受到管理" + +#: ../src/jarabe/model/network.py:217 +msgid "The device is no longer managed." +msgstr "設備尚未被管理" + +#: ../src/jarabe/model/network.py:219 +msgid "The device could not be readied for configuration." +msgstr "設備還不能被設定" + +#: ../src/jarabe/model/network.py:221 +msgid "" +"IP configuration could not be reserved (no available address, timeout, etc)." +msgstr "無法預留ip設定(可能為無可用位址或逾時等因素)" + +#: ../src/jarabe/model/network.py:224 +msgid "The IP configuration is no longer valid." +msgstr "這個ip設定不再可用" + +#: ../src/jarabe/model/network.py:226 +msgid "Secrets were required, but not provided." +msgstr "連線需要加密,但是密碼未提供" + +#: ../src/jarabe/model/network.py:228 +msgid "" +"The 802.1X supplicant disconnected from the access point or authentication " +"server." +msgstr "802.1X被連接點或認證伺服器斷線" + +#: ../src/jarabe/model/network.py:231 +msgid "Configuration of the 802.1X supplicant failed." +msgstr "802.1X設定失敗" + +#: ../src/jarabe/model/network.py:233 +msgid "The 802.1X supplicant quit or failed unexpectedly." +msgstr "802.1X無預警退出或失敗" + +#: ../src/jarabe/model/network.py:235 +msgid "The 802.1X supplicant took too long to authenticate." +msgstr "802.1X認證時間逾期" + +#: ../src/jarabe/model/network.py:237 +msgid "The PPP service failed to start within the allowed time." +msgstr "ppp撥接服務逾期" + +#: ../src/jarabe/model/network.py:239 +msgid "The PPP service disconnected unexpectedly." +msgstr "ppp服務無預警斷線" + +#: ../src/jarabe/model/network.py:241 +msgid "The PPP service quit or failed unexpectedly." +msgstr "ppp服務無預警失敗或退出" + +#: ../src/jarabe/model/network.py:243 +msgid "The DHCP service failed to start within the allowed time." +msgstr "dhcp服務未在預定時間內開啟" + +#: ../src/jarabe/model/network.py:245 +msgid "The DHCP service reported an unexpected error." +msgstr "dhcp服務回報預期以外的錯誤" + +#: ../src/jarabe/model/network.py:247 +msgid "The DHCP service quit or failed unexpectedly." +msgstr "dhcp服務無預警的退出或失敗" + +#: ../src/jarabe/model/network.py:249 +msgid "The shared connection service failed to start." +msgstr "無法啟動共享連線" + +#: ../src/jarabe/model/network.py:251 +msgid "The shared connection service quit or failed unexpectedly." +msgstr "共享連線無預警的退出或斷線" + +#: ../src/jarabe/model/network.py:254 +msgid "The AutoIP service failed to start." +msgstr "AutoIP服務無法啟動" + +#: ../src/jarabe/model/network.py:256 +msgid "The AutoIP service reported an unexpected error." +msgstr "AutoIP服務回報無預警錯誤" + +#: ../src/jarabe/model/network.py:258 +msgid "The AutoIP service quit or failed unexpectedly." +msgstr "AutoIP服務無預警退出或失敗" + +#: ../src/jarabe/model/network.py:260 +msgid "Dialing failed because the line was busy." +msgstr "撥號失敗,忙線中" + +#: ../src/jarabe/model/network.py:262 +msgid "Dialing failed because there was no dial tone." +msgstr "撥號失敗,無撥號音" + +#: ../src/jarabe/model/network.py:264 +msgid "Dialing failed because there was no carrier." +msgstr "撥號失敗,無連線" + +#: ../src/jarabe/model/network.py:266 +msgid "Dialing timed out." +msgstr "撥號失敗,逾時" + +#: ../src/jarabe/model/network.py:268 +msgid "Dialing failed." +msgstr "撥號失敗" + +#: ../src/jarabe/model/network.py:270 +msgid "Modem initialization failed." +msgstr "數據機初始化失敗" + +#: ../src/jarabe/model/network.py:272 +msgid "Failed to select the specified GSM APN" +msgstr "無法選擇指定的GSM APN" + +#: ../src/jarabe/model/network.py:274 +msgid "Not searching for networks." +msgstr "沒有搜尋網路" + +#: ../src/jarabe/model/network.py:276 +msgid "Network registration was denied." +msgstr "網路註冊失敗" + +#: ../src/jarabe/model/network.py:278 +msgid "Network registration timed out." +msgstr "網路註冊逾時" + +#: ../src/jarabe/model/network.py:280 +msgid "Failed to register with the requested GSM network." +msgstr "向指定的GSM網路註冊失敗" + +#: ../src/jarabe/model/network.py:282 +msgid "PIN check failed." +msgstr "未通過pin檢查" + +#: ../src/jarabe/model/network.py:284 +msgid "Necessary firmware for the device may be missing." +msgstr "遺漏必要的軔體" + +#: ../src/jarabe/model/network.py:286 +msgid "The device was removed." +msgstr "裝置已經移除" + +#: ../src/jarabe/model/network.py:288 +msgid "NetworkManager went to sleep." +msgstr "網路管理員睡眠中" + +#: ../src/jarabe/model/network.py:290 +msgid "The device's active connection was removed or disappeared." +msgstr "裝置的主動連線被移除" + +#: ../src/jarabe/model/network.py:293 +msgid "A user or client requested the disconnection." +msgstr "使用者要求斷線" + +#: ../src/jarabe/model/network.py:295 +msgid "The device's carrier/link changed." +msgstr "裝置的連線已經改變" + +#: ../src/jarabe/model/network.py:297 +msgid "The device's existing connection was assumed." +msgstr "裝置現有的連線已採用" + +#: ../src/jarabe/model/network.py:299 +msgid "The supplicant is now available." +msgstr "請求者可使用" + +#: ../src/jarabe/model/network.py:301 +msgid "The modem could not be found." +msgstr "找不到數據機" + +#: ../src/jarabe/model/network.py:303 +msgid "The Bluetooth connection failed or timed out." +msgstr "藍牙連線失敗或逾時" + +#: ../src/jarabe/model/network.py:305 +msgid "Unused." +msgstr "未使用" + +#: ../src/jarabe/view/buddymenu.py:67 +msgid "Remove friend" +msgstr "移除好友" + +#: ../src/jarabe/view/buddymenu.py:70 +msgid "Make friend" +msgstr "結交好友" + +#: ../src/jarabe/view/buddymenu.py:87 +msgid "Shutdown" +msgstr "關機" + +#: ../src/jarabe/view/buddymenu.py:95 +msgid "Restart" +msgstr "重新啟動" + +#: ../src/jarabe/view/buddymenu.py:101 +msgid "Logout" +msgstr "顯示方式" + +#: ../src/jarabe/view/buddymenu.py:106 +msgid "My Settings" +msgstr "我的設定" + +#: ../src/jarabe/view/buddymenu.py:142 +#, python-format +msgid "Invite to %s" +msgstr "邀請 %s" + +#: ../src/jarabe/view/launcher.py:145 +#, python-format +msgid "%s failed to start." +msgstr "%s 無法啟動" + +#: ../src/jarabe/view/palettes.py:48 +msgid "Starting..." +msgstr "啟動中…" + +#: ../src/jarabe/view/palettes.py:58 +msgid "Activity failed to start" +msgstr "這個活動無法啟動" + +#. TODO: share-with, keep +#: ../src/jarabe/view/palettes.py:91 +msgid "View Source" +msgstr "檢視原始碼" + +#: ../src/jarabe/view/palettes.py:102 +msgid "Stop" +msgstr "停止" + +#: ../src/jarabe/view/palettes.py:139 +msgid "Start new" +msgstr "建立新的" + +#: ../src/jarabe/view/palettes.py:180 +msgid "Show contents" +msgstr "顯示內容" + +#: ../src/jarabe/view/palettes.py:229 +msgctxt "Volume" +msgid "Remove" +msgstr "移除" + +#: ../src/jarabe/view/viewsource.py:263 +msgid "Instance Source" +msgstr "範例原始碼" + +#: ../src/jarabe/view/viewsource.py:312 +msgid "Source" +msgstr "原始碼" + +#: ../src/jarabe/view/viewsource.py:374 +msgid "Activity Bundle Source" +msgstr "預裝活動原始碼" + +#: ../src/jarabe/view/viewsource.py:393 +msgid "Sugar Toolkit Source" +msgstr "Sugar 工具庫原始碼" + +#: ../src/jarabe/view/viewsource.py:400 +#, python-format +#, python-format, +msgid "View source: %s" +msgstr "查看原始碼: %s" + +#: ../src/jarabe/view/viewsource.py:401 +#, python-format +msgid "View source: %r" +msgstr "查看原始碼: %r" + +#: ../src/jarabe/util/emulator.py:40 +msgid "Sugar in a window" +msgstr "將Sugar放入視窗" + +#~ msgid "Error in extreme pm argument, use on/off." +#~ msgstr "極度省電管理開關發生錯誤" diff --git a/py-compile b/py-compile new file mode 100755 index 0000000..15c834c --- /dev/null +++ b/py-compile @@ -0,0 +1,161 @@ +#!/bin/sh +# py-compile - Compile a Python program + +scriptversion=2011-06-08.12; # UTC + +# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2008, 2009, 2011 Free +# Software Foundation, Inc. + +# 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 2, 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 . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +if [ -z "$PYTHON" ]; then + PYTHON=python +fi + +me=py-compile + +usage_error () +{ + echo "$me: $*" >&2 + echo "Try \`$me --help' for more information." >&2 + exit 1 +} + +basedir= +destdir= +while test $# -ne 0; do + case "$1" in + --basedir) + if test $# -lt 2; then + usage_error "option '--basedir' requires an argument" + else + basedir=$2 + fi + shift + ;; + --destdir) + if test $# -lt 2; then + usage_error "option '--destdir' requires an argument" + else + destdir=$2 + fi + shift + ;; + -h|--help) + cat <<\EOF +Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..." + +Byte compile some python scripts FILES. Use --destdir to specify any +leading directory path to the FILES that you don't want to include in the +byte compiled file. Specify --basedir for any additional path information you +do want to be shown in the byte compiled file. + +Example: + py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py + +Report bugs to . +EOF + exit $? + ;; + -v|--version) + echo "$me $scriptversion" + exit $? + ;; + --) + shift + break + ;; + -*) + usage_error "unrecognized option '$1'" + ;; + *) + break + ;; + esac + shift +done + +files=$* +if test -z "$files"; then + usage_error "no files given" +fi + +# if basedir was given, then it should be prepended to filenames before +# byte compilation. +if [ -z "$basedir" ]; then + pathtrans="path = file" +else + pathtrans="path = os.path.join('$basedir', file)" +fi + +# if destdir was given, then it needs to be prepended to the filename to +# byte compile but not go into the compiled file. +if [ -z "$destdir" ]; then + filetrans="filepath = path" +else + filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)" +fi + +$PYTHON -c " +import sys, os, py_compile + +files = '''$files''' + +sys.stdout.write('Byte-compiling python modules...\n') +for file in files.split(): + $pathtrans + $filetrans + if not os.path.exists(filepath) or not (len(filepath) >= 3 + and filepath[-3:] == '.py'): + continue + sys.stdout.write(file) + sys.stdout.flush() + py_compile.compile(filepath, filepath + 'c', path) +sys.stdout.write('\n')" || exit $? + +# this will fail for python < 1.5, but that doesn't matter ... +$PYTHON -O -c " +import sys, os, py_compile + +files = '''$files''' +sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n') +for file in files.split(): + $pathtrans + $filetrans + if not os.path.exists(filepath) or not (len(filepath) >= 3 + and filepath[-3:] == '.py'): + continue + sys.stdout.write(file) + sys.stdout.flush() + py_compile.compile(filepath, filepath + 'o', path) +sys.stdout.write('\n')" 2>/dev/null || : + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..83571a4 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = jarabe diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..b9e24ba --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,569 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = jarabe +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/jarabe/Makefile.am b/src/jarabe/Makefile.am new file mode 100644 index 0000000..84bb213 --- /dev/null +++ b/src/jarabe/Makefile.am @@ -0,0 +1,16 @@ +SUBDIRS = \ + controlpanel \ + desktop \ + frame \ + journal \ + model \ + view \ + intro \ + util + +sugardir = $(pythondir)/jarabe +sugar_PYTHON = \ + __init__.py + +nodist_sugar_PYTHON = config.py + diff --git a/src/jarabe/Makefile.in b/src/jarabe/Makefile.in new file mode 100644 index 0000000..9d1c674 --- /dev/null +++ b/src/jarabe/Makefile.in @@ -0,0 +1,691 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src/jarabe +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config.py.in $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = config.py +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = \ + controlpanel \ + desktop \ + frame \ + journal \ + model \ + view \ + intro \ + util + +sugardir = $(pythondir)/jarabe +sugar_PYTHON = \ + __init__.py + +nodist_sugar_PYTHON = config.py +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/jarabe/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/jarabe/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +config.py: $(top_builddir)/config.status $(srcdir)/config.py.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-nodist_sugarPYTHON: $(nodist_sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(nodist_sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-nodist_sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(nodist_sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(sugardir)" "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-nodist_sugarPYTHON install-sugarPYTHON + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-nodist_sugarPYTHON uninstall-sugarPYTHON + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-nodist_sugarPYTHON install-pdf install-pdf-am \ + install-ps install-ps-am install-strip install-sugarPYTHON \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-nodist_sugarPYTHON \ + uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/jarabe/__init__.py b/src/jarabe/__init__.py new file mode 100644 index 0000000..ed2f639 --- /dev/null +++ b/src/jarabe/__init__.py @@ -0,0 +1,25 @@ +"""OLPC Sugar Graphical "Shell" Interface + +Provides the shell-level operations for managing +the OLPC laptop computers. It interacts heavily +with (and depends upon) the Sugar UI libraries. + +This is a "graphical" shell, the name does not +refer to a command-line "shell" interface. +""" + +# Copyright (C) 2006-2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/src/jarabe/config.py.in b/src/jarabe/config.py.in new file mode 100644 index 0000000..d22ee9a --- /dev/null +++ b/src/jarabe/config.py.in @@ -0,0 +1,26 @@ +# Copyright (C) 2008 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +# pylint: disable=C0301 + +prefix = '@prefix@' +data_path = '@prefix@/share/sugar/data' +shell_path = '@prefix@/share/sugar/shell' +locale_path = '@prefix@/share/locale' +ext_path = '@prefix@/share/sugar/extensions' +activities_path = "@prefix@/share/sugar/activities" +version = '@SUCROSE_VERSION@' + diff --git a/src/jarabe/controlpanel/Makefile.am b/src/jarabe/controlpanel/Makefile.am new file mode 100644 index 0000000..1de2961 --- /dev/null +++ b/src/jarabe/controlpanel/Makefile.am @@ -0,0 +1,10 @@ +sugardir = $(pythondir)/jarabe/controlpanel +sugar_PYTHON = \ + __init__.py \ + cmd.py \ + gui.py \ + inlinealert.py \ + sectionview.py \ + toolbar.py + + diff --git a/src/jarabe/controlpanel/Makefile.in b/src/jarabe/controlpanel/Makefile.in new file mode 100644 index 0000000..11a0798 --- /dev/null +++ b/src/jarabe/controlpanel/Makefile.in @@ -0,0 +1,445 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src/jarabe/controlpanel +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pythondir)/jarabe/controlpanel +sugar_PYTHON = \ + __init__.py \ + cmd.py \ + gui.py \ + inlinealert.py \ + sectionview.py \ + toolbar.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/jarabe/controlpanel/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/jarabe/controlpanel/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/jarabe/controlpanel/__init__.py b/src/jarabe/controlpanel/__init__.py new file mode 100644 index 0000000..85f6a24 --- /dev/null +++ b/src/jarabe/controlpanel/__init__.py @@ -0,0 +1,15 @@ +# Copyright (C) 2006-2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/src/jarabe/controlpanel/cmd.py b/src/jarabe/controlpanel/cmd.py new file mode 100644 index 0000000..c4870c9 --- /dev/null +++ b/src/jarabe/controlpanel/cmd.py @@ -0,0 +1,161 @@ +# Copyright (C) 2007, 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import sys +import getopt +import os +from gettext import gettext as _ +import logging + +from jarabe import config + + +_RESTART = 1 + +_same_option_warning = _('sugar-control-panel: WARNING, found more than one' + ' option with the same name: %s module: %r') +_no_option_error = _('sugar-control-panel: key=%s not an available option') +_general_error = _('sugar-control-panel: %s') + + +def cmd_help(): + """Print the help to the screen""" + # TRANS: Translators, there's a empty line at the end of this string, + # which must appear in the translated string (msgstr) as well. + print _('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\ + ') + + +def note_restart(): + """Instructions how to restart sugar""" + print _('To apply your changes you have to restart Sugar.\n' + + 'Hit ctrl+alt+erase on the keyboard to trigger a restart.') + + +def load_modules(): + """Build a list of pointers to available modules and import them. + """ + modules = [] + + path = os.path.join(config.ext_path, 'cpsection') + folder = os.listdir(path) + + for item in folder: + if os.path.isdir(os.path.join(path, item)) and \ + os.path.exists(os.path.join(path, item, 'model.py')): + try: + module = __import__('.'.join(('cpsection', item, 'model')), + globals(), locals(), ['model']) + except Exception: + logging.exception('Exception while loading extension:') + else: + modules.append(module) + + return modules + + +def main(): + try: + options, args = getopt.getopt(sys.argv[1:], 'h:s:g:c:l', []) + except getopt.GetoptError: + cmd_help() + sys.exit(2) + + if not options: + cmd_help() + sys.exit(2) + + modules = load_modules() + + for option, key in options: + found = 0 + if option in ('-h'): + for module in modules: + method = getattr(module, 'set_' + key, None) + if method: + found += 1 + if found == 1: + print method.__doc__ + else: + print _(_same_option_warning % (key, module)) + if found == 0: + print _(_no_option_error % key) + if option in ('-l'): + for module in modules: + methods = dir(module) + print '%s:' % module.__name__.split('.')[1] + for method in methods: + if method.startswith('get_'): + print ' %s' % method[4:] + elif method.startswith('clear_'): + print ' %s (use the -c argument with this option)' \ + % method[6:] + if option in ('-g'): + for module in modules: + method = getattr(module, 'print_' + key, None) + if method: + found += 1 + if found == 1: + try: + method() + except Exception, detail: + print _(_general_error % detail) + else: + print _(_same_option_warning % (key, module)) + if found == 0: + print _(_no_option_error % key) + if option in ('-s'): + for module in modules: + method = getattr(module, 'set_' + key, None) + if method: + note = 0 + found += 1 + if found == 1: + try: + note = method(*args) + except Exception, detail: + print _(_general_error % detail) + if note == _RESTART: + note_restart() + else: + print _(_same_option_warning % (key, module)) + if found == 0: + print _(_no_option_error % key) + if option in ('-c'): + for module in modules: + method = getattr(module, 'clear_' + key, None) + if method: + note = 0 + found += 1 + if found == 1: + try: + note = method(*args) + except Exception, detail: + print _(_general_error % detail) + if note == _RESTART: + note_restart() + else: + print _(_same_option_warning % (key, module)) + if found == 0: + print _(_no_option_error % key) diff --git a/src/jarabe/controlpanel/gui.py b/src/jarabe/controlpanel/gui.py new file mode 100644 index 0000000..46810aa --- /dev/null +++ b/src/jarabe/controlpanel/gui.py @@ -0,0 +1,445 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import logging +from gettext import gettext as _ + +import gobject +import gtk + +from sugar.graphics.icon import Icon +from sugar.graphics import style +from sugar.graphics.alert import Alert + +from jarabe.model.session import get_session_manager +from jarabe.controlpanel.toolbar import MainToolbar +from jarabe.controlpanel.toolbar import SectionToolbar +from jarabe import config + +POWERD_FLAG_DIR = '/etc/powerd/flags' + +_logger = logging.getLogger('ControlPanel') + + +class ControlPanel(gtk.Window): + __gtype_name__ = 'SugarControlPanel' + + def __init__(self): + gtk.Window.__init__(self) + + self._max_columns = int(0.285 * (float(gtk.gdk.screen_width()) / + style.GRID_CELL_SIZE - 3)) + + self.set_border_width(style.LINE_WIDTH) + offset = style.GRID_CELL_SIZE + width = gtk.gdk.screen_width() - offset * 2 + height = gtk.gdk.screen_height() - offset * 2 + self.set_size_request(width, height) + self.set_position(gtk.WIN_POS_CENTER_ALWAYS) + self.set_decorated(False) + self.set_resizable(False) + self.set_modal(True) + + self._toolbar = None + self._canvas = None + self._table = None + self._scrolledwindow = None + self._separator = None + self._section_view = None + self._section_toolbar = None + self._main_toolbar = None + + self._vbox = gtk.VBox() + self._hbox = gtk.HBox() + self._vbox.pack_start(self._hbox) + self._hbox.show() + + self._main_view = gtk.EventBox() + self._hbox.pack_start(self._main_view) + self._main_view.modify_bg(gtk.STATE_NORMAL, + style.COLOR_BLACK.get_gdk_color()) + self._main_view.show() + + self.add(self._vbox) + self._vbox.show() + + self.connect('realize', self.__realize_cb) + + self._options = self._get_options() + self._current_option = None + self._setup_main() + self._setup_section() + self._show_main_view() + + def __realize_cb(self, widget): + self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + self.window.set_accept_focus(True) + + def _set_canvas(self, canvas): + if self._canvas: + self._main_view.remove(self._canvas) + if canvas: + self._main_view.add(canvas) + self._canvas = canvas + + def _set_toolbar(self, toolbar): + if self._toolbar: + self._vbox.remove(self._toolbar) + self._vbox.pack_start(toolbar, False) + self._vbox.reorder_child(toolbar, 0) + self._toolbar = toolbar + if not self._separator: + self._separator = gtk.HSeparator() + self._vbox.pack_start(self._separator, False) + self._vbox.reorder_child(self._separator, 1) + self._separator.show() + + def _setup_main(self): + self._main_toolbar = MainToolbar() + + self._table = gtk.Table() + self._table.set_col_spacings(style.GRID_CELL_SIZE) + self._table.set_row_spacings(style.GRID_CELL_SIZE) + self._table.set_border_width(style.GRID_CELL_SIZE) + + self._scrolledwindow = gtk.ScrolledWindow() + self._scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, + gtk.POLICY_AUTOMATIC) + self._scrolledwindow.add_with_viewport(self._table) + child = self._scrolledwindow.get_child() + child.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color()) + + self._setup_options() + self._main_toolbar.connect('stop-clicked', + self.__stop_clicked_cb) + self._main_toolbar.connect('search-changed', + self.__search_changed_cb) + + def _setup_options(self): + if not os.access(POWERD_FLAG_DIR, os.W_OK): + del self._options['power'] + + try: + import xklavier + except ImportError: + del self._options['keyboard'] + + # If the screen width only supports two columns, start + # placing from the second row. + if self._max_columns == 2: + row = 1 + column = 0 + else: + # About Me and About my computer are hardcoded below to use the + # first two slots so we need to leave them free. + row = 0 + column = 2 + + options = self._options.keys() + options.sort() + + for option in options: + sectionicon = _SectionIcon(icon_name=self._options[option]['icon'], + title=self._options[option]['title'], + xo_color=self._options[option]['color'], + pixel_size=style.GRID_CELL_SIZE) + sectionicon.connect('button_press_event', + self.__select_option_cb, option) + sectionicon.show() + + if option == 'aboutme': + self._table.attach(sectionicon, 0, 1, 0, 1) + elif option == 'aboutcomputer': + self._table.attach(sectionicon, 1, 2, 0, 1) + else: + self._table.attach(sectionicon, + column, column + 1, + row, row + 1) + column += 1 + if column == self._max_columns: + column = 0 + row += 1 + + self._options[option]['button'] = sectionicon + + def _show_main_view(self): + self._set_toolbar(self._main_toolbar) + self._main_toolbar.show() + self._set_canvas(self._scrolledwindow) + self._main_view.modify_bg(gtk.STATE_NORMAL, + style.COLOR_BLACK.get_gdk_color()) + self._table.show() + self._scrolledwindow.show() + entry = self._main_toolbar.get_entry() + entry.grab_focus() + entry.set_text('') + + def _update(self, query): + for option in self._options: + found = False + for key in self._options[option]['keywords']: + if query.lower() in key.lower(): + self._options[option]['button'].set_sensitive(True) + found = True + break + if not found: + self._options[option]['button'].set_sensitive(False) + + def _setup_section(self): + self._section_toolbar = SectionToolbar() + self._section_toolbar.connect('cancel-clicked', + self.__cancel_clicked_cb) + self._section_toolbar.connect('accept-clicked', + self.__accept_clicked_cb) + + def show_section_view(self, option): + self._set_toolbar(self._section_toolbar) + + icon = self._section_toolbar.get_icon() + icon.set_from_icon_name(self._options[option]['icon'], + gtk.ICON_SIZE_LARGE_TOOLBAR) + icon.props.xo_color = self._options[option]['color'] + title = self._section_toolbar.get_title() + title.set_text(self._options[option]['title']) + self._section_toolbar.show() + + self._current_option = option + + mod = __import__('.'.join(('cpsection', option, 'view')), + globals(), locals(), ['view']) + view_class = getattr(mod, self._options[option]['view'], None) + + mod = __import__('.'.join(('cpsection', option, 'model')), + globals(), locals(), ['model']) + model = ModelWrapper(mod) + + try: + self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + self._section_view = view_class(model, + self._options[option]['alerts']) + + self._set_canvas(self._section_view) + self._section_view.show() + finally: + self.get_window().set_cursor(None) + + self._section_view.connect('notify::is-valid', + self.__valid_section_cb) + self._section_view.connect('request-close', + self.__close_request_cb) + self._main_view.modify_bg(gtk.STATE_NORMAL, + style.COLOR_WHITE.get_gdk_color()) + + def set_section_view_auto_close(self): + """Automatically close the control panel if there is "nothing to do" + """ + self._section_view.auto_close = True + + def _get_options(self): + """Get the available option information from the extensions + """ + options = {} + + path = os.path.join(config.ext_path, 'cpsection') + folder = os.listdir(path) + + for item in folder: + if os.path.isdir(os.path.join(path, item)) and \ + os.path.exists(os.path.join(path, item, '__init__.py')): + try: + mod = __import__('.'.join(('cpsection', item)), + globals(), locals(), [item]) + view_class = getattr(mod, 'CLASS', None) + if view_class is not None: + options[item] = {} + options[item]['alerts'] = [] + options[item]['view'] = view_class + options[item]['icon'] = getattr(mod, 'ICON', item) + options[item]['title'] = getattr(mod, 'TITLE', item) + options[item]['color'] = getattr(mod, 'COLOR', None) + keywords = getattr(mod, 'KEYWORDS', []) + keywords.append(options[item]['title'].lower()) + if item not in keywords: + keywords.append(item) + options[item]['keywords'] = keywords + else: + _logger.error('no CLASS attribute in %r', item) + except Exception: + logging.exception('Exception while loading extension:') + + return options + + def __cancel_clicked_cb(self, widget): + self._section_view.undo() + self._options[self._current_option]['alerts'] = [] + self._section_toolbar.accept_button.set_sensitive(True) + self._show_main_view() + + def __accept_clicked_cb(self, widget): + if self._section_view.needs_restart: + self._section_toolbar.accept_button.set_sensitive(False) + self._section_toolbar.cancel_button.set_sensitive(False) + alert = Alert() + alert.props.title = _('Warning') + alert.props.msg = _('Changes require restart') + + icon = Icon(icon_name='dialog-cancel') + alert.add_button(gtk.RESPONSE_CANCEL, _('Cancel changes'), icon) + icon.show() + + if self._current_option != 'aboutme': + icon = Icon(icon_name='dialog-ok') + alert.add_button(gtk.RESPONSE_ACCEPT, _('Later'), icon) + icon.show() + + icon = Icon(icon_name='system-restart') + alert.add_button(gtk.RESPONSE_APPLY, _('Restart now'), icon) + icon.show() + + self._vbox.pack_start(alert, False) + self._vbox.reorder_child(alert, 2) + alert.connect('response', self.__response_cb) + alert.show() + else: + self._show_main_view() + + def __response_cb(self, alert, response_id): + self._vbox.remove(alert) + self._section_toolbar.accept_button.set_sensitive(True) + self._section_toolbar.cancel_button.set_sensitive(True) + if response_id is gtk.RESPONSE_CANCEL: + self._section_view.undo() + self._section_view.setup() + self._options[self._current_option]['alerts'] = [] + elif response_id is gtk.RESPONSE_ACCEPT: + self._options[self._current_option]['alerts'] = \ + self._section_view.restart_alerts + self._show_main_view() + elif response_id is gtk.RESPONSE_APPLY: + session_manager = get_session_manager() + session_manager.logout() + + def __select_option_cb(self, button, event, option): + self.show_section_view(option) + + def __search_changed_cb(self, maintoolbar, query): + self._update(query) + + def __stop_clicked_cb(self, widget): + self.destroy() + + def __close_request_cb(self, widget, event=None): + self.destroy() + + def __valid_section_cb(self, section_view, pspec): + section_is_valid = section_view.props.is_valid + self._section_toolbar.accept_button.set_sensitive(section_is_valid) + + +class ModelWrapper(object): + def __init__(self, module): + self._module = module + self._options = {} + self._setup() + + def _setup(self): + methods = dir(self._module) + for method in methods: + if method.startswith('get_') and method[4:] != 'color': + try: + self._options[method[4:]] = getattr(self._module, method)() + except Exception: + self._options[method[4:]] = None + + def __getattr__(self, name): + return getattr(self._module, name) + + def undo(self): + for key in self._options.keys(): + method = getattr(self._module, 'set_' + key, None) + if method and self._options[key] is not None: + try: + method(self._options[key]) + except Exception, detail: + _logger.debug('Error undo option: %s', detail) + + +class _SectionIcon(gtk.EventBox): + __gtype_name__ = 'SugarSectionIcon' + + __gproperties__ = { + 'icon-name': (str, None, None, None, gobject.PARAM_READWRITE), + 'pixel-size': (object, None, None, gobject.PARAM_READWRITE), + 'xo-color': (object, None, None, gobject.PARAM_READWRITE), + 'title': (str, None, None, None, gobject.PARAM_READWRITE), + } + + def __init__(self, **kwargs): + self._icon_name = None + self._pixel_size = style.GRID_CELL_SIZE + self._xo_color = None + self._title = 'No Title' + + gobject.GObject.__init__(self, **kwargs) + + self._vbox = gtk.VBox() + self._icon = Icon(icon_name=self._icon_name, + pixel_size=self._pixel_size, + xo_color=self._xo_color) + self._vbox.pack_start(self._icon, expand=False, fill=False) + + self._label = gtk.Label(self._title) + self._label.modify_fg(gtk.STATE_NORMAL, + style.COLOR_WHITE.get_gdk_color()) + self._vbox.pack_start(self._label, expand=False, fill=False) + + self._vbox.set_spacing(style.DEFAULT_SPACING) + self.set_visible_window(False) + self.set_app_paintable(True) + self.set_events(gtk.gdk.BUTTON_PRESS_MASK) + + self.add(self._vbox) + self._vbox.show() + self._label.show() + self._icon.show() + + def get_icon(self): + return self._icon + + def do_set_property(self, pspec, value): + if pspec.name == 'icon-name': + if self._icon_name != value: + self._icon_name = value + elif pspec.name == 'pixel-size': + if self._pixel_size != value: + self._pixel_size = value + elif pspec.name == 'xo-color': + if self._xo_color != value: + self._xo_color = value + elif pspec.name == 'title': + if self._title != value: + self._title = value + + def do_get_property(self, pspec): + if pspec.name == 'icon-name': + return self._icon_name + elif pspec.name == 'pixel-size': + return self._pixel_size + elif pspec.name == 'xo-color': + return self._xo_color + elif pspec.name == 'title': + return self._title diff --git a/src/jarabe/controlpanel/inlinealert.py b/src/jarabe/controlpanel/inlinealert.py new file mode 100644 index 0000000..f970af4 --- /dev/null +++ b/src/jarabe/controlpanel/inlinealert.py @@ -0,0 +1,81 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +import gobject +import pango + +from sugar.graphics import style +from sugar.graphics.icon import Icon + + +class InlineAlert(gtk.HBox): + """UI interface for Inline alerts + + Inline alerts are different from the other alerts beause they are + no dialogs, they only inform about a current event. + + Properties: + 'msg': the message of the alert, + 'icon': the icon that appears at the far left + See __gproperties__ + """ + + __gtype_name__ = 'SugarInlineAlert' + + __gproperties__ = { + 'msg': (str, None, None, None, gobject.PARAM_READWRITE), + 'icon': (object, None, None, gobject.PARAM_WRITABLE), + } + + def __init__(self, **kwargs): + + self._msg = None + self._msg_color = None + self._icon = Icon(icon_name='emblem-warning', + fill_color=style.COLOR_SELECTION_GREY.get_svg(), + stroke_color=style.COLOR_WHITE.get_svg()) + + self._msg_label = gtk.Label() + self._msg_label.set_max_width_chars(50) + self._msg_label.set_ellipsize(pango.ELLIPSIZE_MIDDLE) + self._msg_label.set_alignment(0, 0.5) + self._msg_label.modify_fg(gtk.STATE_NORMAL, + style.COLOR_SELECTION_GREY.get_gdk_color()) + + gobject.GObject.__init__(self, **kwargs) + + self.set_spacing(style.DEFAULT_SPACING) + self.modify_bg(gtk.STATE_NORMAL, + style.COLOR_WHITE.get_gdk_color()) + + self.pack_start(self._icon, False) + self.pack_start(self._msg_label, False) + self._msg_label.show() + self._icon.show() + + def do_set_property(self, pspec, value): + if pspec.name == 'msg': + if self._msg != value: + self._msg = value + self._msg_label.set_markup(self._msg) + elif pspec.name == 'icon': + if self._icon != value: + self._icon = value + + def do_get_property(self, pspec): + if pspec.name == 'msg': + return self._msg diff --git a/src/jarabe/controlpanel/sectionview.py b/src/jarabe/controlpanel/sectionview.py new file mode 100644 index 0000000..4b5751f --- /dev/null +++ b/src/jarabe/controlpanel/sectionview.py @@ -0,0 +1,54 @@ +# Copyright (C) 2008, OLPC +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gobject +import gtk +from gettext import gettext as _ + + +class SectionView(gtk.VBox): + __gtype_name__ = 'SugarSectionView' + + __gsignals__ = { + 'request-close': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + } + + __gproperties__ = { + 'is_valid': (bool, None, None, True, gobject.PARAM_READWRITE), + } + + _APPLY_TIMEOUT = 1000 + + def __init__(self): + gtk.VBox.__init__(self) + self._is_valid = True + self.auto_close = False + self.needs_restart = False + self.restart_alerts = [] + self.restart_msg = _('Changes require restart') + + def do_set_property(self, pspec, value): + if pspec.name == 'is-valid': + if self._is_valid != value: + self._is_valid = value + + def do_get_property(self, pspec): + if pspec.name == 'is-valid': + return self._is_valid + + def undo(self): + """Undo here the changes that have been made in this section.""" + pass diff --git a/src/jarabe/controlpanel/toolbar.py b/src/jarabe/controlpanel/toolbar.py new file mode 100644 index 0000000..fca34a0 --- /dev/null +++ b/src/jarabe/controlpanel/toolbar.py @@ -0,0 +1,160 @@ +# Copyright (C) 2007, 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +import gettext +import gobject + +_ = lambda msg: gettext.dgettext('sugar', msg) + +from sugar.graphics.icon import Icon +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics import iconentry +from sugar.graphics import style + + +class MainToolbar(gtk.Toolbar): + """ Main toolbar of the control panel + """ + __gtype_name__ = 'MainToolbar' + + __gsignals__ = { + 'stop-clicked': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])), + 'search-changed': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([str])), + } + + def __init__(self): + gtk.Toolbar.__init__(self) + + self._add_separator() + + tool_item = gtk.ToolItem() + self.insert(tool_item, -1) + tool_item.show() + self._search_entry = iconentry.IconEntry() + self._search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, + 'system-search') + self._search_entry.add_clear_button() + self._search_entry.set_width_chars(25) + self._search_entry.connect('changed', self.__search_entry_changed_cb) + tool_item.add(self._search_entry) + self._search_entry.show() + + self._add_separator(True) + + self.stop = ToolButton(icon_name='dialog-cancel') + self.stop.set_tooltip(_('Done')) + self.stop.connect('clicked', self.__stop_clicked_cb) + self.stop.show() + self.insert(self.stop, -1) + self.stop.show() + + def get_entry(self): + return self._search_entry + + def _add_separator(self, expand=False): + separator = gtk.SeparatorToolItem() + separator.props.draw = False + if expand: + separator.set_expand(True) + else: + separator.set_size_request(style.DEFAULT_SPACING, -1) + self.insert(separator, -1) + separator.show() + + def __search_entry_changed_cb(self, search_entry): + self.emit('search-changed', search_entry.props.text) + + def __stop_clicked_cb(self, button): + self.emit('stop-clicked') + + +class SectionToolbar(gtk.Toolbar): + """ Toolbar of the sections of the control panel + """ + __gtype_name__ = 'SectionToolbar' + + __gsignals__ = { + 'cancel-clicked': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])), + 'accept-clicked': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])), + } + + def __init__(self): + gtk.Toolbar.__init__(self) + + self._add_separator() + + self._icon = Icon() + self._add_widget(self._icon) + + self._add_separator() + + self._title = gtk.Label() + self._add_widget(self._title) + + self._add_separator(True) + + self.cancel_button = ToolButton('dialog-cancel') + self.cancel_button.set_tooltip(_('Cancel')) + self.cancel_button.connect('clicked', self.__cancel_button_clicked_cb) + self.insert(self.cancel_button, -1) + self.cancel_button.show() + + self.accept_button = ToolButton('dialog-ok') + self.accept_button.set_tooltip(_('Ok')) + self.accept_button.connect('clicked', self.__accept_button_clicked_cb) + self.insert(self.accept_button, -1) + self.accept_button.show() + + def get_icon(self): + return self._icon + + def get_title(self): + return self._title + + def _add_separator(self, expand=False): + separator = gtk.SeparatorToolItem() + separator.props.draw = False + if expand: + separator.set_expand(True) + else: + separator.set_size_request(style.DEFAULT_SPACING, -1) + self.insert(separator, -1) + separator.show() + + def _add_widget(self, widget, expand=False): + tool_item = gtk.ToolItem() + tool_item.set_expand(expand) + + tool_item.add(widget) + widget.show() + + self.insert(tool_item, -1) + tool_item.show() + + def __cancel_button_clicked_cb(self, widget, data=None): + self.emit('cancel-clicked') + + def __accept_button_clicked_cb(self, widget, data=None): + self.emit('accept-clicked') diff --git a/src/jarabe/desktop/Makefile.am b/src/jarabe/desktop/Makefile.am new file mode 100644 index 0000000..25fb0b4 --- /dev/null +++ b/src/jarabe/desktop/Makefile.am @@ -0,0 +1,18 @@ +sugardir = $(pythondir)/jarabe/desktop +sugar_PYTHON = \ + __init__.py \ + activitieslist.py \ + favoritesview.py \ + favoriteslayout.py \ + friendview.py \ + grid.py \ + groupbox.py \ + homebox.py \ + homewindow.py \ + keydialog.py \ + meshbox.py \ + networkviews.py \ + schoolserver.py \ + snowflakelayout.py \ + spreadlayout.py \ + transitionbox.py diff --git a/src/jarabe/desktop/Makefile.in b/src/jarabe/desktop/Makefile.in new file mode 100644 index 0000000..ef0f449 --- /dev/null +++ b/src/jarabe/desktop/Makefile.in @@ -0,0 +1,455 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src/jarabe/desktop +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pythondir)/jarabe/desktop +sugar_PYTHON = \ + __init__.py \ + activitieslist.py \ + favoritesview.py \ + favoriteslayout.py \ + friendview.py \ + grid.py \ + groupbox.py \ + homebox.py \ + homewindow.py \ + keydialog.py \ + meshbox.py \ + networkviews.py \ + schoolserver.py \ + snowflakelayout.py \ + spreadlayout.py \ + transitionbox.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/jarabe/desktop/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/jarabe/desktop/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/jarabe/desktop/__init__.py b/src/jarabe/desktop/__init__.py new file mode 100644 index 0000000..85f6a24 --- /dev/null +++ b/src/jarabe/desktop/__init__.py @@ -0,0 +1,15 @@ +# Copyright (C) 2006-2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/src/jarabe/desktop/activitieslist.py b/src/jarabe/desktop/activitieslist.py new file mode 100644 index 0000000..7bf0960 --- /dev/null +++ b/src/jarabe/desktop/activitieslist.py @@ -0,0 +1,461 @@ +# Copyright (C) 2008 One Laptop Per Child +# Copyright (C) 2009 Tomeu Vizoso +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import logging +from gettext import gettext as _ + +import gobject +import pango +import gconf +import gtk + +from sugar import util +from sugar.graphics import style +from sugar.graphics.icon import Icon, CellRendererIcon +from sugar.graphics.xocolor import XoColor +from sugar.graphics.menuitem import MenuItem +from sugar.graphics.alert import Alert + +from jarabe.model import bundleregistry +from jarabe.view.palettes import ActivityPalette +from jarabe.journal import misc + + +class ActivitiesTreeView(gtk.TreeView): + __gtype_name__ = 'SugarActivitiesTreeView' + + __gsignals__ = { + 'erase-activated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str])), + } + + def __init__(self): + gobject.GObject.__init__(self) + + self._query = '' + + self.modify_base(gtk.STATE_NORMAL, style.COLOR_WHITE.get_gdk_color()) + self.set_headers_visible(False) + selection = self.get_selection() + selection.set_mode(gtk.SELECTION_NONE) + + model = ListModel() + model.set_visible_func(self.__model_visible_cb) + self.set_model(model) + + cell_favorite = CellRendererFavorite(self) + cell_favorite.connect('clicked', self.__favorite_clicked_cb) + + column = gtk.TreeViewColumn() + column.pack_start(cell_favorite) + column.set_cell_data_func(cell_favorite, self.__favorite_set_data_cb) + self.append_column(column) + + cell_icon = CellRendererActivityIcon(self) + cell_icon.connect('erase-activated', self.__erase_activated_cb) + cell_icon.connect('clicked', self.__icon_clicked_cb) + + column = gtk.TreeViewColumn() + column.pack_start(cell_icon) + column.add_attribute(cell_icon, 'file-name', ListModel.COLUMN_ICON) + self.append_column(column) + + cell_text = gtk.CellRendererText() + cell_text.props.ellipsize = pango.ELLIPSIZE_MIDDLE + cell_text.props.ellipsize_set = True + + column = gtk.TreeViewColumn() + column.props.sizing = gtk.TREE_VIEW_COLUMN_GROW_ONLY + column.props.expand = True + column.set_sort_column_id(ListModel.COLUMN_TITLE) + column.pack_start(cell_text) + column.add_attribute(cell_text, 'markup', ListModel.COLUMN_TITLE) + self.append_column(column) + + cell_text = gtk.CellRendererText() + cell_text.props.xalign = 1 + + column = gtk.TreeViewColumn() + column.set_alignment(1) + column.props.sizing = gtk.TREE_VIEW_COLUMN_GROW_ONLY + column.props.resizable = True + column.props.reorderable = True + column.props.expand = True + column.set_sort_column_id(ListModel.COLUMN_VERSION) + column.pack_start(cell_text) + column.add_attribute(cell_text, 'text', ListModel.COLUMN_VERSION_TEXT) + self.append_column(column) + + cell_text = gtk.CellRendererText() + cell_text.props.xalign = 1 + + column = gtk.TreeViewColumn() + column.set_alignment(1) + column.props.sizing = gtk.TREE_VIEW_COLUMN_GROW_ONLY + column.props.resizable = True + column.props.reorderable = True + column.props.expand = True + column.set_sort_column_id(ListModel.COLUMN_DATE) + column.pack_start(cell_text) + column.add_attribute(cell_text, 'text', ListModel.COLUMN_DATE_TEXT) + self.append_column(column) + + self.set_search_column(ListModel.COLUMN_TITLE) + self.set_enable_search(False) + + def __erase_activated_cb(self, cell_renderer, bundle_id): + self.emit('erase-activated', bundle_id) + + def __favorite_set_data_cb(self, column, cell, model, tree_iter): + favorite = model[tree_iter][ListModel.COLUMN_FAVORITE] + if favorite: + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + cell.props.xo_color = color + else: + cell.props.xo_color = None + + def __favorite_clicked_cb(self, cell, path): + row = self.get_model()[path] + registry = bundleregistry.get_registry() + registry.set_bundle_favorite(row[ListModel.COLUMN_BUNDLE_ID], + row[ListModel.COLUMN_VERSION], + not row[ListModel.COLUMN_FAVORITE]) + + def __icon_clicked_cb(self, cell, path): + row = self.get_model()[path] + + registry = bundleregistry.get_registry() + bundle = registry.get_bundle(row[ListModel.COLUMN_BUNDLE_ID]) + + misc.launch(bundle) + + def set_filter(self, query): + self._query = query.lower() + self.get_model().refilter() + + def __model_visible_cb(self, model, tree_iter): + title = model[tree_iter][ListModel.COLUMN_TITLE] + return title is not None and title.lower().find(self._query) > -1 + + +class ListModel(gtk.TreeModelSort): + __gtype_name__ = 'SugarListModel' + + COLUMN_BUNDLE_ID = 0 + COLUMN_FAVORITE = 1 + COLUMN_ICON = 2 + COLUMN_TITLE = 3 + COLUMN_VERSION = 4 + COLUMN_VERSION_TEXT = 5 + COLUMN_DATE = 6 + COLUMN_DATE_TEXT = 7 + + def __init__(self): + self._model = gtk.ListStore(str, bool, str, str, str, str, int, str) + self._model_filter = self._model.filter_new() + gtk.TreeModelSort.__init__(self, self._model_filter) + + gobject.idle_add(self.__connect_to_bundle_registry_cb) + + def __connect_to_bundle_registry_cb(self): + registry = bundleregistry.get_registry() + for info in registry: + self._add_activity(info) + registry.connect('bundle-added', self.__activity_added_cb) + registry.connect('bundle-changed', self.__activity_changed_cb) + registry.connect('bundle-removed', self.__activity_removed_cb) + + def __activity_added_cb(self, activity_registry, activity_info): + self._add_activity(activity_info) + + def __activity_changed_cb(self, activity_registry, activity_info): + bundle_id = activity_info.get_bundle_id() + version = activity_info.get_activity_version() + favorite = activity_registry.is_bundle_favorite(bundle_id, version) + for row in self._model: + if row[ListModel.COLUMN_BUNDLE_ID] == bundle_id and \ + row[ListModel.COLUMN_VERSION] == version: + row[ListModel.COLUMN_FAVORITE] = favorite + return + + def __activity_removed_cb(self, activity_registry, activity_info): + bundle_id = activity_info.get_bundle_id() + version = activity_info.get_activity_version() + for row in self._model: + if row[ListModel.COLUMN_BUNDLE_ID] == bundle_id and \ + row[ListModel.COLUMN_VERSION] == version: + self._model.remove(row.iter) + return + + def _add_activity(self, activity_info): + if activity_info.get_bundle_id() == 'org.laptop.JournalActivity': + return + + timestamp = activity_info.get_installation_time() + version = activity_info.get_activity_version() + + registry = bundleregistry.get_registry() + favorite = registry.is_bundle_favorite(activity_info.get_bundle_id(), + version) + + tag_list = activity_info.get_tags() + if tag_list is None or not tag_list: + title = '%s' % activity_info.get_name() + else: + tags = ', '.join(tag_list) + title = '%s\n' \ + '%s' % \ + (activity_info.get_name(), tags) + + self._model.append([activity_info.get_bundle_id(), + favorite, + activity_info.get_icon(), + title, + version, + _('Version %s') % version, + timestamp, + util.timestamp_to_elapsed_string(timestamp)]) + + def set_visible_func(self, func): + self._model_filter.set_visible_func(func) + + def refilter(self): + self._model_filter.refilter() + + +class CellRendererFavorite(CellRendererIcon): + __gtype_name__ = 'SugarCellRendererFavorite' + + def __init__(self, tree_view): + CellRendererIcon.__init__(self, tree_view) + + self.props.width = style.GRID_CELL_SIZE + self.props.height = style.GRID_CELL_SIZE + self.props.size = style.SMALL_ICON_SIZE + self.props.icon_name = 'emblem-favorite' + self.props.mode = gtk.CELL_RENDERER_MODE_ACTIVATABLE + client = gconf.client_get_default() + prelit_color = XoColor(client.get_string('/desktop/sugar/user/color')) + self.props.prelit_stroke_color = prelit_color.get_stroke_color() + self.props.prelit_fill_color = prelit_color.get_fill_color() + + +class CellRendererActivityIcon(CellRendererIcon): + __gtype_name__ = 'SugarCellRendererActivityIcon' + + __gsignals__ = { + 'erase-activated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str])), + } + + def __init__(self, tree_view): + CellRendererIcon.__init__(self, tree_view) + + self.props.width = style.GRID_CELL_SIZE + self.props.height = style.GRID_CELL_SIZE + self.props.size = style.STANDARD_ICON_SIZE + self.props.stroke_color = style.COLOR_BUTTON_GREY.get_svg() + self.props.fill_color = style.COLOR_TRANSPARENT.get_svg() + self.props.mode = gtk.CELL_RENDERER_MODE_ACTIVATABLE + + client = gconf.client_get_default() + prelit_color = XoColor(client.get_string('/desktop/sugar/user/color')) + self.props.prelit_stroke_color = prelit_color.get_stroke_color() + self.props.prelit_fill_color = prelit_color.get_fill_color() + + self._tree_view = tree_view + + def create_palette(self): + model = self._tree_view.get_model() + row = model[self.props.palette_invoker.path] + bundle_id = row[ListModel.COLUMN_BUNDLE_ID] + + registry = bundleregistry.get_registry() + palette = ActivityListPalette(registry.get_bundle(bundle_id)) + palette.connect('erase-activated', self.__erase_activated_cb) + return palette + + def __erase_activated_cb(self, palette, bundle_id): + self.emit('erase-activated', bundle_id) + + +class ActivitiesList(gtk.VBox): + __gtype_name__ = 'SugarActivitiesList' + + def __init__(self): + logging.debug('STARTUP: Loading the activities list') + + gobject.GObject.__init__(self) + + scrolled_window = gtk.ScrolledWindow() + scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + scrolled_window.set_shadow_type(gtk.SHADOW_NONE) + scrolled_window.connect('key-press-event', self.__key_press_event_cb) + self.pack_start(scrolled_window) + scrolled_window.show() + + self._tree_view = ActivitiesTreeView() + self._tree_view.connect('erase-activated', self.__erase_activated_cb) + scrolled_window.add(self._tree_view) + self._tree_view.show() + + self._alert = None + + def set_filter(self, query): + self._tree_view.set_filter(query) + + def __key_press_event_cb(self, scrolled_window, event): + keyname = gtk.gdk.keyval_name(event.keyval) + + vadjustment = scrolled_window.props.vadjustment + if keyname == 'Up': + if vadjustment.props.value > vadjustment.props.lower: + vadjustment.props.value -= vadjustment.props.step_increment + elif keyname == 'Down': + max_value = vadjustment.props.upper - vadjustment.props.page_size + if vadjustment.props.value < max_value: + vadjustment.props.value = min( + vadjustment.props.value + vadjustment.props.step_increment, + max_value) + else: + return False + + return True + + def add_alert(self, alert): + if self._alert is not None: + self.remove_alert() + self._alert = alert + self.pack_start(alert, False) + self.reorder_child(alert, 0) + + def remove_alert(self): + self.remove(self._alert) + self._alert = None + + def __erase_activated_cb(self, tree_view, bundle_id): + registry = bundleregistry.get_registry() + activity_info = registry.get_bundle(bundle_id) + + alert = Alert() + alert.props.title = _('Confirm erase') + alert.props.msg = \ + _('Confirm erase: Do you want to permanently erase %s?') \ + % activity_info.get_name() + + cancel_icon = Icon(icon_name='dialog-cancel') + alert.add_button(gtk.RESPONSE_CANCEL, _('Keep'), cancel_icon) + + erase_icon = Icon(icon_name='dialog-ok') + alert.add_button(gtk.RESPONSE_OK, _('Erase'), erase_icon) + + alert.connect('response', self.__erase_confirmation_dialog_response_cb, + bundle_id) + + self.add_alert(alert) + + def __erase_confirmation_dialog_response_cb(self, alert, response_id, + bundle_id): + self.remove_alert() + if response_id == gtk.RESPONSE_OK: + registry = bundleregistry.get_registry() + bundle = registry.get_bundle(bundle_id) + registry.uninstall(bundle, delete_profile=True) + + +class ActivityListPalette(ActivityPalette): + __gtype_name__ = 'SugarActivityListPalette' + + __gsignals__ = { + 'erase-activated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str])), + } + + def __init__(self, activity_info): + ActivityPalette.__init__(self, activity_info) + + self._bundle_id = activity_info.get_bundle_id() + self._version = activity_info.get_activity_version() + + registry = bundleregistry.get_registry() + self._favorite = registry.is_bundle_favorite(self._bundle_id, + self._version) + + self._favorite_item = MenuItem('') + self._favorite_icon = Icon(icon_name='emblem-favorite', + icon_size=gtk.ICON_SIZE_MENU) + self._favorite_item.set_image(self._favorite_icon) + self._favorite_item.connect('activate', + self.__change_favorite_activate_cb) + self.menu.append(self._favorite_item) + self._favorite_item.show() + + if activity_info.is_user_activity(): + self._add_erase_option(registry, activity_info) + + registry = bundleregistry.get_registry() + self._activity_changed_sid = registry.connect('bundle_changed', + self.__activity_changed_cb) + self._update_favorite_item() + + self.connect('destroy', self.__destroy_cb) + + def _add_erase_option(self, registry, activity_info): + menu_item = MenuItem(_('Erase'), 'list-remove') + menu_item.connect('activate', self.__erase_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + if not os.access(activity_info.get_path(), os.W_OK) or \ + registry.is_activity_protected(self._bundle_id): + menu_item.props.sensitive = False + + def __destroy_cb(self, palette): + registry = bundleregistry.get_registry() + registry.disconnect(self._activity_changed_sid) + + def _update_favorite_item(self): + label = self._favorite_item.child + if self._favorite: + label.set_text(_('Remove favorite')) + xo_color = XoColor('%s,%s' % (style.COLOR_WHITE.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + else: + label.set_text(_('Make favorite')) + client = gconf.client_get_default() + xo_color = XoColor(client.get_string('/desktop/sugar/user/color')) + + self._favorite_icon.props.xo_color = xo_color + + def __change_favorite_activate_cb(self, menu_item): + registry = bundleregistry.get_registry() + registry.set_bundle_favorite(self._bundle_id, + self._version, + not self._favorite) + + def __activity_changed_cb(self, activity_registry, activity_info): + if activity_info.get_bundle_id() == self._bundle_id and \ + activity_info.get_activity_version() == self._version: + registry = bundleregistry.get_registry() + self._favorite = registry.is_bundle_favorite(self._bundle_id, + self._version) + self._update_favorite_item() + + def __erase_activate_cb(self, menu_item): + self.emit('erase-activated', self._bundle_id) diff --git a/src/jarabe/desktop/favoriteslayout.py b/src/jarabe/desktop/favoriteslayout.py new file mode 100644 index 0000000..360c147 --- /dev/null +++ b/src/jarabe/desktop/favoriteslayout.py @@ -0,0 +1,560 @@ +# Copyright (C) 2008 One Laptop Per Child +# Copyright (C) 2010 Sugar Labs +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +import math +import hashlib +from gettext import gettext as _ + +import gobject +import gtk +import hippo + +from sugar.graphics import style + +from jarabe.model import bundleregistry +from jarabe.desktop.grid import Grid + + +_logger = logging.getLogger('FavoritesLayout') + +_CELL_SIZE = 4 +_BASE_SCALE = 1000 +_INTERMEDIATE_B = (style.STANDARD_ICON_SIZE + style.SMALL_ICON_SIZE) / 2 +_INTERMEDIATE_A = (style.STANDARD_ICON_SIZE + _INTERMEDIATE_B) / 2 +_INTERMEDIATE_C = (_INTERMEDIATE_B + style.SMALL_ICON_SIZE) / 2 +_ICON_SIZES = [style.MEDIUM_ICON_SIZE, style.STANDARD_ICON_SIZE, + _INTERMEDIATE_A, _INTERMEDIATE_B, _INTERMEDIATE_C, + style.SMALL_ICON_SIZE] + + +class FavoritesLayout(gobject.GObject, hippo.CanvasLayout): + """Base class of the different layout types.""" + + __gtype_name__ = 'FavoritesLayout' + + def __init__(self): + gobject.GObject.__init__(self) + self.box = None + self.fixed_positions = {} + + def do_set_box(self, box): + self.box = box + + def do_get_height_request(self, for_width): + return 0, gtk.gdk.screen_height() - style.GRID_CELL_SIZE + + def do_get_width_request(self): + return 0, gtk.gdk.screen_width() + + def compare_activities(self, icon_a, icon_b): + return 0 + + def append(self, icon, locked=False): + if not hasattr(type(icon), 'fixed_position'): + logging.debug('Icon without fixed_position: %r', icon) + return + + icon.props.size = max(icon.props.size, style.STANDARD_ICON_SIZE) + + relative_x, relative_y = icon.fixed_position + if relative_x < 0 or relative_y < 0: + logging.debug('Icon out of bounds: %r', icon) + return + + min_width_, width = self.box.get_width_request() + min_height_, height = self.box.get_height_request(width) + self.fixed_positions[icon] = \ + (int(relative_x * _BASE_SCALE / float(width)), + int(relative_y * _BASE_SCALE / float(height))) + + def remove(self, icon): + if icon in self.fixed_positions: + del self.fixed_positions[icon] + + def move_icon(self, icon, x, y, locked=False): + if icon not in self.box.get_children(): + raise ValueError('Child not in box.') + + if not (hasattr(icon, 'get_bundle_id') and + hasattr(icon, 'get_version')): + logging.debug('Not an activity icon %r', icon) + return + + min_width_, width = self.box.get_width_request() + min_height_, height = self.box.get_height_request(width) + registry = bundleregistry.get_registry() + registry.set_bundle_position( + icon.get_bundle_id(), icon.get_version(), + x * width / float(_BASE_SCALE), + y * height / float(_BASE_SCALE)) + self.fixed_positions[icon] = (x, y) + + def do_allocate(self, x, y, width, height, req_width, req_height, + origin_changed): + raise NotImplementedError() + + def allow_dnd(self): + return False + + +class RandomLayout(FavoritesLayout): + """Lay out icons randomly; try to nudge them around to resolve overlaps.""" + + __gtype_name__ = 'RandomLayout' + + icon_name = 'view-freeform' + """Name of icon used in home view dropdown palette.""" + + key = 'random-layout' + """String used in profile to represent this view.""" + + # TRANS: label for the freeform layout in the favorites view + palette_name = _('Freeform') + """String used to identify this layout in home view dropdown palette.""" + + def __init__(self): + FavoritesLayout.__init__(self) + + min_width_, width = self.do_get_width_request() + min_height_, height = self.do_get_height_request(width) + + self._grid = Grid(width / _CELL_SIZE, height / _CELL_SIZE) + self._grid.connect('child-changed', self.__grid_child_changed_cb) + + def __grid_child_changed_cb(self, grid, child): + child.emit_request_changed() + + def append(self, icon, locked=False): + FavoritesLayout.append(self, icon, locked) + + min_width_, child_width = icon.get_width_request() + min_height_, child_height = icon.get_height_request(child_width) + min_width_, width = self.box.get_width_request() + min_height_, height = self.box.get_height_request(width) + + if icon in self.fixed_positions: + x, y = self.fixed_positions[icon] + x = min(x, width - child_width) + y = min(y, height - child_height) + elif hasattr(icon, 'get_bundle_id'): + name_hash = hashlib.md5(icon.get_bundle_id()) + x = int(name_hash.hexdigest()[:5], 16) % (width - child_width) + y = int(name_hash.hexdigest()[-5:], 16) % (height - child_height) + else: + x = None + y = None + + if x is None or y is None: + self._grid.add(icon, + child_width / _CELL_SIZE, child_height / _CELL_SIZE) + else: + self._grid.add(icon, + child_width / _CELL_SIZE, child_height / _CELL_SIZE, + x / _CELL_SIZE, y / _CELL_SIZE) + + def remove(self, icon): + self._grid.remove(icon) + FavoritesLayout.remove(self, icon) + + def move_icon(self, icon, x, y, locked=False): + self._grid.move(icon, x / _CELL_SIZE, y / _CELL_SIZE, locked) + FavoritesLayout.move_icon(self, icon, x, y, locked) + + def do_allocate(self, x, y, width, height, req_width, req_height, + origin_changed): + for child in self.box.get_layout_children(): + # We need to always get requests to not confuse hippo + min_w_, child_width = child.get_width_request() + min_h_, child_height = child.get_height_request(child_width) + + rect = self._grid.get_child_rect(child.item) + child.allocate(rect.x * _CELL_SIZE, + rect.y * _CELL_SIZE, + child_width, + child_height, + origin_changed) + + def allow_dnd(self): + return True + + +_MINIMUM_RADIUS = style.XLARGE_ICON_SIZE / 2 + style.DEFAULT_SPACING + \ + style.STANDARD_ICON_SIZE * 2 +_MAXIMUM_RADIUS = (gtk.gdk.screen_height() - style.GRID_CELL_SIZE) / 2 - \ + style.STANDARD_ICON_SIZE - style.DEFAULT_SPACING +_ICON_SPACING_FACTORS = [1.5, 1.4, 1.3, 1.2, 1.1, 1.0] +_SPIRAL_SPACING_FACTORS = [1.5, 1.5, 1.5, 1.4, 1.3, 1.2] +_MIMIMUM_RADIUS_ENCROACHMENT = 0.75 +_INITIAL_ANGLE = math.pi + + +class RingLayout(FavoritesLayout): + """Lay out icons in a ring or spiral around the XO man.""" + + __gtype_name__ = 'RingLayout' + icon_name = 'view-radial' + """Name of icon used in home view dropdown palette.""" + key = 'ring-layout' + """String used in profile to represent this view.""" + # TRANS: label for the ring layout in the favorites view + palette_name = _('Ring') + """String used to identify this layout in home view dropdown palette.""" + + def __init__(self): + FavoritesLayout.__init__(self) + self._locked_children = {} + self._spiral_mode = False + + def append(self, icon, locked=False): + FavoritesLayout.append(self, icon, locked) + if locked: + child = self.box.find_box_child(icon) + self._locked_children[child] = (0, 0) + + def remove(self, icon): + child = self.box.find_box_child(icon) + if child in self._locked_children: + del self._locked_children[child] + FavoritesLayout.remove(self, icon) + + def move_icon(self, icon, x, y, locked=False): + FavoritesLayout.move_icon(self, icon, x, y, locked) + if locked: + child = self.box.find_box_child(icon) + self._locked_children[child] = (x, y) + + def _calculate_radius_and_icon_size(self, children_count): + """ Adjust the ring or spiral radius and icon size as needed. """ + self._spiral_mode = False + distance = style.MEDIUM_ICON_SIZE + style.DEFAULT_SPACING * \ + _ICON_SPACING_FACTORS[_ICON_SIZES.index(style.MEDIUM_ICON_SIZE)] + radius = max(children_count * distance / (2 * math.pi), + _MINIMUM_RADIUS) + if radius < _MAXIMUM_RADIUS: + return radius, style.MEDIUM_ICON_SIZE + + distance = style.STANDARD_ICON_SIZE + style.DEFAULT_SPACING * \ + _ICON_SPACING_FACTORS[_ICON_SIZES.index(style.STANDARD_ICON_SIZE)] + radius = max(children_count * distance / (2 * math.pi), + _MINIMUM_RADIUS) + if radius < _MAXIMUM_RADIUS: + return radius, style.STANDARD_ICON_SIZE + + self._spiral_mode = True + icon_size = style.STANDARD_ICON_SIZE + angle_, radius = self._calculate_angle_and_radius(children_count, + icon_size) + while radius > _MAXIMUM_RADIUS: + i = _ICON_SIZES.index(icon_size) + if i < len(_ICON_SIZES) - 1: + icon_size = _ICON_SIZES[i + 1] + angle_, radius = self._calculate_angle_and_radius( + children_count, icon_size) + else: + break + return radius, icon_size + + def _calculate_position(self, radius, icon_size, icon_index, + children_count, sin=math.sin, cos=math.cos): + """ Calculate an icon position on a circle or a spiral. """ + width, height = self.box.get_allocation() + if self._spiral_mode: + min_width_, box_width = self.box.get_width_request() + min_height_, box_height = self.box.get_height_request(box_width) + angle, radius = self._calculate_angle_and_radius(icon_index, + icon_size) + x, y = self._convert_from_polar_to_cartesian(angle, radius, + icon_size, + width, height) + else: + angle = icon_index * (2 * math.pi / children_count) - math.pi / 2 + x = radius * cos(angle) + (width - icon_size) / 2 + y = radius * sin(angle) + (height - icon_size - \ + (style.GRID_CELL_SIZE / 2)) / 2 + return x, y + + def _convert_from_polar_to_cartesian(self, angle, radius, icon_size, width, + height): + """ Convert angle, radius to x, y """ + x = int(math.sin(angle) * radius) + y = int(math.cos(angle) * radius) + x = - x + (width - icon_size) / 2 + y = y + (height - icon_size - (style.GRID_CELL_SIZE / 2)) / 2 + return x, y + + def _calculate_angle_and_radius(self, icon_count, icon_size): + """ Based on icon_count and icon_size, calculate radius and angle. """ + spiral_spacing = _SPIRAL_SPACING_FACTORS[_ICON_SIZES.index(icon_size)] + icon_spacing = icon_size + style.DEFAULT_SPACING * \ + _ICON_SPACING_FACTORS[_ICON_SIZES.index(icon_size)] + angle = _INITIAL_ANGLE + radius = _MINIMUM_RADIUS - (icon_size * _MIMIMUM_RADIUS_ENCROACHMENT) + for i_ in range(icon_count): + circumference = radius * 2 * math.pi + n = circumference / icon_spacing + angle += (2 * math.pi / n) + radius += (float(icon_spacing) * spiral_spacing / n) + return angle, radius + + def _get_children_in_ring(self): + children_in_ring = [child for child in self.box.get_layout_children() \ + if child not in self._locked_children] + return children_in_ring + + def do_allocate(self, x, y, width, height, req_width, req_height, + origin_changed): + children_in_ring = self._get_children_in_ring() + if children_in_ring: + radius, icon_size = \ + self._calculate_radius_and_icon_size(len(children_in_ring)) + + for n in range(len(children_in_ring)): + child = children_in_ring[n] + + x, y = self._calculate_position(radius, icon_size, n, + len(children_in_ring)) + + # We need to always get requests to not confuse hippo + min_w_, child_width = child.get_width_request() + min_h_, child_height = child.get_height_request(child_width) + + child.allocate(int(x), int(y), child_width, child_height, + origin_changed) + child.item.props.size = icon_size + + for child in self._locked_children.keys(): + x, y = self._locked_children[child] + + # We need to always get requests to not confuse hippo + min_w_, child_width = child.get_width_request() + min_h_, child_height = child.get_height_request(child_width) + + if child_width <= 0 or child_height <= 0: + return + + child.allocate(int(x), int(y), child_width, child_height, + origin_changed) + + def compare_activities(self, icon_a, icon_b): + if hasattr(icon_a, 'installation_time') and \ + hasattr(icon_b, 'installation_time'): + return icon_b.installation_time - icon_a.installation_time + else: + return 0 + + +_SUNFLOWER_CONSTANT = style.STANDARD_ICON_SIZE * .75 +"""Chose a constant such that STANDARD_ICON_SIZE icons are nicely spaced.""" + +_SUNFLOWER_OFFSET = \ + math.pow((style.XLARGE_ICON_SIZE / 2 + style.STANDARD_ICON_SIZE) / + _SUNFLOWER_CONSTANT, 2) +""" +Compute a starting index for the `SunflowerLayout` which leaves space for +the XO man in the center. Since r = _SUNFLOWER_CONSTANT * sqrt(n), +solve for n when r is (XLARGE_ICON_SIZE + STANDARD_ICON_SIZE)/2. +""" + +_GOLDEN_RATIO = 1.6180339887498949 +""" +Golden ratio: http://en.wikipedia.org/wiki/Golden_ratio +Calculation: (math.sqrt(5) + 1) / 2 +""" + +_SUNFLOWER_ANGLE = 2.3999632297286531 +""" +The sunflower angle is approximately 137.5 degrees. +This is the golden angle: http://en.wikipedia.org/wiki/Golden_angle +Calculation: math.radians(360) / ( _GOLDEN_RATIO * _GOLDEN_RATIO ) +""" + + +class SunflowerLayout(RingLayout): + """Spiral layout based on Fibonacci ratio in phyllotaxis. + + See http://algorithmicbotany.org/papers/abop/abop-ch4.pdf + for details of Vogel's model of florets in a sunflower head.""" + + __gtype_name__ = 'SunflowerLayout' + + icon_name = 'view-spiral' + """Name of icon used in home view dropdown palette.""" + + key = 'spiral-layout' + """String used in profile to represent this view.""" + + # TRANS: label for the spiral layout in the favorites view + palette_name = _('Spiral') + """String used to identify this layout in home view dropdown palette.""" + + def __init__(self): + RingLayout.__init__(self) + self.skipped_indices = [] + + def _calculate_radius_and_icon_size(self, children_count): + """Stub out this method; not used in `SunflowerLayout`.""" + return None, style.STANDARD_ICON_SIZE + + def adjust_index(self, i): + """Skip floret indices which end up outside the desired bounding box. + """ + for idx in self.skipped_indices: + if i < idx: + break + i += 1 + return i + + def _calculate_position(self, radius, icon_size, oindex, children_count, + sin=math.sin, cos=math.cos): + """Calculate the position of sunflower floret number 'oindex'. + If the result is outside the bounding box, use the next index which + is inside the bounding box.""" + + width, height = self.box.get_allocation() + + while True: + + index = self.adjust_index(oindex) + + # tweak phi to get a nice gap lined up where the "active activity" + # icon is, below the central XO man. + phi = index * _SUNFLOWER_ANGLE + math.radians(-130) + + # we offset index when computing r to make space for the XO man. + r = _SUNFLOWER_CONSTANT * math.sqrt(index + _SUNFLOWER_OFFSET) + + # x,y are the top-left corner of the icon, so remove icon_size + # from width/height to compensate. y has an extra GRID_CELL_SIZE/2 + # removed to make room for the "active activity" icon. + x = r * cos(phi) + (width - icon_size) / 2 + y = r * sin(phi) + (height - icon_size - \ + (style.GRID_CELL_SIZE / 2)) / 2 + + # skip allocations outside the allocation box. + # give up once we can't fit + if r < math.hypot(width / 2, height / 2): + if y < 0 or y > (height - icon_size) or \ + x < 0 or x > (width - icon_size): + self.skipped_indices.append(index) + # try again + continue + + return x, y + + +class BoxLayout(RingLayout): + """Lay out icons in a square around the XO man.""" + + __gtype_name__ = 'BoxLayout' + + icon_name = 'view-box' + """Name of icon used in home view dropdown palette.""" + + key = 'box-layout' + """String used in profile to represent this view.""" + + # TRANS: label for the box layout in the favorites view + palette_name = _('Box') + """String used to identify this layout in home view dropdown palette.""" + + def __init__(self): + RingLayout.__init__(self) + + def _calculate_position(self, radius, icon_size, index, children_count, + sin=None, cos=None): + + # use "orthogonal" versions of cos and sin in order to square the + # circle and turn the 'ring view' into a 'box view' + def cos_d(d): + while d < 0: + d += 360 + if d < 45: + return 1 + if d < 135: + return (90 - d) / 45. + if d < 225: + return -1 + # mirror around 180 + return cos_d(360 - d) + + cos = lambda r: cos_d(math.degrees(r)) + sin = lambda r: cos_d(math.degrees(r) - 90) + + return RingLayout._calculate_position(self, radius, icon_size, index, + children_count, sin=sin, + cos=cos) + + +class TriangleLayout(RingLayout): + """Lay out icons in a triangle around the XO man.""" + + __gtype_name__ = 'TriangleLayout' + + icon_name = 'view-triangle' + """Name of icon used in home view dropdown palette.""" + + key = 'triangle-layout' + """String used in profile to represent this view.""" + + # TRANS: label for the box layout in the favorites view + palette_name = _('Triangle') + """String used to identify this layout in home view dropdown palette.""" + + def __init__(self): + RingLayout.__init__(self) + + def _calculate_radius_and_icon_size(self, children_count): + # use slightly larger minimum radius than parent, because sides + # of triangle come awful close to the center. + radius, icon_size = \ + RingLayout._calculate_radius_and_icon_size(self, children_count) + return max(radius, _MINIMUM_RADIUS + style.MEDIUM_ICON_SIZE), icon_size + + def _calculate_position(self, radius, icon_size, index, children_count, + sin=math.sin, cos=math.cos): + # tweak cos and sin in order to make the 'ring' into an equilateral + # triangle. + + def cos_d(d): + while d < -90: + d += 360 + if d <= 30: + return (d + 90) / 120. + if d <= 90: + return (90 - d) / 60. + # mirror around 90 + return -cos_d(180 - d) + + sqrt_3 = math.sqrt(3) + + def sin_d(d): + while d < -90: + d += 360 + if d <= 30: + return ((d + 90) / 120.) * sqrt_3 - 1 + if d <= 90: + return sqrt_3 - 1 + # mirror around 90 + return sin_d(180 - d) + + cos = lambda r: cos_d(math.degrees(r)) + sin = lambda r: sin_d(math.degrees(r)) + + return RingLayout._calculate_position(self, radius, icon_size, index, + children_count, sin=sin, + cos=cos) diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py new file mode 100644 index 0000000..654f400 --- /dev/null +++ b/src/jarabe/desktop/favoritesview.py @@ -0,0 +1,702 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from gettext import gettext as _ +import math + +import gobject +import gconf +import glib +import gtk +import hippo + +from sugar.graphics import style +from sugar.graphics.icon import Icon, CanvasIcon +from sugar.graphics.menuitem import MenuItem +from sugar.graphics.alert import Alert +from sugar.graphics.xocolor import XoColor +from sugar.activity import activityfactory +from sugar import dispatch +from sugar.datastore import datastore + +from jarabe.view.palettes import JournalPalette +from jarabe.view.palettes import CurrentActivityPalette, ActivityPalette +from jarabe.view.buddyicon import BuddyIcon +from jarabe.view.buddymenu import BuddyMenu +from jarabe.model.buddy import get_owner_instance +from jarabe.model import shell +from jarabe.model import bundleregistry +from jarabe.journal import misc + +from jarabe.desktop import schoolserver +from jarabe.desktop.schoolserver import RegisterError +from jarabe.desktop import favoriteslayout + + +_logger = logging.getLogger('FavoritesView') + +_ICON_DND_TARGET = ('activity-icon', gtk.TARGET_SAME_WIDGET, 0) + +LAYOUT_MAP = {favoriteslayout.RingLayout.key: favoriteslayout.RingLayout, + #favoriteslayout.BoxLayout.key: favoriteslayout.BoxLayout, + #favoriteslayout.TriangleLayout.key: favoriteslayout.TriangleLayout, + #favoriteslayout.SunflowerLayout.key: favoriteslayout.SunflowerLayout, + favoriteslayout.RandomLayout.key: favoriteslayout.RandomLayout} +"""Map numeric layout identifiers to uninstantiated subclasses of +`FavoritesLayout` which implement the layouts. Additional information +about the layout can be accessed with fields of the class.""" + +_favorites_settings = None + + +class FavoritesView(hippo.Canvas): + __gtype_name__ = 'SugarFavoritesView' + + def __init__(self, **kwargs): + logging.debug('STARTUP: Loading the favorites view') + + gobject.GObject.__init__(self, **kwargs) + + # DND stuff + self._pressed_button = None + self._press_start_x = None + self._press_start_y = None + self._hot_x = None + self._hot_y = None + self._last_clicked_icon = None + + self._box = hippo.CanvasBox() + self._box.props.background_color = style.COLOR_WHITE.get_int() + self.set_root(self._box) + + self._my_icon = OwnerIcon(style.XLARGE_ICON_SIZE) + self._my_icon.connect('register-activate', self.__register_activate_cb) + self._box.append(self._my_icon) + + self._current_activity = CurrentActivityIcon() + self._box.append(self._current_activity) + + self._layout = None + self._alert = None + self._resume_mode = True + + # More DND stuff + self.add_events(gtk.gdk.BUTTON_PRESS_MASK | + gtk.gdk.POINTER_MOTION_HINT_MASK) + self.connect('motion-notify-event', self.__motion_notify_event_cb) + self.connect('button-press-event', self.__button_press_event_cb) + self.connect('drag-begin', self.__drag_begin_cb) + self.connect('drag-motion', self.__drag_motion_cb) + self.connect('drag-drop', self.__drag_drop_cb) + self.connect('drag-data-received', self.__drag_data_received_cb) + + gobject.idle_add(self.__connect_to_bundle_registry_cb) + + favorites_settings = get_settings() + favorites_settings.changed.connect(self.__settings_changed_cb) + self._set_layout(favorites_settings.layout) + + def set_filter(self, query): + query = query.strip() + for icon in self._box.get_children(): + if icon not in [self._my_icon, self._current_activity]: + activity_name = icon.get_activity_name().lower() + if activity_name.find(query) > -1: + icon.alpha = 1.0 + else: + icon.alpha = 0.33 + + def __settings_changed_cb(self, **kwargs): + favorites_settings = get_settings() + self._set_layout(favorites_settings.layout) + + def __connect_to_bundle_registry_cb(self): + registry = bundleregistry.get_registry() + + for info in registry: + if registry.is_bundle_favorite(info.get_bundle_id(), + info.get_activity_version()): + self._add_activity(info) + + registry.connect('bundle-added', self.__activity_added_cb) + registry.connect('bundle-removed', self.__activity_removed_cb) + registry.connect('bundle-changed', self.__activity_changed_cb) + + def _add_activity(self, activity_info): + if activity_info.get_bundle_id() == 'org.laptop.JournalActivity': + return + icon = ActivityIcon(activity_info) + icon.props.size = style.STANDARD_ICON_SIZE + icon.set_resume_mode(self._resume_mode) + self._box.insert_sorted(icon, 0, self._layout.compare_activities) + self._layout.append(icon) + + def __activity_added_cb(self, activity_registry, activity_info): + registry = bundleregistry.get_registry() + if registry.is_bundle_favorite(activity_info.get_bundle_id(), + activity_info.get_activity_version()): + self._add_activity(activity_info) + + def _find_activity_icon(self, bundle_id, version): + for icon in self._box.get_children(): + if isinstance(icon, ActivityIcon) and \ + icon.bundle_id == bundle_id and icon.version == version: + return icon + return None + + def __activity_removed_cb(self, activity_registry, activity_info): + icon = self._find_activity_icon(activity_info.get_bundle_id(), + activity_info.get_activity_version()) + if icon is not None: + self._layout.remove(icon) + self._box.remove(icon) + + def __activity_changed_cb(self, activity_registry, activity_info): + if activity_info.get_bundle_id() == 'org.laptop.JournalActivity': + return + icon = self._find_activity_icon(activity_info.get_bundle_id(), + activity_info.get_activity_version()) + if icon is not None: + self._box.remove(icon) + + registry = bundleregistry.get_registry() + if registry.is_bundle_favorite(activity_info.get_bundle_id(), + activity_info.get_activity_version()): + self._add_activity(activity_info) + + def do_size_allocate(self, allocation): + width = allocation.width + height = allocation.height + + min_w_, my_icon_width = self._my_icon.get_width_request() + min_h_, my_icon_height = self._my_icon.get_height_request( + my_icon_width) + x = (width - my_icon_width) / 2 + y = (height - my_icon_height - style.GRID_CELL_SIZE) / 2 + self._layout.move_icon(self._my_icon, x, y, locked=True) + + min_w_, icon_width = self._current_activity.get_width_request() + min_h_, icon_height = \ + self._current_activity.get_height_request(icon_width) + x = (width - icon_width) / 2 + y = (height - my_icon_height - style.GRID_CELL_SIZE) / 2 + \ + my_icon_height + style.DEFAULT_PADDING + self._layout.move_icon(self._current_activity, x, y, locked=True) + + hippo.Canvas.do_size_allocate(self, allocation) + + # TODO: Dnd methods. This should be merged somehow inside hippo-canvas. + def __button_press_event_cb(self, widget, event): + if event.button == 1 and event.type == gtk.gdk.BUTTON_PRESS: + self._last_clicked_icon = self._get_icon_at_coords(event.x, + event.y) + if self._last_clicked_icon is not None: + self._pressed_button = event.button + self._press_start_x = event.x + self._press_start_y = event.y + + return False + + def _get_icon_at_coords(self, x, y): + for icon in self._box.get_children(): + icon_x, icon_y = icon.get_context().translate_to_widget(icon) + icon_width, icon_height = icon.get_allocation() + + if (x >= icon_x) and (x <= icon_x + icon_width) and \ + (y >= icon_y) and (y <= icon_y + icon_height) and \ + isinstance(icon, ActivityIcon): + return icon + return None + + def __motion_notify_event_cb(self, widget, event): + if not self._pressed_button: + return False + + # if the mouse button is not pressed, no drag should occurr + if not event.state & gtk.gdk.BUTTON1_MASK: + self._pressed_button = None + return False + + if event.is_hint: + x, y, state_ = event.window.get_pointer() + else: + x = event.x + y = event.y + + if widget.drag_check_threshold(int(self._press_start_x), + int(self._press_start_y), + int(x), + int(y)): + context_ = widget.drag_begin([_ICON_DND_TARGET], + gtk.gdk.ACTION_MOVE, + 1, + event) + return False + + def __drag_begin_cb(self, widget, context): + icon_file_name = self._last_clicked_icon.props.file_name + # TODO: we should get the pixbuf from the widget, so it has colors, etc + pixbuf = gtk.gdk.pixbuf_new_from_file(icon_file_name) + + self._hot_x = pixbuf.props.width / 2 + self._hot_y = pixbuf.props.height / 2 + context.set_icon_pixbuf(pixbuf, self._hot_x, self._hot_y) + + def __drag_motion_cb(self, widget, context, x, y, time): + if self._last_clicked_icon is not None: + context.drag_status(context.suggested_action, time) + return True + else: + return False + + def __drag_drop_cb(self, widget, context, x, y, time): + if self._last_clicked_icon is not None: + self.drag_get_data(context, _ICON_DND_TARGET[0]) + + self._layout.move_icon(self._last_clicked_icon, + x - self._hot_x, y - self._hot_y) + + self._pressed_button = None + self._press_start_x = None + self._press_start_y = None + self._hot_x = None + self._hot_y = None + self._last_clicked_icon = None + + return True + else: + return False + + def __drag_data_received_cb(self, widget, context, x, y, selection_data, + info, time): + context.drop_finish(success=True, time=time) + + def _set_layout(self, layout): + if layout not in LAYOUT_MAP: + logging.warn('Unknown favorites layout: %r', layout) + layout = favoriteslayout.RingLayout.key + assert layout in LAYOUT_MAP + + if type(self._layout) == LAYOUT_MAP[layout]: + return + + self._layout = LAYOUT_MAP[layout]() + self._box.set_layout(self._layout) + + #TODO: compatibility hack while sort() gets added to the hippo python + # bindings + if hasattr(self._box, 'sort'): + self._box.sort(self._layout.compare_activities) + + for icon in self._box.get_children(): + if icon not in [self._my_icon, self._current_activity]: + self._layout.append(icon) + + self._layout.append(self._my_icon, locked=True) + self._layout.append(self._current_activity, locked=True) + + if self._layout.allow_dnd(): + self.drag_source_set(0, [], 0) + self.drag_dest_set(0, [], 0) + else: + self.drag_source_unset() + self.drag_dest_unset() + + layout = property(None, _set_layout) + + def add_alert(self, alert): + if self._alert is not None: + self.remove_alert() + alert.set_size_request(gtk.gdk.screen_width(), -1) + self._alert = hippo.CanvasWidget(widget=alert) + self._box.append(self._alert, hippo.PACK_FIXED) + + def remove_alert(self): + self._box.remove(self._alert) + self._alert = None + + def __register_activate_cb(self, icon): + alert = Alert() + try: + schoolserver.register_laptop() + except RegisterError, e: + alert.props.title = _('Registration Failed') + alert.props.msg = '%s' % e + else: + alert.props.title = _('Registration Successful') + alert.props.msg = _('You are now registered ' \ + 'with your school server.') + self._my_icon.set_registered() + + ok_icon = Icon(icon_name='dialog-ok') + alert.add_button(gtk.RESPONSE_OK, _('Ok'), ok_icon) + + self.add_alert(alert) + alert.connect('response', self.__register_alert_response_cb) + + def __register_alert_response_cb(self, alert, response_id): + self.remove_alert() + + def set_resume_mode(self, resume_mode): + self._resume_mode = resume_mode + for icon in self._box.get_children(): + if hasattr(icon, 'set_resume_mode'): + icon.set_resume_mode(self._resume_mode) + + +class ActivityIcon(CanvasIcon): + __gtype_name__ = 'SugarFavoriteActivityIcon' + + _BORDER_WIDTH = style.zoom(3) + _MAX_RESUME_ENTRIES = 5 + + def __init__(self, activity_info): + CanvasIcon.__init__(self, cache=True, + file_name=activity_info.get_icon()) + + self._activity_info = activity_info + self._journal_entries = [] + self._hovering = False + self._resume_mode = True + + self.connect('hovering-changed', self.__hovering_changed_event_cb) + self.connect('button-release-event', self.__button_release_event_cb) + + datastore.updated.connect(self.__datastore_listener_updated_cb) + datastore.deleted.connect(self.__datastore_listener_deleted_cb) + + self._refresh() + self._update() + + def _refresh(self): + bundle_id = self._activity_info.get_bundle_id() + properties = ['uid', 'title', 'icon-color', 'activity', 'activity_id', + 'mime_type', 'mountpoint'] + self._get_last_activity_async(bundle_id, properties) + + def __datastore_listener_updated_cb(self, **kwargs): + bundle_id = self._activity_info.get_bundle_id() + if kwargs['metadata'].get('activity', '') == bundle_id: + self._refresh() + + def __datastore_listener_deleted_cb(self, **kwargs): + for entry in self._journal_entries: + if entry['uid'] == kwargs['object_id']: + self._refresh() + break + + def _get_last_activity_async(self, bundle_id, properties): + query = {'activity': bundle_id} + datastore.find(query, sorting=['+timestamp'], + limit=self._MAX_RESUME_ENTRIES, + properties=properties, + reply_handler=self.__get_last_activity_reply_handler_cb, + error_handler=self.__get_last_activity_error_handler_cb) + + def __get_last_activity_reply_handler_cb(self, entries, total_count): + # If there's a problem with the DS index, we may get entries not + # related to this activity. + checked_entries = [] + for entry in entries: + if entry['activity'] == self.bundle_id: + checked_entries.append(entry) + + self._journal_entries = checked_entries + self._update() + + def __get_last_activity_error_handler_cb(self, error): + logging.error('Error retrieving most recent activities: %r', error) + + def _update(self): + self.palette = None + if not self._resume_mode or not self._journal_entries: + xo_color = XoColor('%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + else: + xo_color = misc.get_icon_color(self._journal_entries[0]) + self.props.xo_color = xo_color + + def create_palette(self): + palette = FavoritePalette(self._activity_info, self._journal_entries) + palette.connect('activate', self.__palette_activate_cb) + palette.connect('entry-activate', self.__palette_entry_activate_cb) + return palette + + def __palette_activate_cb(self, palette): + self._activate() + + def __palette_entry_activate_cb(self, palette, metadata): + self._resume(metadata) + + def __hovering_changed_event_cb(self, icon, hovering): + self._hovering = hovering + self.emit_paint_needed(0, 0, -1, -1) + + def do_paint_above_children(self, cr, damaged_box): + if not self._hovering: + return + + width, height = self.get_allocation() + + x = ActivityIcon._BORDER_WIDTH / 2.0 + y = ActivityIcon._BORDER_WIDTH / 2.0 + width -= ActivityIcon._BORDER_WIDTH + height -= ActivityIcon._BORDER_WIDTH + radius = width / 10.0 + + cr.move_to(x + radius, y) + cr.arc(x + width - radius, y + radius, radius, math.pi * 1.5, + math.pi * 2.0) + cr.arc(x + width - radius, x + height - radius, radius, 0, + math.pi * 0.5) + cr.arc(x + radius, y + height - radius, radius, math.pi * 0.5, math.pi) + cr.arc(x + radius, y + radius, radius, math.pi, math.pi * 1.5) + + color = style.COLOR_SELECTION_GREY.get_int() + hippo.cairo_set_source_rgba32(cr, color) + cr.set_line_width(ActivityIcon._BORDER_WIDTH) + cr.stroke() + + def do_get_content_height_request(self, for_width): + height, height = CanvasIcon.do_get_content_height_request(self, + for_width) + height += ActivityIcon._BORDER_WIDTH * 2 + return height, height + + def do_get_content_width_request(self): + width, width = CanvasIcon.do_get_content_width_request(self) + width += ActivityIcon._BORDER_WIDTH * 2 + return width, width + + def __button_release_event_cb(self, icon, event): + self._activate() + + def _resume(self, journal_entry): + if not journal_entry['activity_id']: + journal_entry['activity_id'] = activityfactory.create_activity_id() + misc.resume(journal_entry, self._activity_info.get_bundle_id()) + + def _activate(self): + if self.palette is not None: + self.palette.popdown(immediate=True) + + if self._resume_mode and self._journal_entries: + self._resume(self._journal_entries[0]) + else: + misc.launch(self._activity_info) + + def get_bundle_id(self): + return self._activity_info.get_bundle_id() + bundle_id = property(get_bundle_id, None) + + def get_version(self): + return self._activity_info.get_activity_version() + version = property(get_version, None) + + def get_activity_name(self): + return self._activity_info.get_name() + + def _get_installation_time(self): + return self._activity_info.get_installation_time() + installation_time = property(_get_installation_time, None) + + def _get_fixed_position(self): + registry = bundleregistry.get_registry() + return registry.get_bundle_position(self.bundle_id, self.version) + fixed_position = property(_get_fixed_position, None) + + def set_resume_mode(self, resume_mode): + self._resume_mode = resume_mode + self._update() + + +class FavoritePalette(ActivityPalette): + __gtype_name__ = 'SugarFavoritePalette' + + __gsignals__ = { + 'entry-activate': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, ([object])), + } + + def __init__(self, activity_info, journal_entries): + ActivityPalette.__init__(self, activity_info) + + if not journal_entries: + xo_color = XoColor('%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + else: + xo_color = misc.get_icon_color(journal_entries[0]) + + self.props.icon = Icon(file=activity_info.get_icon(), + xo_color=xo_color, + icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR) + + if journal_entries: + title = journal_entries[0]['title'] + self.props.secondary_text = glib.markup_escape_text(title) + + menu_items = [] + for entry in journal_entries: + icon_file_name = misc.get_icon_name(entry) + color = misc.get_icon_color(entry) + + menu_item = MenuItem(text_label=entry['title'], + file_name=icon_file_name, + xo_color=color) + menu_item.connect('activate', self.__resume_entry_cb, entry) + menu_items.append(menu_item) + menu_item.show() + + if journal_entries: + separator = gtk.SeparatorMenuItem() + menu_items.append(separator) + separator.show() + + for i in range(0, len(menu_items)): + self.menu.insert(menu_items[i], i) + + def __resume_entry_cb(self, menu_item, entry): + if entry is not None: + self.emit('entry-activate', entry) + + +class CurrentActivityIcon(CanvasIcon, hippo.CanvasItem): + def __init__(self): + CanvasIcon.__init__(self, cache=True) + self._home_model = shell.get_model() + self._home_activity = self._home_model.get_active_activity() + + if self._home_activity is not None: + self._update() + + self._home_model.connect('active-activity-changed', + self.__active_activity_changed_cb) + + self.connect('button-release-event', self.__button_release_event_cb) + + def __button_release_event_cb(self, icon, event): + window = self._home_model.get_active_activity().get_window() + window.activate(gtk.get_current_event_time()) + + def _update(self): + self.props.file_name = self._home_activity.get_icon_path() + self.props.xo_color = self._home_activity.get_icon_color() + self.props.size = style.STANDARD_ICON_SIZE + + if self.palette is not None: + self.palette.destroy() + self.palette = None + + def create_palette(self): + if self._home_activity.is_journal(): + palette = JournalPalette(self._home_activity) + else: + palette = CurrentActivityPalette(self._home_activity) + return palette + + def __active_activity_changed_cb(self, home_model, home_activity): + self._home_activity = home_activity + self._update() + + +class OwnerIcon(BuddyIcon): + __gtype_name__ = 'SugarFavoritesOwnerIcon' + + __gsignals__ = { + 'register-activate': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([])), + } + + def __init__(self, size): + BuddyIcon.__init__(self, buddy=get_owner_instance(), size=size) + + self.palette_invoker.cache_palette = True + + self._palette_enabled = False + self._register_menu = None + + def create_palette(self): + if not self._palette_enabled: + self._palette_enabled = True + return + + palette = BuddyMenu(get_owner_instance()) + + client = gconf.client_get_default() + backup_url = client.get_string('/desktop/sugar/backup_url') + + if not backup_url: + self._register_menu = MenuItem(_('Register'), 'media-record') + else: + self._register_menu = MenuItem(_('Register again'), + 'media-record') + + self._register_menu.connect('activate', self.__register_activate_cb) + palette.menu.append(self._register_menu) + self._register_menu.show() + + return palette + + def get_toplevel(self): + return hippo.get_canvas_for_item(self).get_toplevel() + + def __register_activate_cb(self, menuitem): + self.emit('register-activate') + + def set_registered(self): + self.palette.menu.remove(self._register_menu) + self._register_menu = MenuItem(_('Register again'), 'media-record') + self._register_menu.connect('activate', self.__register_activate_cb) + self.palette.menu.append(self._register_menu) + self._register_menu.show() + + +class FavoritesSetting(object): + + _FAVORITES_KEY = '/desktop/sugar/desktop/favorites_layout' + + def __init__(self): + client = gconf.client_get_default() + self._layout = client.get_string(self._FAVORITES_KEY) + logging.debug('FavoritesSetting layout %r', self._layout) + + self._mode = None + + self.changed = dispatch.Signal() + + def get_layout(self): + return self._layout + + def set_layout(self, layout): + logging.debug('set_layout %r %r', layout, self._layout) + if layout != self._layout: + self._layout = layout + + client = gconf.client_get_default() + client.set_string(self._FAVORITES_KEY, layout) + + self.changed.send(self) + + layout = property(get_layout, set_layout) + + +def get_settings(): + global _favorites_settings + if _favorites_settings is None: + _favorites_settings = FavoritesSetting() + return _favorites_settings diff --git a/src/jarabe/desktop/friendview.py b/src/jarabe/desktop/friendview.py new file mode 100644 index 0000000..8dab35f --- /dev/null +++ b/src/jarabe/desktop/friendview.py @@ -0,0 +1,84 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2010 Collabora Ltd. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import hippo + +from sugar.graphics.icon import CanvasIcon +from sugar.graphics import style + +from jarabe.view.buddyicon import BuddyIcon +from jarabe.model import bundleregistry + + +class FriendView(hippo.CanvasBox): + def __init__(self, buddy, **kwargs): + hippo.CanvasBox.__init__(self, **kwargs) + + self._buddy = buddy + self._buddy_icon = BuddyIcon(buddy) + self._buddy_icon.props.size = style.LARGE_ICON_SIZE + self.append(self._buddy_icon) + + self._activity_icon = CanvasIcon(size=style.LARGE_ICON_SIZE) + self._activity_icon_visible = False + + self._update_activity() + + self._buddy.connect('notify::current-activity', + self.__buddy_notify_current_activity_cb) + self._buddy.connect('notify::present', self.__buddy_notify_present_cb) + self._buddy.connect('notify::color', self.__buddy_notify_color_cb) + + def _get_new_icon_name(self, ps_activity): + registry = bundleregistry.get_registry() + activity_info = registry.get_bundle(ps_activity.props.type) + if activity_info: + return activity_info.get_icon() + return None + + def _remove_activity_icon(self): + if self._activity_icon_visible: + self.remove(self._activity_icon) + self._activity_icon_visible = False + + def __buddy_notify_current_activity_cb(self, buddy, pspec): + self._update_activity() + + def _update_activity(self): + if not self._buddy.props.present or \ + not self._buddy.props.current_activity: + self._remove_activity_icon() + return + + # FIXME: use some sort of "unknown activity" icon rather + # than hiding the icon? + name = self._get_new_icon_name(self._buddy.current_activity) + if name: + self._activity_icon.props.file_name = name + self._activity_icon.props.xo_color = self._buddy.props.color + if not self._activity_icon_visible: + self.append(self._activity_icon, hippo.PACK_EXPAND) + self._activity_icon_visible = True + else: + self._remove_activity_icon() + + def __buddy_notify_present_cb(self, buddy, pspec): + self._update_activity() + + def __buddy_notify_color_cb(self, buddy, pspec): + # TODO: shouldn't this change self._buddy_icon instead? + self._activity_icon.props.xo_color = buddy.props.color diff --git a/src/jarabe/desktop/grid.py b/src/jarabe/desktop/grid.py new file mode 100644 index 0000000..eab4033 --- /dev/null +++ b/src/jarabe/desktop/grid.py @@ -0,0 +1,204 @@ +# Copyright (C) 2007 Red Hat, Inc. +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import random + +import gobject +import gtk + +from sugar import _sugarext + + +_PLACE_TRIALS = 20 +_MAX_WEIGHT = 255 +_REFRESH_RATE = 200 +_MAX_COLLISIONS_PER_REFRESH = 20 + + +class Grid(_sugarext.Grid): + __gsignals__ = { + 'child-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + } + + def __init__(self, width, height): + gobject.GObject.__init__(self) + + self.width = width + self.height = height + self._children = [] + self._child_rects = {} + self._locked_children = set() + self._collisions = [] + self._collisions_sid = 0 + + self.setup(self.width, self.height) + + def add(self, child, width, height, x=None, y=None, locked=False): + if x is not None and y is not None: + rect = gtk.gdk.Rectangle(x, y, width, height) + weight = self.compute_weight(rect) + else: + trials = _PLACE_TRIALS + weight = _MAX_WEIGHT + while trials > 0 and weight: + x = int(random.random() * (self.width - width)) + y = int(random.random() * (self.height - height)) + + rect = gtk.gdk.Rectangle(x, y, width, height) + new_weight = self.compute_weight(rect) + if weight > new_weight: + weight = new_weight + + trials -= 1 + + self._child_rects[child] = rect + self._children.append(child) + self.add_weight(self._child_rects[child]) + if locked: + self._locked_children.add(child) + + if weight > 0: + self._detect_collisions(child) + + def remove(self, child): + self._children.remove(child) + self.remove_weight(self._child_rects[child]) + self._locked_children.discard(child) + del self._child_rects[child] + + if child in self._collisions: + self._collisions.remove(child) + + def move(self, child, x, y, locked=False): + self.remove_weight(self._child_rects[child]) + + rect = self._child_rects[child] + rect.x = x + rect.y = y + + weight = self.compute_weight(rect) + self.add_weight(self._child_rects[child]) + + if locked: + self._locked_children.add(child) + else: + self._locked_children.discard(child) + + if weight > 0: + self._detect_collisions(child) + + def _shift_child(self, child, weight): + rect = self._child_rects[child] + + new_rects = [] + + # Get rects right, left, bottom and top + if (rect.x + rect.width < self.width - 1): + new_rects.append(gtk.gdk.Rectangle(rect.x + 1, rect.y, + rect.width, rect.height)) + + if (rect.x - 1 > 0): + new_rects.append(gtk.gdk.Rectangle(rect.x - 1, rect.y, + rect.width, rect.height)) + + if (rect.y + rect.height < self.height - 1): + new_rects.append(gtk.gdk.Rectangle(rect.x, rect.y + 1, + rect.width, rect.height)) + + if (rect.y - 1 > 0): + new_rects.append(gtk.gdk.Rectangle(rect.x, rect.y - 1, + rect.width, rect.height)) + + # Get diagonal rects + if rect.x + rect.width < self.width - 1 and \ + rect.y + rect.height < self.height - 1: + new_rects.append(gtk.gdk.Rectangle(rect.x + 1, rect.y + 1, + rect.width, rect.height)) + + if rect.x - 1 > 0 and rect.y + rect.height < self.height - 1: + new_rects.append(gtk.gdk.Rectangle(rect.x - 1, rect.y + 1, + rect.width, rect.height)) + + if rect.x + rect.width < self.width - 1 and rect.y - 1 > 0: + new_rects.append(gtk.gdk.Rectangle(rect.x + 1, rect.y - 1, + rect.width, rect.height)) + + if rect.x - 1 > 0 and rect.y - 1 > 0: + new_rects.append(gtk.gdk.Rectangle(rect.x - 1, rect.y - 1, + rect.width, rect.height)) + + random.shuffle(new_rects) + + best_rect = None + for new_rect in new_rects: + new_weight = self.compute_weight(new_rect) + if new_weight < weight: + best_rect = new_rect + weight = new_weight + + if best_rect: + self._child_rects[child] = best_rect + weight = self._shift_child(child, weight) + + return weight + + def __solve_collisions_cb(self): + for i_ in range(_MAX_COLLISIONS_PER_REFRESH): + collision = self._collisions.pop(0) + + old_rect = self._child_rects[collision] + self.remove_weight(old_rect) + weight = self.compute_weight(old_rect) + weight = self._shift_child(collision, weight) + self.add_weight(self._child_rects[collision]) + + # TODO: we shouldn't give up the first time we failed to find a + # better position. + if old_rect != self._child_rects[collision]: + self._detect_collisions(collision) + self.emit('child-changed', collision) + if weight > 0: + self._collisions.append(collision) + + if not self._collisions: + self._collisions_sid = 0 + return False + + return True + + def _detect_collisions(self, child): + collision_found = False + child_rect = self._child_rects[child] + for c in self._children: + intersection = child_rect.intersect(self._child_rects[c]) + if c != child and intersection.width > 0: + if (c not in self._locked_children and + c not in self._collisions): + collision_found = True + self._collisions.append(c) + + if collision_found: + if child not in self._collisions: + self._collisions.append(child) + + if self._collisions and not self._collisions_sid: + self._collisions_sid = gobject.timeout_add(_REFRESH_RATE, + self.__solve_collisions_cb, priority=gobject.PRIORITY_LOW) + + def get_child_rect(self, child): + return self._child_rects[child] diff --git a/src/jarabe/desktop/groupbox.py b/src/jarabe/desktop/groupbox.py new file mode 100644 index 0000000..ed8f8ae --- /dev/null +++ b/src/jarabe/desktop/groupbox.py @@ -0,0 +1,94 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import gobject +import hippo +import gconf + +from sugar.graphics import style +from sugar.graphics.icon import CanvasIcon +from sugar.graphics.xocolor import XoColor + +from jarabe.view.buddymenu import BuddyMenu +from jarabe.model.buddy import get_owner_instance +from jarabe.model import friends +from jarabe.desktop.friendview import FriendView +from jarabe.desktop.spreadlayout import SpreadLayout + + +class GroupBox(hippo.Canvas): + __gtype_name__ = 'SugarGroupBox' + + def __init__(self): + logging.debug('STARTUP: Loading the group view') + + gobject.GObject.__init__(self) + + self._box = hippo.CanvasBox() + self._box.props.background_color = style.COLOR_WHITE.get_int() + self.set_root(self._box) + + self._friends = {} + + self._layout = SpreadLayout() + self._box.set_layout(self._layout) + + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + + self._owner_icon = CanvasIcon(icon_name='computer-xo', cache=True, + xo_color=color) + self._owner_icon.props.size = style.LARGE_ICON_SIZE + + self._owner_icon.set_palette(BuddyMenu(get_owner_instance())) + self._layout.add(self._owner_icon) + + friends_model = friends.get_model() + + for friend in friends_model: + self.add_friend(friend) + + friends_model.connect('friend-added', self._friend_added_cb) + friends_model.connect('friend-removed', self._friend_removed_cb) + + def add_friend(self, buddy_info): + icon = FriendView(buddy_info) + self._layout.add(icon) + + self._friends[buddy_info.get_key()] = icon + + def _friend_added_cb(self, data_model, buddy_info): + self.add_friend(buddy_info) + + def _friend_removed_cb(self, data_model, key): + icon = self._friends[key] + self._layout.remove(icon) + del self._friends[key] + icon.destroy() + + def do_size_allocate(self, allocation): + width = allocation.width + height = allocation.height + + min_w_, icon_width = self._owner_icon.get_width_request() + min_h_, icon_height = self._owner_icon.get_height_request(icon_width) + x = (width - icon_width) / 2 + y = (height - icon_height) / 2 + self._layout.move(self._owner_icon, x, y) + + hippo.Canvas.do_size_allocate(self, allocation) diff --git a/src/jarabe/desktop/homebox.py b/src/jarabe/desktop/homebox.py new file mode 100644 index 0000000..2ee6ae7 --- /dev/null +++ b/src/jarabe/desktop/homebox.py @@ -0,0 +1,295 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +import logging +import os + +import gobject +import gtk + +from sugar.graphics import style +from sugar.graphics import iconentry +from sugar.graphics.radiotoolbutton import RadioToolButton +from sugar.graphics.alert import Alert +from sugar.graphics.icon import Icon + +from jarabe.desktop import favoritesview +from jarabe.desktop.activitieslist import ActivitiesList + + +_FAVORITES_VIEW = 0 +_LIST_VIEW = 1 + +_AUTOSEARCH_TIMEOUT = 1000 + + +class HomeBox(gtk.VBox): + __gtype_name__ = 'SugarHomeBox' + + def __init__(self): + logging.debug('STARTUP: Loading the home view') + + gobject.GObject.__init__(self) + + self._favorites_view = favoritesview.FavoritesView() + self._list_view = ActivitiesList() + + self._toolbar = HomeToolbar() + self._toolbar.connect('query-changed', self.__toolbar_query_changed_cb) + self._toolbar.connect('view-changed', self.__toolbar_view_changed_cb) + self.pack_start(self._toolbar, expand=False) + self._toolbar.show() + + self._set_view(_FAVORITES_VIEW) + self._query = '' + + def show_software_updates_alert(self): + alert = Alert() + updater_icon = Icon(icon_name='module-updater', + pixel_size=style.STANDARD_ICON_SIZE) + alert.props.icon = updater_icon + updater_icon.show() + alert.props.title = _('Software Update') + alert.props.msg = _('Update your activities to ensure' + ' compatibility with your new software') + + cancel_icon = Icon(icon_name='dialog-cancel') + alert.add_button(gtk.RESPONSE_CANCEL, _('Cancel'), cancel_icon) + + alert.add_button(gtk.RESPONSE_REJECT, _('Later')) + + erase_icon = Icon(icon_name='dialog-ok') + alert.add_button(gtk.RESPONSE_OK, _('Check now'), erase_icon) + + if self._list_view in self.get_children(): + self._list_view.add_alert(alert) + else: + self._favorites_view.add_alert(alert) + alert.connect('response', self.__software_update_response_cb) + + def __software_update_response_cb(self, alert, response_id): + if self._list_view in self.get_children(): + self._list_view.remove_alert() + else: + self._favorites_view.remove_alert() + + if response_id != gtk.RESPONSE_REJECT: + update_trigger_file = os.path.expanduser('~/.sugar-update') + try: + os.unlink(update_trigger_file) + except OSError: + logging.error('Software-update: Can not remove file %s', + update_trigger_file) + + if response_id == gtk.RESPONSE_OK: + from jarabe.controlpanel.gui import ControlPanel + panel = ControlPanel() + panel.set_transient_for(self.get_toplevel()) + panel.show() + panel.show_section_view('updater') + panel.set_section_view_auto_close() + + def __toolbar_query_changed_cb(self, toolbar, query): + self._query = query.lower() + self._list_view.set_filter(self._query) + self._favorites_view.set_filter(self._query) + + def __toolbar_view_changed_cb(self, toolbar, view): + self._set_view(view) + + def _set_view(self, view): + if view == _FAVORITES_VIEW: + if self._list_view in self.get_children(): + self.remove(self._list_view) + + if self._favorites_view not in self.get_children(): + self.add(self._favorites_view) + self._favorites_view.show() + elif view == _LIST_VIEW: + if self._favorites_view in self.get_children(): + self.remove(self._favorites_view) + + if self._list_view not in self.get_children(): + self.add(self._list_view) + self._list_view.show() + else: + raise ValueError('Invalid view: %r' % view) + + _REDRAW_TIMEOUT = 5 * 60 * 1000 # 5 minutes + + def resume(self): + pass + + def suspend(self): + pass + + def has_activities(self): + # TODO: Do we need this? + #return self._donut.has_activities() + return False + + def focus_search_entry(self): + self._toolbar.search_entry.grab_focus() + + def set_resume_mode(self, resume_mode): + self._favorites_view.set_resume_mode(resume_mode) + if resume_mode and self._query != '': + self._list_view.set_filter(self._query) + self._favorites_view.set_filter(self._query) + + +class HomeToolbar(gtk.Toolbar): + __gtype_name__ = 'SugarHomeToolbar' + + __gsignals__ = { + 'query-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str])), + 'view-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + } + + def __init__(self): + gtk.Toolbar.__init__(self) + + self._query = None + self._autosearch_timer = None + + self._add_separator() + + tool_item = gtk.ToolItem() + self.insert(tool_item, -1) + tool_item.show() + + self.search_entry = iconentry.IconEntry() + self.search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, + 'system-search') + self.search_entry.add_clear_button() + self.search_entry.set_width_chars(25) + self.search_entry.connect('activate', self.__entry_activated_cb) + self.search_entry.connect('changed', self.__entry_changed_cb) + tool_item.add(self.search_entry) + self.search_entry.show() + + self._add_separator(expand=True) + + favorites_button = FavoritesButton() + favorites_button.connect('toggled', self.__view_button_toggled_cb, + _FAVORITES_VIEW) + self.insert(favorites_button, -1) + favorites_button.show() + + self._list_button = RadioToolButton(named_icon='view-list') + self._list_button.props.group = favorites_button + self._list_button.props.tooltip = _('List view') + self._list_button.props.accelerator = _('2') + self._list_button.connect('toggled', self.__view_button_toggled_cb, + _LIST_VIEW) + self.insert(self._list_button, -1) + self._list_button.show() + + self._add_separator() + + def __view_button_toggled_cb(self, button, view): + if button.props.active: + self.search_entry.grab_focus() + self.emit('view-changed', view) + + def _add_separator(self, expand=False): + separator = gtk.SeparatorToolItem() + separator.props.draw = False + if expand: + separator.set_expand(True) + else: + separator.set_size_request(style.GRID_CELL_SIZE, + style.GRID_CELL_SIZE) + self.insert(separator, -1) + separator.show() + + def __entry_activated_cb(self, entry): + if self._autosearch_timer: + gobject.source_remove(self._autosearch_timer) + new_query = entry.props.text + if self._query != new_query: + self._query = new_query + + self.emit('query-changed', self._query) + + def __entry_changed_cb(self, entry): + if not entry.props.text: + entry.activate() + return + + if self._autosearch_timer: + gobject.source_remove(self._autosearch_timer) + self._autosearch_timer = gobject.timeout_add(_AUTOSEARCH_TIMEOUT, + self.__autosearch_timer_cb) + + def __autosearch_timer_cb(self): + self._autosearch_timer = None + self.search_entry.activate() + return False + + +class FavoritesButton(RadioToolButton): + __gtype_name__ = 'SugarFavoritesButton' + + def __init__(self): + RadioToolButton.__init__(self) + + self.props.tooltip = _('Favorites view') + self.props.accelerator = _('1') + self.props.group = None + + favorites_settings = favoritesview.get_settings() + self._layout = favorites_settings.layout + self._update_icon() + + # someday, this will be a gtk.Table() + layouts_grid = gtk.HBox() + layout_item = None + for layoutid, layoutclass in sorted(favoritesview.LAYOUT_MAP.items()): + layout_item = RadioToolButton(icon_name=layoutclass.icon_name, + group=layout_item, active=False) + if layoutid == self._layout: + layout_item.set_active(True) + layouts_grid.pack_start(layout_item, fill=False) + layout_item.connect('toggled', self.__layout_activate_cb, + layoutid) + layouts_grid.show_all() + self.props.palette.set_content(layouts_grid) + + def __layout_activate_cb(self, menu_item, layout): + if not menu_item.get_active(): + return + if self._layout == layout and self.props.active: + return + + if self._layout != layout: + self._layout = layout + self._update_icon() + + favorites_settings = favoritesview.get_settings() + favorites_settings.layout = layout + + if not self.props.active: + self.props.active = True + else: + self.emit('toggled') + + def _update_icon(self): + self.props.named_icon = favoritesview.LAYOUT_MAP[self._layout]\ + .icon_name diff --git a/src/jarabe/desktop/homewindow.py b/src/jarabe/desktop/homewindow.py new file mode 100644 index 0000000..07deff7 --- /dev/null +++ b/src/jarabe/desktop/homewindow.py @@ -0,0 +1,209 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import gobject +import gtk + +from sugar.graphics import style +from sugar.graphics import palettegroup + +from jarabe.desktop.meshbox import MeshBox +from jarabe.desktop.homebox import HomeBox +from jarabe.desktop.groupbox import GroupBox +from jarabe.desktop.transitionbox import TransitionBox +from jarabe.model.shell import ShellModel +from jarabe.model import shell + + +_HOME_PAGE = 0 +_GROUP_PAGE = 1 +_MESH_PAGE = 2 +_TRANSITION_PAGE = 3 + +_instance = None + + +class HomeWindow(gtk.Window): + def __init__(self): + logging.debug('STARTUP: Loading the desktop window') + gtk.Window.__init__(self) + + accel_group = gtk.AccelGroup() + self.set_data('sugar-accel-group', accel_group) + self.add_accel_group(accel_group) + + self._active = False + self._fully_obscured = True + + screen = self.get_screen() + screen.connect('size-changed', self.__screen_size_change_cb) + self.set_default_size(screen.get_width(), + screen.get_height()) + + self.realize() + self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DESKTOP) + + self.add_events(gtk.gdk.VISIBILITY_NOTIFY_MASK) + self.connect('visibility-notify-event', + self._visibility_notify_event_cb) + self.connect('map-event', self.__map_event_cb) + self.connect('key-press-event', self.__key_press_event_cb) + self.connect('key-release-event', self.__key_release_event_cb) + + self._home_box = HomeBox() + self._group_box = GroupBox() + self._mesh_box = MeshBox() + self._transition_box = TransitionBox() + + self.add(self._home_box) + self._home_box.show() + + self._transition_box.connect('completed', + self._transition_completed_cb) + + shell.get_model().zoom_level_changed.connect( + self.__zoom_level_changed_cb) + + def _deactivate_view(self, level): + group = palettegroup.get_group('default') + group.popdown() + if level == ShellModel.ZOOM_HOME: + self._home_box.suspend() + elif level == ShellModel.ZOOM_MESH: + self._mesh_box.suspend() + + def __screen_size_change_cb(self, screen): + self.resize(screen.get_width(), screen.get_height()) + + def _activate_view(self, level): + if level == ShellModel.ZOOM_HOME: + self._home_box.resume() + elif level == ShellModel.ZOOM_MESH: + self._mesh_box.resume() + + def _visibility_notify_event_cb(self, window, event): + fully_obscured = (event.state == gtk.gdk.VISIBILITY_FULLY_OBSCURED) + if self._fully_obscured == fully_obscured: + return + self._fully_obscured = fully_obscured + + if fully_obscured: + self._deactivate_view(shell.get_model().zoom_level) + else: + display = gtk.gdk.display_get_default() + screen_, x_, y_, modmask = display.get_pointer() + if modmask & gtk.gdk.MOD1_MASK: + self._home_box.set_resume_mode(False) + else: + self._home_box.set_resume_mode(True) + + self._activate_view(shell.get_model().zoom_level) + + def __key_press_event_cb(self, window, event): + if event.keyval in [gtk.keysyms.Alt_L, gtk.keysyms.Alt_R]: + self._home_box.set_resume_mode(False) + return False + + def __key_release_event_cb(self, window, event): + if event.keyval in [gtk.keysyms.Alt_L, gtk.keysyms.Alt_R]: + self._home_box.set_resume_mode(True) + return False + + def __map_event_cb(self, window, event): + # have to make the desktop window active + # since metacity doesn't make it on startup + timestamp = event.get_time() + if not timestamp: + timestamp = gtk.gdk.x11_get_server_time(self.window) + self.window.focus(timestamp) + + def __zoom_level_changed_cb(self, **kwargs): + old_level = kwargs['old_level'] + new_level = kwargs['new_level'] + + self._deactivate_view(old_level) + self._activate_view(new_level) + + if old_level != ShellModel.ZOOM_ACTIVITY and \ + new_level != ShellModel.ZOOM_ACTIVITY: + self.remove(self.get_child()) + self.add(self._transition_box) + self._transition_box.show() + + if new_level == ShellModel.ZOOM_HOME: + end_size = style.XLARGE_ICON_SIZE + elif new_level == ShellModel.ZOOM_GROUP: + end_size = style.LARGE_ICON_SIZE + elif new_level == ShellModel.ZOOM_MESH: + end_size = style.STANDARD_ICON_SIZE + + if old_level == ShellModel.ZOOM_HOME: + start_size = style.XLARGE_ICON_SIZE + elif old_level == ShellModel.ZOOM_GROUP: + start_size = style.LARGE_ICON_SIZE + elif old_level == ShellModel.ZOOM_MESH: + start_size = style.STANDARD_ICON_SIZE + + self._transition_box.start_transition(start_size, end_size) + else: + self._update_view(new_level) + + def _transition_completed_cb(self, transition_box): + self._update_view(shell.get_model().zoom_level) + + def _update_view(self, level): + if level == ShellModel.ZOOM_ACTIVITY: + return + + current_child = self.get_child() + self.remove(current_child) + + if level == ShellModel.ZOOM_HOME: + self.add(self._home_box) + self._home_box.show() + self._home_box.focus_search_entry() + elif level == ShellModel.ZOOM_GROUP: + self.add(self._group_box) + self._group_box.show() + elif level == ShellModel.ZOOM_MESH: + self.add(self._mesh_box) + self._mesh_box.show() + self._mesh_box.focus_search_entry() + + def get_home_box(self): + return self._home_box + + def busy_during_delayed_action(self, action): + """Use busy cursor during execution of action, scheduled via idle_add. + """ + def action_wrapper(old_cursor): + try: + action() + finally: + self.get_window().set_cursor(old_cursor) + + old_cursor = self.get_window().get_cursor() + self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + gobject.idle_add(action_wrapper, old_cursor) + + +def get_instance(): + global _instance + if not _instance: + _instance = HomeWindow() + return _instance diff --git a/src/jarabe/desktop/keydialog.py b/src/jarabe/desktop/keydialog.py new file mode 100644 index 0000000..41c2a51 --- /dev/null +++ b/src/jarabe/desktop/keydialog.py @@ -0,0 +1,317 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2009 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import hashlib +from gettext import gettext as _ + +import gtk +import dbus + +from jarabe.model import network + + +IW_AUTH_ALG_OPEN_SYSTEM = 'open' +IW_AUTH_ALG_SHARED_KEY = 'shared' + +WEP_PASSPHRASE = 1 +WEP_HEX = 2 +WEP_ASCII = 3 + + +def string_is_hex(key): + is_hex = True + for c in key: + if not 'a' <= c.lower() <= 'f' and not '0' <= c <= '9': + is_hex = False + return is_hex + + +def string_is_ascii(string): + try: + string.encode('ascii') + return True + except UnicodeEncodeError: + return False + + +def string_to_hex(passphrase): + key = '' + for c in passphrase: + key += '%02x' % ord(c) + return key + + +def hash_passphrase(passphrase): + # passphrase must have a length of 64 + if len(passphrase) > 64: + passphrase = passphrase[:64] + elif len(passphrase) < 64: + while len(passphrase) < 64: + passphrase += passphrase[:64 - len(passphrase)] + passphrase = hashlib.md5(passphrase).digest() + return string_to_hex(passphrase)[:26] + + +class CanceledKeyRequestError(dbus.DBusException): + def __init__(self): + dbus.DBusException.__init__(self) + self._dbus_error_name = network.NM_SETTINGS_IFACE + '.CanceledError' + + +class KeyDialog(gtk.Dialog): + def __init__(self, ssid, flags, wpa_flags, rsn_flags, dev_caps, response): + gtk.Dialog.__init__(self, flags=gtk.DIALOG_MODAL) + self.set_title('Wireless Key Required') + + self._response = response + self._entry = None + self._ssid = ssid + self._flags = flags + self._wpa_flags = wpa_flags + self._rsn_flags = rsn_flags + self._dev_caps = dev_caps + + self.set_has_separator(False) + + display_name = network.ssid_to_display_name(ssid) + label = gtk.Label(_("A wireless encryption key is required for\n" + " the wireless network '%s'.") % (display_name, )) + self.vbox.pack_start(label) + + self.add_buttons(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, + gtk.STOCK_OK, gtk.RESPONSE_OK) + self.set_default_response(gtk.RESPONSE_OK) + self.set_has_separator(True) + + def add_key_entry(self): + self._entry = gtk.Entry() + self._entry.connect('changed', self._update_response_sensitivity) + self._entry.connect('activate', self._entry_activate_cb) + self.vbox.pack_start(self._entry) + self.vbox.set_spacing(6) + self.vbox.show_all() + + self._update_response_sensitivity() + self._entry.grab_focus() + + def _entry_activate_cb(self, entry): + self.response(gtk.RESPONSE_OK) + + def create_security(self): + raise NotImplementedError + + def get_response_object(self): + return self._response + + +class WEPKeyDialog(KeyDialog): + def __init__(self, ssid, flags, wpa_flags, rsn_flags, dev_caps, response): + KeyDialog.__init__(self, ssid, flags, wpa_flags, rsn_flags, + dev_caps, response) + + # WEP key type + self.key_store = gtk.ListStore(str, int) + self.key_store.append(['Passphrase (128-bit)', WEP_PASSPHRASE]) + self.key_store.append(['Hex (40/128-bit)', WEP_HEX]) + self.key_store.append(['ASCII (40/128-bit)', WEP_ASCII]) + + self.key_combo = gtk.ComboBox(self.key_store) + cell = gtk.CellRendererText() + self.key_combo.pack_start(cell, True) + self.key_combo.add_attribute(cell, 'text', 0) + self.key_combo.set_active(0) + self.key_combo.connect('changed', self._key_combo_changed_cb) + + hbox = gtk.HBox() + hbox.pack_start(gtk.Label(_('Key Type:'))) + hbox.pack_start(self.key_combo) + hbox.show_all() + self.vbox.pack_start(hbox) + + # Key entry field + self.add_key_entry() + + # WEP authentication mode + self.auth_store = gtk.ListStore(str, str) + self.auth_store.append(['Open System', IW_AUTH_ALG_OPEN_SYSTEM]) + self.auth_store.append(['Shared Key', IW_AUTH_ALG_SHARED_KEY]) + + self.auth_combo = gtk.ComboBox(self.auth_store) + cell = gtk.CellRendererText() + self.auth_combo.pack_start(cell, True) + self.auth_combo.add_attribute(cell, 'text', 0) + self.auth_combo.set_active(0) + + hbox = gtk.HBox() + hbox.pack_start(gtk.Label(_('Authentication Type:'))) + hbox.pack_start(self.auth_combo) + hbox.show_all() + + self.vbox.pack_start(hbox) + + def _key_combo_changed_cb(self, widget): + self._update_response_sensitivity() + + def _get_security(self): + key = self._entry.get_text() + + it = self.key_combo.get_active_iter() + (key_type, ) = self.key_store.get(it, 1) + + if key_type == WEP_PASSPHRASE: + key = hash_passphrase(key) + elif key_type == WEP_ASCII: + key = string_to_hex(key) + + it = self.auth_combo.get_active_iter() + (auth_alg, ) = self.auth_store.get(it, 1) + + return (key, auth_alg) + + def print_security(self): + (key, auth_alg) = self._get_security() + print 'Key: %s' % key + print 'Auth: %d' % auth_alg + + def create_security(self): + (key, auth_alg) = self._get_security() + wsec = {'wep-key0': key, 'auth-alg': auth_alg} + return {'802-11-wireless-security': wsec} + + def _update_response_sensitivity(self, ignored=None): + key = self._entry.get_text() + it = self.key_combo.get_active_iter() + (key_type, ) = self.key_store.get(it, 1) + + valid = False + if key_type == WEP_PASSPHRASE: + # As the md5 passphrase can be of any length and has no indicator, + # we cannot check for the validity of the input. + if len(key) > 0: + valid = True + elif key_type == WEP_ASCII: + if len(key) == 5 or len(key) == 13: + valid = string_is_ascii(key) + elif key_type == WEP_HEX: + if len(key) == 10 or len(key) == 26: + valid = string_is_hex(key) + + self.set_response_sensitive(gtk.RESPONSE_OK, valid) + + +class WPAKeyDialog(KeyDialog): + def __init__(self, ssid, flags, wpa_flags, rsn_flags, dev_caps, response): + KeyDialog.__init__(self, ssid, flags, wpa_flags, rsn_flags, + dev_caps, response) + self.add_key_entry() + + self.store = gtk.ListStore(str) + self.store.append([_('WPA & WPA2 Personal')]) + + self.combo = gtk.ComboBox(self.store) + cell = gtk.CellRendererText() + self.combo.pack_start(cell, True) + self.combo.add_attribute(cell, 'text', 0) + self.combo.set_active(0) + + self.hbox = gtk.HBox() + self.hbox.pack_start(gtk.Label(_('Wireless Security:'))) + self.hbox.pack_start(self.combo) + self.hbox.show_all() + + self.vbox.pack_start(self.hbox) + + def _get_security(self): + ssid = self._ssid + key = self._entry.get_text() + is_hex = string_is_hex(key) + + real_key = None + if len(key) == 64 and is_hex: + # Hex key + real_key = key + elif len(key) >= 8 and len(key) <= 63: + # passphrase + from subprocess import Popen, PIPE + p = Popen(['wpa_passphrase', ssid, key], stdout=PIPE) + for line in p.stdout: + if line.strip().startswith('psk='): + real_key = line.strip()[4:] + if p.wait() != 0: + raise RuntimeError('Error hashing passphrase') + if real_key and len(real_key) != 64: + real_key = None + + if not real_key: + raise RuntimeError('Invalid key') + + return real_key + + def print_security(self): + key = self._get_security() + print 'Key: %s' % key + + def create_security(self): + wsec = {'psk': self._get_security()} + return {'802-11-wireless-security': wsec} + + def _update_response_sensitivity(self, ignored=None): + key = self._entry.get_text() + is_hex = string_is_hex(key) + + valid = False + if len(key) == 64 and is_hex: + # hex key + valid = True + elif len(key) >= 8 and len(key) <= 63: + # passphrase + valid = True + self.set_response_sensitive(gtk.RESPONSE_OK, valid) + return False + + +def create(ssid, flags, wpa_flags, rsn_flags, dev_caps, response): + if wpa_flags == network.NM_802_11_AP_SEC_NONE and \ + rsn_flags == network.NM_802_11_AP_SEC_NONE: + key_dialog = WEPKeyDialog(ssid, flags, wpa_flags, rsn_flags, + dev_caps, response) + else: + key_dialog = WPAKeyDialog(ssid, flags, wpa_flags, rsn_flags, + dev_caps, response) + + key_dialog.connect('response', _key_dialog_response_cb) + key_dialog.show_all() + + +def _key_dialog_response_cb(key_dialog, response_id): + response = key_dialog.get_response_object() + secrets = None + if response_id == gtk.RESPONSE_OK: + secrets = key_dialog.create_security() + + if response_id in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_NONE, + gtk.RESPONSE_DELETE_EVENT]: + # key dialog dialog was canceled; send the error back to NM + response.set_error(CanceledKeyRequestError()) + elif response_id == gtk.RESPONSE_OK: + if not secrets: + raise RuntimeError('Invalid security arguments.') + response.set_secrets(secrets) + else: + raise RuntimeError('Unhandled key dialog response %d' % response_id) + + key_dialog.destroy() diff --git a/src/jarabe/desktop/meshbox.py b/src/jarabe/desktop/meshbox.py new file mode 100644 index 0000000..20dc413 --- /dev/null +++ b/src/jarabe/desktop/meshbox.py @@ -0,0 +1,679 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2009 Tomeu Vizoso, Simon Schampijer +# Copyright (C) 2009-2010 One Laptop per Child +# Copyright (C) 2010 Collabora Ltd. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +import logging + +import dbus +import hippo +import glib +import gobject +import gtk +import gconf + +from sugar.graphics.icon import CanvasIcon, Icon +from sugar.graphics import style +from sugar.graphics import palette +from sugar.graphics import iconentry +from sugar.graphics.menuitem import MenuItem + +from jarabe.model import neighborhood +from jarabe.model.buddy import get_owner_instance +from jarabe.view.buddyicon import BuddyIcon +from jarabe.desktop.snowflakelayout import SnowflakeLayout +from jarabe.desktop.spreadlayout import SpreadLayout +from jarabe.desktop.networkviews import WirelessNetworkView +from jarabe.desktop.networkviews import OlpcMeshView +from jarabe.desktop.networkviews import SugarAdhocView +from jarabe.model import network +from jarabe.model.network import AccessPoint +from jarabe.model.olpcmesh import OlpcMeshManager +from jarabe.model.adhoc import get_adhoc_manager_instance +from jarabe.journal import misc + + +_AP_ICON_NAME = 'network-wireless' +_OLPC_MESH_ICON_NAME = 'network-mesh' + +_AUTOSEARCH_TIMEOUT = 1000 +_FILTERED_ALPHA = 0.33 + + +class _ActivityIcon(CanvasIcon): + def __init__(self, model, file_name, xo_color, + size=style.STANDARD_ICON_SIZE): + CanvasIcon.__init__(self, file_name=file_name, + xo_color=xo_color, + size=size) + self._model = model + self.connect('activated', self._clicked_cb) + + def create_palette(self): + primary_text = glib.markup_escape_text(self._model.bundle.get_name()) + secondary_text = glib.markup_escape_text(self._model.get_name()) + p_icon = Icon(file=self._model.bundle.get_icon(), + xo_color=self._model.get_color()) + p_icon.props.icon_size = gtk.ICON_SIZE_LARGE_TOOLBAR + p = palette.Palette(None, + primary_text=primary_text, + secondary_text=secondary_text, + icon=p_icon) + + private = self._model.props.private + joined = get_owner_instance() in self._model.props.buddies + + if joined: + item = MenuItem(_('Resume'), 'activity-start') + item.connect('activate', self._clicked_cb) + item.show() + p.menu.append(item) + elif not private: + item = MenuItem(_('Join'), 'activity-start') + item.connect('activate', self._clicked_cb) + item.show() + p.menu.append(item) + + return p + + def _clicked_cb(self, item): + bundle = self._model.get_bundle() + misc.launch(bundle, activity_id=self._model.activity_id, + color=self._model.get_color()) + + +class ActivityView(hippo.CanvasBox): + def __init__(self, model): + hippo.CanvasBox.__init__(self) + + self._model = model + self._model.connect('current-buddy-added', self.__buddy_added_cb) + self._model.connect('current-buddy-removed', self.__buddy_removed_cb) + + self._icons = {} + + self._layout = SnowflakeLayout() + self.set_layout(self._layout) + + self._icon = self._create_icon() + self._layout.add(self._icon, center=True) + + self._icon.palette_invoker.cache_palette = False + + for buddy in self._model.props.current_buddies: + self._add_buddy(buddy) + + def _create_icon(self): + icon = _ActivityIcon(self._model, + file_name=self._model.bundle.get_icon(), + xo_color=self._model.get_color(), + size=style.STANDARD_ICON_SIZE) + return icon + + def has_buddy_icon(self, key): + return key in self._icons + + def __buddy_added_cb(self, activity, buddy): + self._add_buddy(buddy) + + def _add_buddy(self, buddy): + icon = BuddyIcon(buddy, style.STANDARD_ICON_SIZE) + self._icons[buddy.props.key] = icon + self._layout.add(icon) + + def __buddy_removed_cb(self, activity, buddy): + icon = self._icons[buddy.props.key] + del self._icons[buddy.props.key] + icon.destroy() + + def set_filter(self, query): + text_to_check = self._model.bundle.get_name().lower() + \ + self._model.bundle.get_bundle_id().lower() + self._icon.props.xo_color = self._model.get_color() + if text_to_check.find(query) == -1: + self._icon.alpha = _FILTERED_ALPHA + else: + self._icon.alpha = 1.0 + for icon in self._icons.itervalues(): + if hasattr(icon, 'set_filter'): + icon.set_filter(query) + + +class MeshToolbar(gtk.Toolbar): + __gtype_name__ = 'MeshToolbar' + + __gsignals__ = { + 'query-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str])), + } + + def __init__(self): + gtk.Toolbar.__init__(self) + + self._query = None + self._autosearch_timer = None + + self._add_separator() + + tool_item = gtk.ToolItem() + self.insert(tool_item, -1) + tool_item.show() + + self.search_entry = iconentry.IconEntry() + self.search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, + 'system-search') + self.search_entry.add_clear_button() + self.search_entry.set_width_chars(25) + self.search_entry.connect('activate', self._entry_activated_cb) + self.search_entry.connect('changed', self._entry_changed_cb) + tool_item.add(self.search_entry) + self.search_entry.show() + + self._add_separator(expand=True) + + def _add_separator(self, expand=False): + separator = gtk.SeparatorToolItem() + separator.props.draw = False + if expand: + separator.set_expand(True) + else: + separator.set_size_request(style.GRID_CELL_SIZE, + style.GRID_CELL_SIZE) + self.insert(separator, -1) + separator.show() + + def _entry_activated_cb(self, entry): + if self._autosearch_timer: + gobject.source_remove(self._autosearch_timer) + new_query = entry.props.text + if self._query != new_query: + self._query = new_query + self.emit('query-changed', self._query) + + def _entry_changed_cb(self, entry): + if not entry.props.text: + entry.activate() + return + + if self._autosearch_timer: + gobject.source_remove(self._autosearch_timer) + self._autosearch_timer = gobject.timeout_add(_AUTOSEARCH_TIMEOUT, + self._autosearch_timer_cb) + + def _autosearch_timer_cb(self): + logging.debug('_autosearch_timer_cb') + self._autosearch_timer = None + self.search_entry.activate() + return False + + +class DeviceObserver(gobject.GObject): + __gsignals__ = { + 'access-point-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'access-point-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + } + + def __init__(self, device): + gobject.GObject.__init__(self) + self._bus = dbus.SystemBus() + self.device = device + + wireless = dbus.Interface(device, network.NM_WIRELESS_IFACE) + wireless.GetAccessPoints( + reply_handler=self._get_access_points_reply_cb, + error_handler=self._get_access_points_error_cb) + + self._bus.add_signal_receiver(self.__access_point_added_cb, + signal_name='AccessPointAdded', + path=device.object_path, + dbus_interface=network.NM_WIRELESS_IFACE) + self._bus.add_signal_receiver(self.__access_point_removed_cb, + signal_name='AccessPointRemoved', + path=device.object_path, + dbus_interface=network.NM_WIRELESS_IFACE) + + def _get_access_points_reply_cb(self, access_points_o): + for ap_o in access_points_o: + ap = self._bus.get_object(network.NM_SERVICE, ap_o) + self.emit('access-point-added', ap) + + def _get_access_points_error_cb(self, err): + logging.error('Failed to get access points: %s', err) + + def __access_point_added_cb(self, access_point_o): + ap = self._bus.get_object(network.NM_SERVICE, access_point_o) + self.emit('access-point-added', ap) + + def __access_point_removed_cb(self, access_point_o): + self.emit('access-point-removed', access_point_o) + + def disconnect(self): + self._bus.remove_signal_receiver(self.__access_point_added_cb, + signal_name='AccessPointAdded', + path=self.device.object_path, + dbus_interface=network.NM_WIRELESS_IFACE) + self._bus.remove_signal_receiver(self.__access_point_removed_cb, + signal_name='AccessPointRemoved', + path=self.device.object_path, + dbus_interface=network.NM_WIRELESS_IFACE) + + +class NetworkManagerObserver(object): + + _SHOW_ADHOC_GCONF_KEY = '/desktop/sugar/network/adhoc' + + def __init__(self, box): + self._box = box + self._bus = None + self._devices = {} + self._netmgr = None + self._olpc_mesh_device_o = None + + client = gconf.client_get_default() + self._have_adhoc_networks = client.get_bool(self._SHOW_ADHOC_GCONF_KEY) + + def listen(self): + try: + self._bus = dbus.SystemBus() + self._netmgr = network.get_manager() + except dbus.DBusException: + logging.debug('NetworkManager not available') + return + + self._netmgr.GetDevices(reply_handler=self.__get_devices_reply_cb, + error_handler=self.__get_devices_error_cb) + + self._bus.add_signal_receiver(self.__device_added_cb, + signal_name='DeviceAdded', + dbus_interface=network.NM_IFACE) + self._bus.add_signal_receiver(self.__device_removed_cb, + signal_name='DeviceRemoved', + dbus_interface=network.NM_IFACE) + self._bus.add_signal_receiver(self.__properties_changed_cb, + signal_name='PropertiesChanged', + dbus_interface=network.NM_IFACE) + + secret_agent = network.get_secret_agent() + if secret_agent is not None: + secret_agent.secrets_request.connect(self.__secrets_request_cb) + + def __secrets_request_cb(self, **kwargs): + # FIXME It would be better to do all of this async, but I cannot think + # of a good way to. NM could really use some love here. + + netmgr_props = dbus.Interface(self._netmgr, dbus.PROPERTIES_IFACE) + active_connections_o = netmgr_props.Get(network.NM_IFACE, 'ActiveConnections') + + for conn_o in active_connections_o: + obj = self._bus.get_object(network.NM_IFACE, conn_o) + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE) + state = props.Get(network.NM_ACTIVE_CONN_IFACE, 'State') + if state == network.NM_ACTIVE_CONNECTION_STATE_ACTIVATING: + ap_o = props.Get(network.NM_ACTIVE_CONN_IFACE, 'SpecificObject') + found = False + if ap_o != '/': + for net in self._box.wireless_networks.values(): + if net.find_ap(ap_o) is not None: + found = True + net.create_keydialog(kwargs['response']) + if not found: + raise Exception('Could not determine AP for specific object' + ' %s' % conn_o) + + def __get_devices_reply_cb(self, devices_o): + for dev_o in devices_o: + self._check_device(dev_o) + + def __get_devices_error_cb(self, err): + logging.error('Failed to get devices: %s', err) + + def _check_device(self, device_o): + device = self._bus.get_object(network.NM_SERVICE, device_o) + props = dbus.Interface(device, dbus.PROPERTIES_IFACE) + + device_type = props.Get(network.NM_DEVICE_IFACE, 'DeviceType') + if device_type == network.NM_DEVICE_TYPE_WIFI: + if device_o in self._devices: + return + self._devices[device_o] = DeviceObserver(device) + self._devices[device_o].connect('access-point-added', + self.__ap_added_cb) + self._devices[device_o].connect('access-point-removed', + self.__ap_removed_cb) + if self._have_adhoc_networks: + self._box.add_adhoc_networks(device) + elif device_type == network.NM_DEVICE_TYPE_OLPC_MESH: + if device_o == self._olpc_mesh_device_o: + return + self._olpc_mesh_device_o = device_o + self._box.enable_olpc_mesh(device) + + def _get_device_path_error_cb(self, err): + logging.error('Failed to get device type: %s', err) + + def __device_added_cb(self, device_o): + self._check_device(device_o) + + def __device_removed_cb(self, device_o): + if device_o in self._devices: + observer = self._devices[device_o] + observer.disconnect() + del self._devices[device_o] + if self._have_adhoc_networks: + self._box.remove_adhoc_networks() + return + + if self._olpc_mesh_device_o == device_o: + self._box.disable_olpc_mesh(device_o) + self._olpc_mesh_device_o = None + + def __ap_added_cb(self, device_observer, access_point): + self._box.add_access_point(device_observer.device, access_point) + + def __ap_removed_cb(self, device_observer, access_point_o): + self._box.remove_access_point(access_point_o) + + def __properties_changed_cb(self, properties): + if 'WirelessHardwareEnabled' in properties: + if properties['WirelessHardwareEnabled']: + if not self._have_adhoc_networks: + self._box.remove_adhoc_networks() + elif properties['WirelessHardwareEnabled']: + for device in self._devices: + if self._have_adhoc_networks: + self._box.add_adhoc_networks(device) + + +class MeshBox(gtk.VBox): + __gtype_name__ = 'SugarMeshBox' + + def __init__(self): + logging.debug('STARTUP: Loading the mesh view') + + gobject.GObject.__init__(self) + + self.wireless_networks = {} + self._adhoc_manager = None + self._adhoc_networks = [] + + self._model = neighborhood.get_model() + self._buddies = {} + self._activities = {} + self._mesh = [] + self._buddy_to_activity = {} + self._suspended = True + self._query = '' + self._owner_icon = None + + self._toolbar = MeshToolbar() + self._toolbar.connect('query-changed', self._toolbar_query_changed_cb) + self.pack_start(self._toolbar, expand=False) + self._toolbar.show() + + canvas = hippo.Canvas() + self.add(canvas) + canvas.show() + + self._layout_box = hippo.CanvasBox( \ + background_color=style.COLOR_WHITE.get_int()) + canvas.set_root(self._layout_box) + + self._layout = SpreadLayout() + self._layout_box.set_layout(self._layout) + + for buddy_model in self._model.get_buddies(): + self._add_buddy(buddy_model) + + self._model.connect('buddy-added', self._buddy_added_cb) + self._model.connect('buddy-removed', self._buddy_removed_cb) + + for activity_model in self._model.get_activities(): + self._add_activity(activity_model) + + self._model.connect('activity-added', self._activity_added_cb) + self._model.connect('activity-removed', self._activity_removed_cb) + + netmgr_observer = NetworkManagerObserver(self) + netmgr_observer.listen() + + def do_size_allocate(self, allocation): + width = allocation.width + height = allocation.height + + min_w_, icon_width = self._owner_icon.get_width_request() + min_h_, icon_height = self._owner_icon.get_height_request(icon_width) + x = (width - icon_width) / 2 + y = (height - icon_height) / 2 - style.GRID_CELL_SIZE + self._layout.move(self._owner_icon, x, y) + + gtk.VBox.do_size_allocate(self, allocation) + + def _buddy_added_cb(self, model, buddy_model): + self._add_buddy(buddy_model) + + def _buddy_removed_cb(self, model, buddy_model): + self._remove_buddy(buddy_model) + + def _activity_added_cb(self, model, activity_model): + self._add_activity(activity_model) + + def _activity_removed_cb(self, model, activity_model): + self._remove_activity(activity_model) + + def _add_buddy(self, buddy_model): + buddy_model.connect('notify::current-activity', + self.__buddy_notify_current_activity_cb) + if buddy_model.props.current_activity is not None: + return + icon = BuddyIcon(buddy_model) + if buddy_model.is_owner(): + self._owner_icon = icon + self._layout.add(icon) + + if hasattr(icon, 'set_filter'): + icon.set_filter(self._query) + + self._buddies[buddy_model.props.key] = icon + + def _remove_buddy(self, buddy_model): + logging.debug('MeshBox._remove_buddy') + icon = self._buddies[buddy_model.props.key] + self._layout.remove(icon) + del self._buddies[buddy_model.props.key] + icon.destroy() + + def __buddy_notify_current_activity_cb(self, buddy_model, pspec): + logging.debug('MeshBox.__buddy_notify_current_activity_cb %s', + buddy_model.props.current_activity) + if buddy_model.props.current_activity is None: + if not buddy_model.props.key in self._buddies: + self._add_buddy(buddy_model) + elif buddy_model.props.key in self._buddies: + self._remove_buddy(buddy_model) + + def _add_activity(self, activity_model): + icon = ActivityView(activity_model) + self._layout.add(icon) + + if hasattr(icon, 'set_filter'): + icon.set_filter(self._query) + + self._activities[activity_model.activity_id] = icon + + def _remove_activity(self, activity_model): + icon = self._activities[activity_model.activity_id] + self._layout.remove(icon) + del self._activities[activity_model.activity_id] + icon.destroy() + + # add AP to its corresponding network icon on the desktop, + # creating one if it doesn't already exist + def _add_ap_to_network(self, ap): + hash_value = ap.network_hash() + if hash_value in self.wireless_networks: + self.wireless_networks[hash_value].add_ap(ap) + else: + # this is a new network + icon = WirelessNetworkView(ap) + self.wireless_networks[hash_value] = icon + self._layout.add(icon) + if hasattr(icon, 'set_filter'): + icon.set_filter(self._query) + + def _remove_net_if_empty(self, net, hash_value): + # remove a network if it has no APs left + if net.num_aps() == 0: + net.disconnect() + self._layout.remove(net) + del self.wireless_networks[hash_value] + + def _ap_props_changed_cb(self, ap, old_hash_value): + # 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': + logging.debug('ignoring OLPC mesh IBSS') + ap.disconnect() + return + + if self._adhoc_manager is not None and \ + network.is_sugar_adhoc_network(ap.ssid) and \ + ap.mode == network.NM_802_11_MODE_ADHOC: + if old_hash_value is None: + # new Ad-hoc network finished initializing + self._adhoc_manager.add_access_point(ap) + # we are called as well in other cases but we do not need to + # act here as we don't display signal strength for Ad-hoc networks + return + + if old_hash_value is None: + # new AP finished initializing + self._add_ap_to_network(ap) + return + + hash_value = ap.network_hash() + if old_hash_value == hash_value: + # no change in network identity, so just update signal strengths + self.wireless_networks[hash_value].update_strength() + return + + # properties change includes a change of the identity of the network + # that it is on. so create this as a new network. + self.wireless_networks[old_hash_value].remove_ap(ap) + self._remove_net_if_empty(self.wireless_networks[old_hash_value], + old_hash_value) + self._add_ap_to_network(ap) + + def add_access_point(self, device, ap_o): + ap = AccessPoint(device, ap_o) + ap.connect('props-changed', self._ap_props_changed_cb) + ap.initialize() + + def remove_access_point(self, ap_o): + if self._adhoc_manager is not None: + if self._adhoc_manager.is_sugar_adhoc_access_point(ap_o): + self._adhoc_manager.remove_access_point(ap_o) + return + + # we don't keep an index of ap object path to network, but since + # we'll only ever have a handful of networks, just try them all... + for net in self.wireless_networks.values(): + ap = net.find_ap(ap_o) + if not ap: + continue + + ap.disconnect() + net.remove_ap(ap) + self._remove_net_if_empty(net, ap.network_hash()) + return + + # it's not an error if the AP isn't found, since we might have ignored + # it (e.g. olpc-mesh adhoc network) + logging.debug('Can not remove access point %s', ap_o) + + def add_adhoc_networks(self, device): + if self._adhoc_manager is None: + self._adhoc_manager = get_adhoc_manager_instance() + self._adhoc_manager.start_listening(device) + self._add_adhoc_network_icon(1) + self._add_adhoc_network_icon(6) + self._add_adhoc_network_icon(11) + self._adhoc_manager.autoconnect() + + def remove_adhoc_networks(self): + for icon in self._adhoc_networks: + self._layout.remove(icon) + self._adhoc_networks = [] + self._adhoc_manager.stop_listening() + + def _add_adhoc_network_icon(self, channel): + icon = SugarAdhocView(channel) + self._layout.add(icon) + self._adhoc_networks.append(icon) + + def _add_olpc_mesh_icon(self, mesh_mgr, channel): + icon = OlpcMeshView(mesh_mgr, channel) + self._layout.add(icon) + self._mesh.append(icon) + + def enable_olpc_mesh(self, mesh_device): + mesh_mgr = OlpcMeshManager(mesh_device) + self._add_olpc_mesh_icon(mesh_mgr, 1) + self._add_olpc_mesh_icon(mesh_mgr, 6) + self._add_olpc_mesh_icon(mesh_mgr, 11) + + # the OLPC mesh can be recognised as a "normal" wifi network. remove + # any such normal networks if they have been created + for hash_value, net in self.wireless_networks.iteritems(): + if not net.is_olpc_mesh(): + continue + + logging.debug('removing OLPC mesh IBSS') + net.remove_all_aps() + net.disconnect() + self._layout.remove(net) + del self.wireless_networks[hash_value] + + def disable_olpc_mesh(self, mesh_device): + for icon in self._mesh: + icon.disconnect() + self._layout.remove(icon) + self._mesh = [] + + def suspend(self): + if not self._suspended: + self._suspended = True + for net in self.wireless_networks.values() + self._mesh: + net.props.paused = True + + def resume(self): + if self._suspended: + self._suspended = False + for net in self.wireless_networks.values() + self._mesh: + net.props.paused = False + + def _toolbar_query_changed_cb(self, toolbar, query): + self._query = query.lower() + for icon in self._layout_box.get_children(): + if hasattr(icon, 'set_filter'): + icon.set_filter(self._query) + + def focus_search_entry(self): + self._toolbar.search_entry.grab_focus() diff --git a/src/jarabe/desktop/networkviews.py b/src/jarabe/desktop/networkviews.py new file mode 100644 index 0000000..f42bfed --- /dev/null +++ b/src/jarabe/desktop/networkviews.py @@ -0,0 +1,708 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2009 Tomeu Vizoso, Simon Schampijer +# Copyright (C) 2009-2010 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +import logging +import hashlib + +import dbus +import glib + +from sugar.graphics.icon import Icon +from sugar.graphics.xocolor import XoColor +from sugar.graphics import xocolor +from sugar.graphics import style +from sugar.graphics.icon import get_icon_state +from sugar.graphics import palette +from sugar.graphics.menuitem import MenuItem +from sugar.util import unique_id +from sugar import profile + +from jarabe.view.pulsingicon import CanvasPulsingIcon +from jarabe.desktop import keydialog +from jarabe.model import network +from jarabe.model.network import Settings +from jarabe.model.network import IP4Config +from jarabe.model.network import WirelessSecurity +from jarabe.model.adhoc import get_adhoc_manager_instance + + +_AP_ICON_NAME = 'network-wireless' +_OLPC_MESH_ICON_NAME = 'network-mesh' + +_FILTERED_ALPHA = 0.33 + + +class WirelessNetworkView(CanvasPulsingIcon): + def __init__(self, initial_ap): + CanvasPulsingIcon.__init__(self, size=style.STANDARD_ICON_SIZE, + cache=True) + self._bus = dbus.SystemBus() + self._access_points = {initial_ap.model.object_path: initial_ap} + self._active_ap = None + self._device = initial_ap.device + self._palette_icon = None + self._disconnect_item = None + self._connect_item = None + self._filtered = False + self._ssid = initial_ap.ssid + self._display_name = network.ssid_to_display_name(self._ssid) + self._mode = initial_ap.mode + self._strength = initial_ap.strength + self._flags = initial_ap.flags + self._wpa_flags = initial_ap.wpa_flags + self._rsn_flags = initial_ap.rsn_flags + self._device_caps = 0 + self._device_state = None + self._color = None + + if self._mode == network.NM_802_11_MODE_ADHOC and \ + network.is_sugar_adhoc_network(self._ssid): + self._color = profile.get_color() + else: + sha_hash = hashlib.sha1() + data = self._ssid + hex(self._flags) + sha_hash.update(data) + digest = hash(sha_hash.digest()) + index = digest % len(xocolor.colors) + + self._color = xocolor.XoColor('%s,%s' % + (xocolor.colors[index][0], + xocolor.colors[index][1])) + + self.connect('button-release-event', self.__button_release_event_cb) + + pulse_color = XoColor('%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + self.props.pulse_color = pulse_color + + self._palette = self._create_palette() + self.set_palette(self._palette) + self._palette_icon.props.xo_color = self._color + self._update_badge() + + interface_props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE) + interface_props.Get(network.NM_WIRELESS_IFACE, 'WirelessCapabilities', + reply_handler=self.__get_device_caps_reply_cb, + error_handler=self.__get_device_caps_error_cb) + interface_props.Get(network.NM_WIRELESS_IFACE, 'ActiveAccessPoint', + reply_handler=self.__get_active_ap_reply_cb, + error_handler=self.__get_active_ap_error_cb) + + self._bus.add_signal_receiver(self.__device_state_changed_cb, + signal_name='StateChanged', + path=self._device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + self._bus.add_signal_receiver(self.__wireless_properties_changed_cb, + signal_name='PropertiesChanged', + path=self._device.object_path, + dbus_interface=network.NM_WIRELESS_IFACE) + + def _create_palette(self): + icon_name = get_icon_state(_AP_ICON_NAME, self._strength) + self._palette_icon = Icon(icon_name=icon_name, + icon_size=style.STANDARD_ICON_SIZE, + badge_name=self.props.badge_name) + + label = glib.markup_escape_text(self._display_name) + p = palette.Palette(primary_text=label, icon=self._palette_icon) + + self._connect_item = MenuItem(_('Connect'), 'dialog-ok') + self._connect_item.connect('activate', self.__connect_activate_cb) + p.menu.append(self._connect_item) + + self._disconnect_item = MenuItem(_('Disconnect'), 'media-eject') + self._disconnect_item.connect('activate', + self._disconnect_activate_cb) + p.menu.append(self._disconnect_item) + + return p + + def __device_state_changed_cb(self, new_state, old_state, reason): + self._device_state = new_state + self._update_state() + self._update_icon() + self._update_badge() + self._update_color() + + def __update_active_ap(self, ap_path): + if ap_path in self._access_points: + # save reference to active AP, so that we always display the + # strength of that one + self._active_ap = self._access_points[ap_path] + self.update_strength() + elif self._active_ap is not None: + # revert to showing state of strongest AP again + self._active_ap = None + self.update_strength() + + def __wireless_properties_changed_cb(self, properties): + if 'ActiveAccessPoint' in properties: + self.__update_active_ap(properties['ActiveAccessPoint']) + + def __get_active_ap_reply_cb(self, ap_path): + self.__update_active_ap(ap_path) + interface_props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE) + interface_props.Get(network.NM_DEVICE_IFACE, 'State', + reply_handler=self.__get_device_state_reply_cb, + error_handler=self.__get_device_state_error_cb) + + def __get_active_ap_error_cb(self, err): + logging.error('Error getting the active access point: %s', err) + + def __get_device_caps_reply_cb(self, caps): + self._device_caps = caps + + def __get_device_caps_error_cb(self, err): + logging.error('Error getting the wireless device properties: %s', err) + + def __get_device_state_reply_cb(self, state): + self._device_state = state + self._update_state() + self._update_color() + self._update_icon() + self._update_badge() + + def __get_device_state_error_cb(self, err): + logging.error('Error getting the device state: %s', err) + + def _update_icon(self): + if self._mode == network.NM_802_11_MODE_ADHOC and \ + network.is_sugar_adhoc_network(self._ssid): + channel = max([1] + [ap.channel for ap in + self._access_points.values()]) + if self._device_state == network.NM_DEVICE_STATE_ACTIVATED and \ + self._active_ap is not None: + icon_name = 'network-adhoc-%s-connected' % channel + else: + icon_name = 'network-adhoc-%s' % channel + self.props.icon_name = icon_name + icon = self._palette.props.icon + icon.props.icon_name = icon_name + else: + if self._device_state == network.NM_DEVICE_STATE_ACTIVATED and \ + self._active_ap is not None: + icon_name = '%s-connected' % _AP_ICON_NAME + else: + icon_name = _AP_ICON_NAME + + icon_name = get_icon_state(icon_name, self._strength) + if icon_name: + self.props.icon_name = icon_name + icon = self._palette.props.icon + icon.props.icon_name = icon_name + + def _update_badge(self): + if self._mode != network.NM_802_11_MODE_ADHOC: + if network.find_connection_by_ssid(self._ssid) is not None: + self.props.badge_name = 'emblem-favorite' + self._palette_icon.props.badge_name = 'emblem-favorite' + elif self._flags == network.NM_802_11_AP_FLAGS_PRIVACY: + self.props.badge_name = 'emblem-locked' + self._palette_icon.props.badge_name = 'emblem-locked' + else: + self.props.badge_name = None + self._palette_icon.props.badge_name = None + else: + self.props.badge_name = None + self._palette_icon.props.badge_name = None + + def _update_state(self): + if self._active_ap is not None: + state = self._device_state + else: + state = network.NM_DEVICE_STATE_UNKNOWN + + if state == network.NM_DEVICE_STATE_PREPARE or \ + state == network.NM_DEVICE_STATE_CONFIG or \ + state == network.NM_DEVICE_STATE_NEED_AUTH or \ + state == network.NM_DEVICE_STATE_IP_CONFIG: + if self._disconnect_item: + self._disconnect_item.show() + self._connect_item.hide() + self._palette.props.secondary_text = _('Connecting...') + self.props.pulsing = True + elif state == network.NM_DEVICE_STATE_ACTIVATED: + network.set_connected() + if self._disconnect_item: + self._disconnect_item.show() + self._connect_item.hide() + self._palette.props.secondary_text = _('Connected') + self.props.pulsing = False + else: + if self._disconnect_item: + self._disconnect_item.hide() + self._connect_item.show() + self._palette.props.secondary_text = None + self.props.pulsing = False + + def _update_color(self): + self.props.base_color = self._color + if self._filtered: + self.props.pulsing = False + self.alpha = _FILTERED_ALPHA + else: + self.alpha = 1.0 + + def _disconnect_activate_cb(self, item): + ap_paths = self._access_points.keys() + network.disconnect_access_points(ap_paths) + + def _add_ciphers_from_flags(self, flags, pairwise): + ciphers = [] + if pairwise: + if flags & network.NM_802_11_AP_SEC_PAIR_TKIP: + ciphers.append('tkip') + if flags & network.NM_802_11_AP_SEC_PAIR_CCMP: + ciphers.append('ccmp') + else: + if flags & network.NM_802_11_AP_SEC_GROUP_WEP40: + ciphers.append('wep40') + if flags & network.NM_802_11_AP_SEC_GROUP_WEP104: + ciphers.append('wep104') + if flags & network.NM_802_11_AP_SEC_GROUP_TKIP: + ciphers.append('tkip') + if flags & network.NM_802_11_AP_SEC_GROUP_CCMP: + ciphers.append('ccmp') + return ciphers + + def _get_security(self): + if not (self._flags & network.NM_802_11_AP_FLAGS_PRIVACY) and \ + (self._wpa_flags == network.NM_802_11_AP_SEC_NONE) and \ + (self._rsn_flags == network.NM_802_11_AP_SEC_NONE): + # No security + return None + + if (self._flags & network.NM_802_11_AP_FLAGS_PRIVACY) and \ + (self._wpa_flags == network.NM_802_11_AP_SEC_NONE) and \ + (self._rsn_flags == network.NM_802_11_AP_SEC_NONE): + # Static WEP, Dynamic WEP, or LEAP + wireless_security = WirelessSecurity() + wireless_security.key_mgmt = 'none' + return wireless_security + + if (self._mode != network.NM_802_11_MODE_INFRA): + # Stuff after this point requires infrastructure + logging.error('The infrastructure mode is not supoorted' + ' by your wireless device.') + return None + + if (self._rsn_flags & network.NM_802_11_AP_SEC_KEY_MGMT_PSK) and \ + (self._device_caps & network.NM_WIFI_DEVICE_CAP_RSN): + # WPA2 PSK first + pairwise = self._add_ciphers_from_flags(self._rsn_flags, True) + group = self._add_ciphers_from_flags(self._rsn_flags, False) + wireless_security = WirelessSecurity() + wireless_security.key_mgmt = 'wpa-psk' + wireless_security.proto = 'rsn' + wireless_security.pairwise = pairwise + wireless_security.group = group + return wireless_security + + if (self._wpa_flags & network.NM_802_11_AP_SEC_KEY_MGMT_PSK) and \ + (self._device_caps & network.NM_WIFI_DEVICE_CAP_WPA): + # WPA PSK + pairwise = self._add_ciphers_from_flags(self._wpa_flags, True) + group = self._add_ciphers_from_flags(self._wpa_flags, False) + wireless_security = WirelessSecurity() + wireless_security.key_mgmt = 'wpa-psk' + wireless_security.proto = 'wpa' + wireless_security.pairwise = pairwise + wireless_security.group = group + return wireless_security + + def __connect_activate_cb(self, icon): + self._connect() + + def __button_release_event_cb(self, icon, event): + self._connect() + + def _connect(self): + # Activate existing connection, if there is one + connection = network.find_connection_by_ssid(self._ssid) + if connection: + logging.debug('Activating existing connection for SSID %r', + self._ssid) + connection.activate(self._device) + return + + # Otherwise, create new connection and activate it + logging.debug('Creating new connection for SSID %r', self._ssid) + settings = Settings() + settings.connection.id = self._display_name + settings.connection.uuid = unique_id() + settings.connection.type = '802-11-wireless' + settings.wireless.ssid = self._ssid + + if self._mode == network.NM_802_11_MODE_INFRA: + settings.wireless.mode = 'infrastructure' + settings.connection.autoconnect = True + elif self._mode == network.NM_802_11_MODE_ADHOC: + settings.wireless.mode = 'adhoc' + settings.wireless.band = 'bg' + settings.ip4_config = IP4Config() + settings.ip4_config.method = 'link-local' + + wireless_security = self._get_security() + settings.wireless_security = wireless_security + + if wireless_security is not None: + settings.wireless.security = '802-11-wireless-security' + + network.add_and_activate_connection(self._device, settings, + self.get_first_ap().model) + + def set_filter(self, query): + self._filtered = self._display_name.lower().find(query) == -1 + self._update_icon() + self._update_color() + + def create_keydialog(self, response): + keydialog.create(self._ssid, self._flags, self._wpa_flags, + self._rsn_flags, self._device_caps, response) + + def update_strength(self): + if self._active_ap is not None: + # display strength of AP that we are connected to + new_strength = self._active_ap.strength + else: + # display the strength of the strongest AP that makes up this + # network, also considering that there may be no APs + new_strength = max([0] + [ap.strength for ap in + self._access_points.values()]) + + if new_strength != self._strength: + self._strength = new_strength + self._update_icon() + + def add_ap(self, ap): + self._access_points[ap.model.object_path] = ap + self.update_strength() + + def remove_ap(self, ap): + path = ap.model.object_path + if path not in self._access_points: + return + del self._access_points[path] + if self._active_ap == ap: + self._active_ap = None + self.update_strength() + + def num_aps(self): + return len(self._access_points) + + def find_ap(self, ap_path): + if ap_path not in self._access_points: + return None + return self._access_points[ap_path] + + def get_first_ap(self): + return self._access_points.values()[0] + + def is_olpc_mesh(self): + return self._mode == network.NM_802_11_MODE_ADHOC \ + and self._ssid == 'olpc-mesh' + + def remove_all_aps(self): + for ap in self._access_points.values(): + ap.disconnect() + self._access_points = {} + self._active_ap = None + self.update_strength() + + def disconnect(self): + self._bus.remove_signal_receiver(self.__device_state_changed_cb, + signal_name='StateChanged', + path=self._device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + self._bus.remove_signal_receiver(self.__wireless_properties_changed_cb, + signal_name='PropertiesChanged', + path=self._device.object_path, + dbus_interface=network.NM_WIRELESS_IFACE) + + +class SugarAdhocView(CanvasPulsingIcon): + """To mimic the mesh behavior on devices where mesh hardware is + not available we support the creation of an Ad-hoc network on + three channels 1, 6, 11. This is the class for an icon + representing a channel in the neighborhood view. + + """ + + _ICON_NAME = 'network-adhoc-' + _NAME = 'Ad-hoc Network ' + + def __init__(self, channel): + CanvasPulsingIcon.__init__(self, + icon_name=self._ICON_NAME + str(channel), + size=style.STANDARD_ICON_SIZE, cache=True) + self._bus = dbus.SystemBus() + self._channel = channel + self._disconnect_item = None + self._connect_item = None + self._palette_icon = None + self._filtered = False + + get_adhoc_manager_instance().connect('members-changed', + self.__members_changed_cb) + get_adhoc_manager_instance().connect('state-changed', + self.__state_changed_cb) + + self.connect('button-release-event', self.__button_release_event_cb) + + pulse_color = XoColor('%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + self.props.pulse_color = pulse_color + self._state_color = XoColor('%s,%s' % \ + (profile.get_color().get_stroke_color(), + style.COLOR_TRANSPARENT.get_svg())) + self.props.base_color = self._state_color + self._palette = self._create_palette() + self.set_palette(self._palette) + self._palette_icon.props.xo_color = self._state_color + + def _create_palette(self): + self._palette_icon = Icon( \ + icon_name=self._ICON_NAME + str(self._channel), + icon_size=style.STANDARD_ICON_SIZE) + + text = _('Ad-hoc Network %d') % (self._channel, ) + palette_ = palette.Palette(glib.markup_escape_text(text), + icon=self._palette_icon) + + self._connect_item = MenuItem(_('Connect'), 'dialog-ok') + self._connect_item.connect('activate', self.__connect_activate_cb) + palette_.menu.append(self._connect_item) + + self._disconnect_item = MenuItem(_('Disconnect'), 'media-eject') + self._disconnect_item.connect('activate', + self.__disconnect_activate_cb) + palette_.menu.append(self._disconnect_item) + + return palette_ + + def __button_release_event_cb(self, icon, event): + get_adhoc_manager_instance().activate_channel(self._channel) + + def __connect_activate_cb(self, icon): + get_adhoc_manager_instance().activate_channel(self._channel) + + def __disconnect_activate_cb(self, icon): + get_adhoc_manager_instance().deactivate_active_channel() + + def __state_changed_cb(self, adhoc_manager, channel, device_state): + if self._channel == channel: + state = device_state + else: + state = network.NM_DEVICE_STATE_UNKNOWN + + if state == network.NM_DEVICE_STATE_ACTIVATED: + icon_name = '%s-connected' % (self._ICON_NAME + str(self._channel)) + else: + icon_name = self._ICON_NAME + str(self._channel) + + if icon_name is not None: + self.props.icon_name = icon_name + icon = self._palette.props.icon + icon.props.icon_name = icon_name + + if (state >= network.NM_DEVICE_STATE_PREPARE) and \ + (state <= network.NM_DEVICE_STATE_IP_CONFIG): + if self._disconnect_item: + self._disconnect_item.show() + self._connect_item.hide() + self._palette.props.secondary_text = _('Connecting...') + self.props.pulsing = True + elif state == network.NM_DEVICE_STATE_ACTIVATED: + if self._disconnect_item: + self._disconnect_item.show() + self._connect_item.hide() + self._palette.props.secondary_text = _('Connected') + self.props.pulsing = False + else: + if self._disconnect_item: + self._disconnect_item.hide() + self._connect_item.show() + self._palette.props.secondary_text = None + self.props.pulsing = False + self._update_color() + + def _update_color(self): + self.props.base_color = self._state_color + if self._filtered: + self.props.pulsing = False + self.alpha = _FILTERED_ALPHA + else: + self.alpha = 1.0 + + def __members_changed_cb(self, adhoc_manager, channel, has_members): + if channel == self._channel: + if has_members == True: + self._state_color = profile.get_color() + else: + color = '%s,%s' % (profile.get_color().get_stroke_color(), + style.COLOR_TRANSPARENT.get_svg()) + self._state_color = XoColor(color) + + if not self._filtered: + self.props.base_color = self._state_color + self._palette_icon.props.xo_color = self._state_color + self.alpha = 1.0 + else: + self.alpha = _FILTERED_ALPHA + + def set_filter(self, query): + name = self._NAME + str(self._channel) + self._filtered = name.lower().find(query) == -1 + self._update_color() + + +class OlpcMeshView(CanvasPulsingIcon): + def __init__(self, mesh_mgr, channel): + CanvasPulsingIcon.__init__(self, icon_name=_OLPC_MESH_ICON_NAME, + size=style.STANDARD_ICON_SIZE, cache=True) + self._bus = dbus.SystemBus() + self._channel = channel + self._mesh_mgr = mesh_mgr + self._disconnect_item = None + self._connect_item = None + self._filtered = False + self._device_state = None + self._active = False + device = mesh_mgr.mesh_device + + self.connect('button-release-event', self.__button_release_event_cb) + + interface_props = dbus.Interface(device, dbus.PROPERTIES_IFACE) + interface_props.Get(network.NM_DEVICE_IFACE, 'State', + reply_handler=self.__get_device_state_reply_cb, + error_handler=self.__get_device_state_error_cb) + interface_props.Get(network.NM_OLPC_MESH_IFACE, 'ActiveChannel', + reply_handler=self.__get_active_channel_reply_cb, + error_handler=self.__get_active_channel_error_cb) + + self._bus.add_signal_receiver(self.__device_state_changed_cb, + signal_name='StateChanged', + path=device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + self._bus.add_signal_receiver(self.__wireless_properties_changed_cb, + signal_name='PropertiesChanged', + path=device.object_path, + dbus_interface=network.NM_OLPC_MESH_IFACE) + + pulse_color = XoColor('%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + self.props.pulse_color = pulse_color + self.props.base_color = profile.get_color() + self._palette = self._create_palette() + self.set_palette(self._palette) + + def _create_palette(self): + text = _('Mesh Network %d') % (self._channel, ) + _palette = palette.Palette(glib.markup_escape_text(text)) + + self._connect_item = MenuItem(_('Connect'), 'dialog-ok') + self._connect_item.connect('activate', self.__connect_activate_cb) + _palette.menu.append(self._connect_item) + + return _palette + + def __get_device_state_reply_cb(self, state): + self._device_state = state + self._update() + + def __get_device_state_error_cb(self, err): + logging.error('Error getting the device state: %s', err) + + def __device_state_changed_cb(self, new_state, old_state, reason): + self._device_state = new_state + self._update() + self._update_color() + + def __get_active_channel_reply_cb(self, channel): + self._active = (channel == self._channel) + self._update() + + def __get_active_channel_error_cb(self, err): + logging.error('Error getting the active channel: %s', err) + + def __wireless_properties_changed_cb(self, properties): + if 'ActiveChannel' in properties: + channel = properties['ActiveChannel'] + self._active = (channel == self._channel) + self._update() + + def _update(self): + if self._active: + state = self._device_state + else: + state = network.NM_DEVICE_STATE_UNKNOWN + + if state in [network.NM_DEVICE_STATE_PREPARE, + network.NM_DEVICE_STATE_CONFIG, + network.NM_DEVICE_STATE_NEED_AUTH, + network.NM_DEVICE_STATE_IP_CONFIG]: + if self._disconnect_item: + self._disconnect_item.show() + self._connect_item.hide() + self._palette.props.secondary_text = _('Connecting...') + self.props.pulsing = True + elif state == network.NM_DEVICE_STATE_ACTIVATED: + if self._disconnect_item: + self._disconnect_item.show() + self._connect_item.hide() + self._palette.props.secondary_text = _('Connected') + self.props.pulsing = False + else: + if self._disconnect_item: + self._disconnect_item.hide() + self._connect_item.show() + self._palette.props.secondary_text = None + self.props.pulsing = False + + def _update_color(self): + self.props.base_color = profile.get_color() + if self._filtered: + self.alpha = _FILTERED_ALPHA + else: + self.alpha = 1.0 + + def __connect_activate_cb(self, icon): + self._connect() + + def __button_release_event_cb(self, icon, event): + self._connect() + + def _connect(self): + self._mesh_mgr.user_activate_channel(self._channel) + + def set_filter(self, query): + self._filtered = (query != '') + self._update_color() + + def disconnect(self): + device_object_path = self._mesh_mgr.mesh_device.object_path + + self._bus.remove_signal_receiver(self.__device_state_changed_cb, + signal_name='StateChanged', + path=device_object_path, + dbus_interface=network.NM_DEVICE_IFACE) + self._bus.remove_signal_receiver(self.__wireless_properties_changed_cb, + signal_name='PropertiesChanged', + path=device_object_path, + dbus_interface=network.NM_OLPC_MESH_IFACE) diff --git a/src/jarabe/desktop/schoolserver.py b/src/jarabe/desktop/schoolserver.py new file mode 100644 index 0000000..403897b --- /dev/null +++ b/src/jarabe/desktop/schoolserver.py @@ -0,0 +1,173 @@ +# Copyright (C) 2007, 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from gettext import gettext as _ +import xmlrpclib +import socket +import httplib +import os +from string import ascii_uppercase +import random +import time +import uuid +import sys + +import gconf + +from sugar import env +from sugar.profile import get_profile + +_REGISTER_URL = 'http://schoolserver:8080/' +_REGISTER_TIMEOUT = 8 +_OFW_TREE = '/ofw' +_PROC_TREE = '/proc/device-tree' +_MFG_SN = 'mfg-data/SN' +_MFG_UUID = 'mfg-data/U#' + + +def _generate_serial_number(): + """ Generates a serial number based on 3 random uppercase letters + and the last 8 digits of the current unix seconds. """ + + serial_part1 = [] + + for y_ in range(3): + serial_part1.append(random.choice(ascii_uppercase)) + + serial_part1 = ''.join(serial_part1) + serial_part2 = str(int(time.time()))[-8:] + serial = serial_part1 + serial_part2 + + return serial + + +def _store_identifiers(serial_number, uuid_, backup_url): + """ Stores the serial number, uuid and backup_url + in the identifier folder inside the profile directory + so that these identifiers can be used for backup. """ + + identifier_path = os.path.join(env.get_profile_path(), 'identifiers') + if not os.path.exists(identifier_path): + os.mkdir(identifier_path) + + if os.path.exists(os.path.join(identifier_path, 'sn')): + os.remove(os.path.join(identifier_path, 'sn')) + serial_file = open(os.path.join(identifier_path, 'sn'), 'w') + serial_file.write(serial_number) + serial_file.close() + + if os.path.exists(os.path.join(identifier_path, 'uuid')): + os.remove(os.path.join(identifier_path, 'uuid')) + uuid_file = open(os.path.join(identifier_path, 'uuid'), 'w') + uuid_file.write(uuid_) + uuid_file.close() + + if os.path.exists(os.path.join(identifier_path, 'backup_url')): + os.remove(os.path.join(identifier_path, 'backup_url')) + backup_url_file = open(os.path.join(identifier_path, 'backup_url'), 'w') + backup_url_file.write(backup_url) + backup_url_file.close() + + +class RegisterError(Exception): + pass + + +class _TimeoutHTTP(httplib.HTTP): + + def __init__(self, host='', port=None, strict=None, timeout=None): + if port == 0: + port = None + # FIXME: Depending on undocumented internals that can break between + # Python releases. Please have a look at SL #2350 + self._setup(self._connection_class(host, + port, strict, timeout=_REGISTER_TIMEOUT)) + + +class _TimeoutTransport(xmlrpclib.Transport): + + def make_connection(self, host): + host, extra_headers, x509_ = self.get_host_info(host) + return _TimeoutHTTP(host, timeout=_REGISTER_TIMEOUT) + + +def register_laptop(url=_REGISTER_URL): + + profile = get_profile() + client = gconf.client_get_default() + + if _have_ofw_tree(): + sn = _read_mfg_data(os.path.join(_OFW_TREE, _MFG_SN)) + uuid_ = _read_mfg_data(os.path.join(_OFW_TREE, _MFG_UUID)) + elif _have_proc_device_tree(): + sn = _read_mfg_data(os.path.join(_PROC_TREE, _MFG_SN)) + uuid_ = _read_mfg_data(os.path.join(_PROC_TREE, _MFG_UUID)) + else: + sn = _generate_serial_number() + uuid_ = str(uuid.uuid1()) + sn = sn or 'SHF00000000' + uuid_ = uuid_ or '00000000-0000-0000-0000-000000000000' + + setting_name = '/desktop/sugar/collaboration/jabber_server' + jabber_server = client.get_string(setting_name) + _store_identifiers(sn, uuid_, jabber_server) + + if jabber_server: + url = 'http://' + jabber_server + ':8080/' + + nick = client.get_string('/desktop/sugar/user/nick') + + if sys.hexversion < 0x2070000: + server = xmlrpclib.ServerProxy(url, _TimeoutTransport()) + else: + socket.setdefaulttimeout(_REGISTER_TIMEOUT) + server = xmlrpclib.ServerProxy(url) + try: + data = server.register(sn, nick, uuid_, profile.pubkey) + except (xmlrpclib.Error, TypeError, socket.error): + logging.exception('Registration: cannot connect to server') + raise RegisterError(_('Cannot connect to the server.')) + finally: + socket.setdefaulttimeout(None) + + if data['success'] != 'OK': + logging.error('Registration: server could not complete request: %s', + data['error']) + raise RegisterError(_('The server could not complete the request.')) + + client.set_string('/desktop/sugar/collaboration/jabber_server', + data['jabberserver']) + client.set_string('/desktop/sugar/backup_url', data['backupurl']) + + return True + + +def _have_ofw_tree(): + return os.path.exists(_OFW_TREE) + + +def _have_proc_device_tree(): + return os.path.exists(_PROC_TREE) + + +def _read_mfg_data(path): + if not os.path.exists(path): + return None + fh = open(path, 'r') + data = fh.read().rstrip('\0\n') + fh.close() + return data diff --git a/src/jarabe/desktop/snowflakelayout.py b/src/jarabe/desktop/snowflakelayout.py new file mode 100644 index 0000000..e4963ba --- /dev/null +++ b/src/jarabe/desktop/snowflakelayout.py @@ -0,0 +1,111 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import math + +import gobject +import hippo + +from sugar.graphics import style + + +_BASE_DISTANCE = style.zoom(25) +_CHILDREN_FACTOR = style.zoom(3) + + +class SnowflakeLayout(gobject.GObject, hippo.CanvasLayout): + __gtype_name__ = 'SugarSnowflakeLayout' + + def __init__(self): + gobject.GObject.__init__(self) + self._nflakes = 0 + self._box = None + + def add(self, child, center=False): + if not center: + self._nflakes += 1 + + self._box.append(child) + + box_child = self._box.find_box_child(child) + box_child.is_center = center + + def remove(self, child): + box_child = self._box.find_box_child(child) + if not box_child.is_center: + self._nflakes -= 1 + + self._box.remove(child) + + def do_set_box(self, box): + self._box = box + + def do_get_height_request(self, for_width): + size = self._calculate_size() + return (size, size) + + def do_get_width_request(self): + size = self._calculate_size() + return (size, size) + + def do_allocate(self, x, y, width, height, + req_width, req_height, origin_changed): + r = self._get_radius() + index = 0 + + for child in self._box.get_layout_children(): + min_width, child_width = child.get_width_request() + min_height, child_height = child.get_height_request(child_width) + + if child.is_center: + child.allocate(x + (width - child_width) / 2, + y + (height - child_height) / 2, + child_width, child_height, origin_changed) + else: + angle = 2 * math.pi * index / self._nflakes + + if self._nflakes != 2: + angle -= math.pi / 2 + + dx = math.cos(angle) * r + dy = math.sin(angle) * r + + child_x = int(x + (width - child_width) / 2 + dx) + child_y = int(y + (height - child_height) / 2 + dy) + + child.allocate(child_x, child_y, child_width, + child_height, origin_changed) + + index += 1 + + def _get_radius(self): + radius = int(_BASE_DISTANCE + _CHILDREN_FACTOR * self._nflakes) + for child in self._box.get_layout_children(): + if child.is_center: + [min_w, child_w] = child.get_width_request() + [min_h, child_h] = child.get_height_request(child_w) + radius += max(child_w, child_h) / 2 + + return radius + + def _calculate_size(self): + thickness = 0 + for child in self._box.get_layout_children(): + [min_width, child_width] = child.get_width_request() + [min_height, child_height] = child.get_height_request(child_width) + thickness = max(thickness, max(child_width, child_height)) + + return self._get_radius() * 2 + thickness diff --git a/src/jarabe/desktop/spreadlayout.py b/src/jarabe/desktop/spreadlayout.py new file mode 100644 index 0000000..b5c623e --- /dev/null +++ b/src/jarabe/desktop/spreadlayout.py @@ -0,0 +1,89 @@ +# Copyright (C) 2007 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import math + +import hippo +import gobject +import gtk + +from sugar.graphics import style + +from jarabe.desktop.grid import Grid + + +_CELL_SIZE = 4.0 + + +class SpreadLayout(gobject.GObject, hippo.CanvasLayout): + __gtype_name__ = 'SugarSpreadLayout' + + def __init__(self): + gobject.GObject.__init__(self) + self._box = None + + min_width, width = self.do_get_width_request() + min_height, height = self.do_get_height_request(width) + + self._grid = Grid(int(width / _CELL_SIZE), int(height / _CELL_SIZE)) + self._grid.connect('child-changed', self._grid_child_changed_cb) + + def add(self, child): + self._box.append(child) + + width, height = self._get_child_grid_size(child) + self._grid.add(child, width, height) + + def remove(self, child): + self._grid.remove(child) + self._box.remove(child) + + def move(self, child, x, y): + self._grid.move(child, x / _CELL_SIZE, y / _CELL_SIZE, locked=True) + + def do_set_box(self, box): + self._box = box + + def do_get_height_request(self, for_width): + return 0, gtk.gdk.screen_height() - style.GRID_CELL_SIZE + + def do_get_width_request(self): + return 0, gtk.gdk.screen_width() + + def do_allocate(self, x, y, width, height, + req_width, req_height, origin_changed): + for child in self._box.get_layout_children(): + # We need to always get requests to not confuse hippo + min_w, child_width = child.get_width_request() + min_h, child_height = child.get_height_request(child_width) + + rect = self._grid.get_child_rect(child.item) + child.allocate(int(round(rect.x * _CELL_SIZE)), + int(round(rect.y * _CELL_SIZE)), + child_width, + child_height, + origin_changed) + + def _get_child_grid_size(self, child): + min_width, width = child.get_width_request() + min_height, height = child.get_height_request(width) + width = math.ceil(width / _CELL_SIZE) + height = math.ceil(height / _CELL_SIZE) + + return int(width), int(height) + + def _grid_child_changed_cb(self, grid, child): + child.emit_request_changed() diff --git a/src/jarabe/desktop/transitionbox.py b/src/jarabe/desktop/transitionbox.py new file mode 100644 index 0000000..fd2112c --- /dev/null +++ b/src/jarabe/desktop/transitionbox.py @@ -0,0 +1,99 @@ +# Copyright (C) 2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import hippo +import gobject + +from sugar.graphics import style +from sugar.graphics import animator + +from jarabe.model.buddy import get_owner_instance +from jarabe.view.buddyicon import BuddyIcon + + +class _Animation(animator.Animation): + def __init__(self, icon, start_size, end_size): + animator.Animation.__init__(self, 0.0, 1.0) + + self._icon = icon + self.start_size = start_size + self.end_size = end_size + + def next_frame(self, current): + d = (self.end_size - self.start_size) * current + self._icon.props.size = int(self.start_size + d) + + +class _Layout(gobject.GObject, hippo.CanvasLayout): + __gtype_name__ = 'SugarTransitionBoxLayout' + + def __init__(self): + gobject.GObject.__init__(self) + self._box = None + + def do_set_box(self, box): + self._box = box + + def do_get_height_request(self, for_width): + return 0, 0 + + def do_get_width_request(self): + return 0, 0 + + def do_allocate(self, x, y, width, height, + req_width, req_height, origin_changed): + for child in self._box.get_layout_children(): + min_width, child_width = child.get_width_request() + min_height, child_height = child.get_height_request(child_width) + + child.allocate(x + (width - child_width) / 2, + y + (height - child_height) / 2, + child_width, child_height, origin_changed) + + +class TransitionBox(hippo.Canvas): + __gtype_name__ = 'SugarTransitionBox' + + __gsignals__ = { + 'completed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + } + + def __init__(self): + gobject.GObject.__init__(self) + + self._box = hippo.CanvasBox() + self._box.props.background_color = style.COLOR_WHITE.get_int() + self.set_root(self._box) + + self._layout = _Layout() + self._box.set_layout(self._layout) + + self._my_icon = BuddyIcon(buddy=get_owner_instance(), + size=style.XLARGE_ICON_SIZE) + self._box.append(self._my_icon) + + self._animator = animator.Animator(0.3) + self._animator.connect('completed', self._animation_completed_cb) + + def _animation_completed_cb(self, anim): + self.emit('completed') + + def start_transition(self, start_size, end_size): + self._my_icon.props.size = start_size + + self._animator.remove_all() + self._animator.add(_Animation(self._my_icon, start_size, end_size)) + self._animator.start() diff --git a/src/jarabe/frame/Makefile.am b/src/jarabe/frame/Makefile.am new file mode 100644 index 0000000..e5c445f --- /dev/null +++ b/src/jarabe/frame/Makefile.am @@ -0,0 +1,18 @@ +sugardir = $(pythondir)/jarabe/frame +sugar_PYTHON = \ + __init__.py \ + activitiestray.py \ + clipboard.py \ + clipboardicon.py \ + clipboardmenu.py \ + clipboardobject.py \ + clipboardpanelwindow.py \ + clipboardtray.py \ + devicestray.py \ + frameinvoker.py \ + friendstray.py \ + eventarea.py \ + frame.py \ + notification.py \ + framewindow.py \ + zoomtoolbar.py diff --git a/src/jarabe/frame/Makefile.in b/src/jarabe/frame/Makefile.in new file mode 100644 index 0000000..8da62b8 --- /dev/null +++ b/src/jarabe/frame/Makefile.in @@ -0,0 +1,455 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src/jarabe/frame +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pythondir)/jarabe/frame +sugar_PYTHON = \ + __init__.py \ + activitiestray.py \ + clipboard.py \ + clipboardicon.py \ + clipboardmenu.py \ + clipboardobject.py \ + clipboardpanelwindow.py \ + clipboardtray.py \ + devicestray.py \ + frameinvoker.py \ + friendstray.py \ + eventarea.py \ + frame.py \ + notification.py \ + framewindow.py \ + zoomtoolbar.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/jarabe/frame/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/jarabe/frame/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/jarabe/frame/__init__.py b/src/jarabe/frame/__init__.py new file mode 100644 index 0000000..b3e4b80 --- /dev/null +++ b/src/jarabe/frame/__init__.py @@ -0,0 +1,27 @@ +# Copyright (C) 2006-2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from jarabe.frame.frame import Frame + + +_view = None + + +def get_view(): + global _view + if not _view: + _view = Frame() + return _view diff --git a/src/jarabe/frame/activitiestray.py b/src/jarabe/frame/activitiestray.py new file mode 100644 index 0000000..9590bce --- /dev/null +++ b/src/jarabe/frame/activitiestray.py @@ -0,0 +1,769 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2008 One Laptop Per Child +# Copyright (C) 2010 Collabora Ltd. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from gettext import gettext as _ +import tempfile +import os + +import gobject +import gconf +import gio +import glib +import gtk + +from sugar.graphics import style +from sugar.graphics.tray import HTray +from sugar.graphics.xocolor import XoColor +from sugar.graphics.radiotoolbutton import RadioToolButton +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.icon import Icon, get_icon_file_name +from sugar.graphics.palette import Palette +from sugar.graphics.menuitem import MenuItem +from sugar.datastore import datastore +from sugar import mime +from sugar import env + +from jarabe.model import shell +from jarabe.model import invites +from jarabe.model import bundleregistry +from jarabe.model import filetransfer +from jarabe.view.palettes import JournalPalette, CurrentActivityPalette +from jarabe.view.pulsingicon import PulsingIcon +from jarabe.frame.frameinvoker import FrameWidgetInvoker +from jarabe.frame.notification import NotificationIcon +import jarabe.frame + + +class ActivityButton(RadioToolButton): + def __init__(self, home_activity, group): + RadioToolButton.__init__(self, group=group) + + self.set_palette_invoker(FrameWidgetInvoker(self)) + self.palette_invoker.cache_palette = False + + self._home_activity = home_activity + self._notify_launch_hid = None + + self._icon = PulsingIcon() + self._icon.props.base_color = home_activity.get_icon_color() + self._icon.props.pulse_color = \ + XoColor('%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), + style.COLOR_TOOLBAR_GREY.get_svg())) + if home_activity.get_icon_path(): + self._icon.props.file = home_activity.get_icon_path() + else: + self._icon.props.icon_name = 'image-missing' + self.set_icon_widget(self._icon) + self._icon.show() + + if home_activity.props.launch_status == shell.Activity.LAUNCHING: + self._icon.props.pulsing = True + self._notify_launch_hid = home_activity.connect( \ + 'notify::launch-status', self.__notify_launch_status_cb) + elif home_activity.props.launch_status == shell.Activity.LAUNCH_FAILED: + self._on_failed_launch() + + def create_palette(self): + if self._home_activity.is_journal(): + palette = JournalPalette(self._home_activity) + else: + palette = CurrentActivityPalette(self._home_activity) + palette.set_group_id('frame') + self.set_palette(palette) + + def _on_failed_launch(self): + # TODO http://bugs.sugarlabs.org/ticket/2007 + pass + + def __notify_launch_status_cb(self, home_activity, pspec): + home_activity.disconnect(self._notify_launch_hid) + self._notify_launch_hid = None + if home_activity.props.launch_status == shell.Activity.LAUNCH_FAILED: + self._on_failed_launch() + else: + self._icon.props.pulsing = False + + +class InviteButton(ToolButton): + """Invite to shared activity""" + + __gsignals__ = { + 'remove-invite': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + } + + def __init__(self, invite): + ToolButton.__init__(self) + + self._invite = invite + + self.connect('clicked', self.__clicked_cb) + self.connect('destroy', self.__destroy_cb) + + bundle_registry = bundleregistry.get_registry() + bundle = bundle_registry.get_bundle(invite.get_bundle_id()) + + self._icon = Icon() + self._icon.props.xo_color = invite.get_color() + if bundle is not None: + self._icon.props.file = bundle.get_icon() + else: + self._icon.props.icon_name = 'image-missing' + self.set_icon_widget(self._icon) + self._icon.show() + + palette = InvitePalette(invite) + palette.props.invoker = FrameWidgetInvoker(self) + palette.set_group_id('frame') + palette.connect('remove-invite', self.__remove_invite_cb) + self.set_palette(palette) + + self._notif_icon = NotificationIcon() + self._notif_icon.connect('button-release-event', + self.__button_release_event_cb) + + self._notif_icon.props.xo_color = invite.get_color() + if bundle is not None: + self._notif_icon.props.icon_filename = bundle.get_icon() + else: + self._notif_icon.props.icon_name = 'image-missing' + + frame = jarabe.frame.get_view() + frame.add_notification(self._notif_icon, gtk.CORNER_TOP_LEFT) + + def __button_release_event_cb(self, icon, event): + if self._notif_icon is not None: + frame = jarabe.frame.get_view() + frame.remove_notification(self._notif_icon) + self._notif_icon = None + self._invite.join() + self.emit('remove-invite') + + def __clicked_cb(self, button): + self.palette.popup(immediate=True, state=Palette.SECONDARY) + + def __remove_invite_cb(self, palette): + self.emit('remove-invite') + + def __destroy_cb(self, button): + if self._notif_icon is not None: + frame = jarabe.frame.get_view() + frame.remove_notification(self._notif_icon) + self._notif_icon = None + + +class InvitePalette(Palette): + """Palette for frame or notification icon for invites.""" + + __gsignals__ = { + 'remove-invite': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + } + + def __init__(self, invite): + Palette.__init__(self, '') + + self._invite = invite + + menu_item = MenuItem(_('Join'), icon_name='dialog-ok') + menu_item.connect('activate', self.__join_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + menu_item = MenuItem(_('Decline'), icon_name='dialog-cancel') + menu_item.connect('activate', self.__decline_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + bundle_id = invite.get_bundle_id() + + registry = bundleregistry.get_registry() + self._bundle = registry.get_bundle(bundle_id) + if self._bundle: + name = self._bundle.get_name() + else: + name = bundle_id + + self.set_primary_text(glib.markup_escape_text(name)) + + def __join_activate_cb(self, menu_item): + self._invite.join() + self.emit('remove-invite') + + def __decline_activate_cb(self, menu_item): + self.emit('remove-invite') + + +class ActivitiesTray(HTray): + def __init__(self): + HTray.__init__(self) + + self._buttons = {} + self._invite_to_item = {} + self._freeze_button_clicks = False + + self._home_model = shell.get_model() + self._home_model.connect('activity-added', self.__activity_added_cb) + self._home_model.connect('activity-removed', + self.__activity_removed_cb) + self._home_model.connect('active-activity-changed', + self.__activity_changed_cb) + self._home_model.connect('tabbing-activity-changed', + self.__tabbing_activity_changed_cb) + + self._invites = invites.get_instance() + for invite in self._invites: + self._add_invite(invite) + self._invites.connect('invite-added', self.__invite_added_cb) + self._invites.connect('invite-removed', self.__invite_removed_cb) + + filetransfer.new_file_transfer.connect(self.__new_file_transfer_cb) + + def __activity_added_cb(self, home_model, home_activity): + logging.debug('__activity_added_cb: %r', home_activity) + if self.get_children(): + group = self.get_children()[0] + else: + group = None + + button = ActivityButton(home_activity, group) + self.add_item(button) + self._buttons[home_activity] = button + button.connect('clicked', self.__activity_clicked_cb, home_activity) + button.show() + + def __activity_removed_cb(self, home_model, home_activity): + logging.debug('__activity_removed_cb: %r', home_activity) + button = self._buttons[home_activity] + self.remove_item(button) + del self._buttons[home_activity] + + def _activate_activity(self, home_activity): + button = self._buttons[home_activity] + self._freeze_button_clicks = True + button.props.active = True + self._freeze_button_clicks = False + + self.scroll_to_item(button) + # Redraw immediately. + # The widget may not be realized yet, and then there is no window. + if self.window: + self.window.process_updates(True) + + def __activity_changed_cb(self, home_model, home_activity): + logging.debug('__activity_changed_cb: %r', home_activity) + + # Only select the new activity, if there is no tabbing activity. + if home_model.get_tabbing_activity() is None: + self._activate_activity(home_activity) + + def __tabbing_activity_changed_cb(self, home_model, home_activity): + logging.debug('__tabbing_activity_changed_cb: %r', home_activity) + # If the tabbing_activity is set to None just do nothing. + # The active activity will be updated a bit later (and it will + # be set to the activity that is currently selected). + if home_activity is None: + return + + self._activate_activity(home_activity) + + def __activity_clicked_cb(self, button, home_activity): + if not self._freeze_button_clicks and button.props.active: + logging.debug('ActivitiesTray.__activity_clicked_cb') + window = home_activity.get_window() + if window: + window.activate(gtk.get_current_event_time()) + + def __remove_invite_cb(self, icon, invite): + self._invites.remove_invite(invite) + + def __invite_added_cb(self, invites_model, invite): + self._add_invite(invite) + + def __invite_removed_cb(self, invites_model, invite): + self._remove_invite(invite) + + def _add_invite(self, invite): + """Add an invite""" + item = InviteButton(invite) + item.connect('remove-invite', self.__remove_invite_cb, invite) + self.add_item(item) + item.show() + self._invite_to_item[invite] = item + + def _remove_invite(self, invite): + self.remove_item(self._invite_to_item[invite]) + self._invite_to_item[invite].destroy() + del self._invite_to_item[invite] + + def __new_file_transfer_cb(self, **kwargs): + file_transfer = kwargs['file_transfer'] + logging.debug('__new_file_transfer_cb %r', file_transfer) + + if isinstance(file_transfer, filetransfer.IncomingFileTransfer): + button = IncomingTransferButton(file_transfer) + elif isinstance(file_transfer, filetransfer.OutgoingFileTransfer): + button = OutgoingTransferButton(file_transfer) + + self.add_item(button) + button.show() + + +class BaseTransferButton(ToolButton): + """Button with a notification attached + """ + def __init__(self, file_transfer): + ToolButton.__init__(self) + + self.file_transfer = file_transfer + file_transfer.connect('notify::state', self.__notify_state_cb) + + icon = Icon() + self.props.icon_widget = icon + icon.show() + + self.notif_icon = NotificationIcon() + self.notif_icon.connect('button-release-event', + self.__button_release_event_cb) + + self.connect('clicked', self.__button_clicked_cb) + + def __button_release_event_cb(self, icon, event): + if self.notif_icon is not None: + frame = jarabe.frame.get_view() + frame.remove_notification(self.notif_icon) + self.notif_icon = None + + def __button_clicked_cb(self, button): + self.palette.popup(immediate=True, state=Palette.SECONDARY) + + def remove(self): + frame = jarabe.frame.get_view() + frame.remove_notification(self.notif_icon) + self.props.parent.remove(self) + + def __notify_state_cb(self, file_transfer, pspec): + logging.debug('_update state: %r %r', file_transfer.props.state, + file_transfer.reason_last_change) + if file_transfer.props.state == filetransfer.FT_STATE_CANCELLED: + if file_transfer.reason_last_change == \ + filetransfer.FT_REASON_LOCAL_STOPPED: + self.remove() + + +class IncomingTransferButton(BaseTransferButton): + """UI element representing an ongoing incoming file transfer + """ + def __init__(self, file_transfer): + BaseTransferButton.__init__(self, file_transfer) + + self._ds_object = datastore.create() + + file_transfer.connect('notify::state', self.__notify_state_cb) + file_transfer.connect('notify::transferred-bytes', + self.__notify_transferred_bytes_cb) + + icons = gio.content_type_get_icon(file_transfer.mime_type).props.names + icons.append('application-octet-stream') + for icon_name in icons: + icon_name = 'transfer-from-%s' % icon_name + file_name = get_icon_file_name(icon_name) + if file_name is not None: + self.props.icon_widget.props.icon_name = icon_name + self.notif_icon.props.icon_name = icon_name + break + + icon_color = file_transfer.buddy.props.color + self.props.icon_widget.props.xo_color = icon_color + self.notif_icon.props.xo_color = icon_color + + frame = jarabe.frame.get_view() + frame.add_notification(self.notif_icon, + gtk.CORNER_TOP_LEFT) + + def create_palette(self): + palette = IncomingTransferPalette(self.file_transfer) + palette.connect('dismiss-clicked', self.__dismiss_clicked_cb) + palette.props.invoker = FrameWidgetInvoker(self) + palette.set_group_id('frame') + return palette + + def __notify_state_cb(self, file_transfer, pspec): + if file_transfer.props.state == filetransfer.FT_STATE_OPEN: + logging.debug('__notify_state_cb OPEN') + self._ds_object.metadata['title'] = file_transfer.title + self._ds_object.metadata['description'] = file_transfer.description + self._ds_object.metadata['progress'] = '0' + self._ds_object.metadata['keep'] = '0' + self._ds_object.metadata['buddies'] = '' + self._ds_object.metadata['preview'] = '' + self._ds_object.metadata['icon-color'] = \ + file_transfer.buddy.props.color.to_string() + self._ds_object.metadata['mime_type'] = file_transfer.mime_type + elif file_transfer.props.state == filetransfer.FT_STATE_COMPLETED: + logging.debug('__notify_state_cb COMPLETED') + self._ds_object.metadata['progress'] = '100' + self._ds_object.file_path = file_transfer.destination_path + datastore.write(self._ds_object, transfer_ownership=True, + reply_handler=self.__reply_handler_cb, + error_handler=self.__error_handler_cb) + elif file_transfer.props.state == filetransfer.FT_STATE_CANCELLED: + logging.debug('__notify_state_cb CANCELLED') + object_id = self._ds_object.object_id + if object_id is not None: + self._ds_object.destroy() + datastore.delete(object_id) + self._ds_object = None + + def __notify_transferred_bytes_cb(self, file_transfer, pspec): + progress = file_transfer.props.transferred_bytes / \ + file_transfer.file_size + self._ds_object.metadata['progress'] = str(progress * 100) + datastore.write(self._ds_object, update_mtime=False) + + def __reply_handler_cb(self): + logging.debug('__reply_handler_cb %r', self._ds_object.object_id) + + def __error_handler_cb(self, error): + logging.debug('__error_handler_cb %r %s', self._ds_object.object_id, + error) + + def __dismiss_clicked_cb(self, palette): + self.remove() + + +class OutgoingTransferButton(BaseTransferButton): + """UI element representing an ongoing outgoing file transfer + """ + def __init__(self, file_transfer): + BaseTransferButton.__init__(self, file_transfer) + + icons = gio.content_type_get_icon(file_transfer.mime_type).props.names + icons.append('application-octet-stream') + for icon_name in icons: + icon_name = 'transfer-to-%s' % icon_name + file_name = get_icon_file_name(icon_name) + if file_name is not None: + self.props.icon_widget.props.icon_name = icon_name + self.notif_icon.props.icon_name = icon_name + break + + client = gconf.client_get_default() + icon_color = XoColor(client.get_string('/desktop/sugar/user/color')) + self.props.icon_widget.props.xo_color = icon_color + self.notif_icon.props.xo_color = icon_color + + frame = jarabe.frame.get_view() + frame.add_notification(self.notif_icon, + gtk.CORNER_TOP_LEFT) + + def create_palette(self): + palette = OutgoingTransferPalette(self.file_transfer) + palette.connect('dismiss-clicked', self.__dismiss_clicked_cb) + palette.props.invoker = FrameWidgetInvoker(self) + palette.set_group_id('frame') + return palette + + def __dismiss_clicked_cb(self, palette): + self.remove() + + +class BaseTransferPalette(Palette): + """Base palette class for frame or notification icon for file transfers + """ + __gtype_name__ = 'SugarBaseTransferPalette' + + __gsignals__ = { + 'dismiss-clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + } + + def __init__(self, file_transfer): + Palette.__init__(self, glib.markup_escape_text(file_transfer.title)) + + self.file_transfer = file_transfer + + self.progress_bar = None + self.progress_label = None + self._notify_transferred_bytes_handler = None + + self.connect('popup', self.__popup_cb) + self.connect('popdown', self.__popdown_cb) + + def __popup_cb(self, palette): + self.update_progress() + self._notify_transferred_bytes_handler = \ + self.file_transfer.connect('notify::transferred_bytes', + self.__notify_transferred_bytes_cb) + + def __popdown_cb(self, palette): + if self._notify_transferred_bytes_handler is not None: + self.file_transfer.disconnect( + self._notify_transferred_bytes_handler) + self._notify_transferred_bytes_handler = None + + def __notify_transferred_bytes_cb(self, file_transfer, pspec): + self.update_progress() + + def _format_size(self, size): + if size < 1024: + return _('%dB') % size + elif size < 1048576: + return _('%dKB') % (size / 1024) + else: + return _('%dMB') % (size / 1048576) + + def update_progress(self): + logging.debug('update_progress: %r', + self.file_transfer.props.transferred_bytes) + + if self.progress_bar is None: + return + + self.progress_bar.props.fraction = \ + self.file_transfer.props.transferred_bytes / \ + float(self.file_transfer.file_size) + logging.debug('update_progress: %r', self.progress_bar.props.fraction) + + transferred = self._format_size( + self.file_transfer.props.transferred_bytes) + total = self._format_size(self.file_transfer.file_size) + # TRANS: file transfer, bytes transferred, e.g. 128 of 1024 + self.progress_label.props.label = _('%s of %s') % (transferred, total) + + +class IncomingTransferPalette(BaseTransferPalette): + """Palette for frame or notification icon for incoming file transfers + """ + __gtype_name__ = 'SugarIncomingTransferPalette' + + def __init__(self, file_transfer): + BaseTransferPalette.__init__(self, file_transfer) + + self.file_transfer.connect('notify::state', self.__notify_state_cb) + + nick = str(self.file_transfer.buddy.props.nick) + label = glib.markup_escape_text(_('Transfer from %s') % (nick,)) + self.props.secondary_text = label + + self._update() + + def __notify_state_cb(self, file_transfer, pspec): + self._update() + + def _update(self): + logging.debug('_update state: %r', self.file_transfer.props.state) + if self.file_transfer.props.state == filetransfer.FT_STATE_PENDING: + menu_item = MenuItem(_('Accept'), icon_name='dialog-ok') + menu_item.connect('activate', self.__accept_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + menu_item = MenuItem(_('Decline'), icon_name='dialog-cancel') + menu_item.connect('activate', self.__decline_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + vbox = gtk.VBox() + self.set_content(vbox) + vbox.show() + + if self.file_transfer.description: + label = gtk.Label(self.file_transfer.description) + vbox.add(label) + label.show() + + mime_type = self.file_transfer.mime_type + type_description = mime.get_mime_description(mime_type) + + size = self._format_size(self.file_transfer.file_size) + label = gtk.Label('%s (%s)' % (size, type_description)) + vbox.add(label) + label.show() + + elif self.file_transfer.props.state in \ + [filetransfer.FT_STATE_ACCEPTED, filetransfer.FT_STATE_OPEN]: + + for item in self.menu.get_children(): + self.menu.remove(item) + + menu_item = MenuItem(_('Cancel'), icon_name='dialog-cancel') + menu_item.connect('activate', self.__cancel_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + vbox = gtk.VBox() + self.set_content(vbox) + vbox.show() + + self.progress_bar = gtk.ProgressBar() + vbox.add(self.progress_bar) + self.progress_bar.show() + + self.progress_label = gtk.Label('') + vbox.add(self.progress_label) + self.progress_label.show() + + self.update_progress() + + elif self.file_transfer.props.state == filetransfer.FT_STATE_COMPLETED: + + for item in self.menu.get_children(): + self.menu.remove(item) + + menu_item = MenuItem(_('Dismiss'), icon_name='dialog-cancel') + menu_item.connect('activate', self.__dismiss_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + self.update_progress() + elif self.file_transfer.props.state == filetransfer.FT_STATE_CANCELLED: + + for item in self.menu.get_children(): + self.menu.remove(item) + + if self.file_transfer.reason_last_change == \ + filetransfer.FT_REASON_REMOTE_STOPPED: + menu_item = MenuItem(_('Dismiss'), icon_name='dialog-cancel') + menu_item.connect('activate', self.__dismiss_activate_cb) + self.menu.append(menu_item) + menu_item.show() + text = _('The other participant canceled the file transfer') + label = gtk.Label(text) + self.set_content(label) + label.show() + + def __accept_activate_cb(self, menu_item): + #TODO: figure out the best place to get rid of that temp file + extension = mime.get_primary_extension(self.file_transfer.mime_type) + if extension is None: + extension = '.bin' + fd, file_path = tempfile.mkstemp(suffix=extension, + prefix=self._sanitize(self.file_transfer.title), + dir=os.path.join(env.get_profile_path(), 'data')) + os.close(fd) + os.unlink(file_path) + + self.file_transfer.accept(file_path) + + def _sanitize(self, file_name): + file_name = file_name.replace('/', '_') + file_name = file_name.replace('.', '_') + file_name = file_name.replace('?', '_') + return file_name + + def __decline_activate_cb(self, menu_item): + self.file_transfer.cancel() + + def __cancel_activate_cb(self, menu_item): + self.file_transfer.cancel() + + def __dismiss_activate_cb(self, menu_item): + self.emit('dismiss-clicked') + + +class OutgoingTransferPalette(BaseTransferPalette): + """Palette for frame or notification icon for outgoing file transfers + """ + __gtype_name__ = 'SugarOutgoingTransferPalette' + + def __init__(self, file_transfer): + BaseTransferPalette.__init__(self, file_transfer) + + self.progress_bar = None + self.progress_label = None + + self.file_transfer.connect('notify::state', self.__notify_state_cb) + + nick = str(file_transfer.buddy.props.nick) + label = glib.markup_escape_text(_('Transfer to %s') % (nick,)) + self.props.secondary_text = label + + self._update() + + def __notify_state_cb(self, file_transfer, pspec): + self._update() + + def _update(self): + new_state = self.file_transfer.props.state + logging.debug('_update state: %r', new_state) + if new_state == filetransfer.FT_STATE_PENDING: + + menu_item = MenuItem(_('Cancel'), icon_name='dialog-cancel') + menu_item.connect('activate', self.__cancel_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + vbox = gtk.VBox() + self.set_content(vbox) + vbox.show() + + if self.file_transfer.description: + label = gtk.Label(self.file_transfer.description) + vbox.add(label) + label.show() + + mime_type = self.file_transfer.mime_type + type_description = mime.get_mime_description(mime_type) + + size = self._format_size(self.file_transfer.file_size) + label = gtk.Label('%s (%s)' % (size, type_description)) + vbox.add(label) + label.show() + + elif new_state in [filetransfer.FT_STATE_ACCEPTED, + filetransfer.FT_STATE_OPEN]: + + for item in self.menu.get_children(): + self.menu.remove(item) + + menu_item = MenuItem(_('Cancel'), icon_name='dialog-cancel') + menu_item.connect('activate', self.__cancel_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + vbox = gtk.VBox() + self.set_content(vbox) + vbox.show() + + self.progress_bar = gtk.ProgressBar() + vbox.add(self.progress_bar) + self.progress_bar.show() + + self.progress_label = gtk.Label('') + vbox.add(self.progress_label) + self.progress_label.show() + + self.update_progress() + + elif new_state in [filetransfer.FT_STATE_COMPLETED, + filetransfer.FT_STATE_CANCELLED]: + + for item in self.menu.get_children(): + self.menu.remove(item) + + menu_item = MenuItem(_('Dismiss'), icon_name='dialog-cancel') + menu_item.connect('activate', self.__dismiss_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + self.update_progress() + + def __cancel_activate_cb(self, menu_item): + self.file_transfer.cancel() + + def __dismiss_activate_cb(self, menu_item): + self.emit('dismiss-clicked') diff --git a/src/jarabe/frame/clipboard.py b/src/jarabe/frame/clipboard.py new file mode 100644 index 0000000..a09ac5b --- /dev/null +++ b/src/jarabe/frame/clipboard.py @@ -0,0 +1,178 @@ +# Copyright (C) 2006, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +import os +import shutil +import urlparse +import tempfile + +import gobject +import gtk + +from sugar import mime + +from jarabe.frame.clipboardobject import ClipboardObject, Format + + +_instance = None + + +class Clipboard(gobject.GObject): + + __gsignals__ = { + 'object-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + 'object-deleted': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([long])), + 'object-selected': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([long])), + 'object-state-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + } + + def __init__(self): + gobject.GObject.__init__(self) + + self._objects = {} + self._next_id = 0 + + def _get_next_object_id(self): + self._next_id += 1 + return self._next_id + + def add_object(self, name, data_hash=None): + """ Add a object to the clipboard + + Keyword arguments: + name -- object name + data_hash -- hash to check if the object is already + in the clipboard, generated with hash() + over the data to be added + + Return: object_id or None if the object is not added + + """ + logging.debug('Clipboard.add_object: hash %s', data_hash) + if data_hash is None: + object_id = self._get_next_object_id() + else: + object_id = data_hash + if object_id in self._objects: + logging.debug('Clipboard.add_object: object already in clipboard,' + ' selecting previous entry instead') + self.emit('object-selected', object_id) + return None + self._objects[object_id] = ClipboardObject(object_id, name) + self.emit('object-added', self._objects[object_id]) + return object_id + + def add_object_format(self, object_id, format_type, data, on_disk): + logging.debug('Clipboard.add_object_format') + cb_object = self._objects[object_id] + + if format_type == 'XdndDirectSave0': + format_ = Format('text/uri-list', data + '\r\n', on_disk) + format_.owns_disk_data = True + cb_object.add_format(format_) + elif on_disk and cb_object.get_percent() == 100: + new_uri = self._copy_file(data) + cb_object.add_format(Format(format_type, new_uri, on_disk)) + logging.debug('Added format of type ' + format_type + + ' with path at ' + new_uri) + else: + cb_object.add_format(Format(format_type, data, on_disk)) + logging.debug('Added in-memory format of type %s.', format_type) + + self.emit('object-state-changed', cb_object) + + def delete_object(self, object_id): + cb_object = self._objects.pop(object_id) + cb_object.destroy() + if not self._objects: + gtk_clipboard = gtk.Clipboard() + gtk_clipboard.clear() + self.emit('object-deleted', object_id) + logging.debug('Deleted object with object_id %r', object_id) + + def set_object_percent(self, object_id, percent): + cb_object = self._objects[object_id] + if percent < 0 or percent > 100: + raise ValueError('invalid percentage') + if cb_object.get_percent() > percent: + raise ValueError('invalid percentage; less than current percent') + if cb_object.get_percent() == percent: + # ignore setting same percentage + return + + cb_object.set_percent(percent) + + if percent == 100: + self._process_object(cb_object) + + self.emit('object-state-changed', cb_object) + + def _process_object(self, cb_object): + formats = cb_object.get_formats() + for format_name, format_ in formats.iteritems(): + if format_.is_on_disk() and not format_.owns_disk_data: + new_uri = self._copy_file(format_.get_data()) + format_.set_data(new_uri) + + # Add a text/plain format to objects that are text but lack it + if 'text/plain' not in formats.keys(): + if 'UTF8_STRING' in formats.keys(): + self.add_object_format( + cb_object.get_id(), 'text/plain', + data=formats['UTF8_STRING'].get_data(), on_disk=False) + elif 'text/unicode' in formats.keys(): + self.add_object_format( + cb_object.get_id(), 'text/plain', + data=formats['UTF8_STRING'].get_data(), on_disk=False) + + def get_object(self, object_id): + logging.debug('Clipboard.get_object') + return self._objects[object_id] + + def get_object_data(self, object_id, format_type): + logging.debug('Clipboard.get_object_data') + cb_object = self._objects[object_id] + format_ = cb_object.get_formats()[format_type] + return format_ + + def _copy_file(self, original_uri): + uri = urlparse.urlparse(original_uri) + path = uri.path # pylint: disable=E1101 + directory_, file_name = os.path.split(path) + + root, ext = os.path.splitext(file_name) + if not ext or ext == '.': + mime_type = mime.get_for_file(path) + ext = '.' + mime.get_primary_extension(mime_type) + + f_, new_file_path = tempfile.mkstemp(ext, root) + del f_ + shutil.copyfile(path, new_file_path) + os.chmod(new_file_path, 0644) + + return 'file://' + new_file_path + + +def get_instance(): + global _instance + if not _instance: + _instance = Clipboard() + return _instance diff --git a/src/jarabe/frame/clipboardicon.py b/src/jarabe/frame/clipboardicon.py new file mode 100644 index 0000000..315cdaa --- /dev/null +++ b/src/jarabe/frame/clipboardicon.py @@ -0,0 +1,170 @@ +# Copyright (C) 2007, Red Hat, Inc. +# Copyright (C) 2007, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +import gconf + +import gtk + +from sugar.graphics.radiotoolbutton import RadioToolButton +from sugar.graphics.icon import Icon +from sugar.graphics.xocolor import XoColor +from sugar.graphics import style + +from jarabe.frame import clipboard +from jarabe.frame.clipboardmenu import ClipboardMenu +from jarabe.frame.frameinvoker import FrameWidgetInvoker +from jarabe.frame.notification import NotificationIcon +import jarabe.frame + + +class ClipboardIcon(RadioToolButton): + __gtype_name__ = 'SugarClipboardIcon' + + def __init__(self, cb_object, group): + RadioToolButton.__init__(self, group=group) + + self.props.palette_invoker = FrameWidgetInvoker(self) + + self._cb_object = cb_object + self.owns_clipboard = False + self.props.sensitive = False + self.props.active = False + self._notif_icon = None + self._current_percent = None + + self._icon = Icon() + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + self._icon.props.xo_color = color + self.set_icon_widget(self._icon) + self._icon.show() + + cb_service = clipboard.get_instance() + cb_service.connect('object-state-changed', + self._object_state_changed_cb) + cb_service.connect('object-selected', self._object_selected_cb) + + child = self.get_child() + child.connect('drag_data_get', self._drag_data_get_cb) + self.connect('notify::active', self._notify_active_cb) + + def create_palette(self): + palette = ClipboardMenu(self._cb_object) + palette.set_group_id('frame') + return palette + + def get_object_id(self): + return self._cb_object.get_id() + + def _drag_data_get_cb(self, widget, context, selection, target_type, + event_time): + logging.debug('_drag_data_get_cb: requested target %s', + selection.target) + data = self._cb_object.get_formats()[selection.target].get_data() + selection.set(selection.target, 8, data) + + def _put_in_clipboard(self): + logging.debug('ClipboardIcon._put_in_clipboard') + + if self._cb_object.get_percent() < 100: + raise ValueError('Object is not complete, cannot be put into the' + ' clipboard.') + + targets = self._get_targets() + if targets: + x_clipboard = gtk.Clipboard() + if not x_clipboard.set_with_data(targets, + self._clipboard_data_get_cb, + self._clipboard_clear_cb, + targets): + logging.error('GtkClipboard.set_with_data failed!') + else: + self.owns_clipboard = True + + def _clipboard_data_get_cb(self, x_clipboard, selection, info, targets): + if not selection.target in [target[0] for target in targets]: + logging.warning('ClipboardIcon._clipboard_data_get_cb: asked %s' \ + ' but only have %r.', selection.target, targets) + return + data = self._cb_object.get_formats()[selection.target].get_data() + selection.set(selection.target, 8, data) + + def _clipboard_clear_cb(self, x_clipboard, targets): + logging.debug('ClipboardIcon._clipboard_clear_cb') + self.owns_clipboard = False + + def _object_state_changed_cb(self, cb_service, cb_object): + if cb_object != self._cb_object: + return + + if cb_object.get_icon(): + self._icon.props.icon_name = cb_object.get_icon() + else: + self._icon.props.icon_name = 'application-octet-stream' + + child = self.get_child() + child.connect('drag-begin', self._drag_begin_cb) + child.drag_source_set(gtk.gdk.BUTTON1_MASK, + self._get_targets(), + gtk.gdk.ACTION_COPY) + + if cb_object.get_percent() == 100: + self.props.sensitive = True + + # Clipboard object became complete. Make it the active one. + if self._current_percent < 100 and cb_object.get_percent() == 100: + self.props.active = True + self.show_notification() + + self._current_percent = cb_object.get_percent() + + def _object_selected_cb(self, cb_service, object_id): + if object_id != self._cb_object.get_id(): + return + self.props.active = True + self.show_notification() + logging.debug('ClipboardIcon: %r was selected', object_id) + + def show_notification(self): + self._notif_icon = NotificationIcon() + self._notif_icon.props.icon_name = self._icon.props.icon_name + self._notif_icon.props.xo_color = \ + XoColor('%s,%s' % (self._icon.props.stroke_color, + self._icon.props.fill_color)) + frame = jarabe.frame.get_view() + frame.add_notification(self._notif_icon, gtk.CORNER_BOTTOM_LEFT) + + def _drag_begin_cb(self, widget, context): + # TODO: We should get the pixbuf from the icon, with colors, etc. + icon_theme = gtk.icon_theme_get_default() + pixbuf = icon_theme.load_icon(self._icon.props.icon_name, + style.STANDARD_ICON_SIZE, 0) + context.set_icon_pixbuf(pixbuf, hot_x=pixbuf.props.width / 2, + hot_y=pixbuf.props.height / 2) + + def _notify_active_cb(self, widget, pspec): + if self.props.active: + self._put_in_clipboard() + else: + self.owns_clipboard = False + + def _get_targets(self): + targets = [] + for format_type in self._cb_object.get_formats().keys(): + targets.append((format_type, 0, 0)) + return targets diff --git a/src/jarabe/frame/clipboardmenu.py b/src/jarabe/frame/clipboardmenu.py new file mode 100644 index 0000000..4c077d9 --- /dev/null +++ b/src/jarabe/frame/clipboardmenu.py @@ -0,0 +1,256 @@ +# Copyright (C) 2007, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +import tempfile +import urlparse +import os +import logging +import gconf +import glib + +import gtk + +from sugar.graphics.palette import Palette +from sugar.graphics.menuitem import MenuItem +from sugar.graphics.icon import Icon +from sugar.graphics.xocolor import XoColor +from sugar.datastore import datastore +from sugar import mime +from sugar import env +from sugar.activity.i18n import pgettext + +from jarabe.frame import clipboard +from jarabe.journal import misc +from jarabe.model import bundleregistry + + +class ClipboardMenu(Palette): + + def __init__(self, cb_object): + Palette.__init__(self, text_maxlen=100) + + self._cb_object = cb_object + + self.set_group_id('frame') + + cb_service = clipboard.get_instance() + cb_service.connect('object-state-changed', + self._object_state_changed_cb) + + self._progress_bar = None + + self._remove_item = MenuItem(pgettext('Clipboard', 'Remove'), + 'list-remove') + self._remove_item.connect('activate', self._remove_item_activate_cb) + self.menu.append(self._remove_item) + self._remove_item.show() + + self._open_item = MenuItem(_('Open'), 'zoom-activity') + self._open_item.connect('activate', self._open_item_activate_cb) + self.menu.append(self._open_item) + self._open_item.show() + + self._journal_item = MenuItem(_('Keep')) + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + icon = Icon(icon_name='document-save', icon_size=gtk.ICON_SIZE_MENU, + xo_color=color) + self._journal_item.set_image(icon) + + self._journal_item.connect('activate', self._journal_item_activate_cb) + self.menu.append(self._journal_item) + self._journal_item.show() + + self._update() + + def _update_open_submenu(self): + activities = self._get_activities() + logging.debug('_update_open_submenu: %r', activities) + child = self._open_item.get_child() + if activities is None or len(activities) <= 1: + child.set_text(_('Open')) + if self._open_item.get_submenu() is not None: + self._open_item.remove_submenu() + return + + child.set_text(_('Open with')) + submenu = self._open_item.get_submenu() + if submenu is None: + submenu = gtk.Menu() + self._open_item.set_submenu(submenu) + submenu.show() + else: + for item in submenu.get_children(): + submenu.remove(item) + + for service_name in activities: + registry = bundleregistry.get_registry() + activity_info = registry.get_bundle(service_name) + + if not activity_info: + logging.warning('Activity %s is unknown.', service_name) + + item = gtk.MenuItem(activity_info.get_name()) + item.connect('activate', self._open_submenu_item_activate_cb, + service_name) + submenu.append(item) + item.show() + + def _update_items_visibility(self): + activities = self._get_activities() + installable = self._cb_object.is_bundle() + percent = self._cb_object.get_percent() + + if percent == 100 and (activities or installable): + self._remove_item.props.sensitive = True + self._open_item.props.sensitive = True + self._journal_item.props.sensitive = True + elif percent == 100 and (not activities and not installable): + self._remove_item.props.sensitive = True + self._open_item.props.sensitive = False + self._journal_item.props.sensitive = True + else: + self._remove_item.props.sensitive = True + self._open_item.props.sensitive = False + self._journal_item.props.sensitive = False + + self._update_progress_bar() + + def _get_activities(self): + mime_type = self._cb_object.get_mime_type() + if not mime_type: + return '' + + registry = bundleregistry.get_registry() + activities = registry.get_activities_for_type(mime_type) + if activities: + return [info.get_bundle_id() for info in activities] + else: + return '' + + def _update_progress_bar(self): + percent = self._cb_object.get_percent() + if percent == 100.0: + if self._progress_bar: + self._progress_bar = None + self.set_content(None) + else: + if self._progress_bar is None: + self._progress_bar = gtk.ProgressBar() + self._progress_bar.show() + self.set_content(self._progress_bar) + + self._progress_bar.props.fraction = percent / 100.0 + self._progress_bar.props.text = '%.2f %%' % percent + + def _object_state_changed_cb(self, cb_service, cb_object): + if cb_object != self._cb_object: + return + self._update() + + def _update(self): + name = self._cb_object.get_name() + self.props.primary_text = glib.markup_escape_text(name) + preview = self._cb_object.get_preview() + if preview: + self.props.secondary_text = glib.markup_escape_text(preview) + self._update_progress_bar() + self._update_items_visibility() + self._update_open_submenu() + + def _open_item_activate_cb(self, menu_item): + logging.debug('_open_item_activate_cb') + percent = self._cb_object.get_percent() + if percent < 100 or menu_item.get_submenu() is not None: + return + jobject = self._copy_to_journal() + misc.resume(jobject.metadata, self._get_activities()[0]) + jobject.destroy() + + def _open_submenu_item_activate_cb(self, menu_item, service_name): + logging.debug('_open_submenu_item_activate_cb') + percent = self._cb_object.get_percent() + if percent < 100: + return + jobject = self._copy_to_journal() + misc.resume(jobject.metadata, service_name) + jobject.destroy() + + def _remove_item_activate_cb(self, menu_item): + cb_service = clipboard.get_instance() + cb_service.delete_object(self._cb_object.get_id()) + + def _journal_item_activate_cb(self, menu_item): + logging.debug('_journal_item_activate_cb') + jobject = self._copy_to_journal() + jobject.destroy() + + def _write_to_temp_file(self, data): + tmp_dir = os.path.join(env.get_profile_path(), 'data') + f, file_path = tempfile.mkstemp(dir=tmp_dir) + try: + os.write(f, data) + finally: + os.close(f) + return file_path + + def _copy_to_journal(self): + formats = self._cb_object.get_formats().keys() + most_significant_mime_type = mime.choose_most_significant(formats) + format_ = self._cb_object.get_formats()[most_significant_mime_type] + + transfer_ownership = False + if most_significant_mime_type == 'text/uri-list': + uris = mime.split_uri_list(format_.get_data()) + if len(uris) == 1 and uris[0].startswith('file://'): + parsed_url = urlparse.urlparse(uris[0]) + file_path = parsed_url.path # pylint: disable=E1101 + transfer_ownership = False + mime_type = mime.get_for_file(file_path) + else: + file_path = self._write_to_temp_file(format_.get_data()) + transfer_ownership = True + mime_type = 'text/uri-list' + else: + if format_.is_on_disk(): + parsed_url = urlparse.urlparse(format_.get_data()) + file_path = parsed_url.path # pylint: disable=E1101 + transfer_ownership = False + mime_type = mime.get_for_file(file_path) + else: + file_path = self._write_to_temp_file(format_.get_data()) + transfer_ownership = True + sniffed_mime_type = mime.get_for_file(file_path) + if sniffed_mime_type == 'application/octet-stream': + mime_type = most_significant_mime_type + else: + mime_type = sniffed_mime_type + + jobject = datastore.create() + jobject.metadata['title'] = self._cb_object.get_name() + jobject.metadata['keep'] = '0' + jobject.metadata['buddies'] = '' + jobject.metadata['preview'] = '' + client = gconf.client_get_default() + color = client.get_string('/desktop/sugar/user/color') + jobject.metadata['icon-color'] = color + jobject.metadata['mime_type'] = mime_type + jobject.file_path = file_path + + datastore.write(jobject, transfer_ownership=transfer_ownership) + + return jobject diff --git a/src/jarabe/frame/clipboardobject.py b/src/jarabe/frame/clipboardobject.py new file mode 100644 index 0000000..407af2f --- /dev/null +++ b/src/jarabe/frame/clipboardobject.py @@ -0,0 +1,147 @@ +# Copyright (C) 2007, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import logging +import urlparse +import gio +import gtk + +from gettext import gettext as _ +from sugar import mime +from sugar.bundle.activitybundle import ActivityBundle + + +class ClipboardObject(object): + + def __init__(self, object_path, name): + self._id = object_path + self._name = name + self._percent = 0 + self._formats = {} + + def destroy(self): + for format_ in self._formats.itervalues(): + format_.destroy() + + def get_id(self): + return self._id + + def get_name(self): + name = self._name + if not name: + mime_type = mime.get_mime_description(self.get_mime_type()) + + if not mime_type: + mime_type = 'Data' + name = _('%s clipping') % mime_type + + return name + + def get_icon(self): + mime_type = self.get_mime_type() + + generic_types = mime.get_all_generic_types() + for generic_type in generic_types: + if mime_type in generic_type.mime_types: + return generic_type.icon + + icons = gio.content_type_get_icon(mime_type) + icon_name = None + if icons is not None: + icon_theme = gtk.icon_theme_get_default() + for icon_name in icons.props.names: + icon_info = icon_theme.lookup_icon(icon_name, + gtk.ICON_SIZE_LARGE_TOOLBAR, 0) + if icon_info is not None: + icon_info.free() + return icon_name + + return 'application-octet-stream' + + def get_preview(self): + for mime_type in ['text/plain']: + if mime_type in self._formats: + return self._formats[mime_type].get_data() + return '' + + def is_bundle(self): + # A bundle will have only one format. + if not self._formats: + return False + else: + return self._formats.keys()[0] in [ActivityBundle.MIME_TYPE, + ActivityBundle.DEPRECATED_MIME_TYPE] + + def get_percent(self): + return self._percent + + def set_percent(self, percent): + self._percent = percent + + def add_format(self, format_): + self._formats[format_.get_type()] = format_ + + def get_formats(self): + return self._formats + + def get_mime_type(self): + if not self._formats: + return '' + + format_ = mime.choose_most_significant(self._formats.keys()) + if format_ == 'text/uri-list': + data = self._formats['text/uri-list'].get_data() + uri = urlparse.urlparse(mime.split_uri_list(data)[0], 'file') + scheme = uri.scheme # pylint: disable=E1101 + if scheme == 'file': + path = uri.path # pylint: disable=E1101 + if os.path.exists(path): + format_ = mime.get_for_file(path) + else: + format_ = mime.get_from_file_name(path) + logging.debug('Chose %r!', format_) + + return format_ + + +class Format(object): + + def __init__(self, mime_type, data, on_disk): + self.owns_disk_data = False + + self._type = mime_type + self._data = data + self._on_disk = on_disk + + def destroy(self): + if self._on_disk: + uri = urlparse.urlparse(self._data) + path = uri.path # pylint: disable=E1101 + if os.path.isfile(path): + os.remove(path) + + def get_type(self): + return self._type + + def get_data(self): + return self._data + + def set_data(self, data): + self._data = data + + def is_on_disk(self): + return self._on_disk diff --git a/src/jarabe/frame/clipboardpanelwindow.py b/src/jarabe/frame/clipboardpanelwindow.py new file mode 100644 index 0000000..6811c0d --- /dev/null +++ b/src/jarabe/frame/clipboardpanelwindow.py @@ -0,0 +1,140 @@ +# Copyright (C) 2007, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from urlparse import urlparse +import hashlib + +import gtk + +from jarabe.frame.framewindow import FrameWindow +from jarabe.frame.clipboardtray import ClipboardTray + +from jarabe.frame import clipboard + + +class ClipboardPanelWindow(FrameWindow): + def __init__(self, frame, orientation): + FrameWindow.__init__(self, orientation) + + self._frame = frame + + # Listening for new clipboard objects + # NOTE: we need to keep a reference to gtk.Clipboard in order to keep + # listening to it. + self._clipboard = gtk.Clipboard() + self._clipboard.connect('owner-change', self._owner_change_cb) + + self._clipboard_tray = ClipboardTray() + self._clipboard_tray.show() + self.append(self._clipboard_tray) + + # Receiving dnd drops + self.drag_dest_set(0, [], 0) + self.connect('drag_motion', self._clipboard_tray.drag_motion_cb) + self.connect('drag_leave', self._clipboard_tray.drag_leave_cb) + self.connect('drag_drop', self._clipboard_tray.drag_drop_cb) + self.connect('drag_data_received', + self._clipboard_tray.drag_data_received_cb) + + def _owner_change_cb(self, x_clipboard, event): + logging.debug('owner_change_cb') + + if self._clipboard_tray.owns_clipboard(): + return + + cb_service = clipboard.get_instance() + + targets = x_clipboard.wait_for_targets() + cb_selections = [] + if targets is None: + return + + target_is_uri = False + for target in targets: + if target not in ('TIMESTAMP', 'TARGETS', + 'MULTIPLE', 'SAVE_TARGETS'): + logging.debug('Asking for target %s.', target) + if target == 'text/uri-list': + target_is_uri = True + + selection = x_clipboard.wait_for_contents(target) + if not selection: + logging.warning('no data for selection target %s.', target) + continue + cb_selections.append(selection) + + if target_is_uri: + uri = selection.data + filename = uri[len('file://'):].strip() + md5 = self._md5_for_file(filename) + data_hash = hash(md5) + else: + data_hash = hash(selection.data) + + if len(cb_selections) > 0: + key = cb_service.add_object(name="", data_hash=data_hash) + if key is None: + return + cb_service.set_object_percent(key, percent=0) + for selection in cb_selections: + self._add_selection(key, selection) + cb_service.set_object_percent(key, percent=100) + + def _md5_for_file(self, file_name): + '''Calculate md5 for file data + + Calculating block wise to prevent issues with big files in memory + ''' + block_size = 8192 + md5 = hashlib.md5() + f = open(file_name, 'r') + while True: + data = f.read(block_size) + if not data: + break + md5.update(data) + f.close() + return md5.digest() + + def _add_selection(self, key, selection): + if not selection.data: + logging.warning('no data for selection target %s.', selection.type) + return + + logging.debug('adding type ' + selection.type + '.') + + cb_service = clipboard.get_instance() + if selection.type == 'text/uri-list': + uris = selection.get_uris() + + if len(uris) > 1: + raise NotImplementedError('Multiple uris in text/uri-list' \ + ' still not supported.') + uri = uris[0] + scheme, netloc_, path_, parameters_, query_, fragment_ = \ + urlparse(uri) + on_disk = (scheme == 'file') + + cb_service.add_object_format(key, + selection.type, + uri, + on_disk) + else: + cb_service.add_object_format(key, + selection.type, + selection.data, + on_disk=False) diff --git a/src/jarabe/frame/clipboardtray.py b/src/jarabe/frame/clipboardtray.py new file mode 100644 index 0000000..37d5e1a --- /dev/null +++ b/src/jarabe/frame/clipboardtray.py @@ -0,0 +1,223 @@ +# Copyright (C) 2007, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import logging +import tempfile + +import gtk + +from sugar import util +from sugar.graphics import tray +from sugar.graphics import style + +from jarabe.frame import clipboard +from jarabe.frame.clipboardicon import ClipboardIcon + + +class _ContextMap(object): + """Maps a drag context to the clipboard object involved in the dragging.""" + def __init__(self): + self._context_map = {} + + def add_context(self, context, object_id, data_types): + """Establishes the mapping. data_types will serve us for reference- + counting this mapping. + """ + self._context_map[context] = [object_id, data_types] + + def get_object_id(self, context): + """Retrieves the object_id associated with context. + Will release the association when this function was called as many + times as the number of data_types that this clipboard object contains. + """ + [object_id, data_types_left] = self._context_map[context] + + data_types_left = data_types_left - 1 + if data_types_left == 0: + del self._context_map[context] + else: + self._context_map[context] = [object_id, data_types_left] + + return object_id + + def has_context(self, context): + return context in self._context_map + + +class ClipboardTray(tray.VTray): + + MAX_ITEMS = gtk.gdk.screen_height() / style.GRID_CELL_SIZE - 2 + + def __init__(self): + tray.VTray.__init__(self, align=tray.ALIGN_TO_END) + self._icons = {} + self._context_map = _ContextMap() + + cb_service = clipboard.get_instance() + cb_service.connect('object-added', self._object_added_cb) + cb_service.connect('object-deleted', self._object_deleted_cb) + + def owns_clipboard(self): + for icon in self._icons.values(): + if icon.owns_clipboard: + return True + return False + + def _add_selection(self, object_id, selection): + if not selection.data: + return + + logging.debug('ClipboardTray: adding type %r', selection.type) + + cb_service = clipboard.get_instance() + if selection.type == 'text/uri-list': + uris = selection.data.split('\n') + if len(uris) > 1: + raise NotImplementedError('Multiple uris in text/uri-list' \ + ' still not supported.') + + cb_service.add_object_format(object_id, + selection.type, + uris[0], + on_disk=True) + else: + cb_service.add_object_format(object_id, + selection.type, + selection.data, + on_disk=False) + + def _object_added_cb(self, cb_service, cb_object): + if self._icons: + group = self._icons.values()[0] + else: + group = None + + icon = ClipboardIcon(cb_object, group) + self.add_item(icon) + icon.show() + self._icons[cb_object.get_id()] = icon + + objects_to_delete = self.get_children()[:-self.MAX_ITEMS] + for icon in objects_to_delete: + logging.debug('ClipboardTray: deleting surplus object') + cb_service = clipboard.get_instance() + cb_service.delete_object(icon.get_object_id()) + + logging.debug('ClipboardTray: %r was added', cb_object.get_id()) + + def _object_deleted_cb(self, cb_service, object_id): + icon = self._icons[object_id] + self.remove_item(icon) + del self._icons[object_id] + # select the last available icon + if self._icons: + last_icon = self.get_children()[-1] + last_icon.props.active = True + + logging.debug('ClipboardTray: %r was deleted', object_id) + + def drag_motion_cb(self, widget, context, x, y, time): + logging.debug('ClipboardTray._drag_motion_cb') + + if self._internal_drag(context): + context.drag_status(gtk.gdk.ACTION_MOVE, time) + else: + context.drag_status(gtk.gdk.ACTION_COPY, time) + self.props.drag_active = True + + return True + + def drag_leave_cb(self, widget, context, time): + self.props.drag_active = False + + def drag_drop_cb(self, widget, context, x, y, time): + logging.debug('ClipboardTray._drag_drop_cb') + + if self._internal_drag(context): + # TODO: We should move the object within the clipboard here + if not self._context_map.has_context(context): + context.drop_finish(False, gtk.get_current_event_time()) + return False + + cb_service = clipboard.get_instance() + object_id = cb_service.add_object(name="") + + self._context_map.add_context(context, object_id, len(context.targets)) + + if 'XdndDirectSave0' in context.targets: + window = context.source_window + prop_type, format_, filename = \ + window.property_get('XdndDirectSave0', 'text/plain') + + # FIXME query the clipboard service for a filename? + base_dir = tempfile.gettempdir() + dest_filename = util.unique_id() + + name_, dot, extension = filename.rpartition('.') + dest_filename += dot + extension + + dest_uri = 'file://' + os.path.join(base_dir, dest_filename) + + window.property_change('XdndDirectSave0', prop_type, format_, + gtk.gdk.PROP_MODE_REPLACE, dest_uri) + + widget.drag_get_data(context, 'XdndDirectSave0', time) + else: + for target in context.targets: + if str(target) not in ('TIMESTAMP', 'TARGETS', 'MULTIPLE'): + widget.drag_get_data(context, target, time) + + cb_service.set_object_percent(object_id, percent=100) + + return True + + def drag_data_received_cb(self, widget, context, x, y, selection, + targetType, time): + logging.debug('ClipboardTray: got data for target %r', + selection.target) + + object_id = self._context_map.get_object_id(context) + try: + if selection is None: + logging.warn('ClipboardTray: empty selection for target %s', + selection.target) + elif selection.target == 'XdndDirectSave0': + if selection.data == 'S': + window = context.source_window + + prop_type, format_, dest = window.property_get( + 'XdndDirectSave0', 'text/plain') + + clipboardservice = clipboard.get_instance() + clipboardservice.add_object_format(object_id, + 'XdndDirectSave0', + dest, on_disk=True) + else: + self._add_selection(object_id, selection) + + finally: + # If it's the last target to be processed, finish + # the dnd transaction + if not self._context_map.has_context(context): + context.drop_finish(True, gtk.get_current_event_time()) + + def _internal_drag(self, context): + view_ancestor = context.get_source_widget().get_ancestor(gtk.Viewport) + if view_ancestor is self._viewport: + return True + else: + return False diff --git a/src/jarabe/frame/devicestray.py b/src/jarabe/frame/devicestray.py new file mode 100644 index 0000000..c5db639 --- /dev/null +++ b/src/jarabe/frame/devicestray.py @@ -0,0 +1,53 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import logging + +from sugar.graphics import tray + +from jarabe import config + + +class DevicesTray(tray.HTray): + def __init__(self): + tray.HTray.__init__(self, align=tray.ALIGN_TO_END) + + for f in os.listdir(os.path.join(config.ext_path, 'deviceicon')): + if f.endswith('.py') and not f.startswith('__'): + module_name = f[:-3] + try: + mod = __import__('deviceicon.' + module_name, globals(), + locals(), [module_name]) + mod.setup(self) + except Exception: + logging.exception('Exception while loading extension:') + + def add_device(self, view): + index = 0 + relative_index = getattr(view, 'FRAME_POSITION_RELATIVE', -1) + for item in self.get_children(): + current_relative_index = getattr(item, 'FRAME_POSITION_RELATIVE', + 0) + if current_relative_index >= relative_index: + index += 1 + else: + break + self.add_item(view, index=index) + view.show() + + def remove_device(self, view): + self.remove_item(view) diff --git a/src/jarabe/frame/eventarea.py b/src/jarabe/frame/eventarea.py new file mode 100644 index 0000000..1b5bf86 --- /dev/null +++ b/src/jarabe/frame/eventarea.py @@ -0,0 +1,153 @@ +# Copyright (C) 2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +import gobject +import wnck +import gconf + + +_MAX_DELAY = 1000 + + +class EventArea(gobject.GObject): + __gsignals__ = { + 'enter': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + 'leave': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + } + + def __init__(self): + gobject.GObject.__init__(self) + + self._windows = [] + self._hover = False + self._sids = {} + client = gconf.client_get_default() + self._edge_delay = client.get_int('/desktop/sugar/frame/edge_delay') + self._corner_delay = client.get_int('/desktop/sugar/frame' + '/corner_delay') + + right = gtk.gdk.screen_width() - 1 + bottom = gtk.gdk.screen_height() - 1 + width = gtk.gdk.screen_width() - 2 + height = gtk.gdk.screen_height() - 2 + + if self._edge_delay != _MAX_DELAY: + invisible = self._create_invisible(1, 0, width, 1, + self._edge_delay) + self._windows.append(invisible) + + invisible = self._create_invisible(1, bottom, width, 1, + self._edge_delay) + self._windows.append(invisible) + + invisible = self._create_invisible(0, 1, 1, height, + self._edge_delay) + self._windows.append(invisible) + + invisible = self._create_invisible(right, 1, 1, height, + self._edge_delay) + self._windows.append(invisible) + + if self._corner_delay != _MAX_DELAY: + invisible = self._create_invisible(0, 0, 1, 1, + self._corner_delay) + self._windows.append(invisible) + + invisible = self._create_invisible(right, 0, 1, 1, + self._corner_delay) + self._windows.append(invisible) + + invisible = self._create_invisible(0, bottom, 1, 1, + self._corner_delay) + self._windows.append(invisible) + + invisible = self._create_invisible(right, bottom, 1, 1, + self._corner_delay) + self._windows.append(invisible) + + screen = wnck.screen_get_default() + screen.connect('window-stacking-changed', + self._window_stacking_changed_cb) + + def _create_invisible(self, x, y, width, height, delay): + invisible = gtk.Invisible() + if delay >= 0: + invisible.connect('enter-notify-event', self._enter_notify_cb, + delay) + invisible.connect('leave-notify-event', self._leave_notify_cb) + + invisible.drag_dest_set(0, [], 0) + invisible.connect('drag_motion', self._drag_motion_cb) + invisible.connect('drag_leave', self._drag_leave_cb) + + invisible.realize() + # pylint: disable=E1101 + invisible.window.set_events(gtk.gdk.POINTER_MOTION_MASK | + gtk.gdk.ENTER_NOTIFY_MASK | + gtk.gdk.LEAVE_NOTIFY_MASK) + invisible.window.move_resize(x, y, width, height) + + return invisible + + def _notify_enter(self): + if not self._hover: + self._hover = True + self.emit('enter') + + def _notify_leave(self): + if self._hover: + self._hover = False + self.emit('leave') + + def _enter_notify_cb(self, widget, event, delay): + if widget in self._sids: + gobject.source_remove(self._sids[widget]) + self._sids[widget] = gobject.timeout_add(delay, + self.__delay_cb, + widget) + + def __delay_cb(self, widget): + del self._sids[widget] + self._notify_enter() + return False + + def _leave_notify_cb(self, widget, event): + if widget in self._sids: + gobject.source_remove(self._sids[widget]) + del self._sids[widget] + self._notify_leave() + + def _drag_motion_cb(self, widget, drag_context, x, y, timestamp): + drag_context.drag_status(0, timestamp) + self._notify_enter() + return True + + def _drag_leave_cb(self, widget, drag_context, timestamp): + self._notify_leave() + return True + + def show(self): + for window in self._windows: + window.show() + + def hide(self): + for window in self._windows: + window.hide() + + def _window_stacking_changed_cb(self, screen): + for window in self._windows: + window.window.raise_() diff --git a/src/jarabe/frame/frame.py b/src/jarabe/frame/frame.py new file mode 100644 index 0000000..7407e18 --- /dev/null +++ b/src/jarabe/frame/frame.py @@ -0,0 +1,348 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import gtk +import gobject + +from sugar.graphics import animator +from sugar.graphics import style +from sugar.graphics import palettegroup +from sugar import profile + +from jarabe.frame.eventarea import EventArea +from jarabe.frame.activitiestray import ActivitiesTray +from jarabe.frame.zoomtoolbar import ZoomToolbar +from jarabe.frame.friendstray import FriendsTray +from jarabe.frame.devicestray import DevicesTray +from jarabe.frame.framewindow import FrameWindow +from jarabe.frame.clipboardpanelwindow import ClipboardPanelWindow +from jarabe.frame.notification import NotificationIcon, NotificationWindow +from jarabe.model import notifications + + +TOP_RIGHT = 0 +TOP_LEFT = 1 +BOTTOM_RIGHT = 2 +BOTTOM_LEFT = 3 + +_FRAME_HIDING_DELAY = 500 +_NOTIFICATION_DURATION = 5000 + + +class _Animation(animator.Animation): + def __init__(self, frame, end): + start = frame.current_position + animator.Animation.__init__(self, start, end) + self._frame = frame + + def next_frame(self, current): + self._frame.move(current) + + +class _MouseListener(object): + def __init__(self, frame): + self._frame = frame + self._hide_sid = 0 + + def mouse_enter(self): + self._show_frame() + + def mouse_leave(self): + if self._frame.mode == Frame.MODE_MOUSE: + self._hide_frame() + + def _show_frame(self): + if self._hide_sid != 0: + gobject.source_remove(self._hide_sid) + self._frame.show(Frame.MODE_MOUSE) + + def _hide_frame_timeout_cb(self): + self._frame.hide() + return False + + def _hide_frame(self): + if self._hide_sid != 0: + gobject.source_remove(self._hide_sid) + self._hide_sid = gobject.timeout_add( + _FRAME_HIDING_DELAY, self._hide_frame_timeout_cb) + + +class _KeyListener(object): + def __init__(self, frame): + self._frame = frame + + def key_press(self): + if self._frame.visible: + if self._frame.mode == Frame.MODE_KEYBOARD: + self._frame.hide() + else: + self._frame.show(Frame.MODE_KEYBOARD) + + +class Frame(object): + MODE_MOUSE = 0 + MODE_KEYBOARD = 1 + MODE_NON_INTERACTIVE = 2 + + def __init__(self): + logging.debug('STARTUP: Loading the frame') + self.mode = None + + self._palette_group = palettegroup.get_group('frame') + self._palette_group.connect('popdown', self._palette_group_popdown_cb) + + self._left_panel = None + self._right_panel = None + self._top_panel = None + self._bottom_panel = None + + self.current_position = 0.0 + self._animator = None + + self._event_area = EventArea() + self._event_area.connect('enter', self._enter_corner_cb) + self._event_area.show() + + self._top_panel = self._create_top_panel() + self._bottom_panel = self._create_bottom_panel() + self._left_panel = self._create_left_panel() + self._right_panel = self._create_right_panel() + + screen = gtk.gdk.screen_get_default() + screen.connect('size-changed', self._size_changed_cb) + + self._key_listener = _KeyListener(self) + self._mouse_listener = _MouseListener(self) + + self._notif_by_icon = {} + + notification_service = notifications.get_service() + notification_service.notification_received.connect( + self.__notification_received_cb) + notification_service.notification_cancelled.connect( + self.__notification_cancelled_cb) + + def is_visible(self): + return self.current_position != 0.0 + + visible = property(is_visible, None) + + def hide(self): + if self._animator: + self._animator.stop() + + self._animator = animator.Animator(0.5) + self._animator.add(_Animation(self, 0.0)) + self._animator.start() + + self.mode = None + + def show(self, mode): + if self.visible: + return + if self._animator: + self._animator.stop() + + self.mode = mode + + self._animator = animator.Animator(0.5) + self._animator.add(_Animation(self, 1.0)) + self._animator.start() + + def move(self, pos): + self.current_position = pos + self._update_position() + + def _is_hover(self): + return (self._top_panel.hover or \ + self._bottom_panel.hover or \ + self._left_panel.hover or \ + self._right_panel.hover) + + def _create_top_panel(self): + panel = self._create_panel(gtk.POS_TOP) + + zoom_toolbar = ZoomToolbar() + panel.append(zoom_toolbar, expand=False) + zoom_toolbar.show() + + activities_tray = ActivitiesTray() + panel.append(activities_tray) + activities_tray.show() + + return panel + + def _create_bottom_panel(self): + panel = self._create_panel(gtk.POS_BOTTOM) + + devices_tray = DevicesTray() + panel.append(devices_tray) + devices_tray.show() + + return panel + + def _create_right_panel(self): + panel = self._create_panel(gtk.POS_RIGHT) + + tray = FriendsTray() + panel.append(tray) + tray.show() + + return panel + + def _create_left_panel(self): + panel = ClipboardPanelWindow(self, gtk.POS_LEFT) + + self._connect_to_panel(panel) + panel.connect('drag-motion', self._drag_motion_cb) + panel.connect('drag-leave', self._drag_leave_cb) + + return panel + + def _create_panel(self, orientation): + panel = FrameWindow(orientation) + self._connect_to_panel(panel) + + return panel + + def _move_panel(self, panel, pos, x1, y1, x2, y2): + x = (x2 - x1) * pos + x1 + y = (y2 - y1) * pos + y1 + + panel.move(int(x), int(y)) + + # FIXME we should hide and show as necessary to free memory + if not panel.props.visible: + panel.show() + + def _connect_to_panel(self, panel): + panel.connect('enter-notify-event', self._enter_notify_cb) + panel.connect('leave-notify-event', self._leave_notify_cb) + + def _update_position(self): + screen_h = gtk.gdk.screen_height() + screen_w = gtk.gdk.screen_width() + + self._move_panel(self._top_panel, self.current_position, + 0, - self._top_panel.size, 0, 0) + + self._move_panel(self._bottom_panel, self.current_position, + 0, screen_h, 0, screen_h - self._bottom_panel.size) + + self._move_panel(self._left_panel, self.current_position, + - self._left_panel.size, 0, 0, 0) + + self._move_panel(self._right_panel, self.current_position, + screen_w, 0, screen_w - self._right_panel.size, 0) + + def _size_changed_cb(self, screen): + self._update_position() + + def _enter_notify_cb(self, window, event): + if event.detail != gtk.gdk.NOTIFY_INFERIOR: + self._mouse_listener.mouse_enter() + + def _leave_notify_cb(self, window, event): + if event.detail == gtk.gdk.NOTIFY_INFERIOR: + return + + if not self._is_hover() and not self._palette_group.is_up(): + self._mouse_listener.mouse_leave() + + def _palette_group_popdown_cb(self, group): + if not self._is_hover(): + self._mouse_listener.mouse_leave() + + def _drag_motion_cb(self, window, context, x, y, time): + self._mouse_listener.mouse_enter() + + def _drag_leave_cb(self, window, drag_context, timestamp): + self._mouse_listener.mouse_leave() + + def _enter_corner_cb(self, event_area): + self._mouse_listener.mouse_enter() + + def notify_key_press(self): + self._key_listener.key_press() + + def add_notification(self, icon, corner=gtk.CORNER_TOP_LEFT, + duration=_NOTIFICATION_DURATION): + + if not isinstance(icon, NotificationIcon): + raise TypeError('icon must be a NotificationIcon.') + + window = NotificationWindow() + + screen = gtk.gdk.screen_get_default() + if corner == gtk.CORNER_TOP_LEFT: + window.move(0, 0) + elif corner == gtk.CORNER_TOP_RIGHT: + window.move(screen.get_width() - style.GRID_CELL_SIZE, 0) + elif corner == gtk.CORNER_BOTTOM_LEFT: + window.move(0, screen.get_height() - style.GRID_CELL_SIZE) + elif corner == gtk.CORNER_BOTTOM_RIGHT: + window.move(screen.get_width() - style.GRID_CELL_SIZE, + screen.get_height() - style.GRID_CELL_SIZE) + else: + raise ValueError('Inalid corner: %r' % corner) + + window.add(icon) + icon.show() + window.show() + + self._notif_by_icon[icon] = window + + gobject.timeout_add(duration, + lambda: self.remove_notification(icon)) + + def remove_notification(self, icon): + if icon not in self._notif_by_icon: + logging.debug('icon %r not in list of notifications.', icon) + return + + window = self._notif_by_icon[icon] + window.destroy() + del self._notif_by_icon[icon] + + def __notification_received_cb(self, **kwargs): + logging.debug('__notification_received_cb') + icon = NotificationIcon() + + hints = kwargs['hints'] + + icon_file_name = hints.get('x-sugar-icon-file-name', '') + if icon_file_name: + icon.props.icon_filename = icon_file_name + else: + icon.props.icon_name = 'application-octet-stream' + + icon_colors = hints.get('x-sugar-icon-colors', '') + if not icon_colors: + icon_colors = profile.get_color() + icon.props.xo_color = icon_colors + + duration = kwargs.get('expire_timeout', -1) + if duration == -1: + duration = _NOTIFICATION_DURATION + + self.add_notification(icon, gtk.CORNER_TOP_RIGHT, duration) + + def __notification_cancelled_cb(self, **kwargs): + # Do nothing for now. Our notification UI is so simple, there's no + # point yet. + pass diff --git a/src/jarabe/frame/frameinvoker.py b/src/jarabe/frame/frameinvoker.py new file mode 100644 index 0000000..a4abfa8 --- /dev/null +++ b/src/jarabe/frame/frameinvoker.py @@ -0,0 +1,38 @@ +# Copyright (C) 2007, Eduardo Silva +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk + +from sugar.graphics import style +from sugar.graphics.palette import WidgetInvoker + + +def _get_screen_area(): + frame_thickness = style.GRID_CELL_SIZE + + x = y = frame_thickness + width = gtk.gdk.screen_width() - frame_thickness + height = gtk.gdk.screen_height() - frame_thickness + + return gtk.gdk.Rectangle(x, y, width, height) + + +class FrameWidgetInvoker(WidgetInvoker): + def __init__(self, widget): + WidgetInvoker.__init__(self, widget, widget.child) + + self._position_hint = self.ANCHORED + self._screen_area = _get_screen_area() diff --git a/src/jarabe/frame/framewindow.py b/src/jarabe/frame/framewindow.py new file mode 100644 index 0000000..394ba00 --- /dev/null +++ b/src/jarabe/frame/framewindow.py @@ -0,0 +1,153 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +from gtk import gdk +import gobject + +from sugar.graphics import style + + +class FrameContainer(gtk.Bin): + """A container class for frame panel rendering. Hosts a child 'box' where + frame elements can be added. Excludes grid-sized squares at each end + of the frame panel, and a space alongside the inside of the screen where + a border is drawn.""" + + __gtype_name__ = 'SugarFrameContainer' + + def __init__(self, position): + gtk.Bin.__init__(self) + self._position = position + + if self.is_vertical(): + box = gtk.VBox() + else: + box = gtk.HBox() + self.add(box) + box.show() + + def is_vertical(self): + return self._position in (gtk.POS_LEFT, gtk.POS_RIGHT) + + def do_expose_event(self, event): + # Draw the inner border as a rectangle + cr = self.get_parent_window().cairo_create() + r, g, b, a = style.COLOR_BUTTON_GREY.get_rgba() + cr.set_source_rgba (r, g, b, a) + + if self.is_vertical(): + x = style.GRID_CELL_SIZE if self._position == gtk.POS_LEFT else 0 + y = style.GRID_CELL_SIZE + width = style.LINE_WIDTH + height = self.allocation.height - (style.GRID_CELL_SIZE * 2) + else: + x = style.GRID_CELL_SIZE + y = style.GRID_CELL_SIZE if self._position == gtk.POS_TOP else 0 + height = style.LINE_WIDTH + width = self.allocation.width - (style.GRID_CELL_SIZE * 2) + + cr.rectangle(x, y, width, height) + cr.fill() + + gtk.Bin.do_expose_event(self, event) + return False + + def do_size_request(self, req): + if self.is_vertical(): + req.height = gdk.screen_height() + req.width = style.GRID_CELL_SIZE + style.LINE_WIDTH + else: + req.width = gdk.screen_width() + req.height = style.GRID_CELL_SIZE + style.LINE_WIDTH + + self.get_child().size_request() + + def do_size_allocate(self, allocation): + self.allocation = allocation + + # exclude grid squares at two ends of the frame + # allocate remaining space to child box, minus the space needed for + # drawing the border + allocation = gdk.Rectangle() + if self.is_vertical(): + allocation.x = 0 if self._position == gtk.POS_LEFT \ + else style.LINE_WIDTH + allocation.y = style.GRID_CELL_SIZE + allocation.width = self.allocation.width - style.LINE_WIDTH + allocation.height = self.allocation.height \ + - (style.GRID_CELL_SIZE * 2) + else: + allocation.x = style.GRID_CELL_SIZE + allocation.y = 0 if self._position == gtk.POS_TOP \ + else style.LINE_WIDTH + allocation.width = self.allocation.width \ + - (style.GRID_CELL_SIZE * 2) + allocation.height = self.allocation.height - style.LINE_WIDTH + + self.get_child().size_allocate(allocation) + + +class FrameWindow(gtk.Window): + __gtype_name__ = 'SugarFrameWindow' + + def __init__(self, position): + gtk.Window.__init__(self) + self.hover = False + self.size = style.GRID_CELL_SIZE + style.LINE_WIDTH + + accel_group = gtk.AccelGroup() + self.set_data('sugar-accel-group', accel_group) + self.add_accel_group(accel_group) + + self._position = position + + self.set_decorated(False) + self.connect('realize', self._realize_cb) + self.connect('enter-notify-event', self._enter_notify_cb) + self.connect('leave-notify-event', self._leave_notify_cb) + + self._container = FrameContainer(position) + self.add(self._container) + self._container.show() + self._update_size() + + screen = gdk.screen_get_default() + screen.connect('size-changed', self._size_changed_cb) + + def append(self, child, expand=True, fill=True): + self._container.get_child().pack_start(child, expand=expand, fill=fill) + + def _update_size(self): + if self._position == gtk.POS_TOP or self._position == gtk.POS_BOTTOM: + self.resize(gdk.screen_width(), self.size) + else: + self.resize(self.size, gdk.screen_height()) + + def _realize_cb(self, widget): + self.window.set_type_hint(gdk.WINDOW_TYPE_HINT_DOCK) + self.window.set_accept_focus(False) + + def _enter_notify_cb(self, window, event): + if event.detail != gdk.NOTIFY_INFERIOR: + self.hover = True + + def _leave_notify_cb(self, window, event): + if event.detail != gdk.NOTIFY_INFERIOR: + self.hover = False + + def _size_changed_cb(self, screen): + self._update_size() diff --git a/src/jarabe/frame/friendstray.py b/src/jarabe/frame/friendstray.py new file mode 100644 index 0000000..26a279b --- /dev/null +++ b/src/jarabe/frame/friendstray.py @@ -0,0 +1,129 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +from sugar.graphics.tray import VTray, TrayIcon + +from jarabe.view.buddymenu import BuddyMenu +from jarabe.frame.frameinvoker import FrameWidgetInvoker +from jarabe.model import shell +from jarabe.model.buddy import get_owner_instance +from jarabe.model import neighborhood + + +class FriendIcon(TrayIcon): + def __init__(self, buddy): + TrayIcon.__init__(self, icon_name='computer-xo', + xo_color=buddy.get_color()) + + self._buddy = buddy + self.set_palette_invoker(FrameWidgetInvoker(self)) + self.palette_invoker.cache_palette = False + + def create_palette(self): + palette = BuddyMenu(self._buddy) + palette.props.icon_visible = False + palette.set_group_id('frame') + return palette + + +class FriendsTray(VTray): + def __init__(self): + VTray.__init__(self) + + self._shared_activity = None + self._buddies = {} + + shell.get_model().connect('active-activity-changed', + self.__active_activity_changed_cb) + + neighborhood.get_model().connect('activity-added', + self.__neighborhood_activity_added_cb) + + def add_buddy(self, buddy): + if buddy.props.key in self._buddies: + return + + icon = FriendIcon(buddy) + self.add_item(icon) + icon.show() + + self._buddies[buddy.props.key] = icon + + def remove_buddy(self, buddy): + if buddy.props.key not in self._buddies: + return + + self.remove_item(self._buddies[buddy.props.key]) + del self._buddies[buddy.props.key] + + def clear(self): + for item in self.get_children(): + self.remove_item(item) + item.destroy() + self._buddies = {} + + def __neighborhood_activity_added_cb(self, neighborhood_model, + shared_activity): + logging.debug('FriendsTray.__neighborhood_activity_added_cb') + active_activity = shell.get_model().get_active_activity() + if active_activity.get_activity_id() != shared_activity.activity_id: + return + + self.clear() + + # always display ourselves + self.add_buddy(get_owner_instance()) + + self._set_current_activity(shared_activity.activity_id) + + def __active_activity_changed_cb(self, home_model, home_activity): + logging.debug('FriendsTray.__active_activity_changed_cb') + self.clear() + + # always display ourselves + self.add_buddy(get_owner_instance()) + + if home_activity is None: + return + + activity_id = home_activity.get_activity_id() + if activity_id is None: + return + + self._set_current_activity(activity_id) + + def _set_current_activity(self, activity_id): + logging.debug('FriendsTray._set_current_activity') + neighborhood_model = neighborhood.get_model() + self._shared_activity = neighborhood_model.get_activity(activity_id) + if self._shared_activity is None: + return + + for buddy in self._shared_activity.get_buddies(): + self.add_buddy(buddy) + + self._shared_activity.connect('buddy-added', self.__buddy_added_cb) + self._shared_activity.connect('buddy-removed', self.__buddy_removed_cb) + + def __buddy_added_cb(self, activity, buddy): + logging.debug('FriendsTray.__buddy_added_cb') + self.add_buddy(buddy) + + def __buddy_removed_cb(self, activity, buddy): + logging.debug('FriendsTray.__buddy_removed_cb') + self.remove_buddy(buddy) diff --git a/src/jarabe/frame/notification.py b/src/jarabe/frame/notification.py new file mode 100644 index 0000000..3471e2c --- /dev/null +++ b/src/jarabe/frame/notification.py @@ -0,0 +1,102 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gobject +import gtk + +from sugar.graphics import style +from sugar.graphics.xocolor import XoColor + +from jarabe.view.pulsingicon import PulsingIcon + + +class NotificationIcon(gtk.EventBox): + __gtype_name__ = 'SugarNotificationIcon' + + __gproperties__ = { + 'xo-color': (object, None, None, gobject.PARAM_READWRITE), + 'icon-name': (str, None, None, None, gobject.PARAM_READWRITE), + 'icon-filename': (str, None, None, None, gobject.PARAM_READWRITE), + } + + _PULSE_TIMEOUT = 3 + + def __init__(self, **kwargs): + self._icon = PulsingIcon(pixel_size=style.STANDARD_ICON_SIZE) + gobject.GObject.__init__(self, **kwargs) + self.props.visible_window = False + + self._icon.props.pulse_color = \ + XoColor('%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + self._icon.props.pulsing = True + self.add(self._icon) + self._icon.show() + + gobject.timeout_add_seconds(self._PULSE_TIMEOUT, + self.__stop_pulsing_cb) + + self.set_size_request(style.GRID_CELL_SIZE, style.GRID_CELL_SIZE) + + def __stop_pulsing_cb(self): + self._icon.props.pulsing = False + return False + + def do_set_property(self, pspec, value): + if pspec.name == 'xo-color': + if self._icon.props.base_color != value: + self._icon.props.base_color = value + elif pspec.name == 'icon-name': + if self._icon.props.icon_name != value: + self._icon.props.icon_name = value + elif pspec.name == 'icon-filename': + if self._icon.props.file != value: + self._icon.props.file = value + + def do_get_property(self, pspec): + if pspec.name == 'xo-color': + return self._icon.props.base_color + elif pspec.name == 'icon-name': + return self._icon.props.icon_name + elif pspec.name == 'icon-filename': + return self._icon.props.file + + def _set_palette(self, palette): + self._icon.palette = palette + + def _get_palette(self): + return self._icon.palette + + palette = property(_get_palette, _set_palette) + + +class NotificationWindow(gtk.Window): + __gtype_name__ = 'SugarNotificationWindow' + + def __init__(self, **kwargs): + + gtk.Window.__init__(self, **kwargs) + + self.set_decorated(False) + self.set_resizable(False) + self.connect('realize', self._realize_cb) + + def _realize_cb(self, widget): + self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + self.window.set_accept_focus(False) + + color = gtk.gdk.color_parse(style.COLOR_TOOLBAR_GREY.get_html()) + self.modify_bg(gtk.STATE_NORMAL, color) diff --git a/src/jarabe/frame/zoomtoolbar.py b/src/jarabe/frame/zoomtoolbar.py new file mode 100644 index 0000000..c28fe1c --- /dev/null +++ b/src/jarabe/frame/zoomtoolbar.py @@ -0,0 +1,94 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2009 Simon Schampijer +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +import logging + +import glib +import gtk + +from sugar.graphics import style +from sugar.graphics.palette import Palette +from sugar.graphics.radiotoolbutton import RadioToolButton + +from jarabe.frame.frameinvoker import FrameWidgetInvoker +from jarabe.model import shell + + +class ZoomToolbar(gtk.Toolbar): + def __init__(self): + gtk.Toolbar.__init__(self) + + # we shouldn't be mirrored in RTL locales + self.set_direction(gtk.TEXT_DIR_LTR) + + # ask not to be collapsed if possible + self.set_size_request(4 * style.GRID_CELL_SIZE, -1) + + self._mesh_button = self._add_button('zoom-neighborhood', + _('Neighborhood'), _('F1'), shell.ShellModel.ZOOM_MESH) + self._groups_button = self._add_button('zoom-groups', + _('Group'), _('F2'), shell.ShellModel.ZOOM_GROUP) + self._home_button = self._add_button('zoom-home', + _('Home'), _('F3'), shell.ShellModel.ZOOM_HOME) + self._activity_button = self._add_button('zoom-activity', + _('Activity'), _('F4'), shell.ShellModel.ZOOM_ACTIVITY) + + shell_model = shell.get_model() + self._set_zoom_level(shell_model.zoom_level) + shell_model.zoom_level_changed.connect(self.__zoom_level_changed_cb) + + def _add_button(self, icon_name, label, accelerator, zoom_level): + if self.get_children(): + group = self.get_children()[0] + else: + group = None + + button = RadioToolButton(named_icon=icon_name, group=group, + accelerator=accelerator) + button.connect('clicked', self.__level_clicked_cb, zoom_level) + self.add(button) + button.show() + + palette = Palette(glib.markup_escape_text(label)) + palette.props.invoker = FrameWidgetInvoker(button) + palette.set_group_id('frame') + button.set_palette(palette) + + return button + + def __level_clicked_cb(self, button, level): + if not button.get_active(): + return + + shell.get_model().set_zoom_level(level) + + def __zoom_level_changed_cb(self, **kwargs): + self._set_zoom_level(kwargs['new_level']) + + def _set_zoom_level(self, new_level): + logging.debug('new zoom level: %r', new_level) + if new_level == shell.ShellModel.ZOOM_MESH: + self._mesh_button.props.active = True + elif new_level == shell.ShellModel.ZOOM_GROUP: + self._groups_button.props.active = True + elif new_level == shell.ShellModel.ZOOM_HOME: + self._home_button.props.active = True + elif new_level == shell.ShellModel.ZOOM_ACTIVITY: + self._activity_button.props.active = True + else: + raise ValueError('Invalid zoom level: %r' % (new_level)) diff --git a/src/jarabe/intro/Makefile.am b/src/jarabe/intro/Makefile.am new file mode 100644 index 0000000..2ea7cea --- /dev/null +++ b/src/jarabe/intro/Makefile.am @@ -0,0 +1,5 @@ +sugardir = $(pythondir)/jarabe/intro +sugar_PYTHON = \ + __init__.py \ + colorpicker.py \ + window.py diff --git a/src/jarabe/intro/Makefile.in b/src/jarabe/intro/Makefile.in new file mode 100644 index 0000000..ef8a4c6 --- /dev/null +++ b/src/jarabe/intro/Makefile.in @@ -0,0 +1,442 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src/jarabe/intro +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pythondir)/jarabe/intro +sugar_PYTHON = \ + __init__.py \ + colorpicker.py \ + window.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/jarabe/intro/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/jarabe/intro/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/jarabe/intro/__init__.py b/src/jarabe/intro/__init__.py new file mode 100644 index 0000000..d2932f1 --- /dev/null +++ b/src/jarabe/intro/__init__.py @@ -0,0 +1,26 @@ +import os + +import gtk + +from sugar import env +from sugar.profile import get_profile + +from jarabe.intro.window import IntroWindow +from jarabe.intro.window import create_profile + + +def check_profile(): + profile = get_profile() + + path = os.path.join(os.path.expanduser('~/.sugar'), 'debug') + if not os.path.exists(path): + profile.create_debug_file() + + path = os.path.join(env.get_profile_path(), 'config') + if os.path.exists(path): + profile.convert_profile() + + if not profile.is_valid(): + win = IntroWindow() + win.show_all() + gtk.main() diff --git a/src/jarabe/intro/colorpicker.py b/src/jarabe/intro/colorpicker.py new file mode 100644 index 0000000..75c15c1 --- /dev/null +++ b/src/jarabe/intro/colorpicker.py @@ -0,0 +1,44 @@ +# Copyright (C) 2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk + +from sugar.graphics.icon import Icon +from sugar.graphics import style +from sugar.graphics.xocolor import XoColor + + +class ColorPicker(gtk.EventBox): + def __init__(self): + gtk.EventBox.__init__(self) + self._xo_color = None + + self._xo = Icon(pixel_size=style.XLARGE_ICON_SIZE, + icon_name='computer-xo') + self._set_random_colors() + self.connect('button-press-event', self._button_press_cb) + self.add(self._xo) + + def _button_press_cb(self, widget, event): + if event.button == 1 and event.type == gtk.gdk.BUTTON_PRESS: + self._set_random_colors() + + def get_color(self): + return self._xo_color + + def _set_random_colors(self): + self._xo_color = XoColor() + self._xo.props.xo_color = self._xo_color diff --git a/src/jarabe/intro/window.py b/src/jarabe/intro/window.py new file mode 100644 index 0000000..a6a2a29 --- /dev/null +++ b/src/jarabe/intro/window.py @@ -0,0 +1,299 @@ +# Copyright (C) 2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import os.path +import logging +from gettext import gettext as _ +import gconf +import pwd + +import gtk +import gobject + +from sugar import env +from sugar import profile +from sugar.graphics import style +from sugar.graphics.icon import Icon +from sugar.graphics.xocolor import XoColor + +from jarabe.intro import colorpicker + + +_BACKGROUND_COLOR = style.COLOR_WHITE + + +def create_profile(name, color=None): + if not color: + color = XoColor() + + client = gconf.client_get_default() + client.set_string('/desktop/sugar/user/nick', name) + client.set_string('/desktop/sugar/user/color', color.to_string()) + client.suggest_sync() + + if profile.get_pubkey() and profile.get_profile().privkey_hash: + logging.info('Valid key pair found, skipping generation.') + return + + # Generate keypair + import commands + keypath = os.path.join(env.get_profile_path(), 'owner.key') + if os.path.exists(keypath): + os.rename(keypath, keypath + '.broken') + logging.warning('Existing private key %s moved to %s.broken', + keypath, keypath) + + if os.path.exists(keypath + '.pub'): + os.rename(keypath + '.pub', keypath + '.pub.broken') + logging.warning('Existing public key %s.pub moved to %s.pub.broken', + keypath, keypath) + + cmd = "ssh-keygen -q -t dsa -f %s -C '' -N ''" % (keypath, ) + (s, o) = commands.getstatusoutput(cmd) + if s != 0: + logging.error('Could not generate key pair: %d %s', s, o) + + +class _Page(gtk.VBox): + __gproperties__ = { + 'valid': (bool, None, None, False, gobject.PARAM_READABLE), + } + + def __init__(self): + gtk.VBox.__init__(self) + self.valid = False + + def set_valid(self, valid): + self.valid = valid + self.notify('valid') + + def do_get_property(self, pspec): + if pspec.name == 'valid': + return self.valid + + def activate(self): + pass + + +class _NamePage(_Page): + def __init__(self, intro): + _Page.__init__(self) + self._intro = intro + + alignment = gtk.Alignment(0.5, 0.5, 0, 0) + self.pack_start(alignment, expand=True, fill=True) + + hbox = gtk.HBox(spacing=style.DEFAULT_SPACING) + alignment.add(hbox) + + label = gtk.Label(_('Name:')) + hbox.pack_start(label, expand=False) + + self._entry = gtk.Entry() + self._entry.connect('notify::text', self._text_changed_cb) + self._entry.set_size_request(style.zoom(300), -1) + self._entry.set_max_length(45) + hbox.pack_start(self._entry, expand=False) + + def _text_changed_cb(self, entry, pspec): + valid = len(entry.props.text.strip()) > 0 + self.set_valid(valid) + + def get_name(self): + return self._entry.props.text + + def set_name(self, new_name): + self._entry.props.text = new_name + + def activate(self): + self._entry.grab_focus() + + +class _ColorPage(_Page): + def __init__(self): + _Page.__init__(self) + + vbox = gtk.VBox(spacing=style.DEFAULT_SPACING) + self.pack_start(vbox, expand=True, fill=False) + + self._label = gtk.Label(_('Click to change color:')) + vbox.pack_start(self._label) + + self._cp = colorpicker.ColorPicker() + vbox.pack_start(self._cp) + + self._color = self._cp.get_color() + self.set_valid(True) + + def get_color(self): + return self._cp.get_color() + + +class _IntroBox(gtk.VBox): + __gsignals__ = { + 'done': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT])), + } + + PAGE_NAME = 0 + PAGE_COLOR = 1 + + PAGE_FIRST = PAGE_NAME + PAGE_LAST = PAGE_COLOR + + def __init__(self): + gtk.VBox.__init__(self) + self.set_border_width(style.zoom(30)) + + self._page = self.PAGE_NAME + self._name_page = _NamePage(self) + self._color_page = _ColorPage() + self._current_page = None + self._next_button = None + + client = gconf.client_get_default() + default_nick = client.get_string('/desktop/sugar/user/default_nick') + if default_nick != 'disabled': + self._page = self.PAGE_COLOR + if default_nick == 'system': + pwd_entry = pwd.getpwuid(os.getuid()) + default_nick = (pwd_entry.pw_gecos.split(',')[0] or + pwd_entry.pw_name) + self._name_page.set_name(default_nick) + + self._setup_page() + + def _setup_page(self): + for child in self.get_children(): + self.remove(child) + + if self._page == self.PAGE_NAME: + self._current_page = self._name_page + elif self._page == self.PAGE_COLOR: + self._current_page = self._color_page + + self.pack_start(self._current_page, expand=True) + + button_box = gtk.HButtonBox() + + if self._page == self.PAGE_FIRST: + button_box.set_layout(gtk.BUTTONBOX_END) + else: + button_box.set_layout(gtk.BUTTONBOX_EDGE) + back_button = gtk.Button(_('Back')) + image = Icon(icon_name='go-left') + back_button.set_image(image) + back_button.connect('clicked', self._back_activated_cb) + button_box.pack_start(back_button) + + self._next_button = gtk.Button() + image = Icon(icon_name='go-right') + self._next_button.set_image(image) + + if self._page == self.PAGE_LAST: + self._next_button.set_label(_('Done')) + self._next_button.connect('clicked', self._done_activated_cb) + else: + self._next_button.set_label(_('Next')) + self._next_button.connect('clicked', self._next_activated_cb) + + self._current_page.activate() + + self._update_next_button() + button_box.pack_start(self._next_button) + + self._current_page.connect('notify::valid', + self._page_valid_changed_cb) + + self.pack_start(button_box, expand=False) + self.show_all() + + def _update_next_button(self): + self._next_button.set_sensitive(self._current_page.props.valid) + + def _page_valid_changed_cb(self, page, pspec): + self._update_next_button() + + def _back_activated_cb(self, widget): + self.back() + + def back(self): + if self._page != self.PAGE_FIRST: + self._page -= 1 + self._setup_page() + + def _next_activated_cb(self, widget): + self.next() + + def next(self): + if self._page == self.PAGE_LAST: + self.done() + if self._current_page.props.valid: + self._page += 1 + self._setup_page() + + def _done_activated_cb(self, widget): + self.done() + + def done(self): + name = self._name_page.get_name() + color = self._color_page.get_color() + + self.emit('done', name, color) + + +class IntroWindow(gtk.Window): + __gtype_name__ = 'SugarIntroWindow' + + def __init__(self): + gtk.Window.__init__(self) + + self.props.decorated = False + self.maximize() + + self._intro_box = _IntroBox() + self._intro_box.connect('done', self._done_cb) + + self.add(self._intro_box) + self._intro_box.show() + self.connect('key-press-event', self.__key_press_cb) + + def _done_cb(self, box, name, color): + self.hide() + gobject.idle_add(self._create_profile_cb, name, color) + + def _create_profile_cb(self, name, color): + create_profile(name, color) + gtk.main_quit() + + return False + + def __key_press_cb(self, widget, event): + if gtk.gdk.keyval_name(event.keyval) == 'Return': + self._intro_box.next() + return True + elif gtk.gdk.keyval_name(event.keyval) == 'Escape': + self._intro_box.back() + return True + return False + + +if __name__ == '__main__': + w = IntroWindow() + w.show() + w.connect('destroy', gtk.main_quit) + gtk.main() diff --git a/src/jarabe/journal/Makefile.am b/src/jarabe/journal/Makefile.am new file mode 100644 index 0000000..ba29062 --- /dev/null +++ b/src/jarabe/journal/Makefile.am @@ -0,0 +1,18 @@ +sugardir = $(pythondir)/jarabe/journal +sugar_PYTHON = \ + __init__.py \ + detailview.py \ + expandedentry.py \ + journalactivity.py \ + journalentrybundle.py \ + journaltoolbox.py \ + journalwindow.py \ + keepicon.py \ + listmodel.py \ + listview.py \ + misc.py \ + modalalert.py \ + model.py \ + objectchooser.py \ + palettes.py \ + volumestoolbar.py diff --git a/src/jarabe/journal/Makefile.in b/src/jarabe/journal/Makefile.in new file mode 100644 index 0000000..8d51c6b --- /dev/null +++ b/src/jarabe/journal/Makefile.in @@ -0,0 +1,455 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src/jarabe/journal +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pythondir)/jarabe/journal +sugar_PYTHON = \ + __init__.py \ + detailview.py \ + expandedentry.py \ + journalactivity.py \ + journalentrybundle.py \ + journaltoolbox.py \ + journalwindow.py \ + keepicon.py \ + listmodel.py \ + listview.py \ + misc.py \ + modalalert.py \ + model.py \ + objectchooser.py \ + palettes.py \ + volumestoolbar.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/jarabe/journal/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/jarabe/journal/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/jarabe/journal/__init__.py b/src/jarabe/journal/__init__.py new file mode 100644 index 0000000..6373228 --- /dev/null +++ b/src/jarabe/journal/__init__.py @@ -0,0 +1,15 @@ +# Copyright (C) 2007, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/src/jarabe/journal/detailview.py b/src/jarabe/journal/detailview.py new file mode 100644 index 0000000..aa8c039 --- /dev/null +++ b/src/jarabe/journal/detailview.py @@ -0,0 +1,119 @@ +# Copyright (C) 2007, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from gettext import gettext as _ + +import gobject +import gtk +import hippo + +from sugar.graphics import style +from sugar.graphics.icon import CanvasIcon + +from jarabe.journal.expandedentry import ExpandedEntry +from jarabe.journal import model + + +class DetailView(gtk.VBox): + __gtype_name__ = 'DetailView' + + __gsignals__ = { + 'go-back-clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + } + + def __init__(self, **kwargs): + self._metadata = None + self._expanded_entry = None + + canvas = hippo.Canvas() + + self._root = hippo.CanvasBox() + self._root.props.background_color = style.COLOR_PANEL_GREY.get_int() + canvas.set_root(self._root) + + back_bar = BackBar() + back_bar.connect('button-release-event', + self.__back_bar_release_event_cb) + self._root.append(back_bar) + + gobject.GObject.__init__(self, **kwargs) + + self.pack_start(canvas) + canvas.show() + + def _fav_icon_activated_cb(self, fav_icon): + keep = not self._expanded_entry.get_keep() + self._expanded_entry.set_keep(keep) + fav_icon.props.keep = keep + + def __back_bar_release_event_cb(self, back_bar, event): + self.emit('go-back-clicked') + return False + + def _update_view(self): + if self._expanded_entry is None: + self._expanded_entry = ExpandedEntry() + self._root.append(self._expanded_entry, hippo.PACK_EXPAND) + self._expanded_entry.set_metadata(self._metadata) + + def refresh(self): + logging.debug('DetailView.refresh') + self._metadata = model.get(self._metadata['uid']) + self._update_view() + + def get_metadata(self): + return self._metadata + + def set_metadata(self, metadata): + self._metadata = metadata + self._update_view() + + metadata = gobject.property( + type=object, getter=get_metadata, setter=set_metadata) + + +class BackBar(hippo.CanvasBox): + def __init__(self): + hippo.CanvasBox.__init__(self, + orientation=hippo.ORIENTATION_HORIZONTAL, + border=style.LINE_WIDTH, + background_color=style.COLOR_PANEL_GREY.get_int(), + border_color=style.COLOR_SELECTION_GREY.get_int(), + padding=style.DEFAULT_PADDING, + padding_left=style.DEFAULT_SPACING, + spacing=style.DEFAULT_SPACING) + + icon = CanvasIcon(icon_name='go-previous', + size=style.SMALL_ICON_SIZE, + fill_color=style.COLOR_TOOLBAR_GREY.get_svg()) + self.append(icon) + + label = hippo.CanvasText(text=_('Back'), + font_desc=style.FONT_NORMAL.get_pango_desc()) + self.append(label) + + if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: + self.reverse() + + self.connect('motion-notify-event', self.__motion_notify_event_cb) + + def __motion_notify_event_cb(self, box, event): + if event.detail == hippo.MOTION_DETAIL_ENTER: + box.props.background_color = style.COLOR_SELECTION_GREY.get_int() + elif event.detail == hippo.MOTION_DETAIL_LEAVE: + box.props.background_color = style.COLOR_PANEL_GREY.get_int() + return False diff --git a/src/jarabe/journal/expandedentry.py b/src/jarabe/journal/expandedentry.py new file mode 100644 index 0000000..03f8cd1 --- /dev/null +++ b/src/jarabe/journal/expandedentry.py @@ -0,0 +1,440 @@ +# Copyright (C) 2007, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from gettext import gettext as _ +import StringIO +import time +import os + +import hippo +import cairo +import gobject +import glib +import gtk +import simplejson + +from sugar.graphics import style +from sugar.graphics.icon import CanvasIcon +from sugar.graphics.xocolor import XoColor +from sugar.graphics.canvastextview import CanvasTextView +from sugar.util import format_size + +from jarabe.journal.keepicon import KeepIcon +from jarabe.journal.palettes import ObjectPalette, BuddyPalette +from jarabe.journal import misc +from jarabe.journal import model + + +class Separator(hippo.CanvasBox, hippo.CanvasItem): + def __init__(self, orientation): + hippo.CanvasBox.__init__(self, + background_color=style.COLOR_PANEL_GREY.get_int()) + + if orientation == hippo.ORIENTATION_VERTICAL: + self.props.box_width = style.LINE_WIDTH + else: + self.props.box_height = style.LINE_WIDTH + + +class BuddyList(hippo.CanvasBox): + def __init__(self, buddies): + hippo.CanvasBox.__init__(self, xalign=hippo.ALIGNMENT_START, + orientation=hippo.ORIENTATION_HORIZONTAL) + + for buddy in buddies: + nick_, color = buddy + hbox = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL) + icon = CanvasIcon(icon_name='computer-xo', + xo_color=XoColor(color), + size=style.STANDARD_ICON_SIZE) + icon.set_palette(BuddyPalette(buddy)) + hbox.append(icon) + self.append(hbox) + + +class ExpandedEntry(hippo.CanvasBox): + def __init__(self): + hippo.CanvasBox.__init__(self) + self.props.orientation = hippo.ORIENTATION_VERTICAL + self.props.background_color = style.COLOR_WHITE.get_int() + self.props.padding_top = style.DEFAULT_SPACING * 3 + + self._metadata = None + self._update_title_sid = None + + # Create header + header = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL, + padding=style.DEFAULT_PADDING, + padding_right=style.GRID_CELL_SIZE, + spacing=style.DEFAULT_SPACING) + self.append(header) + + # Create two column body + + body = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL, + spacing=style.DEFAULT_SPACING * 3, + padding_left=style.GRID_CELL_SIZE, + padding_right=style.GRID_CELL_SIZE, + padding_top=style.DEFAULT_SPACING * 3) + + self.append(body, hippo.PACK_EXPAND) + + first_column = hippo.CanvasBox(orientation=hippo.ORIENTATION_VERTICAL, + spacing=style.DEFAULT_SPACING) + body.append(first_column) + + second_column = hippo.CanvasBox(orientation=hippo.ORIENTATION_VERTICAL, + spacing=style.DEFAULT_SPACING) + body.append(second_column, hippo.PACK_EXPAND) + + # Header + + self._keep_icon = self._create_keep_icon() + header.append(self._keep_icon) + + self._icon = None + self._icon_box = hippo.CanvasBox() + header.append(self._icon_box) + + self._title = self._create_title() + header.append(self._title, hippo.PACK_EXPAND) + + # TODO: create a version list popup instead of a date label + self._date = self._create_date() + header.append(self._date) + + if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: + header.reverse() + + # First column + + self._preview_box = hippo.CanvasBox() + first_column.append(self._preview_box) + + self._technical_box = hippo.CanvasBox() + first_column.append(self._technical_box) + + # Second column + + description_box, self._description = self._create_description() + second_column.append(description_box) + + tags_box, self._tags = self._create_tags() + second_column.append(tags_box) + + self._buddy_list = hippo.CanvasBox() + second_column.append(self._buddy_list) + + def set_metadata(self, metadata): + if self._metadata == metadata: + return + self._metadata = metadata + + self._keep_icon.keep = (str(metadata.get('keep', 0)) == '1') + + self._icon = self._create_icon() + self._icon_box.clear() + self._icon_box.append(self._icon) + + self._date.props.text = misc.get_date(metadata) + + title = self._title.props.widget + title.props.text = metadata.get('title', _('Untitled')) + title.props.editable = model.is_editable(metadata) + + self._preview_box.clear() + self._preview_box.append(self._create_preview()) + + self._technical_box.clear() + self._technical_box.append(self._create_technical()) + + self._buddy_list.clear() + self._buddy_list.append(self._create_buddy_list()) + + description = self._description.text_view_widget + description.props.buffer.props.text = metadata.get('description', '') + description.props.editable = model.is_editable(metadata) + + tags = self._tags.text_view_widget + tags.props.buffer.props.text = metadata.get('tags', '') + tags.props.editable = model.is_editable(metadata) + + def _create_keep_icon(self): + keep_icon = KeepIcon(False) + keep_icon.connect('activated', self._keep_icon_activated_cb) + return keep_icon + + def _create_icon(self): + icon = CanvasIcon(file_name=misc.get_icon_name(self._metadata)) + icon.connect_after('button-release-event', + self._icon_button_release_event_cb) + + if misc.is_activity_bundle(self._metadata): + xo_color = XoColor('%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + else: + xo_color = misc.get_icon_color(self._metadata) + icon.props.xo_color = xo_color + + icon.set_palette(ObjectPalette(self._metadata)) + + return icon + + def _create_title(self): + entry = gtk.Entry() + entry.connect('focus-out-event', self._title_focus_out_event_cb) + + bg_color = style.COLOR_WHITE.get_gdk_color() + entry.modify_bg(gtk.STATE_INSENSITIVE, bg_color) + entry.modify_base(gtk.STATE_INSENSITIVE, bg_color) + + return hippo.CanvasWidget(widget=entry) + + def _create_date(self): + date = hippo.CanvasText(xalign=hippo.ALIGNMENT_START, + font_desc=style.FONT_NORMAL.get_pango_desc()) + return date + + def _create_preview(self): + width = style.zoom(320) + height = style.zoom(240) + box = hippo.CanvasBox() + + if len(self._metadata.get('preview', '')) > 4: + if self._metadata['preview'][1:4] == 'PNG': + preview_data = self._metadata['preview'] + else: + # TODO: We are close to be able to drop this. + import base64 + preview_data = base64.b64decode( + self._metadata['preview']) + + png_file = StringIO.StringIO(preview_data) + try: + surface = cairo.ImageSurface.create_from_png(png_file) + has_preview = True + except Exception: + logging.exception('Error while loading the preview') + has_preview = False + else: + has_preview = False + + if has_preview: + preview_box = hippo.CanvasImage(image=surface, + border=style.LINE_WIDTH, + border_color=style.COLOR_BUTTON_GREY.get_int(), + xalign=hippo.ALIGNMENT_CENTER, + yalign=hippo.ALIGNMENT_CENTER, + scale_width=width, + scale_height=height) + else: + preview_box = hippo.CanvasText(text=_('No preview'), + font_desc=style.FONT_NORMAL.get_pango_desc(), + xalign=hippo.ALIGNMENT_CENTER, + yalign=hippo.ALIGNMENT_CENTER, + border=style.LINE_WIDTH, + border_color=style.COLOR_BUTTON_GREY.get_int(), + color=style.COLOR_BUTTON_GREY.get_int(), + box_width=width, + box_height=height) + preview_box.connect_after('button-release-event', + self._preview_box_button_release_event_cb) + box.append(preview_box) + return box + + def _create_technical(self): + vbox = hippo.CanvasBox() + vbox.props.spacing = style.DEFAULT_SPACING + + lines = [ + _('Kind: %s') % (self._metadata.get('mime_type') or _('Unknown'),), + _('Date: %s') % (self._format_date(),), + _('Size: %s') % (format_size(int(self._metadata.get('filesize', + model.get_file_size(self._metadata['uid']))))), + ] + + for line in lines: + text = hippo.CanvasText(text=line, + font_desc=style.FONT_NORMAL.get_pango_desc()) + text.props.color = style.COLOR_BUTTON_GREY.get_int() + + if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: + text.props.xalign = hippo.ALIGNMENT_END + else: + text.props.xalign = hippo.ALIGNMENT_START + + vbox.append(text) + + return vbox + + def _format_date(self): + if 'timestamp' in self._metadata: + try: + timestamp = float(self._metadata['timestamp']) + except (ValueError, TypeError): + logging.warning('Invalid timestamp for %r: %r', + self._metadata['uid'], + self._metadata['timestamp']) + else: + return time.strftime('%x', time.localtime(timestamp)) + return _('No date') + + def _create_buddy_list(self): + + vbox = hippo.CanvasBox() + vbox.props.spacing = style.DEFAULT_SPACING + + text = hippo.CanvasText(text=_('Participants:'), + font_desc=style.FONT_NORMAL.get_pango_desc()) + text.props.color = style.COLOR_BUTTON_GREY.get_int() + + if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: + text.props.xalign = hippo.ALIGNMENT_END + else: + text.props.xalign = hippo.ALIGNMENT_START + + vbox.append(text) + + if self._metadata.get('buddies'): + buddies = simplejson.loads(self._metadata['buddies']).values() + vbox.append(BuddyList(buddies)) + return vbox + else: + return vbox + + def _create_description(self): + vbox = hippo.CanvasBox() + vbox.props.spacing = style.DEFAULT_SPACING + + text = hippo.CanvasText(text=_('Description:'), + font_desc=style.FONT_NORMAL.get_pango_desc()) + text.props.color = style.COLOR_BUTTON_GREY.get_int() + + if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: + text.props.xalign = hippo.ALIGNMENT_END + else: + text.props.xalign = hippo.ALIGNMENT_START + + vbox.append(text) + + text_view = CanvasTextView('', + box_height=style.GRID_CELL_SIZE * 2) + vbox.append(text_view, hippo.PACK_EXPAND) + + text_view.text_view_widget.props.accepts_tab = False + text_view.text_view_widget.connect('focus-out-event', + self._description_focus_out_event_cb) + + return vbox, text_view + + def _create_tags(self): + vbox = hippo.CanvasBox() + vbox.props.spacing = style.DEFAULT_SPACING + + text = hippo.CanvasText(text=_('Tags:'), + font_desc=style.FONT_NORMAL.get_pango_desc()) + text.props.color = style.COLOR_BUTTON_GREY.get_int() + + if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL: + text.props.xalign = hippo.ALIGNMENT_END + else: + text.props.xalign = hippo.ALIGNMENT_START + + vbox.append(text) + + text_view = CanvasTextView('', + box_height=style.GRID_CELL_SIZE * 2) + vbox.append(text_view, hippo.PACK_EXPAND) + + text_view.text_view_widget.props.accepts_tab = False + text_view.text_view_widget.connect('focus-out-event', + self._tags_focus_out_event_cb) + + return vbox, text_view + + def _title_notify_text_cb(self, entry, pspec): + if not self._update_title_sid: + self._update_title_sid = gobject.timeout_add_seconds(1, + self._update_title_cb) + + def _title_focus_out_event_cb(self, entry, event): + self._update_entry() + + def _description_focus_out_event_cb(self, text_view, event): + self._update_entry() + + def _tags_focus_out_event_cb(self, text_view, event): + self._update_entry() + + def _update_entry(self, needs_update=False): + if not model.is_editable(self._metadata): + return + + old_title = self._metadata.get('title', None) + new_title = self._title.props.widget.props.text + if old_title != new_title: + label = glib.markup_escape_text(new_title) + self._icon.palette.props.primary_text = label + self._metadata['title'] = new_title + self._metadata['title_set_by_user'] = '1' + needs_update = True + + old_tags = self._metadata.get('tags', None) + new_tags = self._tags.text_view_widget.props.buffer.props.text + if old_tags != new_tags: + self._metadata['tags'] = new_tags + needs_update = True + + old_description = self._metadata.get('description', None) + new_description = \ + self._description.text_view_widget.props.buffer.props.text + if old_description != new_description: + self._metadata['description'] = new_description + needs_update = True + + if needs_update: + if self._metadata.get('mountpoint', '/') == '/': + model.write(self._metadata, update_mtime=False) + else: + old_file_path = os.path.join(self._metadata['mountpoint'], + model.get_file_name(old_title, + self._metadata['mime_type'])) + model.write(self._metadata, file_path=old_file_path, + update_mtime=False) + + self._update_title_sid = None + + def get_keep(self): + return (str(self._metadata.get('keep', 0)) == '1') + + def _keep_icon_activated_cb(self, keep_icon): + if self.get_keep(): + self._metadata['keep'] = 0 + else: + self._metadata['keep'] = 1 + self._update_entry(needs_update=True) + keep_icon.props.keep = self.get_keep() + + def _icon_button_release_event_cb(self, button, event): + logging.debug('_icon_button_release_event_cb') + misc.resume(self._metadata) + return True + + def _preview_box_button_release_event_cb(self, button, event): + logging.debug('_preview_box_button_release_event_cb') + misc.resume(self._metadata) + return True diff --git a/src/jarabe/journal/journalactivity.py b/src/jarabe/journal/journalactivity.py new file mode 100644 index 0000000..bb1c7f6 --- /dev/null +++ b/src/jarabe/journal/journalactivity.py @@ -0,0 +1,375 @@ +# Copyright (C) 2006, Red Hat, Inc. +# Copyright (C) 2007, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from gettext import gettext as _ +import uuid + +import gtk +import dbus +import statvfs +import os + +from sugar.graphics.window import Window +from sugar.graphics.alert import ErrorAlert + +from sugar.bundle.bundle import ZipExtractException, RegistrationException +from sugar import env +from sugar.activity import activityfactory +from sugar import wm + +from jarabe.model import bundleregistry +from jarabe.journal.journaltoolbox import MainToolbox, DetailToolbox +from jarabe.journal.listview import ListView +from jarabe.journal.detailview import DetailView +from jarabe.journal.volumestoolbar import VolumesToolbar +from jarabe.journal import misc +from jarabe.journal.journalentrybundle import JournalEntryBundle +from jarabe.journal.objectchooser import ObjectChooser +from jarabe.journal.modalalert import ModalAlert +from jarabe.journal import model +from jarabe.journal.journalwindow import JournalWindow + + +J_DBUS_SERVICE = 'org.laptop.Journal' +J_DBUS_INTERFACE = 'org.laptop.Journal' +J_DBUS_PATH = '/org/laptop/Journal' + +_SPACE_TRESHOLD = 52428800 +_BUNDLE_ID = 'org.laptop.JournalActivity' + +_journal = None + + +class JournalActivityDBusService(dbus.service.Object): + def __init__(self, parent): + self._parent = parent + session_bus = dbus.SessionBus() + bus_name = dbus.service.BusName(J_DBUS_SERVICE, + bus=session_bus, replace_existing=False, allow_replacement=False) + logging.debug('bus_name: %r', bus_name) + dbus.service.Object.__init__(self, bus_name, J_DBUS_PATH) + + @dbus.service.method(J_DBUS_INTERFACE, + in_signature='s', out_signature='') + def ShowObject(self, object_id): + """Pop-up journal and show object with object_id""" + + logging.debug('Trying to show object %s', object_id) + + if self._parent.show_object(object_id): + self._parent.reveal() + + def _chooser_response_cb(self, chooser, response_id, chooser_id): + logging.debug('JournalActivityDBusService._chooser_response_cb') + if response_id == gtk.RESPONSE_ACCEPT: + object_id = chooser.get_selected_object_id() + self.ObjectChooserResponse(chooser_id, object_id) + else: + self.ObjectChooserCancelled(chooser_id) + chooser.destroy() + del chooser + + @dbus.service.method(J_DBUS_INTERFACE, in_signature='is', + out_signature='s') + def ChooseObject(self, parent_xid, what_filter=''): + chooser_id = uuid.uuid4().hex + if parent_xid > 0: + parent = gtk.gdk.window_foreign_new(parent_xid) + else: + parent = None + chooser = ObjectChooser(parent, what_filter) + chooser.connect('response', self._chooser_response_cb, chooser_id) + chooser.show() + + return chooser_id + + @dbus.service.signal(J_DBUS_INTERFACE, signature='ss') + def ObjectChooserResponse(self, chooser_id, object_id): + pass + + @dbus.service.signal(J_DBUS_INTERFACE, signature='s') + def ObjectChooserCancelled(self, chooser_id): + pass + + +class JournalActivity(JournalWindow): + def __init__(self): + logging.debug('STARTUP: Loading the journal') + JournalWindow.__init__(self) + + self.set_title(_('Journal')) + + self._main_view = None + self._secondary_view = None + self._list_view = None + self._detail_view = None + self._main_toolbox = None + self._detail_toolbox = None + self._volumes_toolbar = None + + self._setup_main_view() + self._setup_secondary_view() + + self.add_events(gtk.gdk.ALL_EVENTS_MASK | + gtk.gdk.VISIBILITY_NOTIFY_MASK) + self._realized_sid = self.connect('realize', self.__realize_cb) + self.connect('visibility-notify-event', + self.__visibility_notify_event_cb) + self.connect('window-state-event', self.__window_state_event_cb) + self.connect('key-press-event', self._key_press_event_cb) + self.connect('focus-in-event', self._focus_in_event_cb) + + model.created.connect(self.__model_created_cb) + model.updated.connect(self.__model_updated_cb) + model.deleted.connect(self.__model_deleted_cb) + + self._dbus_service = JournalActivityDBusService(self) + + self.iconify() + + self._critical_space_alert = None + self._check_available_space() + + def __volume_error_cb(self, gobject, message, severity): + alert = ErrorAlert(title=severity, msg=message) + alert.connect('response', self.__alert_response_cb) + self.add_alert(alert) + alert.show() + + def __alert_response_cb(self, alert, response_id): + self.remove_alert(alert) + + def __realize_cb(self, window): + wm.set_bundle_id(window.window, _BUNDLE_ID) + activity_id = activityfactory.create_activity_id() + wm.set_activity_id(window.window, str(activity_id)) + self.disconnect(self._realized_sid) + self._realized_sid = None + + def can_close(self): + return False + + def _setup_main_view(self): + self._main_toolbox = MainToolbox() + self._main_view = gtk.VBox() + + self._list_view = ListView() + self._list_view.connect('detail-clicked', self.__detail_clicked_cb) + self._list_view.connect('clear-clicked', self.__clear_clicked_cb) + self._list_view.connect('volume-error', self.__volume_error_cb) + self._main_view.pack_start(self._list_view) + self._list_view.show() + + self._volumes_toolbar = VolumesToolbar() + self._volumes_toolbar.connect('volume-changed', + self.__volume_changed_cb) + self._volumes_toolbar.connect('volume-error', self.__volume_error_cb) + self._main_view.pack_start(self._volumes_toolbar, expand=False) + + search_toolbar = self._main_toolbox.search_toolbar + search_toolbar.connect('query-changed', self._query_changed_cb) + search_toolbar.set_mount_point('/') + + def _setup_secondary_view(self): + self._secondary_view = gtk.VBox() + + self._detail_toolbox = DetailToolbox() + self._detail_toolbox.entry_toolbar.connect('volume-error', + self.__volume_error_cb) + + self._detail_view = DetailView() + self._detail_view.connect('go-back-clicked', self.__go_back_clicked_cb) + self._secondary_view.pack_end(self._detail_view) + self._detail_view.show() + + def _key_press_event_cb(self, widget, event): + keyname = gtk.gdk.keyval_name(event.keyval) + if keyname == 'Escape': + self.show_main_view() + + def __detail_clicked_cb(self, list_view, object_id): + self._show_secondary_view(object_id) + + def __clear_clicked_cb(self, list_view): + self._main_toolbox.search_toolbar.clear_query() + + def __go_back_clicked_cb(self, detail_view): + self.show_main_view() + + def _query_changed_cb(self, toolbar, query): + self._list_view.update_with_query(query) + self.show_main_view() + + def show_main_view(self): + if self.toolbar_box != self._main_toolbox: + self.set_toolbar_box(self._main_toolbox) + self._main_toolbox.show() + + if self.canvas != self._main_view: + self.set_canvas(self._main_view) + self._main_view.show() + + def _show_secondary_view(self, object_id): + metadata = model.get(object_id) + try: + self._detail_toolbox.entry_toolbar.set_metadata(metadata) + except Exception: + logging.exception('Exception while displaying entry:') + + self.set_toolbar_box(self._detail_toolbox) + self._detail_toolbox.show() + + try: + self._detail_view.props.metadata = metadata + except Exception: + logging.exception('Exception while displaying entry:') + + self.set_canvas(self._secondary_view) + self._secondary_view.show() + + def show_object(self, object_id): + metadata = model.get(object_id) + if metadata is None: + return False + else: + self._show_secondary_view(object_id) + return True + + def __volume_changed_cb(self, volume_toolbar, mount_point): + logging.debug('Selected volume: %r.', mount_point) + self._main_toolbox.search_toolbar.set_mount_point(mount_point) + self._main_toolbox.set_current_toolbar(0) + + def __model_created_cb(self, sender, **kwargs): + self._check_for_bundle(kwargs['object_id']) + self._main_toolbox.search_toolbar.refresh_filters() + self._check_available_space() + + def __model_updated_cb(self, sender, **kwargs): + self._check_for_bundle(kwargs['object_id']) + + if self.canvas == self._secondary_view and \ + kwargs['object_id'] == self._detail_view.props.metadata['uid']: + self._detail_view.refresh() + + self._check_available_space() + + def __model_deleted_cb(self, sender, **kwargs): + if self.canvas == self._secondary_view and \ + kwargs['object_id'] == self._detail_view.props.metadata['uid']: + self.show_main_view() + + def _focus_in_event_cb(self, window, event): + self.search_grab_focus() + self._list_view.update_dates() + + def _check_for_bundle(self, object_id): + registry = bundleregistry.get_registry() + + metadata = model.get(object_id) + if metadata.get('progress', '').isdigit(): + if int(metadata['progress']) < 100: + return + + bundle = misc.get_bundle(metadata) + if bundle is None: + return + + if registry.is_installed(bundle): + logging.debug('_check_for_bundle bundle already installed') + return + + if metadata['mime_type'] == JournalEntryBundle.MIME_TYPE: + # JournalEntryBundle code takes over the datastore entry and + # transforms it into the journal entry from the bundle -- we have + # nothing more to do. + try: + registry.install(bundle, metadata['uid']) + except (ZipExtractException, RegistrationException): + logging.exception('Could not install bundle %s', + bundle.get_path()) + return + + try: + registry.install(bundle) + except (ZipExtractException, RegistrationException): + logging.exception('Could not install bundle %s', bundle.get_path()) + return + + metadata['bundle_id'] = bundle.get_bundle_id() + model.write(metadata) + + def search_grab_focus(self): + search_toolbar = self._main_toolbox.search_toolbar + search_toolbar.give_entry_focus() + + def __window_state_event_cb(self, window, event): + logging.debug('window_state_event_cb %r', self) + if event.changed_mask & gtk.gdk.WINDOW_STATE_ICONIFIED: + state = event.new_window_state + visible = not state & gtk.gdk.WINDOW_STATE_ICONIFIED + self._list_view.set_is_visible(visible) + + def __visibility_notify_event_cb(self, window, event): + logging.debug('visibility_notify_event_cb %r', self) + visible = event.state != gtk.gdk.VISIBILITY_FULLY_OBSCURED + self._list_view.set_is_visible(visible) + + def _check_available_space(self): + """Check available space on device + + If the available space is below 50MB an alert will be + shown which encourages to delete old journal entries. + """ + + if self._critical_space_alert: + return + stat = os.statvfs(env.get_profile_path()) + free_space = stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL] + if free_space < _SPACE_TRESHOLD: + self._critical_space_alert = ModalAlert() + self._critical_space_alert.connect('destroy', + self.__alert_closed_cb) + self._critical_space_alert.show() + + def __alert_closed_cb(self, data): + self.show_main_view() + self.reveal() + self._critical_space_alert = None + + def set_active_volume(self, mount): + self._volumes_toolbar.set_active_volume(mount) + + def focus_search(self): + """Become visible and give focus to the search entry + """ + self.reveal() + self.show_main_view() + self.search_grab_focus() + + +def get_journal(): + global _journal + if _journal is None: + _journal = JournalActivity() + _journal.show() + return _journal + + +def start(): + get_journal() diff --git a/src/jarabe/journal/journalentrybundle.py b/src/jarabe/journal/journalentrybundle.py new file mode 100644 index 0000000..c220c09 --- /dev/null +++ b/src/jarabe/journal/journalentrybundle.py @@ -0,0 +1,94 @@ +# Copyright (C) 2007, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import tempfile +import shutil + +import simplejson +import dbus + +from sugar.bundle.bundle import Bundle, MalformedBundleException + +from jarabe.journal import model + + +class JournalEntryBundle(Bundle): + """A Journal entry bundle + + See http://wiki.laptop.org/go/Journal_entry_bundles for details + """ + + MIME_TYPE = 'application/vnd.olpc-journal-entry' + + _zipped_extension = '.xoj' + _unzipped_extension = None + _infodir = None + + def __init__(self, path): + Bundle.__init__(self, path) + + def install(self, uid=''): + if 'SUGAR_ACTIVITY_ROOT' in os.environ: + install_dir = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'], + 'data') + else: + install_dir = tempfile.gettempdir() + bundle_dir = os.path.join(install_dir, self._zip_root_dir) + temp_uid = self._zip_root_dir + self._unzip(install_dir) + try: + metadata = self._read_metadata(bundle_dir) + metadata['uid'] = uid + + preview = self._read_preview(temp_uid, bundle_dir) + if preview is not None: + metadata['preview'] = dbus.ByteArray(preview) + + file_path = os.path.join(bundle_dir, temp_uid) + model.write(metadata, file_path) + finally: + shutil.rmtree(bundle_dir, ignore_errors=True) + + def get_bundle_id(self): + return None + + def _read_metadata(self, bundle_dir): + metadata_path = os.path.join(bundle_dir, '_metadata.json') + if not os.path.exists(metadata_path): + raise MalformedBundleException( + 'Bundle must contain the file "_metadata.json"') + f = open(metadata_path, 'r') + try: + json_data = f.read() + finally: + f.close() + return simplejson.loads(json_data) + + def _read_preview(self, uid, bundle_dir): + preview_path = os.path.join(bundle_dir, 'preview', uid) + if not os.path.exists(preview_path): + return '' + f = open(preview_path, 'r') + try: + preview_data = f.read() + finally: + f.close() + return preview_data + + def is_installed(self): + # These bundles can be reinstalled as many times as desired. + return False diff --git a/src/jarabe/journal/journaltoolbox.py b/src/jarabe/journal/journaltoolbox.py new file mode 100644 index 0000000..2aa4153 --- /dev/null +++ b/src/jarabe/journal/journaltoolbox.py @@ -0,0 +1,572 @@ +# Copyright (C) 2007, One Laptop Per Child +# Copyright (C) 2009, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +import logging +from datetime import datetime, timedelta +import os +import gconf +import time + +import gobject +import gio +import glib +import gtk + +from sugar.graphics.palette import Palette +from sugar.graphics.toolbox import Toolbox +from sugar.graphics.toolcombobox import ToolComboBox +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.toggletoolbutton import ToggleToolButton +from sugar.graphics.combobox import ComboBox +from sugar.graphics.menuitem import MenuItem +from sugar.graphics.icon import Icon +from sugar.graphics.xocolor import XoColor +from sugar.graphics import iconentry +from sugar.graphics import style +from sugar import mime + +from jarabe.model import bundleregistry +from jarabe.journal import misc +from jarabe.journal import model +from jarabe.journal.palettes import ClipboardMenu +from jarabe.journal.palettes import VolumeMenu + + +_AUTOSEARCH_TIMEOUT = 1000 + +_ACTION_ANYTIME = 0 +_ACTION_TODAY = 1 +_ACTION_SINCE_YESTERDAY = 2 +_ACTION_PAST_WEEK = 3 +_ACTION_PAST_MONTH = 4 +_ACTION_PAST_YEAR = 5 + +_ACTION_ANYTHING = 0 + +_ACTION_EVERYBODY = 0 +_ACTION_MY_FRIENDS = 1 +_ACTION_MY_CLASS = 2 + + +class MainToolbox(Toolbox): + def __init__(self): + Toolbox.__init__(self) + + self.search_toolbar = SearchToolbar() + self.search_toolbar.set_size_request(-1, style.GRID_CELL_SIZE) + self.add_toolbar(_('Search'), self.search_toolbar) + self.search_toolbar.show() + + +class SearchToolbar(gtk.Toolbar): + __gtype_name__ = 'SearchToolbar' + + __gsignals__ = { + 'query-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + } + + def __init__(self): + gtk.Toolbar.__init__(self) + + self._mount_point = None + + self._search_entry = iconentry.IconEntry() + self._search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, + 'system-search') + self._search_entry.connect('activate', self._search_entry_activated_cb) + self._search_entry.connect('changed', self._search_entry_changed_cb) + self._search_entry.add_clear_button() + self._autosearch_timer = None + self._add_widget(self._search_entry, expand=True) + + self._favorite_button = ToggleToolButton('emblem-favorite') + self._favorite_button.connect('toggled', + self.__favorite_button_toggled_cb) + self.insert(self._favorite_button, -1) + self._favorite_button.show() + + self._what_search_combo = ComboBox() + self._what_combo_changed_sid = self._what_search_combo.connect( + 'changed', self._combo_changed_cb) + tool_item = ToolComboBox(self._what_search_combo) + self.insert(tool_item, -1) + tool_item.show() + + self._when_search_combo = self._get_when_search_combo() + tool_item = ToolComboBox(self._when_search_combo) + self.insert(tool_item, -1) + tool_item.show() + + self._sorting_button = SortingButton() + self._sorting_button.connect('clicked', + self.__sorting_button_clicked_cb) + self.insert(self._sorting_button, -1) + self._sorting_button.connect('sort-property-changed', + self.__sort_changed_cb) + self._sorting_button.show() + + # TODO: enable it when the DS supports saving the buddies. + #self._with_search_combo = self._get_with_search_combo() + #tool_item = ToolComboBox(self._with_search_combo) + #self.insert(tool_item, -1) + #tool_item.show() + + self._query = self._build_query() + + self.refresh_filters() + + def give_entry_focus(self): + self._search_entry.grab_focus() + + def _get_when_search_combo(self): + when_search = ComboBox() + when_search.append_item(_ACTION_ANYTIME, _('Anytime')) + when_search.append_separator() + when_search.append_item(_ACTION_TODAY, _('Today')) + when_search.append_item(_ACTION_SINCE_YESTERDAY, + _('Since yesterday')) + # TRANS: Filter entries modified during the last 7 days. + when_search.append_item(_ACTION_PAST_WEEK, _('Past week')) + # TRANS: Filter entries modified during the last 30 days. + when_search.append_item(_ACTION_PAST_MONTH, _('Past month')) + # TRANS: Filter entries modified during the last 356 days. + when_search.append_item(_ACTION_PAST_YEAR, _('Past year')) + when_search.set_active(0) + when_search.connect('changed', self._combo_changed_cb) + return when_search + + def _get_with_search_combo(self): + with_search = ComboBox() + with_search.append_item(_ACTION_EVERYBODY, _('Anyone')) + with_search.append_separator() + with_search.append_item(_ACTION_MY_FRIENDS, _('My friends')) + with_search.append_item(_ACTION_MY_CLASS, _('My class')) + with_search.append_separator() + + # TODO: Ask the model for buddies. + with_search.append_item(3, 'Dan', 'theme:xo') + + with_search.set_active(0) + with_search.connect('changed', self._combo_changed_cb) + return with_search + + def _add_widget(self, widget, expand=False): + tool_item = gtk.ToolItem() + tool_item.set_expand(expand) + + tool_item.add(widget) + widget.show() + + self.insert(tool_item, -1) + tool_item.show() + + def _build_query(self): + query = {} + + if self._mount_point: + query['mountpoints'] = [self._mount_point] + + if self._favorite_button.props.active: + query['keep'] = 1 + + if self._what_search_combo.props.value: + value = self._what_search_combo.props.value + generic_type = mime.get_generic_type(value) + if generic_type: + mime_types = generic_type.mime_types + query['mime_type'] = mime_types + else: + query['activity'] = self._what_search_combo.props.value + + if self._when_search_combo.props.value: + date_from, date_to = self._get_date_range() + query['timestamp'] = {'start': date_from, 'end': date_to} + + if self._search_entry.props.text: + text = self._search_entry.props.text.strip() + if text: + query['query'] = text + + property_, order = self._sorting_button.get_current_sort() + + if order == gtk.SORT_ASCENDING: + sign = '+' + else: + sign = '-' + query['order_by'] = [sign + property_] + + return query + + def _get_date_range(self): + today_start = datetime.today().replace(hour=0, minute=0, second=0) + right_now = datetime.today() + if self._when_search_combo.props.value == _ACTION_TODAY: + date_range = (today_start, right_now) + elif self._when_search_combo.props.value == _ACTION_SINCE_YESTERDAY: + date_range = (today_start - timedelta(1), right_now) + elif self._when_search_combo.props.value == _ACTION_PAST_WEEK: + date_range = (today_start - timedelta(7), right_now) + elif self._when_search_combo.props.value == _ACTION_PAST_MONTH: + date_range = (today_start - timedelta(30), right_now) + elif self._when_search_combo.props.value == _ACTION_PAST_YEAR: + date_range = (today_start - timedelta(356), right_now) + + return (time.mktime(date_range[0].timetuple()), + time.mktime(date_range[1].timetuple())) + + def _combo_changed_cb(self, combo): + self._update_if_needed() + + def __sort_changed_cb(self, button): + self._update_if_needed() + + def __sorting_button_clicked_cb(self, button): + self._sorting_button.palette.popup(immediate=True, state=1) + + def _update_if_needed(self): + new_query = self._build_query() + if self._query != new_query: + self._query = new_query + self.emit('query-changed', self._query) + + def _search_entry_activated_cb(self, search_entry): + if self._autosearch_timer: + gobject.source_remove(self._autosearch_timer) + new_query = self._build_query() + if self._query != new_query: + self._query = new_query + self.emit('query-changed', self._query) + + def _search_entry_changed_cb(self, search_entry): + if not search_entry.props.text: + search_entry.activate() + return + + if self._autosearch_timer: + gobject.source_remove(self._autosearch_timer) + self._autosearch_timer = gobject.timeout_add(_AUTOSEARCH_TIMEOUT, + self._autosearch_timer_cb) + + def _autosearch_timer_cb(self): + logging.debug('_autosearch_timer_cb') + self._autosearch_timer = None + self._search_entry.activate() + return False + + def set_mount_point(self, mount_point): + self._mount_point = mount_point + new_query = self._build_query() + if self._query != new_query: + self._query = new_query + self.emit('query-changed', self._query) + + def set_what_filter(self, what_filter): + combo_model = self._what_search_combo.get_model() + what_filter_index = -1 + for i in range(0, len(combo_model) - 1): + if combo_model[i][0] == what_filter: + what_filter_index = i + break + + if what_filter_index == -1: + logging.warning('what_filter %r not known', what_filter) + else: + self._what_search_combo.set_active(what_filter_index) + + def refresh_filters(self): + current_value = self._what_search_combo.props.value + current_value_index = 0 + + self._what_search_combo.handler_block(self._what_combo_changed_sid) + try: + self._what_search_combo.remove_all() + # TRANS: Item in a combo box that filters by entry type. + self._what_search_combo.append_item(_ACTION_ANYTHING, + _('Anything')) + + registry = bundleregistry.get_registry() + appended_separator = False + + types = mime.get_all_generic_types() + for generic_type in types: + if not appended_separator: + self._what_search_combo.append_separator() + appended_separator = True + self._what_search_combo.append_item( + generic_type.type_id, generic_type.name, generic_type.icon) + if generic_type.type_id == current_value: + current_value_index = \ + len(self._what_search_combo.get_model()) - 1 + + self._what_search_combo.set_active(current_value_index) + + self._what_search_combo.append_separator() + + for service_name in model.get_unique_values('activity'): + activity_info = registry.get_bundle(service_name) + if activity_info is None: + continue + + if service_name == current_value: + combo_model = self._what_search_combo.get_model() + current_value_index = len(combo_model) + + # try activity-provided icon + if os.path.exists(activity_info.get_icon()): + try: + self._what_search_combo.append_item(service_name, + activity_info.get_name(), + file_name=activity_info.get_icon()) + except glib.GError, exception: + logging.warning('Falling back to default icon for' + ' "what" filter because %r (%r) has an' + ' invalid icon: %s', + activity_info.get_name(), + str(service_name), exception) + else: + continue + + # fall back to generic icon + self._what_search_combo.append_item(service_name, + activity_info.get_name(), + icon_name='application-octet-stream') + + finally: + self._what_search_combo.handler_unblock( + self._what_combo_changed_sid) + + def __favorite_button_toggled_cb(self, favorite_button): + self._update_if_needed() + + def clear_query(self): + self._search_entry.props.text = '' + self._what_search_combo.set_active(0) + self._when_search_combo.set_active(0) + self._favorite_button.props.active = False + + +class DetailToolbox(Toolbox): + def __init__(self): + Toolbox.__init__(self) + + self.entry_toolbar = EntryToolbar() + self.add_toolbar('', self.entry_toolbar) + self.entry_toolbar.show() + + +class EntryToolbar(gtk.Toolbar): + __gsignals__ = { + 'volume-error': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str, str])), + } + + def __init__(self): + gtk.Toolbar.__init__(self) + + self._metadata = None + self._temp_file_path = None + + self._resume = ToolButton('activity-start') + self._resume.connect('clicked', self._resume_clicked_cb) + self.add(self._resume) + self._resume.show() + + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + self._copy = ToolButton() + icon = Icon(icon_name='edit-copy', xo_color=color) + self._copy.set_icon_widget(icon) + icon.show() + self._copy.set_tooltip(_('Copy to')) + self._copy.connect('clicked', self._copy_clicked_cb) + self.add(self._copy) + self._copy.show() + + self._duplicate = ToolButton() + icon = Icon(icon_name='edit-duplicate', xo_color=color) + self._duplicate.set_icon_widget(icon) + self._duplicate.set_tooltip(_('Duplicate')) + self._duplicate.connect('clicked', self._duplicate_clicked_cb) + self.add(self._duplicate) + + separator = gtk.SeparatorToolItem() + self.add(separator) + separator.show() + + erase_button = ToolButton('list-remove') + erase_button.set_tooltip(_('Erase')) + erase_button.connect('clicked', self._erase_button_clicked_cb) + self.add(erase_button) + erase_button.show() + + def set_metadata(self, metadata): + self._metadata = metadata + self._refresh_copy_palette() + self._refresh_duplicate_palette() + self._refresh_resume_palette() + + def _resume_clicked_cb(self, button): + misc.resume(self._metadata) + + def _copy_clicked_cb(self, button): + button.palette.popup(immediate=True, state=Palette.SECONDARY) + + def _duplicate_clicked_cb(self, button): + file_path = model.get_file(self._metadata['uid']) + try: + model.copy(self._metadata, '/') + except IOError, e: + logging.exception('Error while copying the entry.') + self.emit('volume-error', + _('Error while copying the entry. %s') % (e.strerror, ), + _('Error')) + + def _erase_button_clicked_cb(self, button): + registry = bundleregistry.get_registry() + + bundle = misc.get_bundle(self._metadata) + if bundle is not None and registry.is_installed(bundle): + registry.uninstall(bundle) + model.delete(self._metadata['uid']) + + def _resume_menu_item_activate_cb(self, menu_item, service_name): + misc.resume(self._metadata, service_name) + + def _refresh_copy_palette(self): + palette = self._copy.get_palette() + + for menu_item in palette.menu.get_children(): + palette.menu.remove(menu_item) + menu_item.destroy() + + clipboard_menu = ClipboardMenu(self._metadata) + clipboard_menu.set_image(Icon(icon_name='toolbar-edit', + icon_size=gtk.ICON_SIZE_MENU)) + clipboard_menu.connect('volume-error', self.__volume_error_cb) + palette.menu.append(clipboard_menu) + clipboard_menu.show() + + if self._metadata['mountpoint'] != '/': + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + journal_menu = VolumeMenu(self._metadata, _('Journal'), '/') + journal_menu.set_image(Icon(icon_name='activity-journal', + xo_color=color, + icon_size=gtk.ICON_SIZE_MENU)) + journal_menu.connect('volume-error', self.__volume_error_cb) + palette.menu.append(journal_menu) + journal_menu.show() + + volume_monitor = gio.volume_monitor_get() + icon_theme = gtk.icon_theme_get_default() + for mount in volume_monitor.get_mounts(): + if self._metadata['mountpoint'] == mount.get_root().get_path(): + continue + volume_menu = VolumeMenu(self._metadata, mount.get_name(), + mount.get_root().get_path()) + for name in mount.get_icon().props.names: + if icon_theme.has_icon(name): + volume_menu.set_image(Icon(icon_name=name, + icon_size=gtk.ICON_SIZE_MENU)) + break + volume_menu.connect('volume-error', self.__volume_error_cb) + palette.menu.append(volume_menu) + volume_menu.show() + + def _refresh_duplicate_palette(self): + color = misc.get_icon_color(self._metadata) + self._copy.get_icon_widget().props.xo_color = color + if self._metadata['mountpoint'] == '/': + self._duplicate.show() + icon = self._duplicate.get_icon_widget() + icon.props.xo_color = color + icon.show() + else: + self._duplicate.hide() + + def __volume_error_cb(self, menu_item, message, severity): + self.emit('volume-error', message, severity) + + def _refresh_resume_palette(self): + if self._metadata.get('activity_id', ''): + # TRANS: Action label for resuming an activity. + self._resume.set_tooltip(_('Resume')) + else: + # TRANS: Action label for starting an entry. + self._resume.set_tooltip(_('Start')) + + palette = self._resume.get_palette() + + for menu_item in palette.menu.get_children(): + palette.menu.remove(menu_item) + menu_item.destroy() + + for activity_info in misc.get_activities(self._metadata): + menu_item = MenuItem(activity_info.get_name()) + menu_item.set_image(Icon(file=activity_info.get_icon(), + icon_size=gtk.ICON_SIZE_MENU)) + menu_item.connect('activate', self._resume_menu_item_activate_cb, + activity_info.get_bundle_id()) + palette.menu.append(menu_item) + menu_item.show() + + +class SortingButton(ToolButton): + __gtype_name__ = 'JournalSortingButton' + + __gsignals__ = { + 'sort-property-changed': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])), + } + + _SORT_OPTIONS = [ + ('timestamp', 'view-lastedit', _('Sort by date modified')), + ('creation_time', 'view-created', _('Sort by date created')), + ('filesize', 'view-size', _('Sort by size')), + ] + + def __init__(self): + ToolButton.__init__(self) + + self._property = 'timestamp' + self._order = gtk.SORT_ASCENDING + + self.props.tooltip = _('Sort view') + self.props.icon_name = 'view-lastedit' + + for property_, icon, label in self._SORT_OPTIONS: + button = MenuItem(icon_name=icon, text_label=label) + button.connect('activate', + self.__sort_type_changed_cb, + property_, + icon) + button.show() + self.props.palette.menu.insert(button, -1) + + def __sort_type_changed_cb(self, widget, property_, icon_name): + self._property = property_ + #FIXME: Implement sorting order + self._order = gtk.SORT_ASCENDING + self.emit('sort-property-changed') + + self.props.icon_name = icon_name + + def get_current_sort(self): + return (self._property, self._order) diff --git a/src/jarabe/journal/journalwindow.py b/src/jarabe/journal/journalwindow.py new file mode 100644 index 0000000..31bc790 --- /dev/null +++ b/src/jarabe/journal/journalwindow.py @@ -0,0 +1,33 @@ +#Copyright (C) 2010 Software for Education, Entertainment and Training +#Activities +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from sugar.graphics.window import Window + +_journal_window = None + + +class JournalWindow(Window): + + def __init__(self): + + global _journal_window + Window.__init__(self) + _journal_window = self + + +def get_journal_window(): + return _journal_window diff --git a/src/jarabe/journal/keepicon.py b/src/jarabe/journal/keepicon.py new file mode 100644 index 0000000..5bc299b --- /dev/null +++ b/src/jarabe/journal/keepicon.py @@ -0,0 +1,64 @@ +# Copyright (C) 2006, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gobject +import hippo +import gconf + +from sugar.graphics.icon import CanvasIcon +from sugar.graphics import style +from sugar.graphics.xocolor import XoColor + + +class KeepIcon(CanvasIcon): + def __init__(self, keep): + CanvasIcon.__init__(self, icon_name='emblem-favorite', + box_width=style.GRID_CELL_SIZE * 3 / 5, + size=style.SMALL_ICON_SIZE) + self.connect('motion-notify-event', self.__motion_notify_event_cb) + + self._keep = None + self.set_keep(keep) + + def set_keep(self, keep): + if keep == self._keep: + return + + self._keep = keep + if keep: + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + self.props.xo_color = color + else: + self.props.stroke_color = style.COLOR_BUTTON_GREY.get_svg() + self.props.fill_color = style.COLOR_TRANSPARENT.get_svg() + + def get_keep(self): + return self._keep + + keep = gobject.property(type=int, default=0, getter=get_keep, + setter=set_keep) + + def __motion_notify_event_cb(self, icon, event): + if not self._keep: + if event.detail == hippo.MOTION_DETAIL_ENTER: + client = gconf.client_get_default() + prelit_color = XoColor(client.get_string('/desktop/sugar/user/color')) + icon.props.stroke_color = prelit_color.get_stroke_color() + icon.props.fill_color = prelit_color.get_fill_color() + elif event.detail == hippo.MOTION_DETAIL_LEAVE: + icon.props.stroke_color = style.COLOR_BUTTON_GREY.get_svg() + icon.props.fill_color = style.COLOR_TRANSPARENT.get_svg() diff --git a/src/jarabe/journal/listmodel.py b/src/jarabe/journal/listmodel.py new file mode 100644 index 0000000..417ff61 --- /dev/null +++ b/src/jarabe/journal/listmodel.py @@ -0,0 +1,243 @@ +# Copyright (C) 2009, Tomeu Vizoso +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import simplejson +import gobject +import gtk +from gettext import gettext as _ + +from sugar.graphics.xocolor import XoColor +from sugar.graphics import style +from sugar import util + +from jarabe.journal import model +from jarabe.journal import misc + + +DS_DBUS_SERVICE = 'org.laptop.sugar.DataStore' +DS_DBUS_INTERFACE = 'org.laptop.sugar.DataStore' +DS_DBUS_PATH = '/org/laptop/sugar/DataStore' + + +class ListModel(gtk.GenericTreeModel, gtk.TreeDragSource): + __gtype_name__ = 'JournalListModel' + + __gsignals__ = { + 'ready': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + 'progress': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + } + + COLUMN_UID = 0 + COLUMN_FAVORITE = 1 + COLUMN_ICON = 2 + COLUMN_ICON_COLOR = 3 + COLUMN_TITLE = 4 + COLUMN_TIMESTAMP = 5 + COLUMN_CREATION_TIME = 6 + COLUMN_FILESIZE = 7 + COLUMN_PROGRESS = 8 + COLUMN_BUDDY_1 = 9 + COLUMN_BUDDY_2 = 10 + COLUMN_BUDDY_3 = 11 + + _COLUMN_TYPES = { + COLUMN_UID: str, + COLUMN_FAVORITE: bool, + COLUMN_ICON: str, + COLUMN_ICON_COLOR: object, + COLUMN_TITLE: str, + COLUMN_TIMESTAMP: str, + COLUMN_CREATION_TIME: str, + COLUMN_FILESIZE: str, + COLUMN_PROGRESS: int, + COLUMN_BUDDY_1: object, + COLUMN_BUDDY_3: object, + COLUMN_BUDDY_2: object, + } + + _PAGE_SIZE = 10 + + def __init__(self, query): + gobject.GObject.__init__(self) + + self._last_requested_index = None + self._cached_row = None + self._result_set = model.find(query, ListModel._PAGE_SIZE) + self._temp_drag_file_path = None + + # HACK: The view will tell us that it is resizing so the model can + # avoid hitting D-Bus and disk. + self.view_is_resizing = False + + self._result_set.ready.connect(self.__result_set_ready_cb) + self._result_set.progress.connect(self.__result_set_progress_cb) + + def __result_set_ready_cb(self, **kwargs): + self.emit('ready') + + def __result_set_progress_cb(self, **kwargs): + self.emit('progress') + + def setup(self): + self._result_set.setup() + + def stop(self): + self._result_set.stop() + + def get_metadata(self, path): + return model.get(self[path][ListModel.COLUMN_UID]) + + def on_get_n_columns(self): + return len(ListModel._COLUMN_TYPES) + + def on_get_column_type(self, index): + return ListModel._COLUMN_TYPES[index] + + def on_iter_n_children(self, iterator): + if iterator == None: + return self._result_set.length + else: + return 0 + + def on_get_value(self, index, column): + if self.view_is_resizing: + return None + + if index == self._last_requested_index: + return self._cached_row[column] + + if index >= self._result_set.length: + return None + + self._result_set.seek(index) + metadata = self._result_set.read() + + self._last_requested_index = index + self._cached_row = [] + self._cached_row.append(metadata['uid']) + self._cached_row.append(metadata.get('keep', '0') == '1') + self._cached_row.append(misc.get_icon_name(metadata)) + + if misc.is_activity_bundle(metadata): + xo_color = XoColor('%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + else: + xo_color = misc.get_icon_color(metadata) + self._cached_row.append(xo_color) + + title = gobject.markup_escape_text(metadata.get('title', + _('Untitled'))) + self._cached_row.append('%s' % (title, )) + + try: + timestamp = float(metadata.get('timestamp', 0)) + except (TypeError, ValueError): + timestamp_content = _('Unknown') + else: + timestamp_content = util.timestamp_to_elapsed_string(timestamp) + self._cached_row.append(timestamp_content) + + try: + creation_time = float(metadata.get('creation_time')) + except (TypeError, ValueError): + self._cached_row.append(_('Unknown')) + else: + self._cached_row.append( + util.timestamp_to_elapsed_string(float(creation_time))) + + try: + size = int(metadata.get('filesize')) + except (TypeError, ValueError): + size = None + self._cached_row.append(util.format_size(size)) + + try: + progress = int(float(metadata.get('progress', 100))) + except (TypeError, ValueError): + progress = 100 + self._cached_row.append(progress) + + buddies = [] + if metadata.get('buddies'): + try: + buddies = simplejson.loads(metadata['buddies']).values() + except simplejson.decoder.JSONDecodeError, exception: + logging.warning('Cannot decode buddies for %r: %s', + metadata['uid'], exception) + + if not isinstance(buddies, list): + logging.warning('Content of buddies for %r is not a list: %r', + metadata['uid'], buddies) + buddies = [] + + for n_ in xrange(0, 3): + if buddies: + try: + nick, color = buddies.pop(0) + except (AttributeError, ValueError), exception: + logging.warning('Malformed buddies for %r: %s', + metadata['uid'], exception) + else: + self._cached_row.append((nick, XoColor(color))) + continue + + self._cached_row.append(None) + + return self._cached_row[column] + + def on_iter_nth_child(self, iterator, n): + return n + + def on_get_path(self, iterator): + return (iterator) + + def on_get_iter(self, path): + return path[0] + + def on_iter_next(self, iterator): + if iterator != None: + if iterator >= self._result_set.length - 1: + return None + return iterator + 1 + return None + + def on_get_flags(self): + return gtk.TREE_MODEL_ITERS_PERSIST | gtk.TREE_MODEL_LIST_ONLY + + def on_iter_children(self, iterator): + return None + + def on_iter_has_child(self, iterator): + return False + + def on_iter_parent(self, iterator): + return None + + def do_drag_data_get(self, path, selection): + uid = self[path][ListModel.COLUMN_UID] + if selection.target == 'text/uri-list': + # Get hold of a reference so the temp file doesn't get deleted + self._temp_drag_file_path = model.get_file(uid) + logging.debug('putting %r in selection', self._temp_drag_file_path) + selection.set(selection.target, 8, self._temp_drag_file_path) + return True + elif selection.target == 'journal-object-id': + selection.set(selection.target, 8, uid) + return True + + return False diff --git a/src/jarabe/journal/listview.py b/src/jarabe/journal/listview.py new file mode 100644 index 0000000..57836f2 --- /dev/null +++ b/src/jarabe/journal/listview.py @@ -0,0 +1,670 @@ +# Copyright (C) 2009, Tomeu Vizoso +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from gettext import gettext as _ +import time + +import gobject +import gtk +import hippo +import gconf +import pango + +from sugar.graphics import style +from sugar.graphics.icon import CanvasIcon, Icon, CellRendererIcon +from sugar.graphics.xocolor import XoColor +from sugar import util + +from jarabe.journal.listmodel import ListModel +from jarabe.journal.palettes import ObjectPalette, BuddyPalette +from jarabe.journal import model +from jarabe.journal import misc + + +UPDATE_INTERVAL = 300 + + +class TreeView(gtk.TreeView): + __gtype_name__ = 'JournalTreeView' + + def __init__(self): + gtk.TreeView.__init__(self) + self.set_headers_visible(False) + self.set_enable_search(False) + + def do_size_request(self, requisition): + # HACK: We tell the model that the view is just resizing so it can + # avoid hitting both D-Bus and disk. + tree_model = self.get_model() + if tree_model is not None: + tree_model.view_is_resizing = True + try: + gtk.TreeView.do_size_request(self, requisition) + finally: + if tree_model is not None: + tree_model.view_is_resizing = False + + +class BaseListView(gtk.Bin): + __gtype_name__ = 'JournalBaseListView' + + __gsignals__ = { + 'clear-clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + } + + def __init__(self): + self._query = {} + self._model = None + self._progress_bar = None + self._last_progress_bar_pulse = None + self._scroll_position = 0. + + gobject.GObject.__init__(self) + + self.connect('map', self.__map_cb) + self.connect('unrealize', self.__unrealize_cb) + self.connect('destroy', self.__destroy_cb) + + self._scrolled_window = gtk.ScrolledWindow() + self._scrolled_window.set_policy(gtk.POLICY_NEVER, + gtk.POLICY_AUTOMATIC) + self.add(self._scrolled_window) + self._scrolled_window.show() + + self.tree_view = TreeView() + selection = self.tree_view.get_selection() + selection.set_mode(gtk.SELECTION_NONE) + self.tree_view.props.fixed_height_mode = True + self.tree_view.modify_base(gtk.STATE_NORMAL, + style.COLOR_WHITE.get_gdk_color()) + self._scrolled_window.add(self.tree_view) + self.tree_view.show() + + self.cell_title = None + self.cell_icon = None + self._title_column = None + self.sort_column = None + self._add_columns() + + self.tree_view.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, + [('text/uri-list', 0, 0), + ('journal-object-id', 0, 0)], + gtk.gdk.ACTION_COPY) + + # Auto-update stuff + self._fully_obscured = True + self._dirty = False + self._refresh_idle_handler = None + self._update_dates_timer = None + + model.created.connect(self.__model_created_cb) + model.updated.connect(self.__model_updated_cb) + model.deleted.connect(self.__model_deleted_cb) + + def __model_created_cb(self, sender, signal, object_id): + if self._is_new_item_visible(object_id): + self._set_dirty() + + def __model_updated_cb(self, sender, signal, object_id): + if self._is_new_item_visible(object_id): + self._set_dirty() + + def __model_deleted_cb(self, sender, signal, object_id): + if self._is_new_item_visible(object_id): + self._set_dirty() + + def _is_new_item_visible(self, object_id): + """Check if the created item is part of the currently selected view""" + if self._query['mountpoints'] == ['/']: + return not object_id.startswith('/') + else: + return object_id.startswith(self._query['mountpoints'][0]) + + def _add_columns(self): + cell_favorite = CellRendererFavorite(self.tree_view) + cell_favorite.connect('clicked', self.__favorite_clicked_cb) + + column = gtk.TreeViewColumn() + column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED + column.props.fixed_width = cell_favorite.props.width + column.pack_start(cell_favorite) + column.set_cell_data_func(cell_favorite, self.__favorite_set_data_cb) + self.tree_view.append_column(column) + + self.cell_icon = CellRendererActivityIcon(self.tree_view) + + column = gtk.TreeViewColumn() + column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED + column.props.fixed_width = self.cell_icon.props.width + column.pack_start(self.cell_icon) + column.add_attribute(self.cell_icon, 'file-name', + ListModel.COLUMN_ICON) + column.add_attribute(self.cell_icon, 'xo-color', + ListModel.COLUMN_ICON_COLOR) + self.tree_view.append_column(column) + + self.cell_title = gtk.CellRendererText() + self.cell_title.props.ellipsize = pango.ELLIPSIZE_MIDDLE + self.cell_title.props.ellipsize_set = True + + self._title_column = gtk.TreeViewColumn() + self._title_column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED + self._title_column.props.expand = True + self._title_column.props.clickable = True + self._title_column.pack_start(self.cell_title) + self._title_column.add_attribute(self.cell_title, 'markup', + ListModel.COLUMN_TITLE) + self.tree_view.append_column(self._title_column) + + buddies_column = gtk.TreeViewColumn() + buddies_column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED + self.tree_view.append_column(buddies_column) + + for column_index in [ListModel.COLUMN_BUDDY_1, + ListModel.COLUMN_BUDDY_2, + ListModel.COLUMN_BUDDY_3]: + cell_icon = CellRendererBuddy(self.tree_view, + column_index=column_index) + buddies_column.pack_start(cell_icon) + buddies_column.props.fixed_width += cell_icon.props.width + buddies_column.add_attribute(cell_icon, 'buddy', column_index) + buddies_column.set_cell_data_func(cell_icon, + self.__buddies_set_data_cb) + + cell_progress = gtk.CellRendererProgress() + cell_progress.props.ypad = style.GRID_CELL_SIZE / 4 + buddies_column.pack_start(cell_progress) + buddies_column.add_attribute(cell_progress, 'value', + ListModel.COLUMN_PROGRESS) + buddies_column.set_cell_data_func(cell_progress, + self.__progress_data_cb) + + cell_text = gtk.CellRendererText() + cell_text.props.xalign = 1 + + # Measure the required width for a date in the form of "10 hours, 10 + # minutes ago" + timestamp = time.time() - 10 * 60 - 10 * 60 * 60 + date = util.timestamp_to_elapsed_string(timestamp) + date_width = self._get_width_for_string(date) + + self.sort_column = gtk.TreeViewColumn() + self.sort_column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED + self.sort_column.props.fixed_width = date_width + self.sort_column.set_alignment(1) + self.sort_column.props.resizable = True + self.sort_column.props.clickable = True + self.sort_column.pack_start(cell_text) + self.sort_column.add_attribute(cell_text, 'text', + ListModel.COLUMN_TIMESTAMP) + self.tree_view.append_column(self.sort_column) + + def _get_width_for_string(self, text): + # Add some extra margin + text = text + 'aaaaa' + + widget = gtk.Label('') + context = widget.get_pango_context() + layout = pango.Layout(context) + layout.set_text(text) + width, height_ = layout.get_size() + return pango.PIXELS(width) + + def do_size_allocate(self, allocation): + self.allocation = allocation + self.child.size_allocate(allocation) + + def do_size_request(self, requisition): + requisition.width, requisition.height = self.child.size_request() + + def __destroy_cb(self, widget): + if self._model is not None: + self._model.stop() + + def __buddies_set_data_cb(self, column, cell, tree_model, tree_iter): + progress = tree_model[tree_iter][ListModel.COLUMN_PROGRESS] + cell.props.visible = progress >= 100 + + def __progress_data_cb(self, column, cell, tree_model, tree_iter): + progress = tree_model[tree_iter][ListModel.COLUMN_PROGRESS] + cell.props.visible = progress < 100 + + def __favorite_set_data_cb(self, column, cell, tree_model, tree_iter): + favorite = tree_model[tree_iter][ListModel.COLUMN_FAVORITE] + if favorite: + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + cell.props.xo_color = color + else: + cell.props.xo_color = None + + def __favorite_clicked_cb(self, cell, path): + row = self._model[path] + metadata = model.get(row[ListModel.COLUMN_UID]) + if not model.is_editable(metadata): + return + if metadata.get('keep', 0) == '1': + metadata['keep'] = '0' + else: + metadata['keep'] = '1' + model.write(metadata, update_mtime=False) + + def update_with_query(self, query_dict): + logging.debug('ListView.update_with_query') + if 'order_by' not in query_dict: + query_dict['order_by'] = ['+timestamp'] + if query_dict['order_by'] != self._query.get('order_by'): + property_ = query_dict['order_by'][0][1:] + cell_text = self.sort_column.get_cell_renderers()[0] + self.sort_column.set_attributes(cell_text, + text=getattr(ListModel, 'COLUMN_' + property_.upper(), + ListModel.COLUMN_TIMESTAMP)) + self._query = query_dict + + self.refresh() + + def refresh(self): + logging.debug('ListView.refresh query %r', self._query) + self._stop_progress_bar() + + if self._model is not None: + self._model.stop() + self._dirty = False + + self._model = ListModel(self._query) + self._model.connect('ready', self.__model_ready_cb) + self._model.connect('progress', self.__model_progress_cb) + self._model.setup() + + def __model_ready_cb(self, tree_model): + self._stop_progress_bar() + + self._scroll_position = self.tree_view.props.vadjustment.props.value + logging.debug('ListView.__model_ready_cb %r', self._scroll_position) + + if self.tree_view.window is not None: + # prevent glitches while later vadjustment setting, see #1235 + self.tree_view.get_bin_window().hide() + + # Cannot set it up earlier because will try to access the model + # and it needs to be ready. + self.tree_view.set_model(self._model) + + self.tree_view.props.vadjustment.props.value = self._scroll_position + self.tree_view.props.vadjustment.value_changed() + + if self.tree_view.window is not None: + # prevent glitches while later vadjustment setting, see #1235 + self.tree_view.get_bin_window().show() + + if len(tree_model) == 0: + if self._is_query_empty(): + if self._query['mountpoints'] == ['/']: + self._show_message(_('Your Journal is empty')) + elif self._query['mountpoints'] == \ + [model.get_documents_path()]: + self._show_message(_('Your documents folder is empty')) + else: + self._show_message(_('The device is empty')) + else: + self._show_message(_('No matching entries'), + show_clear_query=True) + else: + self._clear_message() + + def __map_cb(self, widget): + logging.debug('ListView.__map_cb %r', self._scroll_position) + self.tree_view.props.vadjustment.props.value = self._scroll_position + self.tree_view.props.vadjustment.value_changed() + + def __unrealize_cb(self, widget): + self._scroll_position = self.tree_view.props.vadjustment.props.value + logging.debug('ListView.__map_cb %r', self._scroll_position) + + def _is_query_empty(self): + # FIXME: This is a hack, we shouldn't have to update this every time + # a new search term is added. + return not (self._query.get('query') or self._query.get('mime_type') or + self._query.get('keep') or self._query.get('mtime') or + self._query.get('activity')) + + def __model_progress_cb(self, tree_model): + if self._progress_bar is None: + self._start_progress_bar() + + if time.time() - self._last_progress_bar_pulse > 0.05: + self._progress_bar.pulse() + self._last_progress_bar_pulse = time.time() + + def _start_progress_bar(self): + alignment = gtk.Alignment(xalign=0.5, yalign=0.5, xscale=0.5) + self.remove(self.child) + self.add(alignment) + alignment.show() + + self._progress_bar = gtk.ProgressBar() + self._progress_bar.props.pulse_step = 0.01 + self._last_progress_bar_pulse = time.time() + alignment.add(self._progress_bar) + self._progress_bar.show() + + def _stop_progress_bar(self): + if self._progress_bar is None: + return + self.remove(self.child) + self.add(self._scrolled_window) + self._progress_bar = None + + def _show_message(self, message, show_clear_query=False): + canvas = hippo.Canvas() + self.remove(self.child) + self.add(canvas) + canvas.show() + + box = hippo.CanvasBox(orientation=hippo.ORIENTATION_VERTICAL, + background_color=style.COLOR_WHITE.get_int(), + yalign=hippo.ALIGNMENT_CENTER, + spacing=style.DEFAULT_SPACING, + padding_bottom=style.GRID_CELL_SIZE) + canvas.set_root(box) + + icon = CanvasIcon(size=style.LARGE_ICON_SIZE, + icon_name='activity-journal', + stroke_color=style.COLOR_BUTTON_GREY.get_svg(), + fill_color=style.COLOR_TRANSPARENT.get_svg()) + box.append(icon) + + text = hippo.CanvasText(text=message, + xalign=hippo.ALIGNMENT_CENTER, + font_desc=style.FONT_BOLD.get_pango_desc(), + color=style.COLOR_BUTTON_GREY.get_int()) + box.append(text) + + if show_clear_query: + button = gtk.Button(label=_('Clear search')) + button.connect('clicked', self.__clear_button_clicked_cb) + button.props.image = Icon(icon_name='dialog-cancel', + icon_size=gtk.ICON_SIZE_BUTTON) + canvas_button = hippo.CanvasWidget(widget=button, + xalign=hippo.ALIGNMENT_CENTER) + box.append(canvas_button) + + def __clear_button_clicked_cb(self, button): + self.emit('clear-clicked') + + def _clear_message(self): + if self.child == self._scrolled_window: + return + self.remove(self.child) + self.add(self._scrolled_window) + self._scrolled_window.show() + + def update_dates(self): + if not self.tree_view.flags() & gtk.REALIZED: + return + visible_range = self.tree_view.get_visible_range() + if visible_range is None: + return + + logging.debug('ListView.update_dates') + + path, end_path = visible_range + tree_model = self.tree_view.get_model() + + while True: + x, y, width, height = self.tree_view.get_cell_area(path, + self.sort_column) + x, y = self.tree_view.convert_tree_to_widget_coords(x, y) + self.tree_view.queue_draw_area(x, y, width, height) + if path == end_path: + break + else: + next_iter = tree_model.iter_next(tree_model.get_iter(path)) + path = tree_model.get_path(next_iter) + + def _set_dirty(self): + if self._fully_obscured: + self._dirty = True + else: + self.refresh() + + def set_is_visible(self, visible): + if visible != self._fully_obscured: + return + + logging.debug('canvas_visibility_notify_event_cb %r', visible) + if visible: + self._fully_obscured = False + if self._dirty: + self.refresh() + if self._update_dates_timer is None: + logging.debug('Adding date updating timer') + self._update_dates_timer = \ + gobject.timeout_add_seconds(UPDATE_INTERVAL, + self.__update_dates_timer_cb) + else: + self._fully_obscured = True + if self._update_dates_timer is not None: + logging.debug('Remove date updating timer') + gobject.source_remove(self._update_dates_timer) + self._update_dates_timer = None + + def __update_dates_timer_cb(self): + self.update_dates() + return True + + +class ListView(BaseListView): + __gtype_name__ = 'JournalListView' + + __gsignals__ = { + 'detail-clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + 'volume-error': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str, str])), + } + + def __init__(self): + BaseListView.__init__(self) + self._is_dragging = False + + self.tree_view.connect('drag-begin', self.__drag_begin_cb) + self.tree_view.connect('button-release-event', + self.__button_release_event_cb) + + self.cell_title.connect('edited', self.__cell_title_edited_cb) + self.cell_title.connect('editing-canceled', self.__editing_canceled_cb) + + self.cell_icon.connect('clicked', self.__icon_clicked_cb) + self.cell_icon.connect('detail-clicked', self.__detail_clicked_cb) + self.cell_icon.connect('volume-error', self.__volume_error_cb) + + cell_detail = CellRendererDetail(self.tree_view) + cell_detail.connect('clicked', self.__detail_cell_clicked_cb) + + column = gtk.TreeViewColumn() + column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED + column.props.fixed_width = cell_detail.props.width + column.pack_start(cell_detail) + self.tree_view.append_column(column) + + def __drag_begin_cb(self, widget, drag_context): + self._is_dragging = True + + def __button_release_event_cb(self, tree_view, event): + try: + if self._is_dragging: + return + finally: + self._is_dragging = False + + pos = tree_view.get_path_at_pos(int(event.x), int(event.y)) + if pos is None: + return + + path, column, x_, y_ = pos + if column != self._title_column: + return + + row = self.tree_view.get_model()[path] + metadata = model.get(row[ListModel.COLUMN_UID]) + self.cell_title.props.editable = model.is_editable(metadata) + + tree_view.set_cursor_on_cell(path, column, start_editing=True) + + def __detail_cell_clicked_cb(self, cell, path): + row = self.tree_view.get_model()[path] + self.emit('detail-clicked', row[ListModel.COLUMN_UID]) + + def __detail_clicked_cb(self, cell, uid): + self.emit('detail-clicked', uid) + + def __volume_error_cb(self, cell, message, severity): + self.emit('volume-error', message, severity) + + def __icon_clicked_cb(self, cell, path): + row = self.tree_view.get_model()[path] + metadata = model.get(row[ListModel.COLUMN_UID]) + misc.resume(metadata) + + def __cell_title_edited_cb(self, cell, path, new_text): + row = self._model[path] + metadata = model.get(row[ListModel.COLUMN_UID]) + metadata['title'] = new_text + model.write(metadata, update_mtime=False) + self.cell_title.props.editable = False + + def __editing_canceled_cb(self, cell): + self.cell_title.props.editable = False + + +class CellRendererFavorite(CellRendererIcon): + __gtype_name__ = 'JournalCellRendererFavorite' + + def __init__(self, tree_view): + CellRendererIcon.__init__(self, tree_view) + + self.props.width = style.GRID_CELL_SIZE + self.props.height = style.GRID_CELL_SIZE + self.props.size = style.SMALL_ICON_SIZE + self.props.icon_name = 'emblem-favorite' + self.props.mode = gtk.CELL_RENDERER_MODE_ACTIVATABLE + client = gconf.client_get_default() + prelit_color = XoColor(client.get_string('/desktop/sugar/user/color')) + self.props.prelit_stroke_color = prelit_color.get_stroke_color() + self.props.prelit_fill_color = prelit_color.get_fill_color() + + +class CellRendererDetail(CellRendererIcon): + __gtype_name__ = 'JournalCellRendererDetail' + + def __init__(self, tree_view): + CellRendererIcon.__init__(self, tree_view) + + self.props.width = style.GRID_CELL_SIZE + self.props.height = style.GRID_CELL_SIZE + self.props.size = style.SMALL_ICON_SIZE + self.props.icon_name = 'go-right' + self.props.mode = gtk.CELL_RENDERER_MODE_ACTIVATABLE + self.props.stroke_color = style.COLOR_TRANSPARENT.get_svg() + self.props.fill_color = style.COLOR_BUTTON_GREY.get_svg() + self.props.prelit_stroke_color = style.COLOR_TRANSPARENT.get_svg() + self.props.prelit_fill_color = style.COLOR_BLACK.get_svg() + + +class CellRendererActivityIcon(CellRendererIcon): + __gtype_name__ = 'JournalCellRendererActivityIcon' + + __gsignals__ = { + 'detail-clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str])), + 'volume-error': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str, str])), + } + + def __init__(self, tree_view): + self._show_palette = True + + CellRendererIcon.__init__(self, tree_view) + + self.props.width = style.GRID_CELL_SIZE + self.props.height = style.GRID_CELL_SIZE + self.props.size = style.STANDARD_ICON_SIZE + self.props.mode = gtk.CELL_RENDERER_MODE_ACTIVATABLE + + self.tree_view = tree_view + + def create_palette(self): + if not self._show_palette: + return None + + tree_model = self.tree_view.get_model() + metadata = tree_model.get_metadata(self.props.palette_invoker.path) + + palette = ObjectPalette(metadata, detail=True) + palette.connect('detail-clicked', + self.__detail_clicked_cb) + palette.connect('volume-error', + self.__volume_error_cb) + return palette + + def __detail_clicked_cb(self, palette, uid): + self.emit('detail-clicked', uid) + + def __volume_error_cb(self, palette, message, severity): + self.emit('volume-error', message, severity) + + def set_show_palette(self, show_palette): + self._show_palette = show_palette + + show_palette = gobject.property(type=bool, default=True, + setter=set_show_palette) + + +class CellRendererBuddy(CellRendererIcon): + __gtype_name__ = 'JournalCellRendererBuddy' + + def __init__(self, tree_view, column_index): + CellRendererIcon.__init__(self, tree_view) + + self.props.width = style.STANDARD_ICON_SIZE + self.props.height = style.STANDARD_ICON_SIZE + self.props.size = style.STANDARD_ICON_SIZE + self.props.mode = gtk.CELL_RENDERER_MODE_ACTIVATABLE + + self.tree_view = tree_view + self._model_column_index = column_index + + def create_palette(self): + tree_model = self.tree_view.get_model() + row = tree_model[self.props.palette_invoker.path] + + if row[self._model_column_index] is not None: + nick, xo_color = row[self._model_column_index] + return BuddyPalette((nick, xo_color.to_string())) + else: + return None + + def set_buddy(self, buddy): + if buddy is None: + self.props.icon_name = None + else: + nick_, xo_color = buddy + self.props.icon_name = 'computer-xo' + self.props.xo_color = xo_color + + buddy = gobject.property(type=object, setter=set_buddy) diff --git a/src/jarabe/journal/misc.py b/src/jarabe/journal/misc.py new file mode 100644 index 0000000..1431d5f --- /dev/null +++ b/src/jarabe/journal/misc.py @@ -0,0 +1,315 @@ +# Copyright (C) 2007, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +import time +import os +from gettext import gettext as _ + +import gio +import gconf +import gtk + +from sugar.activity import activityfactory +from sugar.activity.activityhandle import ActivityHandle +from sugar.graphics.icon import get_icon_file_name +from sugar.graphics.xocolor import XoColor +from sugar.graphics.alert import ConfirmationAlert +from sugar import mime +from sugar.bundle.activitybundle import ActivityBundle +from sugar.bundle.bundle import AlreadyInstalledException +from sugar.bundle.contentbundle import ContentBundle +from sugar import util + +from jarabe.view import launcher +from jarabe.model import bundleregistry, shell +from jarabe.journal.journalentrybundle import JournalEntryBundle +from jarabe.journal import model +from jarabe.journal import journalwindow + + +def _get_icon_for_mime(mime_type): + generic_types = mime.get_all_generic_types() + for generic_type in generic_types: + if mime_type in generic_type.mime_types: + file_name = get_icon_file_name(generic_type.icon) + if file_name is not None: + return file_name + + icons = gio.content_type_get_icon(mime_type) + logging.debug('icons for this file: %r', icons.props.names) + for icon_name in icons.props.names: + file_name = get_icon_file_name(icon_name) + if file_name is not None: + return file_name + + +def get_icon_name(metadata): + file_name = None + + bundle_id = metadata.get('activity', '') + if not bundle_id: + bundle_id = metadata.get('bundle_id', '') + + if bundle_id: + activity_info = bundleregistry.get_registry().get_bundle(bundle_id) + if activity_info: + file_name = activity_info.get_icon() + + if file_name is None and is_activity_bundle(metadata): + file_path = model.get_file(metadata['uid']) + if file_path is not None and os.path.exists(file_path): + try: + bundle = ActivityBundle(file_path) + file_name = bundle.get_icon() + except Exception: + logging.exception('Could not read bundle') + + if file_name is None: + file_name = _get_icon_for_mime(metadata.get('mime_type', '')) + + if file_name is None: + file_name = get_icon_file_name('application-octet-stream') + + return file_name + + +def get_date(metadata): + """ Convert from a string in iso format to a more human-like format. """ + if 'timestamp' in metadata: + try: + timestamp = float(metadata['timestamp']) + except (TypeError, ValueError): + logging.warning('Invalid timestamp: %r', metadata['timestamp']) + else: + return util.timestamp_to_elapsed_string(timestamp) + + if 'mtime' in metadata: + try: + ti = time.strptime(metadata['mtime'], '%Y-%m-%dT%H:%M:%S') + except (TypeError, ValueError): + logging.warning('Invalid mtime: %r', metadata['mtime']) + else: + return util.timestamp_to_elapsed_string(time.mktime(ti)) + + return _('No date') + + +def get_bundle(metadata): + try: + if is_activity_bundle(metadata): + file_path = model.get_file(metadata['uid']) + if not os.path.exists(file_path): + logging.warning('Invalid path: %r', file_path) + return None + return ActivityBundle(file_path) + + elif is_content_bundle(metadata): + file_path = model.get_file(metadata['uid']) + if not os.path.exists(file_path): + logging.warning('Invalid path: %r', file_path) + return None + return ContentBundle(file_path) + + elif is_journal_bundle(metadata): + file_path = model.get_file(metadata['uid']) + if not os.path.exists(file_path): + logging.warning('Invalid path: %r', file_path) + return None + return JournalEntryBundle(file_path) + else: + return None + except Exception: + logging.exception('Incorrect bundle') + return None + + +def _get_activities_for_mime(mime_type): + registry = bundleregistry.get_registry() + result = registry.get_activities_for_type(mime_type) + if not result: + for parent_mime in mime.get_mime_parents(mime_type): + for activity in registry.get_activities_for_type(parent_mime): + if activity not in result: + result.append(activity) + return result + + +def get_activities(metadata): + activities = [] + + bundle_id = metadata.get('activity', '') + if bundle_id: + activity_info = bundleregistry.get_registry().get_bundle(bundle_id) + if activity_info: + activities.append(activity_info) + + mime_type = metadata.get('mime_type', '') + if mime_type: + activities_info = _get_activities_for_mime(mime_type) + for activity_info in activities_info: + if activity_info not in activities: + activities.append(activity_info) + + return activities + + +def resume(metadata, bundle_id=None): + registry = bundleregistry.get_registry() + + if is_activity_bundle(metadata) and bundle_id is None: + + logging.debug('Creating activity bundle') + + file_path = model.get_file(metadata['uid']) + bundle = ActivityBundle(file_path) + if not registry.is_installed(bundle): + logging.debug('Installing activity bundle') + try: + registry.install(bundle) + except AlreadyInstalledException: + _downgrade_option_alert(bundle) + return + else: + logging.debug('Upgrading activity bundle') + registry.upgrade(bundle) + + _launch_bundle(bundle) + + elif is_content_bundle(metadata) and bundle_id is None: + + logging.debug('Creating content bundle') + + file_path = model.get_file(metadata['uid']) + bundle = ContentBundle(file_path) + if not bundle.is_installed(): + logging.debug('Installing content bundle') + bundle.install() + + activities = _get_activities_for_mime('text/html') + if len(activities) == 0: + logging.warning('No activity can open HTML content bundles') + return + + uri = bundle.get_start_uri() + logging.debug('activityfactory.creating with uri %s', uri) + + activity_bundle = registry.get_bundle(activities[0].get_bundle_id()) + launch(activity_bundle, uri=uri) + else: + activity_id = metadata.get('activity_id', '') + + if bundle_id is None: + activities = get_activities(metadata) + if not activities: + logging.warning('No activity can open this object, %s.', + metadata.get('mime_type', None)) + return + bundle_id = activities[0].get_bundle_id() + + bundle = registry.get_bundle(bundle_id) + + if metadata.get('mountpoint', '/') == '/': + object_id = metadata['uid'] + else: + object_id = model.copy(metadata, '/') + + launch(bundle, activity_id=activity_id, object_id=object_id, + color=get_icon_color(metadata)) + + +def _launch_bundle(bundle): + registry = bundleregistry.get_registry() + logging.debug('activityfactory.creating bundle with id %r', + bundle.get_bundle_id()) + installed_bundle = registry.get_bundle(bundle.get_bundle_id()) + if installed_bundle: + launch(installed_bundle) + else: + logging.error('Bundle %r is not installed.', + bundle.get_bundle_id()) + + +def launch(bundle, activity_id=None, object_id=None, uri=None, color=None, + invited=False): + if activity_id is None or not activity_id: + activity_id = activityfactory.create_activity_id() + + logging.debug('launch bundle_id=%s activity_id=%s object_id=%s uri=%s', + bundle.get_bundle_id(), activity_id, object_id, uri) + + shell_model = shell.get_model() + activity = shell_model.get_activity_by_id(activity_id) + if activity is not None: + logging.debug('re-launch %r', activity.get_window()) + activity.get_window().activate(gtk.get_current_event_time()) + return + + if color is None: + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + + launcher.add_launcher(activity_id, bundle.get_icon(), color) + activity_handle = ActivityHandle(activity_id=activity_id, + object_id=object_id, uri=uri, invited=invited) + activityfactory.create(bundle, activity_handle) + + +def _downgrade_option_alert(bundle): + alert = ConfirmationAlert() + alert.props.title = _('Older Version Of %s Activity') % (bundle.get_name()) + alert.props.msg = _('Do you want to downgrade to version %s') % \ + bundle.get_activity_version() + alert.connect('response', _downgrade_alert_response_cb, bundle) + journalwindow.get_journal_window().add_alert(alert) + alert.show() + + +def _downgrade_alert_response_cb(alert, response_id, bundle): + if response_id is gtk.RESPONSE_OK: + journalwindow.get_journal_window().remove_alert(alert) + registry = bundleregistry.get_registry() + registry.install(bundle, force_downgrade=True) + _launch_bundle(bundle) + elif response_id is gtk.RESPONSE_CANCEL: + journalwindow.get_journal_window().remove_alert(alert) + + +def is_activity_bundle(metadata): + mime_type = metadata.get('mime_type', '') + return mime_type == ActivityBundle.MIME_TYPE or \ + mime_type == ActivityBundle.DEPRECATED_MIME_TYPE + + +def is_content_bundle(metadata): + return metadata.get('mime_type', '') == ContentBundle.MIME_TYPE + + +def is_journal_bundle(metadata): + return metadata.get('mime_type', '') == JournalEntryBundle.MIME_TYPE + + +def is_bundle(metadata): + return is_activity_bundle(metadata) or is_content_bundle(metadata) or \ + is_journal_bundle(metadata) + + +def get_icon_color(metadata): + if metadata is None or not 'icon-color' in metadata: + client = gconf.client_get_default() + return XoColor(client.get_string('/desktop/sugar/user/color')) + else: + return XoColor(metadata['icon-color']) diff --git a/src/jarabe/journal/modalalert.py b/src/jarabe/journal/modalalert.py new file mode 100644 index 0000000..6880941 --- /dev/null +++ b/src/jarabe/journal/modalalert.py @@ -0,0 +1,96 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +from gettext import gettext as _ +import gconf + +from sugar.graphics.icon import Icon +from sugar.graphics import style +from sugar.graphics.xocolor import XoColor + + +class ModalAlert(gtk.Window): + + __gtype_name__ = 'SugarModalAlert' + + def __init__(self): + gtk.Window.__init__(self) + + self.set_border_width(style.LINE_WIDTH) + offset = style.GRID_CELL_SIZE + width = gtk.gdk.screen_width() - offset * 2 + height = gtk.gdk.screen_height() - offset * 2 + self.set_size_request(width, height) + self.set_position(gtk.WIN_POS_CENTER_ALWAYS) + self.set_decorated(False) + self.set_resizable(False) + self.set_modal(True) + + self._main_view = gtk.EventBox() + self._vbox = gtk.VBox() + self._vbox.set_spacing(style.DEFAULT_SPACING) + self._vbox.set_border_width(style.GRID_CELL_SIZE * 2) + self._main_view.modify_bg(gtk.STATE_NORMAL, + style.COLOR_BLACK.get_gdk_color()) + self._main_view.add(self._vbox) + self._vbox.show() + + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + + icon = Icon(icon_name='activity-journal', + pixel_size=style.XLARGE_ICON_SIZE, + xo_color=color) + self._vbox.pack_start(icon, False) + icon.show() + + self._title = gtk.Label() + self._title.modify_fg(gtk.STATE_NORMAL, + style.COLOR_WHITE.get_gdk_color()) + self._title.set_markup('%s' % _('Your Journal is full')) + self._vbox.pack_start(self._title, False) + self._title.show() + + self._message = gtk.Label(_('Please delete some old Journal' + ' entries to make space for new ones.')) + self._message.modify_fg(gtk.STATE_NORMAL, + style.COLOR_WHITE.get_gdk_color()) + self._vbox.pack_start(self._message, False) + self._message.show() + + alignment = gtk.Alignment(xalign=0.5, yalign=0.5) + self._vbox.pack_start(alignment, expand=False) + alignment.show() + + self._show_journal = gtk.Button() + self._show_journal.set_label(_('Show Journal')) + alignment.add(self._show_journal) + self._show_journal.show() + self._show_journal.connect('clicked', self.__show_journal_cb) + + self.add(self._main_view) + self._main_view.show() + + self.connect('realize', self.__realize_cb) + + def __realize_cb(self, widget): + self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + self.window.set_accept_focus(True) + + def __show_journal_cb(self, button): + """The opener will listen on the destroy signal""" + self.destroy() diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py new file mode 100644 index 0000000..5285a7c --- /dev/null +++ b/src/jarabe/journal/model.py @@ -0,0 +1,818 @@ +# Copyright (C) 2007-2011, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +import os +import errno +import subprocess +from datetime import datetime +import time +import shutil +import tempfile +from stat import S_IFLNK, S_IFMT, S_IFDIR, S_IFREG +import re +from operator import itemgetter +import simplejson +from gettext import gettext as _ + +import gobject +import dbus +import gio +import gconf + +from sugar import dispatch +from sugar import mime +from sugar import util + + +DS_DBUS_SERVICE = 'org.laptop.sugar.DataStore' +DS_DBUS_INTERFACE = 'org.laptop.sugar.DataStore' +DS_DBUS_PATH = '/org/laptop/sugar/DataStore' + +# Properties the journal cares about. +PROPERTIES = ['activity', 'activity_id', 'buddies', 'bundle_id', + 'creation_time', 'filesize', 'icon-color', 'keep', 'mime_type', + 'mountpoint', 'mtime', 'progress', 'timestamp', 'title', 'uid'] + +MIN_PAGES_TO_CACHE = 3 +MAX_PAGES_TO_CACHE = 5 + +JOURNAL_METADATA_DIR = '.Sugar-Metadata' + +_datastore = None +created = dispatch.Signal() +updated = dispatch.Signal() +deleted = dispatch.Signal() + + +class _Cache(object): + + __gtype_name__ = 'model_Cache' + + def __init__(self, entries=None): + self._array = [] + if entries is not None: + self.append_all(entries) + + def prepend_all(self, entries): + self._array[0:0] = entries + + def append_all(self, entries): + self._array += entries + + def __len__(self): + return len(self._array) + + def __getitem__(self, key): + return self._array[key] + + def __delitem__(self, key): + del self._array[key] + + +class BaseResultSet(object): + """Encapsulates the result of a query + """ + + def __init__(self, query, page_size): + self._total_count = -1 + self._position = -1 + self._query = query + self._page_size = page_size + + self._offset = 0 + self._cache = _Cache() + + self.ready = dispatch.Signal() + self.progress = dispatch.Signal() + + def setup(self): + self.ready.send(self) + + def stop(self): + pass + + def get_length(self): + if self._total_count == -1: + query = self._query.copy() + query['limit'] = self._page_size * MIN_PAGES_TO_CACHE + entries, self._total_count = self.find(query) + self._cache.append_all(entries) + self._offset = 0 + return self._total_count + + length = property(get_length) + + def find(self, query): + raise NotImplementedError() + + def seek(self, position): + self._position = position + + def read(self): + if self._position == -1: + self.seek(0) + + if self._position < self._offset: + remaining_forward_entries = 0 + else: + remaining_forward_entries = self._offset + len(self._cache) - \ + self._position + + if self._position > self._offset + len(self._cache): + remaining_backwards_entries = 0 + else: + remaining_backwards_entries = self._position - self._offset + + last_cached_entry = self._offset + len(self._cache) + + if remaining_forward_entries <= 0 and remaining_backwards_entries <= 0: + + # Total cache miss: remake it + limit = self._page_size * MIN_PAGES_TO_CACHE + offset = max(0, self._position - limit / 2) + logging.debug('remaking cache, offset: %r limit: %r', offset, + limit) + query = self._query.copy() + query['limit'] = limit + query['offset'] = offset + entries, self._total_count = self.find(query) + + del self._cache[:] + self._cache.append_all(entries) + self._offset = offset + + elif (remaining_forward_entries <= 0 and + remaining_backwards_entries > 0): + + # Add one page to the end of cache + logging.debug('appending one more page, offset: %r', + last_cached_entry) + query = self._query.copy() + query['limit'] = self._page_size + query['offset'] = last_cached_entry + entries, self._total_count = self.find(query) + + # update cache + self._cache.append_all(entries) + + # apply the cache limit + cache_limit = self._page_size * MAX_PAGES_TO_CACHE + objects_excess = len(self._cache) - cache_limit + if objects_excess > 0: + self._offset += objects_excess + del self._cache[:objects_excess] + + elif remaining_forward_entries > 0 and \ + remaining_backwards_entries <= 0 and self._offset > 0: + + # Add one page to the beginning of cache + limit = min(self._offset, self._page_size) + self._offset = max(0, self._offset - limit) + + logging.debug('prepending one more page, offset: %r limit: %r', + self._offset, limit) + query = self._query.copy() + query['limit'] = limit + query['offset'] = self._offset + entries, self._total_count = self.find(query) + + # update cache + self._cache.prepend_all(entries) + + # apply the cache limit + cache_limit = self._page_size * MAX_PAGES_TO_CACHE + objects_excess = len(self._cache) - cache_limit + if objects_excess > 0: + del self._cache[-objects_excess:] + + return self._cache[self._position - self._offset] + + +class DatastoreResultSet(BaseResultSet): + """Encapsulates the result of a query on the datastore + """ + def __init__(self, query, page_size): + + if query.get('query', '') and not query['query'].startswith('"'): + query_text = '' + words = query['query'].split(' ') + for word in words: + if word: + if query_text: + query_text += ' ' + query_text += word + '*' + + query['query'] = query_text + + BaseResultSet.__init__(self, query, page_size) + + def find(self, query): + entries, total_count = _get_datastore().find(query, PROPERTIES, + byte_arrays=True) + + for entry in entries: + entry['mountpoint'] = '/' + + return entries, total_count + + +class InplaceResultSet(BaseResultSet): + """Encapsulates the result of a query on a mount point + """ + def __init__(self, query, page_size, mount_point): + BaseResultSet.__init__(self, query, page_size) + self._mount_point = mount_point + self._file_list = None + self._pending_directories = [] + self._visited_directories = [] + self._pending_files = [] + self._stopped = False + + query_text = query.get('query', '') + if query_text.startswith('"') and query_text.endswith('"'): + self._regex = re.compile('*%s*' % query_text.strip(['"'])) + elif query_text: + expression = '' + for word in query_text.split(' '): + expression += '(?=.*%s.*)' % word + self._regex = re.compile(expression, re.IGNORECASE) + else: + self._regex = None + + if query.get('timestamp', ''): + self._date_start = int(query['timestamp']['start']) + self._date_end = int(query['timestamp']['end']) + else: + self._date_start = None + self._date_end = None + + self._mime_types = query.get('mime_type', []) + + self._sort = query.get('order_by', ['+timestamp'])[0] + + def setup(self): + self._file_list = [] + self._pending_directories = [self._mount_point] + self._visited_directories = [] + self._pending_files = [] + gobject.idle_add(self._scan) + + def stop(self): + self._stopped = True + + def setup_ready(self): + if self._sort[1:] == 'filesize': + keygetter = itemgetter(3) + else: + # timestamp + keygetter = itemgetter(2) + self._file_list.sort(lambda a, b: cmp(b, a), + key=keygetter, + reverse=(self._sort[0] == '-')) + self.ready.send(self) + + def find(self, query): + if self._file_list is None: + raise ValueError('Need to call setup() first') + + if self._stopped: + raise ValueError('InplaceResultSet already stopped') + + t = time.time() + + offset = int(query.get('offset', 0)) + limit = int(query.get('limit', len(self._file_list))) + total_count = len(self._file_list) + + files = self._file_list[offset:offset + limit] + + entries = [] + for file_path, stat, mtime_, size_, metadata in files: + if metadata is None: + metadata = _get_file_metadata(file_path, stat) + metadata['mountpoint'] = self._mount_point + entries.append(metadata) + + logging.debug('InplaceResultSet.find took %f s.', time.time() - t) + + return entries, total_count + + def _scan(self): + if self._stopped: + return False + + self.progress.send(self) + + if self._pending_files: + self._scan_a_file() + return True + + if self._pending_directories: + self._scan_a_directory() + return True + + self.setup_ready() + self._visited_directories = [] + return False + + def _scan_a_file(self): + full_path = self._pending_files.pop(0) + metadata = None + + try: + stat = os.lstat(full_path) + except OSError, e: + if e.errno != errno.ENOENT: + logging.exception( + 'Error reading metadata of file %r', full_path) + return + + if S_IFMT(stat.st_mode) == S_IFLNK: + try: + link = os.readlink(full_path) + except OSError, e: + logging.exception( + 'Error reading target of link %r', full_path) + return + + if not os.path.abspath(link).startswith(self._mount_point): + return + + try: + stat = os.stat(full_path) + + except OSError, e: + if e.errno != errno.ENOENT: + logging.exception( + 'Error reading metadata of linked file %r', full_path) + return + + if S_IFMT(stat.st_mode) == S_IFDIR: + id_tuple = stat.st_ino, stat.st_dev + if not id_tuple in self._visited_directories: + self._visited_directories.append(id_tuple) + self._pending_directories.append(full_path) + return + + if S_IFMT(stat.st_mode) != S_IFREG: + return + + if self._regex is not None and \ + not self._regex.match(full_path): + metadata = _get_file_metadata(full_path, stat, + fetch_preview=False) + if not metadata: + return + add_to_list = False + for f in ['fulltext', 'title', + 'description', 'tags']: + if f in metadata and \ + self._regex.match(metadata[f]): + add_to_list = True + break + if not add_to_list: + return + + if self._date_start is not None and stat.st_mtime < self._date_start: + return + + if self._date_end is not None and stat.st_mtime > self._date_end: + return + + if self._mime_types: + mime_type = gio.content_type_guess(filename=full_path) + if mime_type not in self._mime_types: + return + + file_info = (full_path, stat, int(stat.st_mtime), stat.st_size, + metadata) + self._file_list.append(file_info) + + return + + def _scan_a_directory(self): + dir_path = self._pending_directories.pop(0) + + try: + entries = os.listdir(dir_path) + except OSError, e: + if e.errno != errno.EACCES: + logging.exception('Error reading directory %r', dir_path) + return + + for entry in entries: + if entry.startswith('.'): + continue + self._pending_files.append(dir_path + '/' + entry) + return + + +def _get_file_metadata(path, stat, fetch_preview=True): + """Return the metadata from the corresponding file. + + Reads the metadata stored in the json file or create the + metadata based on the file properties. + + """ + filename = os.path.basename(path) + dir_path = os.path.dirname(path) + metadata = _get_file_metadata_from_json(dir_path, filename, fetch_preview) + if metadata: + if 'filesize' not in metadata: + metadata['filesize'] = stat.st_size + return metadata + + return {'uid': path, + 'title': os.path.basename(path), + 'timestamp': stat.st_mtime, + 'filesize': stat.st_size, + 'mime_type': gio.content_type_guess(filename=path), + 'activity': '', + 'activity_id': '', + 'icon-color': '#000000,#ffffff', + 'description': path} + + +def _get_file_metadata_from_json(dir_path, filename, fetch_preview): + """Read the metadata from the json file and the preview + stored on the external device. + + If the metadata is corrupted we do remove it and the preview as well. + + """ + metadata = None + metadata_path = os.path.join(dir_path, JOURNAL_METADATA_DIR, + filename + '.metadata') + preview_path = os.path.join(dir_path, JOURNAL_METADATA_DIR, + filename + '.preview') + + if not os.path.exists(metadata_path): + return None + + try: + metadata = simplejson.load(open(metadata_path)) + except (ValueError, EnvironmentError): + os.unlink(metadata_path) + if os.path.exists(preview_path): + os.unlink(preview_path) + logging.error('Could not read metadata for file %r on ' + 'external device.', filename) + return None + else: + metadata['uid'] = os.path.join(dir_path, filename) + + if not fetch_preview: + if 'preview' in metadata: + del(metadata['preview']) + else: + if os.path.exists(preview_path): + try: + metadata['preview'] = dbus.ByteArray(open(preview_path).read()) + except EnvironmentError: + logging.debug('Could not read preview for file %r on ' + 'external device.', filename) + + return metadata + + +def _get_datastore(): + global _datastore + if _datastore is None: + bus = dbus.SessionBus() + remote_object = bus.get_object(DS_DBUS_SERVICE, DS_DBUS_PATH) + _datastore = dbus.Interface(remote_object, DS_DBUS_INTERFACE) + + _datastore.connect_to_signal('Created', _datastore_created_cb) + _datastore.connect_to_signal('Updated', _datastore_updated_cb) + _datastore.connect_to_signal('Deleted', _datastore_deleted_cb) + + return _datastore + + +def _datastore_created_cb(object_id): + created.send(None, object_id=object_id) + + +def _datastore_updated_cb(object_id): + updated.send(None, object_id=object_id) + + +def _datastore_deleted_cb(object_id): + deleted.send(None, object_id=object_id) + + +def find(query_, page_size): + """Returns a ResultSet + """ + query = query_.copy() + + mount_points = query.pop('mountpoints', ['/']) + if mount_points is None or len(mount_points) != 1: + raise ValueError('Exactly one mount point must be specified') + + if mount_points[0] == '/': + return DatastoreResultSet(query, page_size) + else: + return InplaceResultSet(query, page_size, mount_points[0]) + + +def _get_mount_point(path): + dir_path = os.path.dirname(path) + while dir_path: + if os.path.ismount(dir_path): + return dir_path + else: + dir_path = dir_path.rsplit(os.sep, 1)[0] + return None + + +def get(object_id): + """Returns the metadata for an object + """ + if os.path.exists(object_id): + stat = os.stat(object_id) + metadata = _get_file_metadata(object_id, stat) + metadata['mountpoint'] = _get_mount_point(object_id) + else: + metadata = _get_datastore().get_properties(object_id, byte_arrays=True) + metadata['mountpoint'] = '/' + return metadata + + +def get_file(object_id): + """Returns the file for an object + """ + if os.path.exists(object_id): + logging.debug('get_file asked for file with path %r', object_id) + return object_id + else: + logging.debug('get_file asked for entry with id %r', object_id) + file_path = _get_datastore().get_filename(object_id) + if file_path: + return util.TempFilePath(file_path) + else: + return None + + +def get_file_size(object_id): + """Return the file size for an object + """ + logging.debug('get_file_size %r', object_id) + if os.path.exists(object_id): + return os.stat(object_id).st_size + + file_path = _get_datastore().get_filename(object_id) + if file_path: + size = os.stat(file_path).st_size + os.remove(file_path) + return size + + return 0 + + +def get_unique_values(key): + """Returns a list with the different values a property has taken + """ + empty_dict = dbus.Dictionary({}, signature='ss') + return _get_datastore().get_uniquevaluesfor(key, empty_dict) + + +def delete(object_id): + """Removes an object from persistent storage + """ + if not os.path.exists(object_id): + _get_datastore().delete(object_id) + else: + os.unlink(object_id) + dir_path = os.path.dirname(object_id) + filename = os.path.basename(object_id) + old_files = [os.path.join(dir_path, JOURNAL_METADATA_DIR, + filename + '.metadata'), + os.path.join(dir_path, JOURNAL_METADATA_DIR, + filename + '.preview')] + for old_file in old_files: + if os.path.exists(old_file): + try: + os.unlink(old_file) + except EnvironmentError: + logging.error('Could not remove metadata=%s ' + 'for file=%s', old_file, filename) + deleted.send(None, object_id=object_id) + + +def copy(metadata, mount_point): + """Copies an object to another mount point + """ + metadata = get(metadata['uid']) + if mount_point == '/' and metadata['icon-color'] == '#000000,#ffffff': + client = gconf.client_get_default() + metadata['icon-color'] = client.get_string('/desktop/sugar/user/color') + file_path = get_file(metadata['uid']) + if file_path is None: + file_path = '' + + metadata['mountpoint'] = mount_point + del metadata['uid'] + + return write(metadata, file_path, transfer_ownership=False) + + +def write(metadata, file_path='', update_mtime=True, transfer_ownership=True): + """Creates or updates an entry for that id + """ + logging.debug('model.write %r %r %r', metadata.get('uid', ''), file_path, + update_mtime) + if update_mtime: + metadata['mtime'] = datetime.now().isoformat() + metadata['timestamp'] = int(time.time()) + + if metadata.get('mountpoint', '/') == '/': + if metadata.get('uid', ''): + object_id = _get_datastore().update(metadata['uid'], + dbus.Dictionary(metadata), + file_path, + transfer_ownership) + else: + object_id = _get_datastore().create(dbus.Dictionary(metadata), + file_path, + transfer_ownership) + else: + object_id = _write_entry_on_external_device(metadata, file_path) + + return object_id + + +def _rename_entry_on_external_device(file_path, destination_path, + metadata_dir_path): + """Rename an entry with the associated metadata on an external device.""" + old_file_path = file_path + if old_file_path != destination_path: + os.rename(file_path, destination_path) + old_fname = os.path.basename(file_path) + old_files = [os.path.join(metadata_dir_path, + old_fname + '.metadata'), + os.path.join(metadata_dir_path, + old_fname + '.preview')] + for ofile in old_files: + if os.path.exists(ofile): + try: + os.unlink(ofile) + except EnvironmentError: + logging.error('Could not remove metadata=%s ' + 'for file=%s', ofile, old_fname) + + +def _write_entry_on_external_device(metadata, file_path): + """Create and update an entry copied from the + DS to an external storage device. + + Besides copying the associated file a file for the preview + and one for the metadata are stored in the hidden directory + .Sugar-Metadata. + + This function handles renames of an entry on the + external device and avoids name collisions. Renames are + handled failsafe. + + """ + if 'uid' in metadata and os.path.exists(metadata['uid']): + file_path = metadata['uid'] + + if not file_path or not os.path.exists(file_path): + raise ValueError('Entries without a file cannot be copied to ' + 'removable devices') + + if not metadata.get('title'): + metadata['title'] = _('Untitled') + file_name = get_file_name(metadata['title'], metadata['mime_type']) + + destination_path = os.path.join(metadata['mountpoint'], file_name) + if destination_path != file_path: + file_name = get_unique_file_name(metadata['mountpoint'], file_name) + destination_path = os.path.join(metadata['mountpoint'], file_name) + clean_name, extension_ = os.path.splitext(file_name) + metadata['title'] = clean_name + + metadata_copy = metadata.copy() + metadata_copy.pop('mountpoint', None) + metadata_copy.pop('uid', None) + metadata_copy.pop('filesize', None) + + metadata_dir_path = os.path.join(metadata['mountpoint'], + JOURNAL_METADATA_DIR) + if not os.path.exists(metadata_dir_path): + os.mkdir(metadata_dir_path) + + preview = None + if 'preview' in metadata_copy: + preview = metadata_copy['preview'] + preview_fname = file_name + '.preview' + metadata_copy.pop('preview', None) + + try: + metadata_json = simplejson.dumps(metadata_copy) + except (UnicodeDecodeError, EnvironmentError): + logging.error('Could not convert metadata to json.') + else: + (fh, fn) = tempfile.mkstemp(dir=metadata['mountpoint']) + os.write(fh, metadata_json) + os.close(fh) + os.rename(fn, os.path.join(metadata_dir_path, file_name + '.metadata')) + + if preview: + (fh, fn) = tempfile.mkstemp(dir=metadata['mountpoint']) + os.write(fh, preview) + os.close(fh) + os.rename(fn, os.path.join(metadata_dir_path, preview_fname)) + + if not os.path.dirname(destination_path) == os.path.dirname(file_path): + shutil.copy(file_path, destination_path) + else: + _rename_entry_on_external_device(file_path, destination_path, + metadata_dir_path) + + object_id = destination_path + created.send(None, object_id=object_id) + + return object_id + + +def get_file_name(title, mime_type): + file_name = title + + extension = mime.get_primary_extension(mime_type) + if extension is not None and extension: + extension = '.' + extension + if not file_name.endswith(extension): + file_name += extension + + # Invalid characters in VFAT filenames. From + # http://en.wikipedia.org/wiki/File_Allocation_Table + invalid_chars = ['/', '\\', ':', '*', '?', '"', '<', '>', '|', '\x7F'] + invalid_chars.extend([chr(x) for x in range(0, 32)]) + for char in invalid_chars: + file_name = file_name.replace(char, '_') + + # FAT limit is 255, leave some space for uniqueness + max_len = 250 + if len(file_name) > max_len: + name, extension = os.path.splitext(file_name) + file_name = name[0:max_len - len(extension)] + extension + + return file_name + + +def get_unique_file_name(mount_point, file_name): + if os.path.exists(os.path.join(mount_point, file_name)): + i = 1 + name, extension = os.path.splitext(file_name) + while len(file_name) <= 255: + file_name = name + '_' + str(i) + extension + if not os.path.exists(os.path.join(mount_point, file_name)): + break + i += 1 + + return file_name + + +def is_editable(metadata): + if metadata.get('mountpoint', '/') == '/': + return True + else: + return os.access(metadata['mountpoint'], os.W_OK) + + +def get_documents_path(): + """Gets the path of the DOCUMENTS folder + + If xdg-user-dir can not find the DOCUMENTS folder it returns + $HOME, which we omit. xdg-user-dir handles localization + (i.e. translation) of the filenames. + + Returns: Path to $HOME/DOCUMENTS or None if an error occurs + """ + try: + pipe = subprocess.Popen(['xdg-user-dir', 'DOCUMENTS'], + stdout=subprocess.PIPE) + documents_path = os.path.normpath(pipe.communicate()[0].strip()) + if os.path.exists(documents_path) and \ + os.environ.get('HOME') != documents_path: + return documents_path + except OSError, exception: + if exception.errno != errno.ENOENT: + logging.exception('Could not run xdg-user-dir') + return None diff --git a/src/jarabe/journal/objectchooser.py b/src/jarabe/journal/objectchooser.py new file mode 100644 index 0000000..ecb8ecf --- /dev/null +++ b/src/jarabe/journal/objectchooser.py @@ -0,0 +1,199 @@ +# Copyright (C) 2007, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +import logging + +import gobject +import gtk +import wnck + +from sugar.graphics import style +from sugar.graphics.toolbutton import ToolButton + +from jarabe.journal.listview import BaseListView +from jarabe.journal.listmodel import ListModel +from jarabe.journal.journaltoolbox import SearchToolbar +from jarabe.journal.volumestoolbar import VolumesToolbar + + +class ObjectChooser(gtk.Window): + + __gtype_name__ = 'ObjectChooser' + + __gsignals__ = { + 'response': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([int])), + } + + def __init__(self, parent=None, what_filter=''): + gtk.Window.__init__(self) + self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + self.set_decorated(False) + self.set_position(gtk.WIN_POS_CENTER_ALWAYS) + self.set_border_width(style.LINE_WIDTH) + + self._selected_object_id = None + + self.add_events(gtk.gdk.VISIBILITY_NOTIFY_MASK) + self.connect('visibility-notify-event', + self.__visibility_notify_event_cb) + self.connect('delete-event', self.__delete_event_cb) + self.connect('key-press-event', self.__key_press_event_cb) + + if parent is None: + logging.warning('ObjectChooser: No parent window specified') + else: + self.connect('realize', self.__realize_cb, parent) + + screen = wnck.screen_get_default() + screen.connect('window-closed', self.__window_closed_cb, parent) + + vbox = gtk.VBox() + self.add(vbox) + vbox.show() + + title_box = TitleBox() + title_box.connect('volume-changed', self.__volume_changed_cb) + title_box.close_button.connect('clicked', + self.__close_button_clicked_cb) + title_box.set_size_request(-1, style.GRID_CELL_SIZE) + vbox.pack_start(title_box, expand=False) + title_box.show() + + separator = gtk.HSeparator() + vbox.pack_start(separator, expand=False) + separator.show() + + self._toolbar = SearchToolbar() + self._toolbar.connect('query-changed', self.__query_changed_cb) + self._toolbar.set_size_request(-1, style.GRID_CELL_SIZE) + vbox.pack_start(self._toolbar, expand=False) + self._toolbar.show() + + self._list_view = ChooserListView() + self._list_view.connect('entry-activated', self.__entry_activated_cb) + vbox.pack_start(self._list_view) + self._list_view.show() + + self._toolbar.set_mount_point('/') + + width = gtk.gdk.screen_width() - style.GRID_CELL_SIZE * 2 + height = gtk.gdk.screen_height() - style.GRID_CELL_SIZE * 2 + self.set_size_request(width, height) + + if what_filter: + self._toolbar.set_what_filter(what_filter) + + def __realize_cb(self, chooser, parent): + self.window.set_transient_for(parent) + # TODO: Should we disconnect the signal here? + + def __window_closed_cb(self, screen, window, parent): + if window.get_xid() == parent.xid: + self.destroy() + + def __entry_activated_cb(self, list_view, uid): + self._selected_object_id = uid + self.emit('response', gtk.RESPONSE_ACCEPT) + + def __delete_event_cb(self, chooser, event): + self.emit('response', gtk.RESPONSE_DELETE_EVENT) + + def __key_press_event_cb(self, widget, event): + keyname = gtk.gdk.keyval_name(event.keyval) + if keyname == 'Escape': + self.emit('response', gtk.RESPONSE_DELETE_EVENT) + + def __close_button_clicked_cb(self, button): + self.emit('response', gtk.RESPONSE_DELETE_EVENT) + + def get_selected_object_id(self): + return self._selected_object_id + + def __query_changed_cb(self, toolbar, query): + self._list_view.update_with_query(query) + + def __volume_changed_cb(self, volume_toolbar, mount_point): + logging.debug('Selected volume: %r.', mount_point) + self._toolbar.set_mount_point(mount_point) + + def __visibility_notify_event_cb(self, window, event): + logging.debug('visibility_notify_event_cb %r', self) + visible = event.state == gtk.gdk.VISIBILITY_FULLY_OBSCURED + self._list_view.set_is_visible(visible) + + +class TitleBox(VolumesToolbar): + __gtype_name__ = 'TitleBox' + + def __init__(self): + VolumesToolbar.__init__(self) + + label = gtk.Label() + label.set_markup('%s' % _('Choose an object')) + label.set_alignment(0, 0.5) + self._add_widget(label, expand=True) + + self.close_button = ToolButton(icon_name='dialog-cancel') + self.close_button.set_tooltip(_('Close')) + self.insert(self.close_button, -1) + self.close_button.show() + + def _add_widget(self, widget, expand=False): + tool_item = gtk.ToolItem() + tool_item.set_expand(expand) + + tool_item.add(widget) + widget.show() + + self.insert(tool_item, -1) + tool_item.show() + + +class ChooserListView(BaseListView): + __gtype_name__ = 'ChooserListView' + + __gsignals__ = { + 'entry-activated': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([str])), + } + + def __init__(self): + BaseListView.__init__(self) + + self.cell_icon.props.show_palette = False + self.tree_view.props.hover_selection = True + + self.tree_view.connect('button-release-event', + self.__button_release_event_cb) + + def __entry_activated_cb(self, entry): + self.emit('entry-activated', entry) + + def __button_release_event_cb(self, tree_view, event): + if event.window != tree_view.get_bin_window(): + return False + + pos = tree_view.get_path_at_pos(int(event.x), int(event.y)) + if pos is None: + return False + + path, column_, x_, y_ = pos + uid = tree_view.get_model()[path][ListModel.COLUMN_UID] + self.emit('entry-activated', uid) + + return False diff --git a/src/jarabe/journal/palettes.py b/src/jarabe/journal/palettes.py new file mode 100644 index 0000000..8fc1e5d --- /dev/null +++ b/src/jarabe/journal/palettes.py @@ -0,0 +1,383 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +import logging +import os + +import gobject +import gtk +import gconf +import gio +import glib + +from sugar.graphics import style +from sugar.graphics.palette import Palette +from sugar.graphics.menuitem import MenuItem +from sugar.graphics.icon import Icon +from sugar.graphics.xocolor import XoColor +from sugar import mime + +from jarabe.model import friends +from jarabe.model import filetransfer +from jarabe.model import mimeregistry +from jarabe.journal import misc +from jarabe.journal import model + + +class ObjectPalette(Palette): + + __gtype_name__ = 'ObjectPalette' + + __gsignals__ = { + 'detail-clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str])), + 'volume-error': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str, str])), + } + + def __init__(self, metadata, detail=False): + + self._metadata = metadata + + activity_icon = Icon(icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR) + activity_icon.props.file = misc.get_icon_name(metadata) + color = misc.get_icon_color(metadata) + activity_icon.props.xo_color = color + + if 'title' in metadata: + title = gobject.markup_escape_text(metadata['title']) + else: + title = glib.markup_escape_text(_('Untitled')) + + Palette.__init__(self, primary_text=title, + icon=activity_icon) + + if misc.get_activities(metadata) or misc.is_bundle(metadata): + if metadata.get('activity_id', ''): + resume_label = _('Resume') + resume_with_label = _('Resume with') + else: + resume_label = _('Start') + resume_with_label = _('Start with') + menu_item = MenuItem(resume_label, 'activity-start') + menu_item.connect('activate', self.__start_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + menu_item = MenuItem(resume_with_label, 'activity-start') + self.menu.append(menu_item) + menu_item.show() + start_with_menu = StartWithMenu(self._metadata) + menu_item.set_submenu(start_with_menu) + + else: + menu_item = MenuItem(_('No activity to start entry')) + menu_item.set_sensitive(False) + self.menu.append(menu_item) + menu_item.show() + + menu_item = MenuItem(_('Copy to')) + icon = Icon(icon_name='edit-copy', xo_color=color, + icon_size=gtk.ICON_SIZE_MENU) + menu_item.set_image(icon) + self.menu.append(menu_item) + menu_item.show() + copy_menu = CopyMenu(metadata) + copy_menu.connect('volume-error', self.__volume_error_cb) + menu_item.set_submenu(copy_menu) + + if self._metadata['mountpoint'] == '/': + menu_item = MenuItem(_('Duplicate')) + icon = Icon(icon_name='edit-duplicate', xo_color=color, + icon_size=gtk.ICON_SIZE_MENU) + menu_item.set_image(icon) + menu_item.connect('activate', self.__duplicate_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + menu_item = MenuItem(_('Send to'), 'document-send') + self.menu.append(menu_item) + menu_item.show() + + friends_menu = FriendsMenu() + friends_menu.connect('friend-selected', self.__friend_selected_cb) + menu_item.set_submenu(friends_menu) + + if detail == True: + menu_item = MenuItem(_('View Details'), 'go-right') + menu_item.connect('activate', self.__detail_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + menu_item = MenuItem(_('Erase'), 'list-remove') + menu_item.connect('activate', self.__erase_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + def __start_activate_cb(self, menu_item): + misc.resume(self._metadata) + + def __duplicate_activate_cb(self, menu_item): + file_path = model.get_file(self._metadata['uid']) + try: + model.copy(self._metadata, '/') + except IOError, e: + logging.exception('Error while copying the entry. %s', e.strerror) + self.emit('volume-error', + _('Error while copying the entry. %s') % e.strerror, + _('Error')) + + def __erase_activate_cb(self, menu_item): + model.delete(self._metadata['uid']) + + def __detail_activate_cb(self, menu_item): + self.emit('detail-clicked', self._metadata['uid']) + + def __volume_error_cb(self, menu_item, message, severity): + self.emit('volume-error', message, severity) + + def __friend_selected_cb(self, menu_item, buddy): + logging.debug('__friend_selected_cb') + file_name = model.get_file(self._metadata['uid']) + + if not file_name or not os.path.exists(file_name): + logging.warn('Entries without a file cannot be sent.') + self.emit('volume-error', + _('Entries without a file cannot be sent.'), + _('Warning')) + return + + title = str(self._metadata['title']) + description = str(self._metadata.get('description', '')) + mime_type = str(self._metadata['mime_type']) + + if not mime_type: + mime_type = mime.get_for_file(file_name) + + filetransfer.start_transfer(buddy, file_name, title, description, + mime_type) + + +class CopyMenu(gtk.Menu): + __gtype_name__ = 'JournalCopyMenu' + + __gsignals__ = { + 'volume-error': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str, str])), + } + + def __init__(self, metadata): + gobject.GObject.__init__(self) + + self._metadata = metadata + + clipboard_menu = ClipboardMenu(self._metadata) + clipboard_menu.set_image(Icon(icon_name='toolbar-edit', + icon_size=gtk.ICON_SIZE_MENU)) + clipboard_menu.connect('volume-error', self.__volume_error_cb) + self.append(clipboard_menu) + clipboard_menu.show() + + if self._metadata['mountpoint'] != '/': + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + journal_menu = VolumeMenu(self._metadata, _('Journal'), '/') + journal_menu.set_image(Icon(icon_name='activity-journal', + xo_color=color, + icon_size=gtk.ICON_SIZE_MENU)) + journal_menu.connect('volume-error', self.__volume_error_cb) + self.append(journal_menu) + journal_menu.show() + + volume_monitor = gio.volume_monitor_get() + icon_theme = gtk.icon_theme_get_default() + for mount in volume_monitor.get_mounts(): + if self._metadata['mountpoint'] == mount.get_root().get_path(): + continue + volume_menu = VolumeMenu(self._metadata, mount.get_name(), + mount.get_root().get_path()) + for name in mount.get_icon().props.names: + if icon_theme.has_icon(name): + volume_menu.set_image(Icon(icon_name=name, + icon_size=gtk.ICON_SIZE_MENU)) + break + volume_menu.connect('volume-error', self.__volume_error_cb) + self.append(volume_menu) + volume_menu.show() + + def __volume_error_cb(self, menu_item, message, severity): + self.emit('volume-error', message, severity) + + +class VolumeMenu(MenuItem): + __gtype_name__ = 'JournalVolumeMenu' + + __gsignals__ = { + 'volume-error': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str, str])), + } + + def __init__(self, metadata, label, mount_point): + MenuItem.__init__(self, label) + self._metadata = metadata + self.connect('activate', self.__copy_to_volume_cb, mount_point) + + def __copy_to_volume_cb(self, menu_item, mount_point): + file_path = model.get_file(self._metadata['uid']) + + if not file_path or not os.path.exists(file_path): + logging.warn('Entries without a file cannot be copied.') + self.emit('volume-error', + _('Entries without a file cannot be copied.'), + _('Warning')) + return + + try: + model.copy(self._metadata, mount_point) + except IOError, e: + logging.exception('Error while copying the entry. %s', e.strerror) + self.emit('volume-error', + _('Error while copying the entry. %s') % e.strerror, + _('Error')) + + +class ClipboardMenu(MenuItem): + __gtype_name__ = 'JournalClipboardMenu' + + __gsignals__ = { + 'volume-error': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str, str])), + } + + def __init__(self, metadata): + MenuItem.__init__(self, _('Clipboard')) + + self._temp_file_path = None + self._metadata = metadata + self.connect('activate', self.__copy_to_clipboard_cb) + + def __copy_to_clipboard_cb(self, menu_item): + file_path = model.get_file(self._metadata['uid']) + if not file_path or not os.path.exists(file_path): + logging.warn('Entries without a file cannot be copied.') + self.emit('volume-error', + _('Entries without a file cannot be copied.'), + _('Warning')) + return + + clipboard = gtk.Clipboard() + clipboard.set_with_data([('text/uri-list', 0, 0)], + self.__clipboard_get_func_cb, + self.__clipboard_clear_func_cb) + + def __clipboard_get_func_cb(self, clipboard, selection_data, info, data): + # Get hold of a reference so the temp file doesn't get deleted + self._temp_file_path = model.get_file(self._metadata['uid']) + logging.debug('__clipboard_get_func_cb %r', self._temp_file_path) + selection_data.set_uris(['file://' + self._temp_file_path]) + + def __clipboard_clear_func_cb(self, clipboard, data): + # Release and delete the temp file + self._temp_file_path = None + + +class FriendsMenu(gtk.Menu): + __gtype_name__ = 'JournalFriendsMenu' + + __gsignals__ = { + 'friend-selected': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + } + + def __init__(self): + gobject.GObject.__init__(self) + + if filetransfer.file_transfer_available(): + friends_model = friends.get_model() + for friend in friends_model: + if friend.is_present(): + menu_item = MenuItem(text_label=friend.get_nick(), + icon_name='computer-xo', + xo_color=friend.get_color()) + menu_item.connect('activate', self.__item_activate_cb, + friend) + self.append(menu_item) + menu_item.show() + + if not self.get_children(): + menu_item = MenuItem(_('No friends present')) + menu_item.set_sensitive(False) + self.append(menu_item) + menu_item.show() + else: + menu_item = MenuItem(_('No valid connection found')) + menu_item.set_sensitive(False) + self.append(menu_item) + menu_item.show() + + def __item_activate_cb(self, menu_item, friend): + self.emit('friend-selected', friend) + + +class StartWithMenu(gtk.Menu): + __gtype_name__ = 'JournalStartWithMenu' + + def __init__(self, metadata): + gobject.GObject.__init__(self) + + self._metadata = metadata + + for activity_info in misc.get_activities(metadata): + menu_item = MenuItem(activity_info.get_name()) + menu_item.set_image(Icon(file=activity_info.get_icon(), + icon_size=gtk.ICON_SIZE_MENU)) + menu_item.connect('activate', self.__item_activate_cb, + activity_info.get_bundle_id()) + self.append(menu_item) + menu_item.show() + + if not self.get_children(): + if metadata.get('activity_id', ''): + resume_label = _('No activity to resume entry') + else: + resume_label = _('No activity to start entry') + menu_item = MenuItem(resume_label) + menu_item.set_sensitive(False) + self.append(menu_item) + menu_item.show() + + def __item_activate_cb(self, menu_item, service_name): + mime_type = self._metadata.get('mime_type', '') + if mime_type: + mime_registry = mimeregistry.get_registry() + mime_registry.set_default_activity(mime_type, service_name) + misc.resume(self._metadata, service_name) + + +class BuddyPalette(Palette): + def __init__(self, buddy): + self._buddy = buddy + + nick, colors = buddy + buddy_icon = Icon(icon_name='computer-xo', + icon_size=style.STANDARD_ICON_SIZE, + xo_color=XoColor(colors)) + + Palette.__init__(self, primary_text=glib.markup_escape_text(nick), + icon=buddy_icon) + + # TODO: Support actions on buddies, like make friend, invite, etc. diff --git a/src/jarabe/journal/volumestoolbar.py b/src/jarabe/journal/volumestoolbar.py new file mode 100644 index 0000000..71b6ea8 --- /dev/null +++ b/src/jarabe/journal/volumestoolbar.py @@ -0,0 +1,404 @@ +# Copyright (C) 2007, 2011, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +import os +import statvfs +from gettext import gettext as _ + +import gobject +import gio +import glib +import gtk +import gconf +import cPickle +import xapian +import simplejson +import tempfile +import shutil + +from sugar.graphics.radiotoolbutton import RadioToolButton +from sugar.graphics.palette import Palette +from sugar.graphics.xocolor import XoColor +from sugar import env + +from jarabe.journal import model +from jarabe.view.palettes import VolumePalette + + +_JOURNAL_0_METADATA_DIR = '.olpc.store' + + +def _get_id(document): + """Get the ID for the document in the xapian database.""" + tl = document.termlist() + try: + term = tl.skip_to('Q').term + if len(term) == 0 or term[0] != 'Q': + return None + return term[1:] + except StopIteration: + return None + + +def _convert_entries(root): + """Convert entries written by the datastore version 0. + + The metadata and the preview will be written using the new + scheme for writing Journal entries to removable storage + devices. + + - entries that do not have an associated file are not + converted. + - if an entry has no title we set it to Untitled and rename + the file accordingly, taking care of creating a unique + filename + + """ + try: + database = xapian.Database(os.path.join(root, _JOURNAL_0_METADATA_DIR, + 'index')) + except xapian.DatabaseError: + logging.exception('Convert DS-0 Journal entries: error reading db: %s', + os.path.join(root, _JOURNAL_0_METADATA_DIR, 'index')) + return + + metadata_dir_path = os.path.join(root, model.JOURNAL_METADATA_DIR) + if not os.path.exists(metadata_dir_path): + try: + os.mkdir(metadata_dir_path) + except EnvironmentError: + logging.error('Convert DS-0 Journal entries: ' + 'error creating the Journal metadata directory.') + return + + for posting_item in database.postlist(''): + try: + document = database.get_document(posting_item.docid) + except xapian.DocNotFoundError, e: + logging.debug('Convert DS-0 Journal entries: error getting ' + 'document %s: %s', posting_item.docid, e) + continue + _convert_entry(root, document) + + +def _convert_entry(root, document): + try: + metadata_loaded = cPickle.loads(document.get_data()) + except cPickle.PickleError, e: + logging.debug('Convert DS-0 Journal entries: ' + 'error converting metadata: %s', e) + return + + if not ('activity_id' in metadata_loaded and + 'mime_type' in metadata_loaded and + 'title' in metadata_loaded): + return + + metadata = {} + + uid = _get_id(document) + if uid is None: + return + + for key, value in metadata_loaded.items(): + metadata[str(key)] = str(value[0]) + + if 'uid' not in metadata: + metadata['uid'] = uid + + filename = metadata.pop('filename', None) + if not filename: + return + if not os.path.exists(os.path.join(root, filename)): + return + + if not metadata.get('title'): + metadata['title'] = _('Untitled') + fn = model.get_file_name(metadata['title'], + metadata['mime_type']) + new_filename = model.get_unique_file_name(root, fn) + os.rename(os.path.join(root, filename), + os.path.join(root, new_filename)) + filename = new_filename + + preview_path = os.path.join(root, _JOURNAL_0_METADATA_DIR, + 'preview', uid) + if os.path.exists(preview_path): + preview_fname = filename + '.preview' + new_preview_path = os.path.join(root, + model.JOURNAL_METADATA_DIR, + preview_fname) + if not os.path.exists(new_preview_path): + shutil.copy(preview_path, new_preview_path) + + metadata_fname = filename + '.metadata' + metadata_path = os.path.join(root, model.JOURNAL_METADATA_DIR, + metadata_fname) + if not os.path.exists(metadata_path): + (fh, fn) = tempfile.mkstemp(dir=root) + os.write(fh, simplejson.dumps(metadata)) + os.close(fh) + os.rename(fn, metadata_path) + + logging.debug('Convert DS-0 Journal entries: entry converted: ' + 'file=%s metadata=%s', + os.path.join(root, filename), metadata) + + +class VolumesToolbar(gtk.Toolbar): + __gtype_name__ = 'VolumesToolbar' + + __gsignals__ = { + 'volume-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str])), + 'volume-error': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str, str])), + } + + def __init__(self): + gtk.Toolbar.__init__(self) + self._mount_added_hid = None + self._mount_removed_hid = None + + button = JournalButton() + button.connect('toggled', self._button_toggled_cb) + self.insert(button, 0) + button.show() + self._volume_buttons = [button] + + self.connect('destroy', self.__destroy_cb) + + gobject.idle_add(self._set_up_volumes) + + def __destroy_cb(self, widget): + volume_monitor = gio.volume_monitor_get() + volume_monitor.disconnect(self._mount_added_hid) + volume_monitor.disconnect(self._mount_removed_hid) + + def _set_up_volumes(self): + self._set_up_documents_button() + + volume_monitor = gio.volume_monitor_get() + self._mount_added_hid = volume_monitor.connect('mount-added', + self.__mount_added_cb) + self._mount_removed_hid = volume_monitor.connect('mount-removed', + self.__mount_removed_cb) + + for mount in volume_monitor.get_mounts(): + self._add_button(mount) + + def _set_up_documents_button(self): + documents_path = model.get_documents_path() + if documents_path is not None: + button = DocumentsButton(documents_path) + button.props.group = self._volume_buttons[0] + label = glib.markup_escape_text(_('Documents')) + button.set_palette(Palette(label)) + button.connect('toggled', self._button_toggled_cb) + button.show() + + position = self.get_item_index(self._volume_buttons[-1]) + 1 + self.insert(button, position) + self._volume_buttons.append(button) + self.show() + + def __mount_added_cb(self, volume_monitor, mount): + self._add_button(mount) + + def __mount_removed_cb(self, volume_monitor, mount): + self._remove_button(mount) + + def _add_button(self, mount): + logging.debug('VolumeToolbar._add_button: %r', mount.get_name()) + + if os.path.exists(os.path.join(mount.get_root().get_path(), + _JOURNAL_0_METADATA_DIR)): + logging.debug('Convert DS-0 Journal entries: starting conversion') + gobject.idle_add(_convert_entries, mount.get_root().get_path()) + + button = VolumeButton(mount) + button.props.group = self._volume_buttons[0] + button.connect('toggled', self._button_toggled_cb) + button.connect('volume-error', self.__volume_error_cb) + position = self.get_item_index(self._volume_buttons[-1]) + 1 + self.insert(button, position) + button.show() + + self._volume_buttons.append(button) + + if len(self.get_children()) > 1: + self.show() + + def __volume_error_cb(self, button, strerror, severity): + self.emit('volume-error', strerror, severity) + + def _button_toggled_cb(self, button): + if button.props.active: + self.emit('volume-changed', button.mount_point) + + def _unmount_activated_cb(self, menu_item, mount): + logging.debug('VolumesToolbar._unmount_activated_cb: %r', mount) + mount.unmount(self.__unmount_cb) + + def __unmount_cb(self, source, result): + logging.debug('__unmount_cb %r %r', source, result) + + def _get_button_for_mount(self, mount): + mount_point = mount.get_root().get_path() + for button in self.get_children(): + if button.mount_point == mount_point: + return button + logging.error('Couldnt find button with mount_point %r', mount_point) + return None + + def _remove_button(self, mount): + button = self._get_button_for_mount(mount) + self._volume_buttons.remove(button) + self.remove(button) + self.get_children()[0].props.active = True + + if len(self.get_children()) < 2: + self.hide() + + def set_active_volume(self, mount): + button = self._get_button_for_mount(mount) + button.props.active = True + + +class BaseButton(RadioToolButton): + __gsignals__ = { + 'volume-error': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str, str])), + } + + def __init__(self, mount_point): + RadioToolButton.__init__(self) + + self.mount_point = mount_point + + self.drag_dest_set(gtk.DEST_DEFAULT_ALL, + [('journal-object-id', 0, 0)], + gtk.gdk.ACTION_COPY) + self.connect('drag-data-received', self._drag_data_received_cb) + + def _drag_data_received_cb(self, widget, drag_context, x, y, + selection_data, info, timestamp): + object_id = selection_data.data + metadata = model.get(object_id) + file_path = model.get_file(metadata['uid']) + if not file_path or not os.path.exists(file_path): + logging.warn('Entries without a file cannot be copied.') + self.emit('volume-error', + _('Entries without a file cannot be copied.'), + _('Warning')) + return + + try: + model.copy(metadata, self.mount_point) + except IOError, e: + logging.exception('Error while copying the entry. %s', e.strerror) + self.emit('volume-error', + _('Error while copying the entry. %s') % e.strerror, + _('Error')) + + +class VolumeButton(BaseButton): + def __init__(self, mount): + self._mount = mount + mount_point = mount.get_root().get_path() + BaseButton.__init__(self, mount_point) + + icon_name = None + icon_theme = gtk.icon_theme_get_default() + for icon_name in mount.get_icon().props.names: + icon_info = icon_theme.lookup_icon(icon_name, + gtk.ICON_SIZE_LARGE_TOOLBAR, 0) + if icon_info is not None: + break + + if icon_name is None: + icon_name = 'drive' + + self.props.named_icon = icon_name + + # TODO: retrieve the colors from the owner of the device + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + self.props.xo_color = color + + def create_palette(self): + palette = VolumePalette(self._mount) + #palette.props.invoker = FrameWidgetInvoker(self) + #palette.set_group_id('frame') + return palette + + +class JournalButton(BaseButton): + def __init__(self): + BaseButton.__init__(self, mount_point='/') + + self.props.named_icon = 'activity-journal' + + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + self.props.xo_color = color + + def create_palette(self): + palette = JournalButtonPalette(self) + return palette + + +class JournalButtonPalette(Palette): + + def __init__(self, mount): + Palette.__init__(self, glib.markup_escape_text(_('Journal'))) + vbox = gtk.VBox() + self.set_content(vbox) + vbox.show() + + self._progress_bar = gtk.ProgressBar() + vbox.add(self._progress_bar) + self._progress_bar.show() + + self._free_space_label = gtk.Label() + self._free_space_label.set_alignment(0.5, 0.5) + vbox.add(self._free_space_label) + self._free_space_label.show() + + self.connect('popup', self.__popup_cb) + + def __popup_cb(self, palette): + stat = os.statvfs(env.get_profile_path()) + free_space = stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL] + total_space = stat[statvfs.F_BSIZE] * stat[statvfs.F_BLOCKS] + + fraction = (total_space - free_space) / float(total_space) + self._progress_bar.props.fraction = fraction + self._free_space_label.props.label = _('%(free_space)d MB Free') % \ + {'free_space': free_space / (1024 * 1024)} + + +class DocumentsButton(BaseButton): + + def __init__(self, documents_path): + BaseButton.__init__(self, mount_point=documents_path) + + self.props.named_icon = 'user-documents' + + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + self.props.xo_color = color diff --git a/src/jarabe/model/Makefile.am b/src/jarabe/model/Makefile.am new file mode 100644 index 0000000..2fc6b1c --- /dev/null +++ b/src/jarabe/model/Makefile.am @@ -0,0 +1,20 @@ +sugardir = $(pythondir)/jarabe/model +sugar_PYTHON = \ + adhoc.py \ + __init__.py \ + buddy.py \ + bundleregistry.py \ + filetransfer.py \ + friends.py \ + invites.py \ + olpcmesh.py \ + mimeregistry.py \ + neighborhood.py \ + network.py \ + notifications.py \ + shell.py \ + screen.py \ + session.py \ + sound.py \ + speech.py \ + telepathyclient.py diff --git a/src/jarabe/model/Makefile.in b/src/jarabe/model/Makefile.in new file mode 100644 index 0000000..f76fc87 --- /dev/null +++ b/src/jarabe/model/Makefile.in @@ -0,0 +1,457 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src/jarabe/model +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pythondir)/jarabe/model +sugar_PYTHON = \ + adhoc.py \ + __init__.py \ + buddy.py \ + bundleregistry.py \ + filetransfer.py \ + friends.py \ + invites.py \ + olpcmesh.py \ + mimeregistry.py \ + neighborhood.py \ + network.py \ + notifications.py \ + shell.py \ + screen.py \ + session.py \ + sound.py \ + speech.py \ + telepathyclient.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/jarabe/model/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/jarabe/model/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/jarabe/model/__init__.py b/src/jarabe/model/__init__.py new file mode 100644 index 0000000..85f6a24 --- /dev/null +++ b/src/jarabe/model/__init__.py @@ -0,0 +1,15 @@ +# Copyright (C) 2006-2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/src/jarabe/model/adhoc.py b/src/jarabe/model/adhoc.py new file mode 100644 index 0000000..68a9aa3 --- /dev/null +++ b/src/jarabe/model/adhoc.py @@ -0,0 +1,282 @@ +# Copyright (C) 2010 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import dbus +import gobject + +from jarabe.model import network +from jarabe.model.network import Settings +from sugar.util import unique_id +from jarabe.model.network import IP4Config + + +_adhoc_manager_instance = None + + +def get_adhoc_manager_instance(): + global _adhoc_manager_instance + if _adhoc_manager_instance is None: + _adhoc_manager_instance = AdHocManager() + return _adhoc_manager_instance + + +class AdHocManager(gobject.GObject): + """To mimic the mesh behavior on devices where mesh hardware is + not available we support the creation of an Ad-hoc network on + three channels 1, 6, 11. If Sugar sees no "known" network when it + starts, it does autoconnect to an Ad-hoc network. + + """ + + __gsignals__ = { + 'members-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT])), + 'state-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT])), + } + + _AUTOCONNECT_TIMEOUT = 60 + _CHANNEL_1 = 1 + _CHANNEL_6 = 6 + _CHANNEL_11 = 11 + + def __init__(self): + gobject.GObject.__init__(self) + + self._bus = dbus.SystemBus() + self._device = None + self._idle_source = 0 + self._listening_called = 0 + self._device_state = network.NM_DEVICE_STATE_UNKNOWN + + self._current_channel = None + self._networks = {self._CHANNEL_1: None, + self._CHANNEL_6: None, + self._CHANNEL_11: None} + + for channel in (self._CHANNEL_1, self._CHANNEL_6, self._CHANNEL_11): + if not self._find_connection(channel): + self._add_connection(channel) + + def start_listening(self, device): + self._listening_called += 1 + if self._listening_called > 1: + raise RuntimeError('The start listening method can' \ + ' only be called once.') + + self._device = device + props = dbus.Interface(device, dbus.PROPERTIES_IFACE) + self._device_state = props.Get(network.NM_DEVICE_IFACE, 'State') + + self._bus.add_signal_receiver(self.__device_state_changed_cb, + signal_name='StateChanged', + path=self._device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + + self._bus.add_signal_receiver(self.__wireless_properties_changed_cb, + signal_name='PropertiesChanged', + path=self._device.object_path, + dbus_interface=network.NM_WIRELESS_IFACE) + + def stop_listening(self): + self._listening_called = 0 + self._bus.remove_signal_receiver(self.__device_state_changed_cb, + signal_name='StateChanged', + path=self._device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + self._bus.remove_signal_receiver(self.__wireless_properties_changed_cb, + signal_name='PropertiesChanged', + path=self._device.object_path, + dbus_interface=network.NM_WIRELESS_IFACE) + + def __device_state_changed_cb(self, new_state, old_state, reason): + self._device_state = new_state + self._update_state() + + def __wireless_properties_changed_cb(self, properties): + if 'ActiveAccessPoint' in properties and \ + properties['ActiveAccessPoint'] != '/': + active_ap = self._bus.get_object(network.NM_SERVICE, + properties['ActiveAccessPoint']) + props = dbus.Interface(active_ap, dbus.PROPERTIES_IFACE) + props.GetAll(network.NM_ACCESSPOINT_IFACE, byte_arrays=True, + reply_handler=self.__get_all_ap_props_reply_cb, + error_handler=self.__get_all_ap_props_error_cb) + + def __get_all_ap_props_reply_cb(self, properties): + if properties['Mode'] == network.NM_802_11_MODE_ADHOC and \ + 'Frequency' in properties: + frequency = properties['Frequency'] + self._current_channel = network.frequency_to_channel(frequency) + else: + self._current_channel = None + self._update_state() + + def __get_all_ap_props_error_cb(self, err): + logging.error('Error getting the access point properties: %s', err) + + def _update_state(self): + self.emit('state-changed', self._current_channel, self._device_state) + + def autoconnect(self): + """Start a timer which basically looks for 30 seconds of inactivity + on the device, then does autoconnect to an Ad-hoc network. + + This function may be called early on (e.g. when the device is still + in NM_DEVICE_STATE_UNMANAGED). It is assumed that initialisation + will complete quickly, and long before the timeout ticks. + """ + if self._idle_source != 0: + gobject.source_remove(self._idle_source) + self._idle_source = gobject.timeout_add_seconds( + self._AUTOCONNECT_TIMEOUT, self.__idle_check_cb) + + def __idle_check_cb(self): + if self._device_state == network.NM_DEVICE_STATE_DISCONNECTED: + logging.debug('Connect to Ad-hoc network due to inactivity.') + self._autoconnect_adhoc() + else: + logging.debug('autoconnect Sugar Ad-hoc: already connected') + return False + + def _autoconnect_adhoc(self): + """First we try if there is an Ad-hoc network that is used by other + learners in the area, if not we default to channel 1. + + """ + if self._networks[self._CHANNEL_1] is not None: + self.activate_channel(self._CHANNEL_1) + elif self._networks[self._CHANNEL_6] is not None: + self.activate_channel(self._CHANNEL_6) + elif self._networks[self._CHANNEL_11] is not None: + self.activate_channel(self._CHANNEL_11) + else: + self.activate_channel(self._CHANNEL_1) + + def activate_channel(self, channel): + """Activate a sugar Ad-hoc network. + + Keyword arguments: + channel -- Channel to connect to (should be 1, 6, 11) + + """ + connection = self._find_connection(channel) + if connection: + connection.activate(self._device.object_path) + + @staticmethod + def _get_connection_id(channel): + return '%s%d' % (network.ADHOC_CONNECTION_ID_PREFIX, channel) + + def _add_connection(self, channel): + ssid = 'Ad-hoc Network %d' % (channel,) + settings = Settings() + settings.connection.id = self._get_connection_id(channel) + settings.connection.uuid = unique_id() + settings.connection.type = '802-11-wireless' + settings.connection.autoconnect = False + settings.wireless.ssid = dbus.ByteArray(ssid) + settings.wireless.band = 'bg' + settings.wireless.channel = channel + settings.wireless.mode = 'adhoc' + settings.ip4_config = IP4Config() + settings.ip4_config.method = 'link-local' + network.add_connection(settings) + + def _find_connection(self, channel): + connection_id = self._get_connection_id(channel) + return network.find_connection_by_id(connection_id) + + def deactivate_active_channel(self): + """Deactivate the current active channel.""" + obj = self._bus.get_object(network.NM_SERVICE, network.NM_PATH) + netmgr = dbus.Interface(obj, network.NM_IFACE) + + netmgr_props = dbus.Interface(netmgr, dbus.PROPERTIES_IFACE) + netmgr_props.Get(network.NM_IFACE, 'ActiveConnections', \ + reply_handler=self.__get_active_connections_reply_cb, + error_handler=self.__get_active_connections_error_cb) + + def __get_active_connections_reply_cb(self, active_connections_o): + for connection_o in active_connections_o: + obj = self._bus.get_object(network.NM_IFACE, connection_o) + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE) + state = props.Get(network.NM_ACTIVE_CONN_IFACE, 'State') + if state == network.NM_ACTIVE_CONNECTION_STATE_ACTIVATED: + access_point_o = props.Get(network.NM_ACTIVE_CONN_IFACE, + 'SpecificObject') + if access_point_o != '/': + obj = self._bus.get_object(network.NM_SERVICE, network.NM_PATH) + netmgr = dbus.Interface(obj, network.NM_IFACE) + netmgr.DeactivateConnection(connection_o) + + def __get_active_connections_error_cb(self, err): + logging.error('Error getting the active connections: %s', err) + + def __activate_reply_cb(self, connection): + logging.debug('Ad-hoc network created: %s', connection) + + def __activate_error_cb(self, err): + logging.error('Failed to create Ad-hoc network: %s', err) + + def add_access_point(self, access_point): + """Add an access point to a network and notify the view to idicate + the member change. + + Keyword arguments: + access_point -- Access Point + + """ + if access_point.ssid.endswith(' 1'): + self._networks[self._CHANNEL_1] = access_point + self.emit('members-changed', self._CHANNEL_1, True) + elif access_point.ssid.endswith(' 6'): + self._networks[self._CHANNEL_6] = access_point + self.emit('members-changed', self._CHANNEL_6, True) + elif access_point.ssid.endswith('11'): + self._networks[self._CHANNEL_11] = access_point + self.emit('members-changed', self._CHANNEL_11, True) + + def is_sugar_adhoc_access_point(self, ap_object_path): + """Checks whether an access point is part of a sugar Ad-hoc network. + + Keyword arguments: + ap_object_path -- Access Point object path + + Return: Boolean + + """ + for access_point in self._networks.values(): + if access_point is not None: + if access_point.model.object_path == ap_object_path: + return True + return False + + def remove_access_point(self, ap_object_path): + """Remove an access point from a sugar Ad-hoc network. + + Keyword arguments: + ap_object_path -- Access Point object path + + """ + for channel in self._networks: + if self._networks[channel] is not None: + if self._networks[channel].model.object_path == ap_object_path: + self.emit('members-changed', channel, False) + self._networks[channel] = None + break diff --git a/src/jarabe/model/buddy.py b/src/jarabe/model/buddy.py new file mode 100644 index 0000000..8f17d7e --- /dev/null +++ b/src/jarabe/model/buddy.py @@ -0,0 +1,213 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2010 Collabora Ltd. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import gobject +import gconf +import dbus +from telepathy.client import Connection +from telepathy.interfaces import CONNECTION + +from sugar.graphics.xocolor import XoColor +from sugar.profile import get_profile + +from jarabe.util.telepathy import connection_watcher + + +CONNECTION_INTERFACE_BUDDY_INFO = 'org.laptop.Telepathy.BuddyInfo' + +_owner_instance = None + + +class BaseBuddyModel(gobject.GObject): + __gtype_name__ = 'SugarBaseBuddyModel' + + def __init__(self, **kwargs): + self._key = None + self._nick = None + self._color = None + self._tags = None + self._current_activity = None + + gobject.GObject.__init__(self, **kwargs) + + def get_nick(self): + return self._nick + + def set_nick(self, nick): + self._nick = nick + + nick = gobject.property(type=object, getter=get_nick, setter=set_nick) + + def get_key(self): + return self._key + + def set_key(self, key): + self._key = key + + key = gobject.property(type=object, getter=get_key, setter=set_key) + + def get_color(self): + return self._color + + def set_color(self, color): + self._color = color + + color = gobject.property(type=object, getter=get_color, setter=set_color) + + def get_tags(self): + return self._tags + + tags = gobject.property(type=object, getter=get_tags) + + def get_current_activity(self): + return self._current_activity + + def set_current_activity(self, current_activity): + if self._current_activity != current_activity: + self._current_activity = current_activity + self.notify('current-activity') + + current_activity = gobject.property(type=object, + getter=get_current_activity, + setter=set_current_activity) + + def is_owner(self): + raise NotImplementedError + + +class OwnerBuddyModel(BaseBuddyModel): + __gtype_name__ = 'SugarOwnerBuddyModel' + + def __init__(self): + BaseBuddyModel.__init__(self) + + client = gconf.client_get_default() + self.props.nick = client.get_string('/desktop/sugar/user/nick') + color = client.get_string('/desktop/sugar/user/color') + self.props.color = XoColor(color) + + self.props.key = get_profile().pubkey + + self.connect('notify::nick', self.__property_changed_cb) + self.connect('notify::color', self.__property_changed_cb) + + bus = dbus.SessionBus() + bus.add_signal_receiver( + self.__name_owner_changed_cb, + signal_name='NameOwnerChanged', + dbus_interface='org.freedesktop.DBus') + + bus_object = bus.get_object(dbus.BUS_DAEMON_NAME, dbus.BUS_DAEMON_PATH) + for service in bus_object.ListNames( + dbus_interface=dbus.BUS_DAEMON_IFACE): + if service.startswith(CONNECTION + '.'): + path = '/%s' % service.replace('.', '/') + Connection(service, path, bus, + ready_handler=self.__connection_ready_cb) + + def __connection_ready_cb(self, connection): + self._sync_properties_on_connection(connection) + + def __name_owner_changed_cb(self, name, old, new): + if name.startswith(CONNECTION + '.') and not old and new: + path = '/' + name.replace('.', '/') + Connection(name, path, ready_handler=self.__connection_ready_cb) + + def __property_changed_cb(self, buddy, pspec): + self._sync_properties() + + def _sync_properties(self): + conn_watcher = connection_watcher.get_instance() + for connection in conn_watcher.get_connections(): + self._sync_properties_on_connection(connection) + + def _sync_properties_on_connection(self, connection): + if CONNECTION_INTERFACE_BUDDY_INFO in connection: + properties = {} + if self.props.key is not None: + properties['key'] = dbus.ByteArray(self.props.key) + if self.props.color is not None: + properties['color'] = self.props.color.to_string() + + logging.debug('calling SetProperties with %r', properties) + connection[CONNECTION_INTERFACE_BUDDY_INFO].SetProperties( + properties, + reply_handler=self.__set_properties_cb, + error_handler=self.__error_handler_cb) + + def __set_properties_cb(self): + logging.debug('__set_properties_cb') + + def __error_handler_cb(self, error): + raise RuntimeError(error) + + def __connection_added_cb(self, conn_watcher, connection): + self._sync_properties_on_connection(connection) + + def is_owner(self): + return True + + +def get_owner_instance(): + global _owner_instance + if _owner_instance is None: + _owner_instance = OwnerBuddyModel() + return _owner_instance + + +class BuddyModel(BaseBuddyModel): + __gtype_name__ = 'SugarBuddyModel' + + def __init__(self, **kwargs): + + self._account = None + self._contact_id = None + self._handle = None + + BaseBuddyModel.__init__(self, **kwargs) + + def is_owner(self): + return False + + def get_account(self): + return self._account + + def set_account(self, account): + self._account = account + + account = gobject.property(type=object, getter=get_account, + setter=set_account) + + def get_contact_id(self): + return self._contact_id + + def set_contact_id(self, contact_id): + self._contact_id = contact_id + + contact_id = gobject.property(type=object, getter=get_contact_id, + setter=set_contact_id) + + def get_handle(self): + return self._handle + + def set_handle(self, handle): + self._handle = handle + + handle = gobject.property(type=object, getter=get_handle, + setter=set_handle) diff --git a/src/jarabe/model/bundleregistry.py b/src/jarabe/model/bundleregistry.py new file mode 100644 index 0000000..26e719f --- /dev/null +++ b/src/jarabe/model/bundleregistry.py @@ -0,0 +1,450 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2009 Aleksey Lim +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import logging + +import gconf +import gobject +import gio +import simplejson + +from sugar.bundle.activitybundle import ActivityBundle +from sugar.bundle.contentbundle import ContentBundle +from sugar.bundle.bundleversion import NormalizedVersion +from jarabe.journal.journalentrybundle import JournalEntryBundle +from sugar.bundle.bundle import MalformedBundleException, \ + AlreadyInstalledException, RegistrationException +from sugar import env + +from jarabe import config +from jarabe.model import mimeregistry + + +_instance = None + + +class BundleRegistry(gobject.GObject): + """Tracks the available activity bundles""" + + __gsignals__ = { + 'bundle-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'bundle-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'bundle-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + } + + def __init__(self): + logging.debug('STARTUP: Loading the bundle registry') + gobject.GObject.__init__(self) + + self._mime_defaults = self._load_mime_defaults() + + self._bundles = [] + # hold a reference to the monitors so they don't get disposed + self._gio_monitors = [] + + user_path = env.get_user_activities_path() + for activity_dir in [user_path, config.activities_path]: + self._scan_directory(activity_dir) + directory = gio.File(activity_dir) + monitor = directory.monitor_directory() + monitor.connect('changed', self.__file_monitor_changed_cb) + self._gio_monitors.append(monitor) + + self._last_defaults_mtime = -1 + self._favorite_bundles = {} + + client = gconf.client_get_default() + self._protected_activities = client.get_list( + '/desktop/sugar/protected_activities', + gconf.VALUE_STRING) + + if self._protected_activities is None: + self._protected_activities = [] + + try: + self._load_favorites() + except Exception: + logging.exception('Error while loading favorite_activities.') + + self._merge_default_favorites() + + def __file_monitor_changed_cb(self, monitor, one_file, other_file, + event_type): + if not one_file.get_path().endswith('.activity'): + return + if event_type == gio.FILE_MONITOR_EVENT_CREATED: + self.add_bundle(one_file.get_path(), install_mime_type=True) + elif event_type == gio.FILE_MONITOR_EVENT_DELETED: + self.remove_bundle(one_file.get_path()) + + def _load_mime_defaults(self): + defaults = {} + + f = open(os.path.join(config.data_path, 'mime.defaults'), 'r') + for line in f.readlines(): + line = line.strip() + if line and not line.startswith('#'): + mime = line[:line.find(' ')] + handler = line[line.rfind(' ') + 1:] + defaults[mime] = handler + f.close() + + return defaults + + def _get_favorite_key(self, bundle_id, version): + """We use a string as a composite key for the favorites dictionary + because JSON doesn't support tuples and python won't accept a list + as a dictionary key. + """ + if ' ' in bundle_id: + raise ValueError('bundle_id cannot contain spaces') + return '%s %s' % (bundle_id, version) + + def _load_favorites(self): + favorites_path = env.get_profile_path('favorite_activities') + if os.path.exists(favorites_path): + favorites_data = simplejson.load(open(favorites_path)) + + favorite_bundles = favorites_data['favorites'] + if not isinstance(favorite_bundles, dict): + raise ValueError('Invalid format in %s.' % favorites_path) + if favorite_bundles: + first_key = favorite_bundles.keys()[0] + if not isinstance(first_key, basestring): + raise ValueError('Invalid format in %s.' % favorites_path) + + first_value = favorite_bundles.values()[0] + if first_value is not None and \ + not isinstance(first_value, dict): + raise ValueError('Invalid format in %s.' % favorites_path) + + self._last_defaults_mtime = float(favorites_data['defaults-mtime']) + self._favorite_bundles = favorite_bundles + + def _merge_default_favorites(self): + default_activities = [] + defaults_path = os.path.join(config.data_path, 'activities.defaults') + if os.path.exists(defaults_path): + file_mtime = os.stat(defaults_path).st_mtime + if file_mtime > self._last_defaults_mtime: + f = open(defaults_path, 'r') + for line in f.readlines(): + line = line.strip() + if line and not line.startswith('#'): + default_activities.append(line) + f.close() + self._last_defaults_mtime = file_mtime + + if not default_activities: + return + + for bundle_id in default_activities: + max_version = '0' + for bundle in self._bundles: + if bundle.get_bundle_id() == bundle_id and \ + NormalizedVersion(max_version) < \ + NormalizedVersion(bundle.get_activity_version()): + max_version = bundle.get_activity_version() + + key = self._get_favorite_key(bundle_id, max_version) + if NormalizedVersion(max_version) > NormalizedVersion('0') and \ + key not in self._favorite_bundles: + self._favorite_bundles[key] = None + + logging.debug('After merging: %r', self._favorite_bundles) + + self._write_favorites_file() + + def get_bundle(self, bundle_id): + """Returns an bundle given his service name""" + for bundle in self._bundles: + if bundle.get_bundle_id() == bundle_id: + return bundle + return None + + def __iter__(self): + return self._bundles.__iter__() + + def __len__(self): + return len(self._bundles) + + def _scan_directory(self, path): + if not os.path.isdir(path): + return + + # Sort by mtime to ensure a stable activity order + bundles = {} + for f in os.listdir(path): + if not f.endswith('.activity'): + continue + try: + bundle_dir = os.path.join(path, f) + if os.path.isdir(bundle_dir): + bundles[bundle_dir] = os.stat(bundle_dir).st_mtime + except Exception: + logging.exception('Error while processing installed activity' + ' bundle %s:', bundle_dir) + + bundle_dirs = bundles.keys() + bundle_dirs.sort(lambda d1, d2: cmp(bundles[d1], bundles[d2])) + for folder in bundle_dirs: + try: + self._add_bundle(folder) + except: + # pylint: disable=W0702 + logging.exception('Error while processing installed activity' + ' bundle %s:', folder) + + def add_bundle(self, bundle_path, install_mime_type=False): + bundle = self._add_bundle(bundle_path, install_mime_type) + if bundle is not None: + self._set_bundle_favorite(bundle.get_bundle_id(), + bundle.get_activity_version(), + True) + self.emit('bundle-added', bundle) + return True + else: + return False + + def _add_bundle(self, bundle_path, install_mime_type=False): + logging.debug('STARTUP: Adding bundle %r', bundle_path) + try: + bundle = ActivityBundle(bundle_path) + if install_mime_type: + bundle.install_mime_type(bundle_path) + except MalformedBundleException: + logging.exception('Error loading bundle %r', bundle_path) + return None + + bundle_id = bundle.get_bundle_id() + installed = self.get_bundle(bundle_id) + + if installed is not None: + if NormalizedVersion(installed.get_activity_version()) >= \ + NormalizedVersion(bundle.get_activity_version()): + logging.debug('Skip old version for %s', bundle_id) + return None + else: + logging.debug('Upgrade %s', bundle_id) + self.remove_bundle(installed.get_path()) + + self._bundles.append(bundle) + return bundle + + def remove_bundle(self, bundle_path): + for bundle in self._bundles: + if bundle.get_path() == bundle_path: + self._bundles.remove(bundle) + self.emit('bundle-removed', bundle) + return True + return False + + def get_activities_for_type(self, mime_type): + result = [] + + mime = mimeregistry.get_registry() + default_bundle_id = mime.get_default_activity(mime_type) + default_bundle = None + + for bundle in self._bundles: + if mime_type in (bundle.get_mime_types() or []): + if bundle.get_bundle_id() == default_bundle_id: + default_bundle = bundle + elif self.get_default_for_type(mime_type) == \ + bundle.get_bundle_id(): + result.insert(0, bundle) + else: + result.append(bundle) + + if default_bundle is not None: + result.insert(0, default_bundle) + + return result + + def get_default_for_type(self, mime_type): + return self._mime_defaults.get(mime_type) + + def _find_bundle(self, bundle_id, version): + for bundle in self._bundles: + if bundle.get_bundle_id() == bundle_id and \ + bundle.get_activity_version() == version: + return bundle + raise ValueError('No bundle %r with version %r exists.' % \ + (bundle_id, version)) + + def set_bundle_favorite(self, bundle_id, version, favorite): + changed = self._set_bundle_favorite(bundle_id, version, favorite) + if changed: + bundle = self._find_bundle(bundle_id, version) + self.emit('bundle-changed', bundle) + + def _set_bundle_favorite(self, bundle_id, version, favorite): + key = self._get_favorite_key(bundle_id, version) + if favorite and not key in self._favorite_bundles: + self._favorite_bundles[key] = None + elif not favorite and key in self._favorite_bundles: + del self._favorite_bundles[key] + else: + return False + + self._write_favorites_file() + return True + + def is_bundle_favorite(self, bundle_id, version): + key = self._get_favorite_key(bundle_id, version) + return key in self._favorite_bundles + + def is_activity_protected(self, bundle_id): + return bundle_id in self._protected_activities + + def set_bundle_position(self, bundle_id, version, x, y): + key = self._get_favorite_key(bundle_id, version) + if key not in self._favorite_bundles: + raise ValueError('Bundle %s %s not favorite' % + (bundle_id, version)) + + if self._favorite_bundles[key] is None: + self._favorite_bundles[key] = {} + if 'position' not in self._favorite_bundles[key] or \ + [x, y] != self._favorite_bundles[key]['position']: + self._favorite_bundles[key]['position'] = [x, y] + else: + return + + self._write_favorites_file() + bundle = self._find_bundle(bundle_id, version) + self.emit('bundle-changed', bundle) + + def get_bundle_position(self, bundle_id, version): + """Get the coordinates where the user wants the representation of this + bundle to be displayed. Coordinates are relative to a 1000x1000 area. + """ + key = self._get_favorite_key(bundle_id, version) + if key not in self._favorite_bundles or \ + self._favorite_bundles[key] is None or \ + 'position' not in self._favorite_bundles[key]: + return (-1, -1) + else: + return tuple(self._favorite_bundles[key]['position']) + + def _write_favorites_file(self): + path = env.get_profile_path('favorite_activities') + favorites_data = {'defaults-mtime': self._last_defaults_mtime, + 'favorites': self._favorite_bundles} + simplejson.dump(favorites_data, open(path, 'w'), indent=1) + + def is_installed(self, bundle): + # TODO treat ContentBundle in special way + # needs rethinking while fixing ContentBundle support + if isinstance(bundle, ContentBundle) or \ + isinstance(bundle, JournalEntryBundle): + return bundle.is_installed() + + for installed_bundle in self._bundles: + if bundle.get_bundle_id() == installed_bundle.get_bundle_id() and \ + NormalizedVersion(bundle.get_activity_version()) == \ + NormalizedVersion(installed_bundle.get_activity_version()): + return True + return False + + def install(self, bundle, uid=None, force_downgrade=False): + activities_path = env.get_user_activities_path() + + for installed_bundle in self._bundles: + if bundle.get_bundle_id() == installed_bundle.get_bundle_id() and \ + NormalizedVersion(bundle.get_activity_version()) <= \ + NormalizedVersion(installed_bundle.get_activity_version()): + if not force_downgrade: + raise AlreadyInstalledException + else: + self.uninstall(installed_bundle, force=True) + elif bundle.get_bundle_id() == installed_bundle.get_bundle_id(): + self.uninstall(installed_bundle, force=True) + + install_dir = env.get_user_activities_path() + if isinstance(bundle, JournalEntryBundle): + install_path = bundle.install(uid) + elif isinstance(bundle, ContentBundle): + install_path = bundle.install() + else: + install_path = bundle.install(install_dir) + + # TODO treat ContentBundle in special way + # needs rethinking while fixing ContentBundle support + if isinstance(bundle, ContentBundle) or \ + isinstance(bundle, JournalEntryBundle): + pass + elif not self.add_bundle(install_path): + raise RegistrationException + + def uninstall(self, bundle, force=False, delete_profile=False): + # TODO treat ContentBundle in special way + # needs rethinking while fixing ContentBundle support + if isinstance(bundle, ContentBundle) or \ + isinstance(bundle, JournalEntryBundle): + if bundle.is_installed(): + bundle.uninstall() + else: + logging.warning('Not uninstalling, bundle is not installed') + return + + act = self.get_bundle(bundle.get_bundle_id()) + if not force and \ + act.get_activity_version() != bundle.get_activity_version(): + logging.warning('Not uninstalling, different bundle present') + return + + if not act.is_user_activity(): + logging.debug('Do not uninstall system activity') + return + + install_path = act.get_path() + + bundle.uninstall(install_path, force, delete_profile) + + if not self.remove_bundle(install_path): + raise RegistrationException + + def upgrade(self, bundle): + act = self.get_bundle(bundle.get_bundle_id()) + if act is None: + logging.warning('Activity not installed') + elif act.get_activity_version() == bundle.get_activity_version(): + logging.debug('No upgrade needed, same version already installed.') + return + elif act.is_user_activity(): + try: + self.uninstall(bundle, force=True) + except Exception: + logging.exception('Uninstall failed, still trying to install' + ' newer bundle:') + else: + logging.warning('Unable to uninstall system activity, ' + 'installing upgraded version in user activities') + + self.install(bundle) + + +def get_registry(): + global _instance + if not _instance: + _instance = BundleRegistry() + return _instance diff --git a/src/jarabe/model/filetransfer.py b/src/jarabe/model/filetransfer.py new file mode 100644 index 0000000..710c3a4 --- /dev/null +++ b/src/jarabe/model/filetransfer.py @@ -0,0 +1,368 @@ +# Copyright (C) 2008 Tomeu Vizoso +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import logging +import socket + +import gobject +import gio +import dbus +from telepathy.interfaces import CONNECTION_INTERFACE_REQUESTS, CHANNEL +from telepathy.constants import CONNECTION_HANDLE_TYPE_CONTACT, \ + SOCKET_ADDRESS_TYPE_UNIX, \ + SOCKET_ACCESS_CONTROL_LOCALHOST +from telepathy.client import Connection, Channel + +from sugar.presence import presenceservice +from sugar import dispatch + +from jarabe.util.telepathy import connection_watcher +from jarabe.model import neighborhood + + +FT_STATE_NONE = 0 +FT_STATE_PENDING = 1 +FT_STATE_ACCEPTED = 2 +FT_STATE_OPEN = 3 +FT_STATE_COMPLETED = 4 +FT_STATE_CANCELLED = 5 + +FT_REASON_NONE = 0 +FT_REASON_REQUESTED = 1 +FT_REASON_LOCAL_STOPPED = 2 +FT_REASON_REMOTE_STOPPED = 3 +FT_REASON_LOCAL_ERROR = 4 +FT_REASON_LOCAL_ERROR = 5 +FT_REASON_REMOTE_ERROR = 6 + +# FIXME: use constants from tp-python once the spec is undrafted +CHANNEL_TYPE_FILE_TRANSFER = \ + 'org.freedesktop.Telepathy.Channel.Type.FileTransfer' + +new_file_transfer = dispatch.Signal() + + +# TODO Move to use splice_async() in Sugar 0.88 +class StreamSplicer(gobject.GObject): + _CHUNK_SIZE = 10240 # 10K + __gsignals__ = { + 'finished': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])), + } + + def __init__(self, input_stream, output_stream): + gobject.GObject.__init__(self) + + self._input_stream = input_stream + self._output_stream = output_stream + self._pending_buffers = [] + + def start(self): + self._input_stream.read_async(self._CHUNK_SIZE, self.__read_async_cb, + gobject.PRIORITY_LOW) + + def __read_async_cb(self, input_stream, result): + data = input_stream.read_finish(result) + + if not data: + logging.debug('closing input stream') + self._input_stream.close() + else: + self._pending_buffers.append(data) + self._input_stream.read_async(self._CHUNK_SIZE, + self.__read_async_cb, + gobject.PRIORITY_LOW) + self._write_next_buffer() + + def __write_async_cb(self, output_stream, result, user_data): + count_ = output_stream.write_finish(result) + + if not self._pending_buffers and \ + not self._output_stream.has_pending() and \ + not self._input_stream.has_pending(): + logging.debug('closing output stream') + output_stream.close() + self.emit('finished') + else: + self._write_next_buffer() + + def _write_next_buffer(self): + if self._pending_buffers and not self._output_stream.has_pending(): + data = self._pending_buffers.pop(0) + # TODO: we pass the buffer as user_data because of + # http://bugzilla.gnome.org/show_bug.cgi?id=564102 + self._output_stream.write_async(data, self.__write_async_cb, + gobject.PRIORITY_LOW, + user_data=data) + + +class BaseFileTransfer(gobject.GObject): + + def __init__(self, connection): + gobject.GObject.__init__(self) + self._connection = connection + self._state = FT_STATE_NONE + self._transferred_bytes = 0 + + self.channel = None + self.buddy = None + self.title = None + self.file_size = None + self.description = None + self.mime_type = None + self.initial_offset = 0 + self.reason_last_change = FT_REASON_NONE + + def set_channel(self, channel): + self.channel = channel + self.channel[CHANNEL_TYPE_FILE_TRANSFER].connect_to_signal( + 'FileTransferStateChanged', self.__state_changed_cb) + self.channel[CHANNEL_TYPE_FILE_TRANSFER].connect_to_signal( + 'TransferredBytesChanged', self.__transferred_bytes_changed_cb) + self.channel[CHANNEL_TYPE_FILE_TRANSFER].connect_to_signal( + 'InitialOffsetDefined', self.__initial_offset_defined_cb) + + channel_properties = self.channel[dbus.PROPERTIES_IFACE] + + props = channel_properties.GetAll(CHANNEL_TYPE_FILE_TRANSFER) + self._state = props['State'] + self.title = props['Filename'] + self.file_size = props['Size'] + self.description = props['Description'] + self.mime_type = props['ContentType'] + + handle = channel_properties.Get(CHANNEL, 'TargetHandle') + self.buddy = neighborhood.get_model().get_buddy_by_handle(handle) + + def __transferred_bytes_changed_cb(self, transferred_bytes): + logging.debug('__transferred_bytes_changed_cb %r', transferred_bytes) + self.props.transferred_bytes = transferred_bytes + + def _set_transferred_bytes(self, transferred_bytes): + self._transferred_bytes = transferred_bytes + + def _get_transferred_bytes(self): + return self._transferred_bytes + + transferred_bytes = gobject.property(type=int, default=0, + getter=_get_transferred_bytes, setter=_set_transferred_bytes) + + def __initial_offset_defined_cb(self, offset): + logging.debug('__initial_offset_defined_cb %r', offset) + self.initial_offset = offset + + def __state_changed_cb(self, state, reason): + logging.debug('__state_changed_cb %r %r', state, reason) + self.reason_last_change = reason + self.props.state = state + + def _set_state(self, state): + self._state = state + + def _get_state(self): + return self._state + + state = gobject.property(type=int, getter=_get_state, setter=_set_state) + + def cancel(self): + self.channel[CHANNEL].Close() + + +class IncomingFileTransfer(BaseFileTransfer): + def __init__(self, connection, object_path, props): + BaseFileTransfer.__init__(self, connection) + + channel = Channel(connection.service_name, object_path) + self.set_channel(channel) + + self.connect('notify::state', self.__notify_state_cb) + + self.destination_path = None + self._socket_address = None + self._socket = None + self._splicer = None + + def accept(self, destination_path): + if os.path.exists(destination_path): + raise ValueError('Destination path already exists: %r' % \ + destination_path) + + self.destination_path = destination_path + + channel_ft = self.channel[CHANNEL_TYPE_FILE_TRANSFER] + self._socket_address = channel_ft.AcceptFile(SOCKET_ADDRESS_TYPE_UNIX, + SOCKET_ACCESS_CONTROL_LOCALHOST, '', 0, byte_arrays=True) + + def __notify_state_cb(self, file_transfer, pspec): + logging.debug('__notify_state_cb %r', self.props.state) + if self.props.state == FT_STATE_OPEN: + # Need to hold a reference to the socket so that python doesn't + # close the fd when it goes out of scope + self._socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + self._socket.connect(self._socket_address) + input_stream = gio.unix.InputStream(self._socket.fileno(), True) + + destination_file = gio.File(self.destination_path) + if self.initial_offset == 0: + output_stream = destination_file.create() + else: + output_stream = destination_file.append_to() + + # TODO: Use splice_async when it gets implemented + self._splicer = StreamSplicer(input_stream, output_stream) + self._splicer.start() + + +class OutgoingFileTransfer(BaseFileTransfer): + def __init__(self, buddy, file_name, title, description, mime_type): + + presence_service = presenceservice.get_instance() + name, path = presence_service.get_preferred_connection() + connection = Connection(name, path, + ready_handler=self.__connection_ready_cb) + + BaseFileTransfer.__init__(self, connection) + self.connect('notify::state', self.__notify_state_cb) + + self._file_name = file_name + self._socket_address = None + self._socket = None + self._splicer = None + self._output_stream = None + + self.buddy = buddy + self.title = title + self.file_size = os.stat(file_name).st_size + self.description = description + self.mime_type = mime_type + + def __connection_ready_cb(self, connection): + requests = connection[CONNECTION_INTERFACE_REQUESTS] + object_path, properties_ = requests.CreateChannel({ + CHANNEL + '.ChannelType': CHANNEL_TYPE_FILE_TRANSFER, + CHANNEL + '.TargetHandleType': CONNECTION_HANDLE_TYPE_CONTACT, + CHANNEL + '.TargetHandle': self.buddy.handle, + CHANNEL_TYPE_FILE_TRANSFER + '.ContentType': self.mime_type, + CHANNEL_TYPE_FILE_TRANSFER + '.Filename': self.title, + CHANNEL_TYPE_FILE_TRANSFER + '.Size': self.file_size, + CHANNEL_TYPE_FILE_TRANSFER + '.Description': self.description, + CHANNEL_TYPE_FILE_TRANSFER + '.InitialOffset': 0}) + + self.set_channel(Channel(connection.service_name, object_path)) + + channel_file_transfer = self.channel[CHANNEL_TYPE_FILE_TRANSFER] + self._socket_address = channel_file_transfer.ProvideFile( + SOCKET_ADDRESS_TYPE_UNIX, SOCKET_ACCESS_CONTROL_LOCALHOST, '', + byte_arrays=True) + + def __notify_state_cb(self, file_transfer, pspec): + logging.debug('__notify_state_cb %r', self.props.state) + if self.props.state == FT_STATE_OPEN: + # Need to hold a reference to the socket so that python doesn't + # closes the fd when it goes out of scope + self._socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + self._socket.connect(self._socket_address) + output_stream = gio.unix.OutputStream(self._socket.fileno(), True) + + logging.debug('opening %s for reading', self._file_name) + input_stream = gio.File(self._file_name).read() + if self.initial_offset > 0: + input_stream.skip(self.initial_offset) + + # TODO: Use splice_async when it gets implemented + self._splicer = StreamSplicer(input_stream, output_stream) + self._splicer.start() + + def cancel(self): + self.channel[CHANNEL].Close() + + +def _new_channels_cb(connection, channels): + for object_path, props in channels: + if props[CHANNEL + '.ChannelType'] == CHANNEL_TYPE_FILE_TRANSFER and \ + not props[CHANNEL + '.Requested']: + + logging.debug('__new_channels_cb %r', object_path) + + incoming_file_transfer = IncomingFileTransfer(connection, + object_path, props) + new_file_transfer.send(None, file_transfer=incoming_file_transfer) + + +def _monitor_connection(connection): + logging.debug('connection added %r', connection) + connection[CONNECTION_INTERFACE_REQUESTS].connect_to_signal('NewChannels', + lambda channels: _new_channels_cb(connection, channels)) + + +def _connection_added_cb(conn_watcher, connection): + _monitor_connection(connection) + + +def _connection_removed_cb(conn_watcher, connection): + logging.debug('connection removed %r', connection) + + +def init(): + conn_watcher = connection_watcher.get_instance() + conn_watcher.connect('connection-added', _connection_added_cb) + conn_watcher.connect('connection-removed', _connection_removed_cb) + + for connection in conn_watcher.get_connections(): + _monitor_connection(connection) + + +def start_transfer(buddy, file_name, title, description, mime_type): + outgoing_file_transfer = OutgoingFileTransfer(buddy, file_name, title, + description, mime_type) + new_file_transfer.send(None, file_transfer=outgoing_file_transfer) + + +def file_transfer_available(): + conn_watcher = connection_watcher.get_instance() + for connection in conn_watcher.get_connections(): + + properties_iface = connection[dbus.PROPERTIES_IFACE] + properties = properties_iface.GetAll(CONNECTION_INTERFACE_REQUESTS) + classes = properties['RequestableChannelClasses'] + for prop, allowed_prop in classes: + + channel_type = prop.get(CHANNEL + '.ChannelType', '') + target_handle_type = prop.get(CHANNEL + '.TargetHandleType', '') + + if len(prop) == 2 and \ + channel_type == CHANNEL_TYPE_FILE_TRANSFER and \ + target_handle_type == CONNECTION_HANDLE_TYPE_CONTACT: + return True + + return False + + +if __name__ == '__main__': + import tempfile + + test_file_name = '/home/tomeu/isos/Soas2-200904031934.iso' + test_input_stream = gio.File(test_file_name).read() + test_output_stream = gio.File(tempfile.mkstemp()[1]).append_to() + + # TODO: Use splice_async when it gets implemented + splicer = StreamSplicer(test_input_stream, test_output_stream) + splicer.start() + + loop = gobject.MainLoop() + loop.run() diff --git a/src/jarabe/model/friends.py b/src/jarabe/model/friends.py new file mode 100644 index 0000000..7605af1 --- /dev/null +++ b/src/jarabe/model/friends.py @@ -0,0 +1,174 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import logging +from ConfigParser import ConfigParser + +import gobject +import dbus + +from sugar import env +from sugar.graphics.xocolor import XoColor + +from jarabe.model.buddy import BuddyModel +from jarabe.model import neighborhood + + +_model = None + + +class FriendBuddyModel(BuddyModel): + __gtype_name__ = 'SugarFriendBuddyModel' + + _NOT_PRESENT_COLOR = '#D5D5D5,#FFFFFF' + + def __init__(self, nick, key, account=None, contact_id=None): + self._online_buddy = None + + BuddyModel.__init__(self, nick=nick, key=key, account=account, + contact_id=contact_id) + + neighborhood_model = neighborhood.get_model() + neighborhood_model.connect('buddy-added', self.__buddy_added_cb) + neighborhood_model.connect('buddy-removed', self.__buddy_removed_cb) + + buddy = neighborhood_model.get_buddy_by_key(key) + if buddy is not None: + self._set_online_buddy(buddy) + + def __buddy_added_cb(self, model_, buddy): + if buddy.key != self.key: + return + self._set_online_buddy(buddy) + + def _set_online_buddy(self, buddy): + self._online_buddy = buddy + self._online_buddy.connect('notify::color', self.__notify_color_cb) + self.notify('color') + self.notify('present') + + if buddy.nick != self.nick: + self.nick = buddy.nick + if buddy.contact_id != self.contact_id: + self.contact_id = buddy.contact_id + if buddy.account != self.account: + self.account = buddy.account + + def __buddy_removed_cb(self, model_, buddy): + if buddy.key != self.key: + return + self._online_buddy = None + self.notify('color') + self.notify('present') + + def __notify_color_cb(self, buddy, pspec): + self.notify('color') + + def is_present(self): + return self._online_buddy is not None + + present = gobject.property(type=bool, default=False, getter=is_present) + + def get_color(self): + if self._online_buddy is not None: + return self._online_buddy.color + else: + return XoColor(FriendBuddyModel._NOT_PRESENT_COLOR) + + color = gobject.property(type=object, getter=get_color) + + def get_handle(self): + if self._online_buddy is not None: + return self._online_buddy.handle + else: + return None + + handle = gobject.property(type=object, getter=get_handle) + + +class Friends(gobject.GObject): + __gsignals__ = { + 'friend-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + 'friend-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str])), + } + + def __init__(self): + gobject.GObject.__init__(self) + + self._friends = {} + self._path = os.path.join(env.get_profile_path(), 'friends') + + self.load() + + def has_buddy(self, buddy): + return buddy.get_key() in self._friends + + def add_friend(self, buddy_info): + self._friends[buddy_info.get_key()] = buddy_info + self.emit('friend-added', buddy_info) + + def make_friend(self, buddy): + if not self.has_buddy(buddy): + buddy = FriendBuddyModel(key=buddy.key, nick=buddy.nick, + account=buddy.account, + contact_id=buddy.contact_id) + self.add_friend(buddy) + self.save() + + def remove(self, buddy_info): + del self._friends[buddy_info.get_key()] + self.save() + self.emit('friend-removed', buddy_info.get_key()) + + def __iter__(self): + return self._friends.values().__iter__() + + def load(self): + cp = ConfigParser() + + try: + success = cp.read([self._path]) + if success: + for key in cp.sections(): + # HACK: don't screw up on old friends files + if len(key) < 20: + continue + buddy = FriendBuddyModel(key=key, nick=cp.get(key, 'nick')) + self.add_friend(buddy) + except Exception: + logging.exception('Error parsing friends file') + + def save(self): + cp = ConfigParser() + + for friend in self: + section = friend.get_key() + cp.add_section(section) + cp.set(section, 'nick', friend.get_nick()) + + fileobject = open(self._path, 'w') + cp.write(fileobject) + fileobject.close() + + +def get_model(): + global _model + if _model is None: + _model = Friends() + return _model diff --git a/src/jarabe/model/invites.py b/src/jarabe/model/invites.py new file mode 100644 index 0000000..631e49f --- /dev/null +++ b/src/jarabe/model/invites.py @@ -0,0 +1,289 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2010 Collabora Ltd. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from functools import partial +import simplejson + +import gobject +import dbus +import gconf +from telepathy.interfaces import CHANNEL, \ + CHANNEL_DISPATCHER, \ + CHANNEL_DISPATCH_OPERATION, \ + CHANNEL_TYPE_CONTACT_LIST, \ + CHANNEL_TYPE_TEXT, \ + CLIENT +from telepathy.constants import HANDLE_TYPE_ROOM + +from sugar.graphics.xocolor import XoColor + +from jarabe.model import telepathyclient +from jarabe.model import bundleregistry +from jarabe.model import neighborhood +from jarabe.journal import misc + + +CONNECTION_INTERFACE_ACTIVITY_PROPERTIES = \ + 'org.laptop.Telepathy.ActivityProperties' + +_instance = None + + +class BaseInvite(object): + """Invitation to shared activity or private 1-1 Telepathy channel""" + def __init__(self, dispatch_operation_path, handle, handler): + self.dispatch_operation_path = dispatch_operation_path + self._handle = handle + self._handler = handler + + def get_bundle_id(self): + if CLIENT in self._handler: + return self._handler[len(CLIENT + '.'):] + else: + return None + + def _call_handle_with(self): + bus = dbus.Bus() + obj = bus.get_object(CHANNEL_DISPATCHER, self.dispatch_operation_path) + dispatch_operation = dbus.Interface(obj, CHANNEL_DISPATCH_OPERATION) + dispatch_operation.HandleWith(self._handler, + reply_handler=self._handle_with_reply_cb, + error_handler=self._handle_with_reply_cb) + + def _handle_with_reply_cb(self, error=None): + if error is not None: + raise error + else: + logging.debug('_handle_with_reply_cb') + + def _name_owner_changed_cb(self, name, old_owner, new_owner): + logging.debug('BaseInvite._name_owner_changed_cb %r %r %r', name, + new_owner, old_owner) + if name == self._handler and new_owner and not old_owner: + self._call_handle_with() + + +class ActivityInvite(BaseInvite): + """Invitation to a shared activity.""" + def __init__(self, dispatch_operation_path, handle, handler, + activity_properties): + BaseInvite.__init__(self, dispatch_operation_path, handle, handler) + + if activity_properties is not None: + self._activity_properties = activity_properties + else: + self._activity_properties = {} + + def get_color(self): + color = self._activity_properties.get('color', None) + return XoColor(color) + + def join(self): + logging.error('ActivityInvite.join handler %r', self._handler) + + registry = bundleregistry.get_registry() + bundle_id = self.get_bundle_id() + bundle = registry.get_bundle(bundle_id) + if bundle is None: + self._call_handle_with() + return + + bus = dbus.SessionBus() + bus.add_signal_receiver(self._name_owner_changed_cb, + 'NameOwnerChanged', + 'org.freedesktop.DBus', + arg0=self._handler) + + model = neighborhood.get_model() + activity_id = model.get_activity_by_room(self._handle).activity_id + misc.launch(bundle, color=self.get_color(), invited=True, + activity_id=activity_id) + + +class PrivateInvite(BaseInvite): + def __init__(self, dispatch_operation_path, handle, handler, + private_channel): + BaseInvite.__init__(self, dispatch_operation_path, handle, handler) + + self._private_channel = private_channel + + def get_color(self): + client = gconf.client_get_default() + return XoColor(client.get_string('/desktop/sugar/user/color')) + + def join(self): + logging.error('PrivateInvite.join handler %r', self._handler) + registry = bundleregistry.get_registry() + bundle_id = self.get_bundle_id() + bundle = registry.get_bundle(bundle_id) + + bus = dbus.SessionBus() + bus.add_signal_receiver(self._name_owner_changed_cb, + 'NameOwnerChanged', + 'org.freedesktop.DBus', + arg0=self._handler) + misc.launch(bundle, color=self.get_color(), invited=True, + uri=self._private_channel) + + +class Invites(gobject.GObject): + __gsignals__ = { + 'invite-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + 'invite-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + } + + def __init__(self): + gobject.GObject.__init__(self) + + self._dispatch_operations = {} + + client_handler = telepathyclient.get_instance() + client_handler.got_dispatch_operation.connect( + self.__got_dispatch_operation_cb) + + def __got_dispatch_operation_cb(self, **kwargs): + logging.debug('__got_dispatch_operation_cb') + dispatch_operation_path = kwargs['dispatch_operation_path'] + channel_path, channel_properties = kwargs['channels'][0] + properties = kwargs['properties'] + channel_type = channel_properties[CHANNEL + '.ChannelType'] + handle_type = channel_properties[CHANNEL + '.TargetHandleType'] + handle = channel_properties[CHANNEL + '.TargetHandle'] + + if handle_type == HANDLE_TYPE_ROOM and \ + channel_type == CHANNEL_TYPE_TEXT: + logging.debug('May be an activity, checking its properties') + connection_path = properties[CHANNEL_DISPATCH_OPERATION + + '.Connection'] + connection_name = connection_path.replace('/', '.')[1:] + + bus = dbus.Bus() + connection = bus.get_object(connection_name, connection_path) + connection.GetProperties( + channel_properties[CHANNEL + '.TargetHandle'], + dbus_interface=CONNECTION_INTERFACE_ACTIVITY_PROPERTIES, + reply_handler=partial(self.__get_properties_cb, + handle, + dispatch_operation_path), + error_handler=partial(self.__error_handler_cb, + handle, + channel_properties, + dispatch_operation_path, + channel_path, + properties)) + else: + self._dispatch_non_sugar_invitation(handle, + channel_properties, + dispatch_operation_path, + channel_path, + properties) + + def __get_properties_cb(self, handle, dispatch_operation_path, properties): + logging.debug('__get_properties_cb %r', properties) + handler = '%s.%s' % (CLIENT, properties['type']) + self._add_invite(dispatch_operation_path, handle, handler, properties) + + def __error_handler_cb(self, handle, channel_properties, + dispatch_operation_path, channel_path, + properties, error): + logging.debug('__error_handler_cb %r', error) + exception_name = 'org.freedesktop.Telepathy.Error.NotAvailable' + if error.get_dbus_name() == exception_name: + self._dispatch_non_sugar_invitation(handle, + channel_properties, + dispatch_operation_path, + channel_path, + properties) + else: + raise error + + def _dispatch_non_sugar_invitation(self, handle, channel_properties, + dispatch_operation_path, channel_path, + properties): + handler = None + channel_type = channel_properties[CHANNEL + '.ChannelType'] + if channel_type == CHANNEL_TYPE_CONTACT_LIST: + self._handle_with(dispatch_operation_path, CLIENT + '.Sugar') + elif channel_type == CHANNEL_TYPE_TEXT: + handler = CLIENT + '.org.laptop.Chat' + self._add_private_invite(dispatch_operation_path, handle, handler, + channel_path, properties) + return + else: + self._call_handle_with(dispatch_operation_path, '') + + if handler is not None: + logging.debug('Adding an invite from a non-Sugar client') + self._add_invite(dispatch_operation_path, handle, handler) + + def _call_handle_with(self, dispatch_operation_path, handler): + logging.debug('_handle_with %r %r', dispatch_operation_path, handler) + bus = dbus.Bus() + obj = bus.get_object(CHANNEL_DISPATCHER, dispatch_operation_path) + dispatch_operation = dbus.Interface(obj, CHANNEL_DISPATCH_OPERATION) + dispatch_operation.HandleWith(handler, + reply_handler=self.__handle_with_reply_cb, + error_handler=self.__handle_with_reply_cb) + + def __handle_with_reply_cb(self, error=None): + if error is not None: + logging.error('__handle_with_reply_cb %r', error) + else: + logging.debug('__handle_with_reply_cb') + + def _add_invite(self, dispatch_operation_path, handle, handler, + activity_properties=None): + logging.debug('_add_invite %r %r %r', dispatch_operation_path, handle, + handler) + if dispatch_operation_path in self._dispatch_operations: + # there is no point to have more than one invite for the same + # dispatch operation + return + + invite = ActivityInvite(dispatch_operation_path, handle, handler, + activity_properties) + self._dispatch_operations[dispatch_operation_path] = invite + self.emit('invite-added', invite) + + def _add_private_invite(self, dispatch_operation_path, handle, handler, + channel_path, properties): + connection_path = properties[CHANNEL_DISPATCH_OPERATION + + '.Connection'] + connection_name = connection_path.replace('/', '.')[1:] + private_channel = simplejson.dumps([connection_name, + connection_path, channel_path]) + invite = PrivateInvite(dispatch_operation_path, handle, handler, + private_channel) + self._dispatch_operations[dispatch_operation_path] = invite + self.emit('invite-added', invite) + + def remove_invite(self, invite): + del self._dispatch_operations[invite.dispatch_operation_path] + self.emit('invite-removed', invite) + + def __iter__(self): + return self._dispatch_operations.values().__iter__() + + +def get_instance(): + global _instance + if not _instance: + _instance = Invites() + return _instance diff --git a/src/jarabe/model/mimeregistry.py b/src/jarabe/model/mimeregistry.py new file mode 100644 index 0000000..7fb5bcf --- /dev/null +++ b/src/jarabe/model/mimeregistry.py @@ -0,0 +1,50 @@ +# Copyright (C) 2009 Aleksey Lim +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import re + +import gconf + + +_DEFAULTS_KEY = '/desktop/sugar/journal/defaults' +_GCONF_INVALID_CHARS = re.compile('[^a-zA-Z0-9-_/.]') + +_instance = None + + +class MimeRegistry(object): + + def __init__(self): + # TODO move here all mime_type related code from jarabe modules + self._gconf = gconf.client_get_default() + + def get_default_activity(self, mime_type): + return self._gconf.get_string(_key_name(mime_type)) + + def set_default_activity(self, mime_type, bundle_id): + self._gconf.set_string(_key_name(mime_type), bundle_id) + + +def get_registry(): + global _instance + if _instance is None: + _instance = MimeRegistry() + return _instance + + +def _key_name(mime_type): + mime_type = _GCONF_INVALID_CHARS.sub('_', mime_type) + return '%s/%s' % (_DEFAULTS_KEY, mime_type) diff --git a/src/jarabe/model/neighborhood.py b/src/jarabe/model/neighborhood.py new file mode 100644 index 0000000..828cb14 --- /dev/null +++ b/src/jarabe/model/neighborhood.py @@ -0,0 +1,1084 @@ +# Copyright (C) 2010 Collabora Ltd. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from functools import partial +from hashlib import sha1 + +import gobject +import gconf +import dbus +from dbus import PROPERTIES_IFACE +from telepathy.interfaces import ACCOUNT, \ + ACCOUNT_MANAGER, \ + CHANNEL, \ + CHANNEL_INTERFACE_GROUP, \ + CHANNEL_TYPE_CONTACT_LIST, \ + CHANNEL_TYPE_FILE_TRANSFER, \ + CLIENT, \ + CONNECTION, \ + CONNECTION_INTERFACE_ALIASING, \ + CONNECTION_INTERFACE_CONTACTS, \ + CONNECTION_INTERFACE_CONTACT_CAPABILITIES, \ + CONNECTION_INTERFACE_REQUESTS, \ + CONNECTION_INTERFACE_SIMPLE_PRESENCE +from telepathy.constants import HANDLE_TYPE_CONTACT, \ + HANDLE_TYPE_LIST, \ + CONNECTION_PRESENCE_TYPE_OFFLINE, \ + CONNECTION_STATUS_CONNECTED, \ + CONNECTION_STATUS_DISCONNECTED +from telepathy.client import Connection, Channel + +from sugar.graphics.xocolor import XoColor +from sugar.profile import get_profile + +from jarabe.model.buddy import BuddyModel, get_owner_instance +from jarabe.model import bundleregistry +from jarabe.model import shell + + +ACCOUNT_MANAGER_SERVICE = 'org.freedesktop.Telepathy.AccountManager' +ACCOUNT_MANAGER_PATH = '/org/freedesktop/Telepathy/AccountManager' +CHANNEL_DISPATCHER_SERVICE = 'org.freedesktop.Telepathy.ChannelDispatcher' +CHANNEL_DISPATCHER_PATH = '/org/freedesktop/Telepathy/ChannelDispatcher' +SUGAR_CLIENT_SERVICE = 'org.freedesktop.Telepathy.Client.Sugar' +SUGAR_CLIENT_PATH = '/org/freedesktop/Telepathy/Client/Sugar' + +CONNECTION_INTERFACE_BUDDY_INFO = 'org.laptop.Telepathy.BuddyInfo' +CONNECTION_INTERFACE_ACTIVITY_PROPERTIES = \ + 'org.laptop.Telepathy.ActivityProperties' + +_QUERY_DBUS_TIMEOUT = 200 +""" +Time in seconds to wait when querying contact properties. Some jabber servers +will be very slow in returning these queries, so just be patient. +""" + +_model = None + + +class ActivityModel(gobject.GObject): + __gsignals__ = { + 'current-buddy-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + 'current-buddy-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + 'buddy-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + 'buddy-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + } + + def __init__(self, activity_id, room_handle): + gobject.GObject.__init__(self) + + self.activity_id = activity_id + self.room_handle = room_handle + self._bundle = None + self._color = None + self._private = True + self._name = None + self._current_buddies = [] + self._buddies = [] + + def get_color(self): + return self._color + + def set_color(self, color): + self._color = color + + color = gobject.property(type=object, getter=get_color, setter=set_color) + + def get_bundle(self): + return self._bundle + + def set_bundle(self, bundle): + self._bundle = bundle + + bundle = gobject.property(type=object, getter=get_bundle, + setter=set_bundle) + + def get_name(self): + return self._name + + def set_name(self, name): + self._name = name + + name = gobject.property(type=object, getter=get_name, setter=set_name) + + def is_private(self): + return self._private + + def set_private(self, private): + self._private = private + + private = gobject.property(type=object, getter=is_private, + setter=set_private) + + def get_buddies(self): + return self._buddies + + def add_buddy(self, buddy): + self._buddies.append(buddy) + self.notify('buddies') + self.emit('buddy-added', buddy) + + def remove_buddy(self, buddy): + self._buddies.remove(buddy) + self.notify('buddies') + self.emit('buddy-removed', buddy) + + buddies = gobject.property(type=object, getter=get_buddies) + + def get_current_buddies(self): + return self._current_buddies + + def add_current_buddy(self, buddy): + self._current_buddies.append(buddy) + self.notify('current-buddies') + self.emit('current-buddy-added', buddy) + + def remove_current_buddy(self, buddy): + self._current_buddies.remove(buddy) + self.notify('current-buddies') + self.emit('current-buddy-removed', buddy) + + current_buddies = gobject.property(type=object, getter=get_current_buddies) + + +class _Account(gobject.GObject): + __gsignals__ = { + 'activity-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object, object])), + 'activity-updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object, object])), + 'activity-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + 'buddy-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object, object, object])), + 'buddy-updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object, object])), + 'buddy-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + 'buddy-joined-activity': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object, object])), + 'buddy-left-activity': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object, object])), + 'current-activity-updated': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, ([object, object])), + 'connected': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + 'disconnected': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + } + + def __init__(self, account_path): + gobject.GObject.__init__(self) + + self.object_path = account_path + + self._connection = None + self._buddy_handles = {} + self._activity_handles = {} + self._self_handle = None + + self._buddies_per_activity = {} + self._activities_per_buddy = {} + + self._start_listening() + + def _start_listening(self): + bus = dbus.Bus() + obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, self.object_path) + obj.Get(ACCOUNT, 'Connection', + reply_handler=self.__got_connection_cb, + error_handler=partial(self.__error_handler_cb, + 'Account.GetConnection')) + obj.connect_to_signal( + 'AccountPropertyChanged', self.__account_property_changed_cb) + + def __error_handler_cb(self, function_name, error): + raise RuntimeError('Error when calling %s: %s' % (function_name, + error)) + + def __got_connection_cb(self, connection_path): + logging.debug('_Account.__got_connection_cb %r', connection_path) + + if connection_path == '/': + self._check_registration_error() + return + + self._prepare_connection(connection_path) + + def _check_registration_error(self): + """ + See if a previous connection attempt failed and we need to unset + the register flag. + """ + bus = dbus.Bus() + obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, self.object_path) + obj.Get(ACCOUNT, 'ConnectionError', + reply_handler=self.__got_connection_error_cb, + error_handler=partial(self.__error_handler_cb, + 'Account.GetConnectionError')) + + def __got_connection_error_cb(self, error): + logging.debug('_Account.__got_connection_error_cb %r', error) + if error == 'org.freedesktop.Telepathy.Error.RegistrationExists': + bus = dbus.Bus() + obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, self.object_path) + obj.UpdateParameters({'register': False}, [], + dbus_interface=ACCOUNT) + + def __account_property_changed_cb(self, properties): + logging.debug('_Account.__account_property_changed_cb %r %r %r', + self.object_path, properties.get('Connection', None), + self._connection) + if 'Connection' not in properties: + return + if properties['Connection'] == '/': + self._check_registration_error() + self._connection = None + elif self._connection is None: + self._prepare_connection(properties['Connection']) + + def _prepare_connection(self, connection_path): + connection_name = connection_path.replace('/', '.')[1:] + + self._connection = Connection(connection_name, connection_path, + ready_handler=self.__connection_ready_cb) + + def __connection_ready_cb(self, connection): + logging.debug('_Account.__connection_ready_cb %r', + connection.object_path) + connection.connect_to_signal('StatusChanged', + self.__status_changed_cb) + + connection[PROPERTIES_IFACE].Get(CONNECTION, + 'Status', + reply_handler=self.__get_status_cb, + error_handler=partial(self.__error_handler_cb, + 'Connection.GetStatus')) + + def __get_status_cb(self, status): + logging.debug('_Account.__get_status_cb %r %r', + self._connection.object_path, status) + self._update_status(status) + + def __status_changed_cb(self, status, reason): + logging.debug('_Account.__status_changed_cb %r %r', status, reason) + self._update_status(status) + + def _update_status(self, status): + if status == CONNECTION_STATUS_CONNECTED: + self._connection[PROPERTIES_IFACE].Get(CONNECTION, + 'SelfHandle', + reply_handler=self.__get_self_handle_cb, + error_handler=partial(self.__error_handler_cb, + 'Connection.GetSelfHandle')) + self.emit('connected') + else: + for contact_handle, contact_id in self._buddy_handles.items(): + if contact_id is not None: + self.emit('buddy-removed', contact_id) + + for room_handle, activity_id in self._activity_handles.items(): + self.emit('activity-removed', activity_id) + + self._buddy_handles = {} + self._activity_handles = {} + self._buddies_per_activity = {} + self._activities_per_buddy = {} + + self.emit('disconnected') + + if status == CONNECTION_STATUS_DISCONNECTED: + self._connection = None + + def __get_self_handle_cb(self, self_handle): + self._self_handle = self_handle + + if CONNECTION_INTERFACE_CONTACT_CAPABILITIES in self._connection: + interface = CONNECTION_INTERFACE_CONTACT_CAPABILITIES + connection = self._connection[interface] + client_name = CLIENT + '.Sugar.FileTransfer' + file_transfer_channel_class = { + CHANNEL + '.ChannelType': CHANNEL_TYPE_FILE_TRANSFER, + CHANNEL + '.TargetHandleType': HANDLE_TYPE_CONTACT} + capabilities = [] + connection.UpdateCapabilities( + [(client_name, [file_transfer_channel_class], capabilities)], + reply_handler=self.__update_capabilities_cb, + error_handler=partial(self.__error_handler_cb, + 'Connection.UpdateCapabilities')) + + connection = self._connection[CONNECTION_INTERFACE_ALIASING] + connection.connect_to_signal('AliasesChanged', + self.__aliases_changed_cb) + + connection = self._connection[CONNECTION_INTERFACE_SIMPLE_PRESENCE] + connection.connect_to_signal('PresencesChanged', + self.__presences_changed_cb) + + if CONNECTION_INTERFACE_BUDDY_INFO in self._connection: + connection = self._connection[CONNECTION_INTERFACE_BUDDY_INFO] + connection.connect_to_signal('PropertiesChanged', + self.__buddy_info_updated_cb, + byte_arrays=True) + + connection.connect_to_signal('ActivitiesChanged', + self.__buddy_activities_changed_cb) + + connection.connect_to_signal('CurrentActivityChanged', + self.__current_activity_changed_cb) + home_model = shell.get_model() + home_model.connect('active-activity-changed', + self.__active_activity_changed_cb) + else: + logging.warning('Connection %s does not support OLPC buddy ' + 'properties', self._connection.object_path) + + if CONNECTION_INTERFACE_ACTIVITY_PROPERTIES in self._connection: + connection = self._connection[ + CONNECTION_INTERFACE_ACTIVITY_PROPERTIES] + connection.connect_to_signal( + 'ActivityPropertiesChanged', + self.__activity_properties_changed_cb) + else: + logging.warning('Connection %s does not support OLPC activity ' + 'properties', self._connection.object_path) + + properties = { + CHANNEL + '.ChannelType': CHANNEL_TYPE_CONTACT_LIST, + CHANNEL + '.TargetHandleType': HANDLE_TYPE_LIST, + CHANNEL + '.TargetID': 'subscribe', + } + properties = dbus.Dictionary(properties, signature='sv') + connection = self._connection[CONNECTION_INTERFACE_REQUESTS] + is_ours, channel_path, properties = \ + connection.EnsureChannel(properties) + + channel = Channel(self._connection.service_name, channel_path) + channel[CHANNEL_INTERFACE_GROUP].connect_to_signal( + 'MembersChanged', self.__members_changed_cb) + + channel[PROPERTIES_IFACE].Get(CHANNEL_INTERFACE_GROUP, + 'Members', + reply_handler=self.__get_members_ready_cb, + error_handler=partial(self.__error_handler_cb, + 'Connection.GetMembers')) + + def __active_activity_changed_cb(self, model, home_activity): + room_handle = 0 + home_activity_id = home_activity.get_activity_id() + for handle, activity_id in self._activity_handles.items(): + if home_activity_id == activity_id: + room_handle = handle + break + if room_handle == 0: + home_activity_id = '' + + connection = self._connection[CONNECTION_INTERFACE_BUDDY_INFO] + connection.SetCurrentActivity( + home_activity_id, + room_handle, + reply_handler=self.__set_current_activity_cb, + error_handler=self.__set_current_activity_error_cb) + + def __set_current_activity_cb(self): + logging.warning('_Account.__set_current_activity_cb') + + def __set_current_activity_error_cb(self, error): + logging.debug('_Account.__set_current_activity__error_cb %r', error) + + def __update_capabilities_cb(self): + pass + + def __aliases_changed_cb(self, aliases): + logging.debug('_Account.__aliases_changed_cb') + for handle, alias in aliases: + if handle in self._buddy_handles: + logging.debug('Got handle %r with nick %r, going to update', + handle, alias) + properties = {CONNECTION_INTERFACE_ALIASING + '/alias': alias} + self.emit('buddy-updated', self._buddy_handles[handle], + properties) + + def __presences_changed_cb(self, presences): + logging.debug('_Account.__presences_changed_cb %r', presences) + for handle, presence in presences.iteritems(): + if handle in self._buddy_handles: + presence_type, status_, message_ = presence + if presence_type == CONNECTION_PRESENCE_TYPE_OFFLINE: + contact_id = self._buddy_handles[handle] + del self._buddy_handles[handle] + self.emit('buddy-removed', contact_id) + + def __buddy_info_updated_cb(self, handle, properties): + logging.debug('_Account.__buddy_info_updated_cb %r', handle) + self.emit('buddy-updated', self._buddy_handles[handle], properties) + + def __current_activity_changed_cb(self, contact_handle, activity_id, + room_handle): + logging.debug('_Account.__current_activity_changed_cb %r %r %r', + contact_handle, activity_id, room_handle) + if contact_handle in self._buddy_handles: + contact_id = self._buddy_handles[contact_handle] + if not activity_id and room_handle: + activity_id = self._activity_handles.get(room_handle, '') + self.emit('current-activity-updated', contact_id, activity_id) + + def __get_current_activity_cb(self, contact_handle, activity_id, + room_handle): + logging.debug('_Account.__get_current_activity_cb %r %r %r', + contact_handle, activity_id, room_handle) + + if contact_handle in self._buddy_handles: + contact_id = self._buddy_handles[contact_handle] + if not activity_id and room_handle: + activity_id = self._activity_handles.get(room_handle, '') + self.emit('current-activity-updated', contact_id, activity_id) + + def __buddy_activities_changed_cb(self, buddy_handle, activities): + self._update_buddy_activities(buddy_handle, activities) + + def _update_buddy_activities(self, buddy_handle, activities): + logging.debug('_Account._update_buddy_activities') + + if not buddy_handle in self._activities_per_buddy: + self._activities_per_buddy[buddy_handle] = set() + + for activity_id, room_handle in activities: + if room_handle not in self._activity_handles: + self._activity_handles[room_handle] = activity_id + + if buddy_handle == self._self_handle: + home_model = shell.get_model() + activity = home_model.get_active_activity() + if activity.get_activity_id() == activity_id: + connection = self._connection[ + CONNECTION_INTERFACE_BUDDY_INFO] + connection.SetCurrentActivity( + activity_id, + room_handle, + reply_handler=self.__set_current_activity_cb, + error_handler=self.__set_current_activity_error_cb) + + self.emit('activity-added', room_handle, activity_id) + + connection = self._connection[ + CONNECTION_INTERFACE_ACTIVITY_PROPERTIES] + connection.GetProperties(room_handle, + reply_handler=partial(self.__get_properties_cb, + room_handle), + error_handler=partial(self.__error_handler_cb, + 'ActivityProperties.GetProperties')) + + if buddy_handle != self._self_handle: + # Sometimes we'll get CurrentActivityChanged before we get + # to know about the activity so we miss the event. In that + # case, request again the current activity for this buddy. + connection = self._connection[ + CONNECTION_INTERFACE_BUDDY_INFO] + connection.GetCurrentActivity( + buddy_handle, + reply_handler=partial(self.__get_current_activity_cb, + buddy_handle), + error_handler=partial(self.__error_handler_cb, + 'BuddyInfo.GetCurrentActivity')) + + if not activity_id in self._buddies_per_activity: + self._buddies_per_activity[activity_id] = set() + self._buddies_per_activity[activity_id].add(buddy_handle) + if activity_id not in self._activities_per_buddy[buddy_handle]: + self._activities_per_buddy[buddy_handle].add(activity_id) + if buddy_handle != self._self_handle: + self.emit('buddy-joined-activity', + self._buddy_handles[buddy_handle], + activity_id) + + current_activity_ids = \ + [activity_id for activity_id, room_handle in activities] + for activity_id in self._activities_per_buddy[buddy_handle].copy(): + if not activity_id in current_activity_ids: + self._remove_buddy_from_activity(buddy_handle, activity_id) + + def __get_properties_cb(self, room_handle, properties): + logging.debug('_Account.__get_properties_cb %r %r', room_handle, + properties) + if properties: + self._update_activity(room_handle, properties) + + def _remove_buddy_from_activity(self, buddy_handle, activity_id): + if buddy_handle in self._buddies_per_activity[activity_id]: + self._buddies_per_activity[activity_id].remove(buddy_handle) + + if activity_id in self._activities_per_buddy[buddy_handle]: + self._activities_per_buddy[buddy_handle].remove(activity_id) + + if buddy_handle != self._self_handle: + self.emit('buddy-left-activity', + self._buddy_handles[buddy_handle], + activity_id) + + if not self._buddies_per_activity[activity_id]: + del self._buddies_per_activity[activity_id] + + for room_handle in self._activity_handles.copy(): + if self._activity_handles[room_handle] == activity_id: + del self._activity_handles[room_handle] + break + + self.emit('activity-removed', activity_id) + + def __activity_properties_changed_cb(self, room_handle, properties): + logging.debug('_Account.__activity_properties_changed_cb %r %r', + room_handle, properties) + self._update_activity(room_handle, properties) + + def _update_activity(self, room_handle, properties): + if room_handle in self._activity_handles: + self.emit('activity-updated', self._activity_handles[room_handle], + properties) + else: + logging.debug('_Account.__activity_properties_changed_cb unknown ' + 'activity') + # We don't get ActivitiesChanged for the owner of the connection, + # so we query for its activities in order to find out. + if CONNECTION_INTERFACE_BUDDY_INFO in self._connection: + handle = self._self_handle + connection = self._connection[CONNECTION_INTERFACE_BUDDY_INFO] + connection.GetActivities( + handle, + reply_handler=partial(self.__got_activities_cb, handle), + error_handler=partial(self.__error_handler_cb, + 'BuddyInfo.Getactivities')) + + def __members_changed_cb(self, message, added, removed, local_pending, + remote_pending, actor, reason): + self._add_buddy_handles(added) + + def __get_members_ready_cb(self, handles): + logging.debug('_Account.__get_members_ready_cb %r', handles) + if not handles: + return + + self._add_buddy_handles(handles) + + def _add_buddy_handles(self, handles): + logging.debug('_Account._add_buddy_handles %r', handles) + interfaces = [CONNECTION, CONNECTION_INTERFACE_ALIASING] + self._connection[CONNECTION_INTERFACE_CONTACTS].GetContactAttributes( + handles, interfaces, False, + reply_handler=self.__get_contact_attributes_cb, + error_handler=partial(self.__error_handler_cb, + 'Contacts.GetContactAttributes')) + + def __got_buddy_info_cb(self, handle, nick, properties): + logging.debug('_Account.__got_buddy_info_cb %r', handle) + self.emit('buddy-updated', self._buddy_handles[handle], properties) + + def __get_contact_attributes_cb(self, attributes): + logging.debug('_Account.__get_contact_attributes_cb %r', + attributes.keys()) + + for handle in attributes.keys(): + nick = attributes[handle][CONNECTION_INTERFACE_ALIASING + '/alias'] + + if handle == self._self_handle: + logging.debug('_Account.__get_contact_attributes_cb,' \ + ' do not add ourself %r', handle) + continue + + if handle in self._buddy_handles and \ + not self._buddy_handles[handle] is None: + logging.debug('Got handle %r with nick %r, going to update', + handle, nick) + self.emit('buddy-updated', self._buddy_handles[handle], + attributes[handle]) + else: + logging.debug('Got handle %r with nick %r, going to add', + handle, nick) + + contact_id = attributes[handle][CONNECTION + '/contact-id'] + self._buddy_handles[handle] = contact_id + + if CONNECTION_INTERFACE_BUDDY_INFO in self._connection: + connection = \ + self._connection[CONNECTION_INTERFACE_BUDDY_INFO] + + connection.GetProperties( + handle, + reply_handler=partial(self.__got_buddy_info_cb, handle, + nick), + error_handler=partial(self.__error_handler_cb, + 'BuddyInfo.GetProperties'), + byte_arrays=True, + timeout=_QUERY_DBUS_TIMEOUT) + + connection.GetActivities( + handle, + reply_handler=partial(self.__got_activities_cb, + handle), + error_handler=partial(self.__error_handler_cb, + 'BuddyInfo.GetActivities'), + timeout=_QUERY_DBUS_TIMEOUT) + + connection.GetCurrentActivity( + handle, + reply_handler=partial(self.__get_current_activity_cb, + handle), + error_handler=partial(self.__error_handler_cb, + 'BuddyInfo.GetCurrentActivity'), + timeout=_QUERY_DBUS_TIMEOUT) + + self.emit('buddy-added', contact_id, nick, handle) + + def __got_activities_cb(self, buddy_handle, activities): + logging.debug('_Account.__got_activities_cb %r %r', buddy_handle, + activities) + self._update_buddy_activities(buddy_handle, activities) + + def enable(self): + logging.debug('_Account.enable %s', self.object_path) + self._set_enabled(True) + + def disable(self): + logging.debug('_Account.disable %s', self.object_path) + self._set_enabled(False) + self._connection = None + + def _set_enabled(self, value): + bus = dbus.Bus() + obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, self.object_path) + obj.Set(ACCOUNT, 'Enabled', value, + reply_handler=self.__set_enabled_cb, + error_handler=partial(self.__error_handler_cb, + 'Account.SetEnabled'), + dbus_interface=dbus.PROPERTIES_IFACE) + + def __set_enabled_cb(self): + logging.debug('_Account.__set_enabled_cb success') + + +class Neighborhood(gobject.GObject): + __gsignals__ = { + 'activity-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + 'activity-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + 'buddy-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + 'buddy-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([object])), + } + + def __init__(self): + gobject.GObject.__init__(self) + + self._buddies = {None: get_owner_instance()} + self._activities = {} + self._link_local_account = None + self._server_account = None + self._shell_model = shell.get_model() + + client = gconf.client_get_default() + client.add_dir('/desktop/sugar/collaboration', + gconf.CLIENT_PRELOAD_NONE) + client.notify_add('/desktop/sugar/collaboration/jabber_server', + self.__jabber_server_changed_cb) + client.add_dir('/desktop/sugar/user/nick', gconf.CLIENT_PRELOAD_NONE) + client.notify_add('/desktop/sugar/user/nick', self.__nick_changed_cb) + + bus = dbus.Bus() + obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, ACCOUNT_MANAGER_PATH) + account_manager = dbus.Interface(obj, ACCOUNT_MANAGER) + account_manager.Get(ACCOUNT_MANAGER, 'ValidAccounts', + dbus_interface=PROPERTIES_IFACE, + reply_handler=self.__got_accounts_cb, + error_handler=self.__error_handler_cb) + + def __got_accounts_cb(self, account_paths): + self._link_local_account = \ + self._ensure_link_local_account(account_paths) + self._connect_to_account(self._link_local_account) + + self._server_account = self._ensure_server_account(account_paths) + self._connect_to_account(self._server_account) + + def __error_handler_cb(self, error): + raise RuntimeError(error) + + def _connect_to_account(self, account): + account.connect('buddy-added', self.__buddy_added_cb) + account.connect('buddy-updated', self.__buddy_updated_cb) + account.connect('buddy-removed', self.__buddy_removed_cb) + account.connect('buddy-joined-activity', + self.__buddy_joined_activity_cb) + account.connect('buddy-left-activity', self.__buddy_left_activity_cb) + account.connect('activity-added', self.__activity_added_cb) + account.connect('activity-updated', self.__activity_updated_cb) + account.connect('activity-removed', self.__activity_removed_cb) + account.connect('current-activity-updated', + self.__current_activity_updated_cb) + account.connect('connected', self.__account_connected_cb) + account.connect('disconnected', self.__account_disconnected_cb) + + def __account_connected_cb(self, account): + logging.debug('__account_connected_cb %s', account.object_path) + if account == self._server_account: + self._link_local_account.disable() + + def __account_disconnected_cb(self, account): + logging.debug('__account_disconnected_cb %s', account.object_path) + if account == self._server_account: + self._link_local_account.enable() + + def _get_published_name(self): + """Construct the published name based on the public key + + Limit the name to be only 8 characters maximum. The avahi + service name has a 64 character limit. It consists of + the room name, the published name and the host name. + + """ + public_key_hash = sha1(get_profile().pubkey).hexdigest() + return public_key_hash[:8] + + def _ensure_link_local_account(self, account_paths): + for account_path in account_paths: + if 'salut' in account_path: + logging.debug('Already have a Salut account') + account = _Account(account_path) + account.enable() + return account + + logging.debug('Still dont have a Salut account, creating one') + + client = gconf.client_get_default() + nick = client.get_string('/desktop/sugar/user/nick') + + params = { + 'nickname': nick, + 'first-name': '', + 'last-name': '', + 'jid': self._get_jabber_account_id(), + 'published-name': self._get_published_name(), + } + + properties = { + ACCOUNT + '.Enabled': True, + ACCOUNT + '.Nickname': nick, + ACCOUNT + '.ConnectAutomatically': True, + } + + bus = dbus.Bus() + obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, ACCOUNT_MANAGER_PATH) + account_manager = dbus.Interface(obj, ACCOUNT_MANAGER) + account_path = account_manager.CreateAccount('salut', 'local-xmpp', + 'salut', params, + properties) + return _Account(account_path) + + def _ensure_server_account(self, account_paths): + for account_path in account_paths: + if 'gabble' in account_path: + logging.debug('Already have a Gabble account') + account = _Account(account_path) + account.enable() + return account + + logging.debug('Still dont have a Gabble account, creating one') + + client = gconf.client_get_default() + nick = client.get_string('/desktop/sugar/user/nick') + server = client.get_string('/desktop/sugar/collaboration' + '/jabber_server') + key_hash = get_profile().privkey_hash + + params = { + 'account': self._get_jabber_account_id(), + 'password': key_hash, + 'server': server, + 'resource': 'sugar', + 'require-encryption': True, + 'ignore-ssl-errors': True, + 'register': True, + 'old-ssl': True, + 'port': dbus.UInt32(5223), + } + + properties = { + ACCOUNT + '.Enabled': True, + ACCOUNT + '.Nickname': nick, + ACCOUNT + '.ConnectAutomatically': True, + } + + bus = dbus.Bus() + obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, ACCOUNT_MANAGER_PATH) + account_manager = dbus.Interface(obj, ACCOUNT_MANAGER) + account_path = account_manager.CreateAccount('gabble', 'jabber', + 'jabber', params, + properties) + return _Account(account_path) + + def _get_jabber_account_id(self): + public_key_hash = sha1(get_profile().pubkey).hexdigest() + client = gconf.client_get_default() + server = client.get_string('/desktop/sugar/collaboration' + '/jabber_server') + return '%s@%s' % (public_key_hash, server) + + def __jabber_server_changed_cb(self, client, timestamp, entry, *extra): + logging.debug('__jabber_server_changed_cb') + + bus = dbus.Bus() + account = bus.get_object(ACCOUNT_MANAGER_SERVICE, + self._server_account.object_path) + + server = client.get_string( + '/desktop/sugar/collaboration/jabber_server') + account_id = self._get_jabber_account_id() + params_needing_reconnect = account.UpdateParameters( + {'server': server, + 'account': account_id, + 'register': True}, + dbus.Array([], 's'), dbus_interface=ACCOUNT) + if params_needing_reconnect: + account.Reconnect() + + self._update_jid() + + def __nick_changed_cb(self, client, timestamp, entry, *extra): + logging.debug('__nick_changed_cb') + + nick = client.get_string('/desktop/sugar/user/nick') + + bus = dbus.Bus() + server_obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, + self._server_account.object_path) + server_obj.Set(ACCOUNT, 'Nickname', nick, + dbus_interface=PROPERTIES_IFACE) + + link_local_obj = bus.get_object(ACCOUNT_MANAGER_SERVICE, + self._link_local_account.object_path) + link_local_obj.Set(ACCOUNT, 'Nickname', nick, + dbus_interface=PROPERTIES_IFACE) + params_needing_reconnect = link_local_obj.UpdateParameters( + {'nickname': nick, 'published-name': self._get_published_name()}, + dbus.Array([], 's'), dbus_interface=ACCOUNT) + if params_needing_reconnect: + link_local_obj.Reconnect() + + self._update_jid() + + def _update_jid(self): + bus = dbus.Bus() + account = bus.get_object(ACCOUNT_MANAGER_SERVICE, + self._link_local_account.object_path) + + account_id = self._get_jabber_account_id() + params_needing_reconnect = account.UpdateParameters( + {'jid': account_id}, dbus.Array([], 's'), dbus_interface=ACCOUNT) + if params_needing_reconnect: + account.Reconnect() + + def __buddy_added_cb(self, account, contact_id, nick, handle): + logging.debug('__buddy_added_cb %r', contact_id) + + if contact_id in self._buddies: + logging.debug('__buddy_added_cb buddy already tracked') + return + + buddy = BuddyModel( + nick=nick, + account=account.object_path, + contact_id=contact_id, + handle=handle) + self._buddies[contact_id] = buddy + + def __buddy_updated_cb(self, account, contact_id, properties): + logging.debug('__buddy_updated_cb %r', contact_id) + if contact_id is None: + # Don't know the contact-id yet, will get the full state later + return + + if contact_id not in self._buddies: + logging.debug('__buddy_updated_cb Unknown buddy with contact_id' + ' %r', contact_id) + return + + buddy = self._buddies[contact_id] + + is_new = buddy.props.key is None and 'key' in properties + + if 'color' in properties: + buddy.props.color = XoColor(properties['color']) + + if 'key' in properties: + buddy.props.key = properties['key'] + + nick_key = CONNECTION_INTERFACE_ALIASING + '/alias' + if nick_key in properties: + buddy.props.nick = properties[nick_key] + + if is_new: + self.emit('buddy-added', buddy) + + def __buddy_removed_cb(self, account, contact_id): + logging.debug('Neighborhood.__buddy_removed_cb %r', contact_id) + if contact_id not in self._buddies: + logging.debug('Neighborhood.__buddy_removed_cb Unknown buddy with ' + 'contact_id %r', contact_id) + return + + buddy = self._buddies[contact_id] + del self._buddies[contact_id] + + if buddy.props.key is not None: + self.emit('buddy-removed', buddy) + + def __activity_added_cb(self, account, room_handle, activity_id): + logging.debug('__activity_added_cb %r %r', room_handle, activity_id) + if activity_id in self._activities: + logging.debug('__activity_added_cb activity already tracked') + return + + activity = ActivityModel(activity_id, room_handle) + self._activities[activity_id] = activity + + def __activity_updated_cb(self, account, activity_id, properties): + logging.debug('__activity_updated_cb %r %r', activity_id, properties) + if activity_id not in self._activities: + logging.debug('__activity_updated_cb Unknown activity with ' + 'activity_id %r', activity_id) + return + + registry = bundleregistry.get_registry() + bundle = registry.get_bundle(properties['type']) + if not bundle: + logging.warning('Ignoring shared activity we don''t have') + return + + activity = self._activities[activity_id] + + is_new = activity.props.bundle is None + + activity.props.color = XoColor(properties['color']) + activity.props.bundle = bundle + activity.props.name = properties['name'] + activity.props.private = properties['private'] + + if is_new: + self._shell_model.add_shared_activity(activity_id, + activity.props.color) + self.emit('activity-added', activity) + + def __activity_removed_cb(self, account, activity_id): + logging.debug('__activity_removed_cb %r', activity_id) + if activity_id not in self._activities: + logging.debug('Unknown activity with id %s. Already removed?', + activity_id) + return + activity = self._activities[activity_id] + del self._activities[activity_id] + self._shell_model.remove_shared_activity(activity_id) + + if activity.props.bundle is not None: + self.emit('activity-removed', activity) + + def __current_activity_updated_cb(self, account, contact_id, activity_id): + logging.debug('__current_activity_updated_cb %r %r', contact_id, + activity_id) + if contact_id not in self._buddies: + logging.debug('__current_activity_updated_cb Unknown buddy with ' + 'contact_id %r', contact_id) + return + if activity_id and activity_id not in self._activities: + logging.debug('__current_activity_updated_cb Unknown activity with' + ' id %s', activity_id) + activity_id = '' + + buddy = self._buddies[contact_id] + if buddy.props.current_activity is not None: + if buddy.props.current_activity.activity_id == activity_id: + return + buddy.props.current_activity.remove_current_buddy(buddy) + + if activity_id: + activity = self._activities[activity_id] + buddy.props.current_activity = activity + activity.add_current_buddy(buddy) + else: + buddy.props.current_activity = None + + def __buddy_joined_activity_cb(self, account, contact_id, activity_id): + if contact_id not in self._buddies: + logging.debug('__buddy_joined_activity_cb Unknown buddy with ' + 'contact_id %r', contact_id) + return + + if activity_id not in self._activities: + logging.debug('__buddy_joined_activity_cb Unknown activity with ' + 'activity_id %r', activity_id) + return + + self._activities[activity_id].add_buddy(self._buddies[contact_id]) + + def __buddy_left_activity_cb(self, account, contact_id, activity_id): + if contact_id not in self._buddies: + logging.debug('__buddy_left_activity_cb Unknown buddy with ' + 'contact_id %r', contact_id) + return + + if activity_id not in self._activities: + logging.debug('__buddy_left_activity_cb Unknown activity with ' + 'activity_id %r', activity_id) + return + + self._activities[activity_id].remove_buddy(self._buddies[contact_id]) + + def get_buddies(self): + return self._buddies.values() + + def get_buddy_by_key(self, key): + for buddy in self._buddies.values(): + if buddy.key == key: + return buddy + return None + + def get_buddy_by_handle(self, contact_handle): + for buddy in self._buddies.values(): + if not buddy.is_owner() and buddy.handle == contact_handle: + return buddy + return None + + def get_activity(self, activity_id): + return self._activities.get(activity_id, None) + + def get_activity_by_room(self, room_handle): + for activity in self._activities.values(): + if activity.room_handle == room_handle: + return activity + return None + + def get_activities(self): + return self._activities.values() + + +def get_model(): + global _model + if _model is None: + _model = Neighborhood() + return _model diff --git a/src/jarabe/model/network.py b/src/jarabe/model/network.py new file mode 100644 index 0000000..cc02b58 --- /dev/null +++ b/src/jarabe/model/network.py @@ -0,0 +1,1096 @@ +# Copyright (C) 2008 Red Hat, Inc. +# Copyright (C) 2009 Tomeu Vizoso, Simon Schampijer +# Copyright (C) 2009-2010 One Laptop per Child +# Copyright (C) 2009 Paraguay Educa, Martin Abente +# Copyright (C) 2010 Plan Ceibal, Daniel Castelo +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from gettext import gettext as _ +import logging +import os + +import dbus +import dbus.service +import gobject +import ConfigParser +import gconf +import ctypes + +from sugar import dispatch +from sugar import env +from sugar.util import unique_id + +NM_STATE_UNKNOWN = 0 +NM_STATE_ASLEEP = 10 +NM_STATE_DISCONNECTED = 20 +NM_STATE_DISCONNECTING = 30 +NM_STATE_CONNECTING = 40 +NM_STATE_CONNECTED_LOCAL = 50 +NM_STATE_CONNECTED_SITE = 60 +NM_STATE_CONNECTED_GLOBAL = 70 + +NM_DEVICE_TYPE_UNKNOWN = 0 +NM_DEVICE_TYPE_ETHERNET = 1 +NM_DEVICE_TYPE_WIFI = 2 +NM_DEVICE_TYPE_UNUSED1 = 3 +NM_DEVICE_TYPE_UNUSED2 = 4 +NM_DEVICE_TYPE_BT = 5 +NM_DEVICE_TYPE_OLPC_MESH = 6 +NM_DEVICE_TYPE_WIMAX = 7 +NM_DEVICE_TYPE_MODEM = 8 + +NM_DEVICE_STATE_UNKNOWN = 0 +NM_DEVICE_STATE_UNMANAGED = 10 +NM_DEVICE_STATE_UNAVAILABLE = 20 +NM_DEVICE_STATE_DISCONNECTED = 30 +NM_DEVICE_STATE_PREPARE = 40 +NM_DEVICE_STATE_CONFIG = 50 +NM_DEVICE_STATE_NEED_AUTH = 60 +NM_DEVICE_STATE_IP_CONFIG = 70 +NM_DEVICE_STATE_IP_CHECK = 80 +NM_DEVICE_STATE_SECONDARIES = 90 +NM_DEVICE_STATE_ACTIVATED = 100 +NM_DEVICE_STATE_DEACTIVATING = 110 +NM_DEVICE_STATE_FAILED = 120 + +NM_CONNECTION_TYPE_802_11_WIRELESS = '802-11-wireless' +NM_CONNECTION_TYPE_GSM = 'gsm' + +NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0 +NM_ACTIVE_CONNECTION_STATE_ACTIVATING = 1 +NM_ACTIVE_CONNECTION_STATE_ACTIVATED = 2 +NM_ACTIVE_CONNECTION_STATE_DEACTIVATING = 3 + +NM_DEVICE_STATE_REASON_UNKNOWN = 0 +NM_DEVICE_STATE_REASON_NONE = 1 +NM_DEVICE_STATE_REASON_NOW_MANAGED = 2 +NM_DEVICE_STATE_REASON_NOW_UNMANAGED = 3 +NM_DEVICE_STATE_REASON_CONFIG_FAILED = 4 +NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE = 5 +NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED = 6 +NM_DEVICE_STATE_REASON_NO_SECRETS = 7 +NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT = 8 +NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED = 9 +NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED = 10 +NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT = 11 +NM_DEVICE_STATE_REASON_PPP_START_FAILED = 12 +NM_DEVICE_STATE_REASON_PPP_DISCONNECT = 13 +NM_DEVICE_STATE_REASON_PPP_FAILED = 14 +NM_DEVICE_STATE_REASON_DHCP_START_FAILED = 15 +NM_DEVICE_STATE_REASON_DHCP_ERROR = 16 +NM_DEVICE_STATE_REASON_DHCP_FAILED = 17 +NM_DEVICE_STATE_REASON_SHARED_START_FAILED = 18 +NM_DEVICE_STATE_REASON_SHARED_FAILED = 19 +NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED = 20 +NM_DEVICE_STATE_REASON_AUTOIP_ERROR = 21 +NM_DEVICE_STATE_REASON_AUTOIP_FAILED = 22 +NM_DEVICE_STATE_REASON_MODEM_BUSY = 23 +NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE = 24 +NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER = 25 +NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT = 26 +NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED = 27 +NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED = 28 +NM_DEVICE_STATE_REASON_GSM_APN_FAILED = 29 +NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING = 30 +NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED = 31 +NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT = 32 +NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED = 33 +NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED = 34 +NM_DEVICE_STATE_REASON_FIRMWARE_MISSING = 35 +NM_DEVICE_STATE_REASON_REMOVED = 36 +NM_DEVICE_STATE_REASON_SLEEPING = 37 +NM_DEVICE_STATE_REASON_CONNECTION_REMOVED = 38 +NM_DEVICE_STATE_REASON_USER_REQUESTED = 39 +NM_DEVICE_STATE_REASON_CARRIER = 40 +NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED = 41 +NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE = 42 +NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND = 43 +NM_DEVICE_STATE_REASON_BT_FAILED = 44 +NM_DEVICE_STATE_REASON_LAST = 0xFFFF + +NM_802_11_AP_FLAGS_NONE = 0x00000000 +NM_802_11_AP_FLAGS_PRIVACY = 0x00000001 + +NM_802_11_AP_SEC_NONE = 0x0 +NM_802_11_AP_SEC_PAIR_WEP40 = 0x1 +NM_802_11_AP_SEC_PAIR_WEP104 = 0x2 +NM_802_11_AP_SEC_PAIR_TKIP = 0x4 +NM_802_11_AP_SEC_PAIR_CCMP = 0x8 +NM_802_11_AP_SEC_GROUP_WEP40 = 0x10 +NM_802_11_AP_SEC_GROUP_WEP104 = 0x20 +NM_802_11_AP_SEC_GROUP_TKIP = 0x40 +NM_802_11_AP_SEC_GROUP_CCMP = 0x80 +NM_802_11_AP_SEC_KEY_MGMT_PSK = 0x100 +NM_802_11_AP_SEC_KEY_MGMT_802_1X = 0x200 + +NM_802_11_MODE_UNKNOWN = 0 +NM_802_11_MODE_ADHOC = 1 +NM_802_11_MODE_INFRA = 2 + +NM_WIFI_DEVICE_CAP_NONE = 0x00000000 +NM_WIFI_DEVICE_CAP_CIPHER_WEP40 = 0x00000001 +NM_WIFI_DEVICE_CAP_CIPHER_WEP104 = 0x00000002 +NM_WIFI_DEVICE_CAP_CIPHER_TKIP = 0x00000004 +NM_WIFI_DEVICE_CAP_CIPHER_CCMP = 0x00000008 +NM_WIFI_DEVICE_CAP_WPA = 0x00000010 +NM_WIFI_DEVICE_CAP_RSN = 0x00000020 + +NM_BT_CAPABILITY_NONE = 0x00000000 +NM_BT_CAPABILITY_DUN = 0x00000001 +NM_BT_CAPABILITY_NAP = 0x00000002 + +NM_DEVICE_MODEM_CAPABILITY_NONE = 0x00000000 +NM_DEVICE_MODEM_CAPABILITY_POTS = 0x00000001 +NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO = 0x00000002 +NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS = 0x00000004 +NM_DEVICE_MODEM_CAPABILITY_LTE = 0x00000008 + +SETTINGS_SERVICE = 'org.freedesktop.NetworkManager' + +NM_SERVICE = 'org.freedesktop.NetworkManager' +NM_IFACE = 'org.freedesktop.NetworkManager' +NM_PATH = '/org/freedesktop/NetworkManager' +NM_DEVICE_IFACE = 'org.freedesktop.NetworkManager.Device' +NM_WIRED_IFACE = 'org.freedesktop.NetworkManager.Device.Wired' +NM_WIRELESS_IFACE = 'org.freedesktop.NetworkManager.Device.Wireless' +NM_MODEM_IFACE = 'org.freedesktop.NetworkManager.Device.Modem' +NM_OLPC_MESH_IFACE = 'org.freedesktop.NetworkManager.Device.OlpcMesh' +NM_SETTINGS_PATH = '/org/freedesktop/NetworkManager/Settings' +NM_SETTINGS_IFACE = 'org.freedesktop.NetworkManager.Settings' +NM_CONNECTION_IFACE = 'org.freedesktop.NetworkManager.Settings.Connection' +NM_ACCESSPOINT_IFACE = 'org.freedesktop.NetworkManager.AccessPoint' +NM_ACTIVE_CONN_IFACE = 'org.freedesktop.NetworkManager.Connection.Active' + +NM_SECRET_AGENT_IFACE = 'org.freedesktop.NetworkManager.SecretAgent' +NM_SECRET_AGENT_PATH = '/org/freedesktop/NetworkManager/SecretAgent' +NM_AGENT_MANAGER_IFACE = 'org.freedesktop.NetworkManager.AgentManager' +NM_AGENT_MANAGER_PATH = '/org/freedesktop/NetworkManager/AgentManager' + +NM_AGENT_MANAGER_ERR_NO_SECRETS = 'org.freedesktop.NetworkManager.AgentManager.NoSecrets' + +GSM_CONNECTION_ID = 'Sugar Modem Connection' +GSM_BAUD_RATE = 115200 +GSM_USERNAME_PATH = '/desktop/sugar/network/gsm/username' +GSM_PASSWORD_PATH = '/desktop/sugar/network/gsm/password' +GSM_NUMBER_PATH = '/desktop/sugar/network/gsm/number' +GSM_APN_PATH = '/desktop/sugar/network/gsm/apn' +GSM_PIN_PATH = '/desktop/sugar/network/gsm/pin' +GSM_PUK_PATH = '/desktop/sugar/network/gsm/puk' + +ADHOC_CONNECTION_ID_PREFIX = 'Sugar Ad-hoc Network ' +MESH_CONNECTION_ID_PREFIX = 'OLPC Mesh Network ' +XS_MESH_CONNECTION_ID_PREFIX = 'OLPC XS Mesh Network ' + +_network_manager = None +_nm_settings = None +_secret_agent = None +_connections = None + +_nm_device_state_reason_description = None + + +def get_error_by_reason(reason): + global _nm_device_state_reason_description + + if _nm_device_state_reason_description is None: + _nm_device_state_reason_description = { + NM_DEVICE_STATE_REASON_UNKNOWN: + _('The reason for the device state change is unknown.'), + NM_DEVICE_STATE_REASON_NONE: + _('The state change is normal.'), + NM_DEVICE_STATE_REASON_NOW_MANAGED: + _('The device is now managed.'), + NM_DEVICE_STATE_REASON_NOW_UNMANAGED: + _('The device is no longer managed.'), + NM_DEVICE_STATE_REASON_CONFIG_FAILED: + _('The device could not be readied for configuration.'), + NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE: + _('IP configuration could not be reserved ' + '(no available address, timeout, etc).'), + NM_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED: + _('The IP configuration is no longer valid.'), + NM_DEVICE_STATE_REASON_NO_SECRETS: + _('Secrets were required, but not provided.'), + NM_DEVICE_STATE_REASON_SUPPLICANT_DISCONNECT: + _('The 802.1X supplicant disconnected from ' + 'the access point or authentication server.'), + NM_DEVICE_STATE_REASON_SUPPLICANT_CONFIG_FAILED: + _('Configuration of the 802.1X supplicant failed.'), + NM_DEVICE_STATE_REASON_SUPPLICANT_FAILED: + _('The 802.1X supplicant quit or failed unexpectedly.'), + NM_DEVICE_STATE_REASON_SUPPLICANT_TIMEOUT: + _('The 802.1X supplicant took too long to authenticate.'), + NM_DEVICE_STATE_REASON_PPP_START_FAILED: + _('The PPP service failed to start within the allowed time.'), + NM_DEVICE_STATE_REASON_PPP_DISCONNECT: + _('The PPP service disconnected unexpectedly.'), + NM_DEVICE_STATE_REASON_PPP_FAILED: + _('The PPP service quit or failed unexpectedly.'), + NM_DEVICE_STATE_REASON_DHCP_START_FAILED: + _('The DHCP service failed to start within the allowed time.'), + NM_DEVICE_STATE_REASON_DHCP_ERROR: + _('The DHCP service reported an unexpected error.'), + NM_DEVICE_STATE_REASON_DHCP_FAILED: + _('The DHCP service quit or failed unexpectedly.'), + NM_DEVICE_STATE_REASON_SHARED_START_FAILED: + _('The shared connection service failed to start.'), + NM_DEVICE_STATE_REASON_SHARED_FAILED: + _('The shared connection service quit or failed' + ' unexpectedly.'), + NM_DEVICE_STATE_REASON_AUTOIP_START_FAILED: + _('The AutoIP service failed to start.'), + NM_DEVICE_STATE_REASON_AUTOIP_ERROR: + _('The AutoIP service reported an unexpected error.'), + NM_DEVICE_STATE_REASON_AUTOIP_FAILED: + _('The AutoIP service quit or failed unexpectedly.'), + NM_DEVICE_STATE_REASON_MODEM_BUSY: + _('Dialing failed because the line was busy.'), + NM_DEVICE_STATE_REASON_MODEM_NO_DIAL_TONE: + _('Dialing failed because there was no dial tone.'), + NM_DEVICE_STATE_REASON_MODEM_NO_CARRIER: + _('Dialing failed because there was no carrier.'), + NM_DEVICE_STATE_REASON_MODEM_DIAL_TIMEOUT: + _('Dialing timed out.'), + NM_DEVICE_STATE_REASON_MODEM_DIAL_FAILED: + _('Dialing failed.'), + NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED: + _('Modem initialization failed.'), + NM_DEVICE_STATE_REASON_GSM_APN_FAILED: + _('Failed to select the specified GSM APN'), + NM_DEVICE_STATE_REASON_GSM_REGISTRATION_NOT_SEARCHING: + _('Not searching for networks.'), + NM_DEVICE_STATE_REASON_GSM_REGISTRATION_DENIED: + _('Network registration was denied.'), + NM_DEVICE_STATE_REASON_GSM_REGISTRATION_TIMEOUT: + _('Network registration timed out.'), + NM_DEVICE_STATE_REASON_GSM_REGISTRATION_FAILED: + _('Failed to register with the requested GSM network.'), + NM_DEVICE_STATE_REASON_GSM_PIN_CHECK_FAILED: + _('PIN check failed.'), + NM_DEVICE_STATE_REASON_FIRMWARE_MISSING: + _('Necessary firmware for the device may be missing.'), + NM_DEVICE_STATE_REASON_REMOVED: + _('The device was removed.'), + NM_DEVICE_STATE_REASON_SLEEPING: + _('NetworkManager went to sleep.'), + NM_DEVICE_STATE_REASON_CONNECTION_REMOVED: + _("The device's active connection was removed " + "or disappeared."), + NM_DEVICE_STATE_REASON_USER_REQUESTED: + _('A user or client requested the disconnection.'), + NM_DEVICE_STATE_REASON_CARRIER: + _("The device's carrier/link changed."), + NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED: + _("The device's existing connection was assumed."), + NM_DEVICE_STATE_REASON_SUPPLICANT_AVAILABLE: + _("The supplicant is now available."), + NM_DEVICE_STATE_REASON_MODEM_NOT_FOUND: + _("The modem could not be found."), + NM_DEVICE_STATE_REASON_BT_FAILED: + _("The Bluetooth connection failed or timed out."), + NM_DEVICE_STATE_REASON_LAST: + _("Unused."), + } + + return _nm_device_state_reason_description[reason] + + +def frequency_to_channel(frequency): + """Returns the channel matching a given radio channel frequency. If a + frequency is not in the dictionary channel 1 will be returned. + + Keyword arguments: + frequency -- The radio channel frequency in MHz. + + Return: Channel + + """ + ftoc = {2412: 1, 2417: 2, 2422: 3, 2427: 4, + 2432: 5, 2437: 6, 2442: 7, 2447: 8, + 2452: 9, 2457: 10, 2462: 11, 2467: 12, + 2472: 13} + if frequency not in ftoc: + logging.warning('The frequency %s can not be mapped to a channel, ' + 'defaulting to channel 1.', frequency) + return 1 + return ftoc[frequency] + + +def is_sugar_adhoc_network(ssid): + """Checks whether an access point is a sugar Ad-hoc network. + + Keyword arguments: + ssid -- Ssid of the access point. + + Return: Boolean + + """ + return ssid.startswith('Ad-hoc Network') + + +class WirelessSecurity(object): + def __init__(self): + self.key_mgmt = None + self.proto = None + self.group = None + self.pairwise = None + self.wep_key = None + self.psk = None + self.auth_alg = None + + def get_dict(self): + wireless_security = {} + if self.key_mgmt is not None: + wireless_security['key-mgmt'] = self.key_mgmt + if self.proto is not None: + wireless_security['proto'] = self.proto + if self.pairwise is not None: + wireless_security['pairwise'] = self.pairwise + if self.group is not None: + wireless_security['group'] = self.group + if self.wep_key is not None: + wireless_security['wep-key0'] = self.wep_key + if self.psk is not None: + wireless_security['psk'] = self.psk + if self.auth_alg is not None: + wireless_security['auth-alg'] = self.auth_alg + return wireless_security + + +class Wireless(object): + nm_name = '802-11-wireless' + + def __init__(self): + self.ssid = None + self.security = None + self.mode = None + self.band = None + self.channel = None + + def get_dict(self): + wireless = {'ssid': self.ssid} + if self.security: + wireless['security'] = self.security + if self.mode: + wireless['mode'] = self.mode + if self.band: + wireless['band'] = self.band + if self.channel: + wireless['channel'] = self.channel + return wireless + + +class OlpcMesh(object): + nm_name = '802-11-olpc-mesh' + + def __init__(self, channel, anycast_addr): + self.channel = channel + self.anycast_addr = anycast_addr + + def get_dict(self): + ret = { + 'ssid': dbus.ByteArray('olpc-mesh'), + 'channel': self.channel, + } + + if self.anycast_addr: + ret['dhcp-anycast-address'] = dbus.ByteArray(self.anycast_addr) + return ret + + +class ConnectionSettings(object): + def __init__(self): + self.id = None + self.uuid = None + self.type = None + self.autoconnect = False + self.timestamp = None + + def get_dict(self): + connection = {'id': self.id, + 'uuid': self.uuid, + 'type': self.type, + 'autoconnect': self.autoconnect} + if self.timestamp: + connection['timestamp'] = self.timestamp + return connection + + +class IP4Config(object): + def __init__(self): + self.method = None + + def get_dict(self): + ip4_config = {} + if self.method is not None: + ip4_config['method'] = self.method + return ip4_config + + +class Serial(object): + def __init__(self): + self.baud = None + + def get_dict(self): + serial = {} + + if self.baud is not None: + serial['baud'] = self.baud + + return serial + + +class Ppp(object): + def __init__(self): + pass + + def get_dict(self): + ppp = {} + return ppp + + +class Gsm(object): + def __init__(self): + self.apn = None + self.number = None + self.username = None + self.pin = None + self.password = None + + def get_dict(self): + gsm = {} + + if self.apn: + gsm['apn'] = self.apn + if self.number: + gsm['number'] = self.number + if self.username: + gsm['username'] = self.username + if self.password: + gsm['password'] = self.password + if self.pin: + gsm['pin'] = self.pin + + return gsm + + +class Settings(object): + def __init__(self, wireless_cfg=None): + self.connection = ConnectionSettings() + self.ip4_config = None + self.wireless_security = None + + if wireless_cfg is not None: + self.wireless = wireless_cfg + else: + self.wireless = Wireless() + + def get_dict(self): + settings = {} + settings['connection'] = self.connection.get_dict() + settings[self.wireless.nm_name] = self.wireless.get_dict() + if self.wireless_security is not None: + settings['802-11-wireless-security'] = \ + self.wireless_security.get_dict() + if self.ip4_config is not None: + settings['ipv4'] = self.ip4_config.get_dict() + return settings + + +class SettingsGsm(object): + def __init__(self): + self.connection = ConnectionSettings() + self.ip4_config = IP4Config() + self.serial = Serial() + self.ppp = Ppp() + self.gsm = Gsm() + + def get_dict(self): + settings = {} + + settings['connection'] = self.connection.get_dict() + settings['serial'] = self.serial.get_dict() + settings['ppp'] = self.ppp.get_dict() + settings['gsm'] = self.gsm.get_dict() + settings['ipv4'] = self.ip4_config.get_dict() + + return settings + + +class SecretsResponse(object): + """Intermediate object to report the secrets from the dialog + back to the connection object and which will inform NM + """ + def __init__(self, reply_cb, error_cb): + self._reply_cb = reply_cb + self._error_cb = error_cb + + def set_secrets(self, secrets): + self._reply_cb(secrets) + + def set_error(self, error): + self._error_cb(error) + + +def set_connected(): + try: + # try to flush resolver cache - SL#1940 + # ctypes' syntactic sugar does not work + # so we must get the func ptr explicitly + libc = ctypes.CDLL('libc.so.6') + res_init = getattr(libc, '__res_init') + res_init(None) + except: + # pylint: disable=W0702 + logging.exception('Error calling libc.__res_init') + + +class SecretAgent(dbus.service.Object): + def __init__(self): + self._bus = dbus.SystemBus() + dbus.service.Object.__init__(self, self._bus, NM_SECRET_AGENT_PATH) + self.secrets_request = dispatch.Signal() + proxy = self._bus.get_object(NM_IFACE, NM_AGENT_MANAGER_PATH) + proxy.Register("org.sugarlabs.sugar", + dbus_interface=NM_AGENT_MANAGER_IFACE, + reply_handler=self._register_reply_cb, + error_handler=self._register_error_cb) + + def _register_reply_cb(self): + logging.debug("SecretAgent registered") + + def _register_error_cb(self, error): + logging.error("Failed to register SecretAgent: %s", error) + + @dbus.service.method(NM_SECRET_AGENT_IFACE, + async_callbacks=('reply', 'error'), + in_signature='a{sa{sv}}osasb', + out_signature='a{sa{sv}}', + sender_keyword='sender', + byte_arrays=True) + def GetSecrets(self, settings, connection_path, setting_name, hints, + request_new, reply, error, sender=None): + if setting_name != '802-11-wireless-security': + raise ValueError("Unsupported setting type %s" % (setting_name,)) + if not sender: + raise Exception("Internal error: couldn't get sender") + uid = self._bus.get_unix_user(sender) + if uid != 0: + raise Exception("UID %d not authorized" % (uid,)) + + response = SecretsResponse(reply, error) + self.secrets_request.send(self, settings=settings, response=response) + + +class AccessPoint(gobject.GObject): + __gsignals__ = { + 'props-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + } + + def __init__(self, device, model): + self.__gobject_init__() + self.device = device + self.model = model + + self._initialized = False + self._bus = dbus.SystemBus() + + self.ssid = '' + self.strength = 0 + self.flags = 0 + self.wpa_flags = 0 + self.rsn_flags = 0 + self.mode = 0 + self.channel = 0 + + def initialize(self): + model_props = dbus.Interface(self.model, dbus.PROPERTIES_IFACE) + model_props.GetAll(NM_ACCESSPOINT_IFACE, byte_arrays=True, + reply_handler=self._ap_properties_changed_cb, + error_handler=self._get_all_props_error_cb) + + self._bus.add_signal_receiver(self._ap_properties_changed_cb, + signal_name='PropertiesChanged', + path=self.model.object_path, + dbus_interface=NM_ACCESSPOINT_IFACE, + byte_arrays=True) + + def network_hash(self): + """ + This is a hash which uniquely identifies the network that this AP + is a bridge to. i.e. its expected for 2 APs with identical SSID and + other settings to have the same network hash, because we assume that + they are a part of the same underlying network. + """ + + # based on logic from nm-applet + fl = 0 + + if self.mode == NM_802_11_MODE_INFRA: + fl |= 1 << 0 + elif self.mode == NM_802_11_MODE_ADHOC: + fl |= 1 << 1 + else: + fl |= 1 << 2 + + # Separate out no encryption, WEP-only, and WPA-capable */ + if (not (self.flags & NM_802_11_AP_FLAGS_PRIVACY)) \ + and self.wpa_flags == NM_802_11_AP_SEC_NONE \ + and self.rsn_flags == NM_802_11_AP_SEC_NONE: + fl |= 1 << 3 + elif (self.flags & NM_802_11_AP_FLAGS_PRIVACY) \ + and self.wpa_flags == NM_802_11_AP_SEC_NONE \ + and self.rsn_flags == NM_802_11_AP_SEC_NONE: + fl |= 1 << 4 + elif (not (self.flags & NM_802_11_AP_FLAGS_PRIVACY)) \ + and self.wpa_flags != NM_802_11_AP_SEC_NONE \ + and self.rsn_flags != NM_802_11_AP_SEC_NONE: + fl |= 1 << 5 + else: + fl |= 1 << 6 + + hashstr = str(fl) + '@' + self.ssid + return hash(hashstr) + + def _update_properties(self, properties): + if self._initialized: + old_hash = self.network_hash() + else: + old_hash = None + + if 'Ssid' in properties: + self.ssid = properties['Ssid'] + if 'Strength' in properties: + self.strength = properties['Strength'] + if 'Flags' in properties: + self.flags = properties['Flags'] + if 'WpaFlags' in properties: + self.wpa_flags = properties['WpaFlags'] + if 'RsnFlags' in properties: + self.rsn_flags = properties['RsnFlags'] + if 'Mode' in properties: + self.mode = properties['Mode'] + if 'Frequency' in properties: + self.channel = frequency_to_channel(properties['Frequency']) + + self._initialized = True + self.emit('props-changed', old_hash) + + def _get_all_props_error_cb(self, err): + logging.error('Error getting the access point properties: %s', err) + + def _ap_properties_changed_cb(self, properties): + self._update_properties(properties) + + def disconnect(self): + self._bus.remove_signal_receiver(self._ap_properties_changed_cb, + signal_name='PropertiesChanged', + path=self.model.object_path, + dbus_interface=NM_ACCESSPOINT_IFACE) + + +def get_manager(): + global _network_manager + if _network_manager is None: + obj = dbus.SystemBus().get_object(NM_SERVICE, NM_PATH) + _network_manager = dbus.Interface(obj, NM_IFACE) + return _network_manager + + +def _get_settings(): + global _nm_settings + if _nm_settings is None: + obj = dbus.SystemBus().get_object(NM_SERVICE, NM_SETTINGS_PATH) + _nm_settings = dbus.Interface(obj, NM_SETTINGS_IFACE) + _migrate_old_wifi_connections() + _migrate_old_gsm_connection() + return _nm_settings + + +def get_secret_agent(): + global _secret_agent + if _secret_agent is None: + _secret_agent = SecretAgent() + return _secret_agent + + +def _activate_reply_cb(connection_path): + logging.debug('Activated connection: %s', connection_path) + + +def _activate_error_cb(err): + logging.error('Failed to activate connection: %s', err) + + +def _add_and_activate_reply_cb(settings_path, connection_path): + logging.debug('Added and activated connection: %s', connection_path) + + +def _add_and_activate_error_cb(err): + logging.error('Failed to add and activate connection: %s', err) + + +class Connection(gobject.GObject): + __gsignals__ = { + 'removed': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()), + } + + def __init__(self, bus, path): + gobject.GObject.__init__(self) + obj = bus.get_object(NM_SERVICE, path) + self._connection = dbus.Interface(obj, NM_CONNECTION_IFACE) + self._removed_handle = self._connection.connect_to_signal( + 'Removed', self._removed_cb) + self._updated_handle = self._connection.connect_to_signal( + 'Updated', self._updated_cb) + self._settings = self._connection.GetSettings(byte_arrays=True) + + def _updated_cb(self): + self._settings = self._connection.GetSettings(byte_arrays=True) + + def _removed_cb(self): + self._updated_handle.remove() + self._removed_handle.remove() + self.emit('removed') + + def get_settings(self, stype=None): + if not stype: + return self._settings + elif stype in self._settings: + return self._settings[stype] + else: + return None + + def get_secrets(self, stype, reply_handler, error_handler): + return self._connection.GetSecrets(stype, byte_arrays=True, + reply_handler=reply_handler, + error_handler=error_handler) + + def update_settings(self, settings): + self._connection.Update(settings) + + def activate(self, device_o, reply_handler=_activate_reply_cb, + error_handler=_activate_error_cb): + activate_connection_by_path(self.get_path(), device_o, + reply_handler=reply_handler, + error_handler=error_handler) + + def delete(self): + self._connection.Delete() + + def get_ssid(self): + wifi_settings = self.get_settings('802-11-wireless') + if wifi_settings and 'ssid' in wifi_settings: + return wifi_settings['ssid'] + else: + return None + + def get_id(self): + return self.get_settings('connection')['id'] + + def get_path(self): + return self._connection.object_path + + def is_sugar_internal_connection(self): + """Returns True if this connection is a 'special' Sugar connection, + i.e. one that has been created by Sugar internals and should not be + visible to the user or deleted by connection-clearing code.""" + connection_id = self.get_id() + return connection_id == GSM_CONNECTION_ID \ + or connection_id.startswith(ADHOC_CONNECTION_ID_PREFIX) \ + or connection_id.startswith(MESH_CONNECTION_ID_PREFIX) \ + or connection_id.startswith(XS_MESH_CONNECTION_ID_PREFIX) + + +class Connections(object): + def __init__(self): + self._bus = dbus.SystemBus() + self._connections = [] + + settings = _get_settings() + settings.connect_to_signal('NewConnection', self._new_connection_cb) + + for connection_o in settings.ListConnections(): + self._monitor_connection(connection_o) + + def get_list(self): + return self._connections + + def _monitor_connection(self, connection_o): + connection = Connection(self._bus, connection_o) + connection.connect('removed', self._connection_removed_cb) + self._connections.append(connection) + + def _new_connection_cb(self, connection_o): + self._monitor_connection(connection_o) + + def _connection_removed_cb(self, connection): + connection.disconnect_by_func(self._connection_removed_cb) + self._connections.remove(connection) + + def clear(self): + """Remove all connections except Sugar-internal ones.""" + + # copy the list, to avoid problems with removing elements of a list + # while looping over it + connections = list(self._connections) + for connection in connections: + if connection.is_sugar_internal_connection(): + continue + try: + connection.delete() + except dbus.DBusException: + logging.debug("Could not remove connection %s", + connection.get_id()) + + +def get_connections(): + global _connections + if _connections is None: + _connections = Connections() + return _connections + + +def find_connection_by_ssid(ssid): + # FIXME: this check should be more extensive. + # it should look at mode (infra/adhoc), band, security, and really + # anything that is stored in the settings. + for connection in get_connections().get_list(): + if connection.get_ssid() == ssid: + return connection + return None + + +def find_connection_by_id(connection_id): + for connection in get_connections().get_list(): + if connection.get_id() == connection_id: + return connection + return None + + +def _add_connection_reply_cb(connection): + logging.debug('Added connection: %s', connection) + + +def _add_connection_error_cb(err): + logging.error('Failed to add connection: %s', err) + + +def add_connection(settings, reply_handler=_add_connection_reply_cb, + error_handler=_add_connection_error_cb): + _get_settings().AddConnection(settings.get_dict(), + reply_handler=reply_handler, + error_handler=error_handler) + + +def activate_connection_by_path(connection, device_o, + reply_handler=_activate_reply_cb, + error_handler=_activate_error_cb): + get_manager().ActivateConnection(connection, + device_o, + '/', + reply_handler=reply_handler, + error_handler=error_handler) + + +def add_and_activate_connection(device_o, settings, specific_object): + manager = get_manager() + manager.AddAndActivateConnection(settings.get_dict(), device_o, + specific_object, + reply_handler=_add_and_activate_reply_cb, + error_handler=_add_and_activate_error_cb) + + +def _migrate_old_wifi_connections(): + """Migrate connections.cfg from Sugar-0.94 and previous to NetworkManager + system-wide connections + """ + + profile_path = env.get_profile_path() + config_path = os.path.join(profile_path, 'nm', 'connections.cfg') + if not os.path.exists(config_path): + return + + config = ConfigParser.ConfigParser() + try: + if not config.read(config_path): + logging.error('Error reading the nm config file') + return + except ConfigParser.ParsingError: + logging.exception('Error reading the nm config file') + return + + for section in config.sections(): + try: + settings = Settings() + settings.connection.id = section + ssid = config.get(section, 'ssid') + settings.wireless.ssid = dbus.ByteArray(ssid) + uuid = config.get(section, 'uuid') + settings.connection.uuid = uuid + nmtype = config.get(section, 'type') + settings.connection.type = nmtype + autoconnect = bool(config.get(section, 'autoconnect')) + settings.connection.autoconnect = autoconnect + + if config.has_option(section, 'timestamp'): + timestamp = int(config.get(section, 'timestamp')) + settings.connection.timestamp = timestamp + + if config.has_option(section, 'key-mgmt'): + settings.wireless_security = WirelessSecurity() + mgmt = config.get(section, 'key-mgmt') + settings.wireless_security.key_mgmt = mgmt + security = config.get(section, 'security') + settings.wireless.security = security + key = config.get(section, 'key') + if mgmt == 'none': + settings.wireless_security.wep_key = key + auth_alg = config.get(section, 'auth-alg') + settings.wireless_security.auth_alg = auth_alg + elif mgmt == 'wpa-psk': + settings.wireless_security.psk = key + if config.has_option(section, 'proto'): + value = config.get(section, 'proto') + settings.wireless_security.proto = value + if config.has_option(section, 'group'): + value = config.get(section, 'group') + settings.wireless_security.group = value + if config.has_option(section, 'pairwise'): + value = config.get(section, 'pairwise') + settings.wireless_security.pairwise = value + except ConfigParser.Error: + logging.exception('Error reading section') + else: + add_connection(settings) + + os.unlink(config_path) + + +def create_gsm_connection(username, password, number, apn, pin): + settings = SettingsGsm() + settings.gsm.username = username + settings.gsm.number = number + settings.gsm.apn = apn + settings.gsm.pin = pin + settings.gsm.password = password + + settings.connection.id = GSM_CONNECTION_ID + settings.connection.type = NM_CONNECTION_TYPE_GSM + settings.connection.uuid = unique_id() + settings.connection.autoconnect = False + settings.ip4_config.method = 'auto' + settings.serial.baud = GSM_BAUD_RATE + + add_connection(settings) + + +def _migrate_old_gsm_connection(): + if find_gsm_connection(): + # don't attempt migration if a NM-level connection already exists + return + + client = gconf.client_get_default() + + username = client.get_string(GSM_USERNAME_PATH) or '' + password = client.get_string(GSM_PASSWORD_PATH) or '' + number = client.get_string(GSM_NUMBER_PATH) or '' + apn = client.get_string(GSM_APN_PATH) or '' + pin = client.get_string(GSM_PIN_PATH) or '' + + if apn or number: + logging.info("Migrating old GSM connection details") + try: + create_gsm_connection(username, password, number, apn, pin) + # remove old connection + for setting in (GSM_USERNAME_PATH, GSM_PASSWORD_PATH, + GSM_NUMBER_PATH, GSM_APN_PATH, GSM_PIN_PATH, + GSM_PUK_PATH): + client.set_string(setting, '') + except Exception: + logging.exception('Error adding gsm connection to NMSettings.') + + +def find_gsm_connection(): + return find_connection_by_id(GSM_CONNECTION_ID) + + +def disconnect_access_points(ap_paths): + """ + Disconnect all devices connected to any of the given access points. + """ + bus = dbus.SystemBus() + netmgr_obj = bus.get_object(NM_SERVICE, NM_PATH) + netmgr = dbus.Interface(netmgr_obj, NM_IFACE) + netmgr_props = dbus.Interface(netmgr, dbus.PROPERTIES_IFACE) + active_connection_paths = netmgr_props.Get(NM_IFACE, 'ActiveConnections') + + for conn_path in active_connection_paths: + conn_obj = bus.get_object(NM_IFACE, conn_path) + conn_props = dbus.Interface(conn_obj, dbus.PROPERTIES_IFACE) + ap_path = conn_props.Get(NM_ACTIVE_CONN_IFACE, 'SpecificObject') + if ap_path == '/' or ap_path not in ap_paths: + continue + + dev_paths = conn_props.Get(NM_ACTIVE_CONN_IFACE, 'Devices') + for dev_path in dev_paths: + dev_obj = bus.get_object(NM_SERVICE, dev_path) + dev = dbus.Interface(dev_obj, NM_DEVICE_IFACE) + dev.Disconnect() + + +def _is_non_printable(char): + """ + Return True if char is a non-printable unicode character, False otherwise + """ + return (char < u' ') or (u'~' < char < u'\xA0') or (char == u'\xAD') + + +def ssid_to_display_name(ssid): + """Convert an SSID into a unicode string for recognising Access Points + + Return a unicode string that's useful for recognising and + distinguishing between Access Points (APs). + + IEEE 802.11 defines SSIDs as arbitrary byte sequences. As random + bytes are not very user-friendly, most APs use some human-readable + character string as SSID. However, because there's no standard + specifying what encoding to use, AP vendors chose various + different encodings. Since there's also no indication of what + encoding was used for a particular SSID, the best we can do for + turning an SSID into a displayable string is to try a couple of + encodings based on some heuristic. + + We're currently using the following heuristic: + + 1. If the SSID is a valid character string consisting only of + printable characters in one of the following encodings (tried in + the given order), decode it accordingly: + UTF-8, ISO-8859-1, Windows-1251. + 2. Return a hex dump of the SSID. + """ + for encoding in ['utf-8', 'iso-8859-1', 'windows-1251']: + try: + display_name = unicode(ssid, encoding) + except UnicodeDecodeError: + continue + + if not [True for char in display_name if _is_non_printable(char)]: + # Only printable characters + return display_name + + return ':'.join(['%02x' % (ord(byte), ) for byte in ssid]) diff --git a/src/jarabe/model/notifications.py b/src/jarabe/model/notifications.py new file mode 100644 index 0000000..ec14056 --- /dev/null +++ b/src/jarabe/model/notifications.py @@ -0,0 +1,98 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import sys +import logging + +import dbus + +from sugar import dispatch + +from jarabe import config + + +_DBUS_SERVICE = 'org.freedesktop.Notifications' +_DBUS_IFACE = 'org.freedesktop.Notifications' +_DBUS_PATH = '/org/freedesktop/Notifications' + +_instance = None + + +class NotificationService(dbus.service.Object): + def __init__(self): + bus = dbus.SessionBus() + bus_name = dbus.service.BusName(_DBUS_SERVICE, bus=bus) + dbus.service.Object.__init__(self, bus_name, _DBUS_PATH) + + self._notification_counter = 0 + self.notification_received = dispatch.Signal() + self.notification_cancelled = dispatch.Signal() + + @dbus.service.method(_DBUS_IFACE, + in_signature='susssava{sv}i', out_signature='u') + def Notify(self, app_name, replaces_id, app_icon, summary, body, actions, + hints, expire_timeout): + + logging.debug('Received notification: %r', [app_name, replaces_id, + '', summary, body, actions, '', + expire_timeout]) + + if replaces_id > 0: + notification_id = replaces_id + else: + if self._notification_counter == sys.maxint: + self._notification_counter = 1 + else: + self._notification_counter += 1 + notification_id = self._notification_counter + + self.notification_received.send(self, app_name=app_name, + replaces_id=replaces_id, app_icon=app_icon, summary=summary, + body=body, actions=actions, hints=hints, + expire_timeout=expire_timeout) + + return notification_id + + @dbus.service.method(_DBUS_IFACE, in_signature='u', out_signature='') + def CloseNotification(self, notification_id): + self.notification_cancelled.send(self, notification_id=notification_id) + + @dbus.service.method(_DBUS_IFACE, in_signature='', out_signature='as') + def GetCapabilities(self): + return [] + + @dbus.service.method(_DBUS_IFACE, in_signature='', out_signature='sss') + def GetServerInformation(self, name, vendor, version): + return 'Sugar Shell', 'Sugar', config.version + + @dbus.service.signal(_DBUS_IFACE, signature='uu') + def NotificationClosed(self, notification_id, reason): + pass + + @dbus.service.signal(_DBUS_IFACE, signature='us') + def ActionInvoked(self, notification_id, action_key): + pass + + +def get_service(): + global _instance + if not _instance: + _instance = NotificationService() + return _instance + + +def init(): + get_service() diff --git a/src/jarabe/model/olpcmesh.py b/src/jarabe/model/olpcmesh.py new file mode 100644 index 0000000..6ab7ab6 --- /dev/null +++ b/src/jarabe/model/olpcmesh.py @@ -0,0 +1,228 @@ +# Copyright (C) 2009, 2010 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import dbus +import gobject + +from jarabe.model import network +from jarabe.model.network import Settings +from jarabe.model.network import OlpcMesh as OlpcMeshSettings +from sugar.util import unique_id + +_XS_ANYCAST = '\xc0\x27\xc0\x27\xc0\x00' + + +class OlpcMeshManager(object): + def __init__(self, mesh_device): + self._bus = dbus.SystemBus() + + # counter for how many asynchronous connection additions we are + # waiting for + self._add_connections_pending = 0 + + self.mesh_device = mesh_device + self.eth_device = self._get_companion_device() + + self._connection_queue = [] + """Stack of connections that we'll iterate through until we find one + that works. Each entry in the list specifies the channel and + whether to seek an XS or not.""" + + # Ensure that all the connections we'll use later are present + for channel in (1, 6, 11): + self._ensure_connection_exists(channel, xs_hosted=True) + self._ensure_connection_exists(channel, xs_hosted=False) + + props = dbus.Interface(self.mesh_device, dbus.PROPERTIES_IFACE) + props.Get(network.NM_DEVICE_IFACE, 'State', + reply_handler=self.__get_mesh_state_reply_cb, + error_handler=self.__get_state_error_cb) + + props = dbus.Interface(self.eth_device, dbus.PROPERTIES_IFACE) + props.Get(network.NM_DEVICE_IFACE, 'State', + reply_handler=self.__get_eth_state_reply_cb, + error_handler=self.__get_state_error_cb) + + self._bus.add_signal_receiver(self.__eth_device_state_changed_cb, + signal_name='StateChanged', + path=self.eth_device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + + self._bus.add_signal_receiver(self.__mshdev_state_changed_cb, + signal_name='StateChanged', + path=self.mesh_device.object_path, + dbus_interface=network.NM_DEVICE_IFACE) + + self._idle_source = 0 + self._mesh_device_state = network.NM_DEVICE_STATE_UNKNOWN + self._eth_device_state = network.NM_DEVICE_STATE_UNKNOWN + + if self._add_connections_pending == 0: + self.ready() + + def ready(self): + """Called when all connections have been added (if they were not + already present), meaning that we can start the automesh functionality. + """ + if self._have_configured_connections(): + self._start_automesh_timer() + else: + self._start_automesh() + + def _get_companion_device(self): + props = dbus.Interface(self.mesh_device, dbus.PROPERTIES_IFACE) + eth_device_o = props.Get(network.NM_OLPC_MESH_IFACE, 'Companion') + return self._bus.get_object(network.NM_SERVICE, eth_device_o) + + def _have_configured_connections(self): + return len(network.get_connections().get_list()) > 0 + + def _start_automesh_timer(self): + """Start our timer system which basically looks for 10 seconds of + inactivity on both devices, then starts automesh. + + """ + if self._idle_source != 0: + gobject.source_remove(self._idle_source) + self._idle_source = gobject.timeout_add_seconds(10, self._idle_check) + + def __get_state_error_cb(self, err): + logging.debug('Error getting the device state: %s', err) + + def __get_mesh_state_reply_cb(self, state): + self._mesh_device_state = state + self._maybe_schedule_idle_check() + + def __get_eth_state_reply_cb(self, state): + self._eth_device_state = state + self._maybe_schedule_idle_check() + + def __eth_device_state_changed_cb(self, new_state, old_state, reason): + """If a connection is activated on the eth device, stop trying our + automatic connections. + + """ + self._eth_device_state = new_state + self._maybe_schedule_idle_check() + + if new_state >= network.NM_DEVICE_STATE_PREPARE \ + and new_state <= network.NM_DEVICE_STATE_ACTIVATED \ + and len(self._connection_queue) > 0: + self._connection_queue = [] + + def __mshdev_state_changed_cb(self, new_state, old_state, reason): + self._mesh_device_state = new_state + self._maybe_schedule_idle_check() + + if new_state == network.NM_DEVICE_STATE_FAILED: + self._try_next_connection_from_queue() + elif new_state == network.NM_DEVICE_STATE_ACTIVATED \ + and len(self._connection_queue) > 0: + self._empty_connection_queue() + + def _maybe_schedule_idle_check(self): + if self._mesh_device_state == network.NM_DEVICE_STATE_DISCONNECTED \ + and self._eth_device_state == network.NM_DEVICE_STATE_DISCONNECTED: + self._start_automesh_timer() + + def _idle_check(self): + if self._mesh_device_state == network.NM_DEVICE_STATE_DISCONNECTED \ + and self._eth_device_state == network.NM_DEVICE_STATE_DISCONNECTED: + logging.debug('starting automesh due to inactivity') + self._start_automesh() + return False + + @staticmethod + def _get_connection_id(channel, xs_hosted): + if xs_hosted: + return '%s%d' % (network.XS_MESH_CONNECTION_ID_PREFIX, channel) + else: + return '%s%d' % (network.MESH_CONNECTION_ID_PREFIX, channel) + + def _connection_added(self): + if self._add_connections_pending > 0: + self._add_connections_pending = self._add_connections_pending - 1 + if self._add_connections_pending == 0: + self.ready() + + def _add_connection_reply_cb(self, connection): + logging.debug("Added connection: %s", connection) + self._connection_added() + + def _add_connection_err_cb(self, err): + logging.debug("Error adding mesh connection: %s", err) + self._connection_added() + + def _add_connection(self, channel, xs_hosted): + anycast_addr = _XS_ANYCAST if xs_hosted else None + wireless_config = OlpcMeshSettings(channel, anycast_addr) + settings = Settings(wireless_cfg=wireless_config) + if not xs_hosted: + settings.ip4_config = network.IP4Config() + settings.ip4_config.method = 'link-local' + settings.connection.id = self._get_connection_id(channel, xs_hosted) + settings.connection.autoconnect = False + settings.connection.uuid = unique_id() + settings.connection.type = '802-11-olpc-mesh' + network.add_connection(settings, + reply_handler=self._add_connection_reply_cb, + error_handler=self._add_connection_err_cb) + + def _find_connection(self, channel, xs_hosted): + connection_id = self._get_connection_id(channel, xs_hosted) + return network.find_connection_by_id(connection_id) + + def _ensure_connection_exists(self, channel, xs_hosted): + if not self._find_connection(channel, xs_hosted): + self._add_connection(channel, xs_hosted) + + def _activate_connection(self, channel, xs_hosted): + connection = self._find_connection(channel, xs_hosted) + if connection: + connection.activate(self.mesh_device.object_path) + else: + logging.warning("Could not find mesh connection") + + def _try_next_connection_from_queue(self): + if len(self._connection_queue) == 0: + return + + channel, xs_hosted = self._connection_queue.pop() + self._activate_connection(channel, xs_hosted) + + def _empty_connection_queue(self): + self._connection_queue = [] + + def user_activate_channel(self, channel): + """Activate a mesh connection on a user-specified channel. + Looks for XS first, then resorts to simple mesh.""" + self._empty_connection_queue() + self._connection_queue.append((channel, False)) + self._connection_queue.append((channel, True)) + self._try_next_connection_from_queue() + + def _start_automesh(self): + """Start meshing automatically, intended when there are no better + networks to connect to. First looks for XS on all channels, then falls + back to simple mesh on channel 1.""" + self._empty_connection_queue() + self._connection_queue.append((1, False)) + self._connection_queue.append((11, True)) + self._connection_queue.append((6, True)) + self._connection_queue.append((1, True)) + self._try_next_connection_from_queue() diff --git a/src/jarabe/model/screen.py b/src/jarabe/model/screen.py new file mode 100644 index 0000000..7d34d45 --- /dev/null +++ b/src/jarabe/model/screen.py @@ -0,0 +1,45 @@ +# Copyright (C) 2006-2008 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import dbus + + +_HARDWARE_MANAGER_INTERFACE = 'org.freedesktop.ohm.Keystore' +_HARDWARE_MANAGER_SERVICE = 'org.freedesktop.ohm' +_HARDWARE_MANAGER_OBJECT_PATH = '/org/freedesktop/ohm/Keystore' + +_ohm_service = None + + +def _get_ohm(): + global _ohm_service + if _ohm_service is None: + bus = dbus.SystemBus() + proxy = bus.get_object(_HARDWARE_MANAGER_SERVICE, + _HARDWARE_MANAGER_OBJECT_PATH, + follow_name_owner_changes=True) + _ohm_service = dbus.Interface(proxy, _HARDWARE_MANAGER_INTERFACE) + + return _ohm_service + + +def set_dcon_freeze(frozen): + try: + _get_ohm().SetKey('display.dcon_freeze', frozen) + except dbus.DBusException: + logging.error('Cannot unfreeze the DCON') diff --git a/src/jarabe/model/session.py b/src/jarabe/model/session.py new file mode 100644 index 0000000..4e66bdc --- /dev/null +++ b/src/jarabe/model/session.py @@ -0,0 +1,113 @@ +# Copyright (C) 2008, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gtk +import dbus +import os +import signal +import sys +import logging + +from sugar import session +from sugar import env + + +_session_manager = None + + +def have_systemd(): + return os.access("/sys/fs/cgroup/systemd", 0) >= 0 + + +class SessionManager(session.SessionManager): + MODE_LOGOUT = 0 + MODE_SHUTDOWN = 1 + MODE_REBOOT = 2 + + def __init__(self): + session.SessionManager.__init__(self) + self._logout_mode = None + + def logout(self): + self._logout_mode = self.MODE_LOGOUT + self.initiate_shutdown() + + def shutdown(self): + self._logout_mode = self.MODE_SHUTDOWN + self.initiate_shutdown() + + def reboot(self): + self._logout_mode = self.MODE_REBOOT + self.initiate_shutdown() + + def shutdown_completed(self): + if env.is_emulator(): + self._close_emulator() + elif self._logout_mode != self.MODE_LOGOUT: + bus = dbus.SystemBus() + if have_systemd(): + try: + proxy = bus.get_object('org.freedesktop.login1', + '/org/freedesktop/login1') + pm = dbus.Interface(proxy, + 'org.freedesktop.login1.Manager') + + if self._logout_mode == self.MODE_SHUTDOWN: + pm.PowerOff(False) + elif self._logout_mode == self.MODE_REBOOT: + pm.Reboot(True) + except: + logging.exception('Can not stop sugar') + self.session.cancel_shutdown() + return + else: + CONSOLEKIT_DBUS_PATH = '/org/freedesktop/ConsoleKit/Manager' + try: + proxy = bus.get_object('org.freedesktop.ConsoleKit', + CONSOLEKIT_DBUS_PATH) + pm = dbus.Interface(proxy, + 'org.freedesktop.ConsoleKit.Manager') + + if self._logout_mode == self.MODE_SHUTDOWN: + pm.Stop() + elif self._logout_mode == self.MODE_REBOOT: + pm.Restart() + except: + logging.exception('Can not stop sugar') + self.session.cancel_shutdown() + return + + session.SessionManager.shutdown_completed(self) + gtk.main_quit() + + def _close_emulator(self): + gtk.main_quit() + + if 'SUGAR_EMULATOR_PID' in os.environ: + pid = int(os.environ['SUGAR_EMULATOR_PID']) + os.kill(pid, signal.SIGTERM) + + # Need to call this ASAP so the atexit handlers get called before we + # get killed by the X (dis)connection + sys.exit() + + +def get_session_manager(): + global _session_manager + + if _session_manager == None: + _session_manager = SessionManager() + return _session_manager diff --git a/src/jarabe/model/shell.py b/src/jarabe/model/shell.py new file mode 100644 index 0000000..31605f7 --- /dev/null +++ b/src/jarabe/model/shell.py @@ -0,0 +1,675 @@ +# Copyright (C) 2006-2007 Owen Williams. +# Copyright (C) 2006-2008 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +import time + +import gconf +import wnck +import gobject +import gtk +import dbus + +from sugar import wm +from sugar import dispatch +from sugar.graphics.xocolor import XoColor + +from jarabe.model.bundleregistry import get_registry + +_SERVICE_NAME = 'org.laptop.Activity' +_SERVICE_PATH = '/org/laptop/Activity' +_SERVICE_INTERFACE = 'org.laptop.Activity' + +_model = None + + +class Activity(gobject.GObject): + """Activity which appears in the "Home View" of the Sugar shell + + This class stores the Sugar Shell's metadata regarding a + given activity/application in the system. It interacts with + the sugar.activity.* modules extensively in order to + accomplish its tasks. + """ + + __gtype_name__ = 'SugarHomeActivity' + + LAUNCHING = 0 + LAUNCH_FAILED = 1 + LAUNCHED = 2 + + def __init__(self, activity_info, activity_id, color, window=None): + """Initialise the HomeActivity + + activity_info -- sugar.activity.registry.ActivityInfo instance, + provides the information required to actually + create the new instance. This is, in effect, + the "type" of activity being created. + activity_id -- unique identifier for this instance + of the activity type + _windows -- WnckWindows registered for the activity. The lowest + one in the stack is the main window. + """ + gobject.GObject.__init__(self) + + self._windows = [] + self._service = None + self._activity_id = activity_id + self._activity_info = activity_info + self._launch_time = time.time() + self._launch_status = Activity.LAUNCHING + + if color is not None: + self._color = color + else: + client = gconf.client_get_default() + color = client.get_string('/desktop/sugar/user/color') + self._color = XoColor(color) + + if window is not None: + self.add_window(window) + + self._retrieve_service() + + self._name_owner_changed_handler = None + if not self._service: + bus = dbus.SessionBus() + self._name_owner_changed_handler = bus.add_signal_receiver( + self._name_owner_changed_cb, + signal_name='NameOwnerChanged', + dbus_interface='org.freedesktop.DBus') + + self._launch_completed_hid = get_model().connect('launch-completed', + self.__launch_completed_cb) + self._launch_failed_hid = get_model().connect('launch-failed', + self.__launch_failed_cb) + + def get_launch_status(self): + return self._launch_status + + launch_status = gobject.property(getter=get_launch_status) + + def add_window(self, window): + """Add a window to the windows stack.""" + if not window: + raise ValueError('window must be valid') + self._windows.append(window) + + def remove_window_by_xid(self, xid): + """Remove a window from the windows stack.""" + for wnd in self._windows: + if wnd.get_xid() == xid: + self._windows.remove(wnd) + return True + return False + + def get_service(self): + """Get the activity service + + Note that non-native Sugar applications will not have + such a service, so the return value will be None in + those cases. + """ + + return self._service + + def get_title(self): + """Retrieve the application's root window's suggested title""" + if self._windows: + return self._windows[0].get_name() + else: + return '' + + def get_icon_path(self): + """Retrieve the activity's icon (file) name""" + if self.is_journal(): + icon_theme = gtk.icon_theme_get_default() + info = icon_theme.lookup_icon('activity-journal', + gtk.ICON_SIZE_SMALL_TOOLBAR, 0) + if not info: + return None + fname = info.get_filename() + del info + return fname + elif self._activity_info: + return self._activity_info.get_icon() + else: + return None + + def get_icon_color(self): + """Retrieve the appropriate icon colour for this activity + + Uses activity_id to index into the PresenceService's + set of activity colours, if the PresenceService does not + have an entry (implying that this is not a Sugar-shared application) + uses the local user's profile colour for the icon. + """ + return self._color + + def get_activity_id(self): + """Retrieve the "activity_id" passed in to our constructor + + This is a "globally likely unique" identifier generated by + sugar.util.unique_id + """ + return self._activity_id + + def get_xid(self): + """Retrieve the X-windows ID of our root window""" + if self._windows: + return self._windows[0].get_xid() + else: + return None + + def has_xid(self, xid): + """Check if an X-window with the given xid is in the windows stack""" + if self._windows: + for wnd in self._windows: + if wnd.get_xid() == xid: + return True + return False + + def get_window(self): + """Retrieve the X-windows root window of this application + + This was stored by the add_window method, which was + called by HomeModel._add_activity, which was called + via a callback that looks for all 'window-opened' + events. + + We keep a stack of the windows. The lowest window in the + stack that is still valid we consider the main one. + + HomeModel currently uses a dbus service query on the + activity to determine to which HomeActivity the newly + launched window belongs. + """ + if self._windows: + return self._windows[0] + return None + + def get_type(self): + """Retrieve the activity bundle id for future reference""" + if not self._windows: + return None + else: + return wm.get_bundle_id(self._windows[0]) + + def is_journal(self): + """Returns boolean if the activity is of type JournalActivity""" + return self.get_type() == 'org.laptop.JournalActivity' + + def get_launch_time(self): + """Return the time at which the activity was first launched + + Format is floating-point time.time() value + (seconds since the epoch) + """ + return self._launch_time + + def get_pid(self): + """Returns the activity's PID""" + if not self._windows: + return None + return self._windows[0].get_pid() + + def get_bundle_path(self): + """Returns the activity's bundle directory""" + if self._activity_info is None: + return None + else: + return self._activity_info.get_path() + + def get_activity_name(self): + """Returns the activity's bundle name""" + if self._activity_info is None: + return None + else: + return self._activity_info.get_name() + + def equals(self, activity): + if self._activity_id and activity.get_activity_id(): + return self._activity_id == activity.get_activity_id() + if self._windows[0].get_xid() and activity.get_xid(): + return self._windows[0].get_xid() == activity.get_xid() + return False + + def _get_service_name(self): + if self._activity_id: + return _SERVICE_NAME + self._activity_id + else: + return None + + def _retrieve_service(self): + if not self._activity_id: + return + + try: + bus = dbus.SessionBus() + proxy = bus.get_object(self._get_service_name(), + _SERVICE_PATH + '/' + self._activity_id) + self._service = dbus.Interface(proxy, _SERVICE_INTERFACE) + except dbus.DBusException: + self._service = None + + def _name_owner_changed_cb(self, name, old, new): + if name == self._get_service_name(): + if old and not new: + logging.debug('Activity._name_owner_changed_cb: ' \ + 'activity %s went away', name) + self._name_owner_changed_handler.remove() + self._name_owner_changed_handler = None + self._service = None + elif not old and new: + logging.debug('Activity._name_owner_changed_cb: ' \ + 'activity %s started up', name) + self._retrieve_service() + self.set_active(True) + + def set_active(self, state): + """Propagate the current state to the activity object""" + if self._service is not None: + self._service.SetActive(state, + reply_handler=self._set_active_success, + error_handler=self._set_active_error) + + def _set_active_success(self): + pass + + def _set_active_error(self, err): + logging.error('set_active() failed: %s', err) + + def _set_launch_status(self, value): + get_model().disconnect(self._launch_completed_hid) + get_model().disconnect(self._launch_failed_hid) + self._launch_completed_hid = None + self._launch_failed_hid = None + self._launch_status = value + self.notify('launch_status') + + def __launch_completed_cb(self, model, home_activity): + if home_activity is self: + self._set_launch_status(Activity.LAUNCHED) + + def __launch_failed_cb(self, model, home_activity): + if home_activity is self: + self._set_launch_status(Activity.LAUNCH_FAILED) + + +class ShellModel(gobject.GObject): + """Model of the shell (activity management) + + The ShellModel is basically the point of registration + for all running activities within Sugar. It traps + events that tell the system there is a new activity + being created (generated by the activity factories), + or removed, as well as those which tell us that the + currently focussed activity has changed. + + The HomeModel tracks a set of HomeActivity instances, + which are tracking the window to activity mappings + the activity factories have set up. + """ + + __gsignals__ = { + 'activity-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'activity-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'active-activity-changed': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'tabbing-activity-changed': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'launch-started': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'launch-completed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'launch-failed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + } + + ZOOM_MESH = 0 + ZOOM_GROUP = 1 + ZOOM_HOME = 2 + ZOOM_ACTIVITY = 3 + + def __init__(self): + gobject.GObject.__init__(self) + + self._screen = wnck.screen_get_default() + self._screen.connect('window-opened', self._window_opened_cb) + self._screen.connect('window-closed', self._window_closed_cb) + self._screen.connect('active-window-changed', + self._active_window_changed_cb) + + self.zoom_level_changed = dispatch.Signal() + + self._desktop_level = self.ZOOM_HOME + self._zoom_level = self.ZOOM_HOME + self._current_activity = None + self._activities = [] + self._shared_activities = {} + self._active_activity = None + self._tabbing_activity = None + self._launchers = {} + + self._screen.toggle_showing_desktop(True) + + def get_launcher(self, activity_id): + return self._launchers.get(str(activity_id)) + + def register_launcher(self, activity_id, launcher): + self._launchers[activity_id] = launcher + + def unregister_launcher(self, activity_id): + if activity_id in self._launchers: + del self._launchers[activity_id] + + def _update_zoom_level(self, window): + if window.get_window_type() == wnck.WINDOW_DIALOG: + return + elif window.get_window_type() == wnck.WINDOW_NORMAL: + new_level = self.ZOOM_ACTIVITY + else: + new_level = self._desktop_level + + if self._zoom_level != new_level: + old_level = self._zoom_level + self._zoom_level = new_level + self.zoom_level_changed.send(self, old_level=old_level, + new_level=new_level) + + def set_zoom_level(self, new_level, x_event_time=0): + old_level = self.zoom_level + if old_level == new_level: + return + + if old_level != self.ZOOM_ACTIVITY: + screen = gtk.gdk.screen_get_default() + active_window_type = screen.get_active_window().get_type_hint() + if active_window_type != gtk.gdk.WINDOW_TYPE_HINT_DESKTOP: + return + + self._zoom_level = new_level + if new_level is not self.ZOOM_ACTIVITY: + self._desktop_level = new_level + + self.zoom_level_changed.send(self, old_level=old_level, + new_level=new_level) + + show_desktop = new_level is not self.ZOOM_ACTIVITY + self._screen.toggle_showing_desktop(show_desktop) + + if new_level is self.ZOOM_ACTIVITY: + # activate the window, in case it was iconified + # (e.g. during sugar launch, the Journal starts in this state) + window = self._active_activity.get_window() + if window: + window.activate(x_event_time or gtk.get_current_event_time()) + + def _get_zoom_level(self): + return self._zoom_level + + zoom_level = property(_get_zoom_level) + + def _get_activities_with_window(self): + ret = [] + for i in self._activities: + if i.get_window() is not None: + ret.append(i) + return ret + + def get_previous_activity(self, current=None): + if not current: + current = self._active_activity + + activities = self._get_activities_with_window() + i = activities.index(current) + if len(activities) == 0: + return None + elif i - 1 >= 0: + return activities[i - 1] + else: + return activities[len(activities) - 1] + + def get_next_activity(self, current=None): + if not current: + current = self._active_activity + + activities = self._get_activities_with_window() + i = activities.index(current) + if len(activities) == 0: + return None + elif i + 1 < len(activities): + return activities[i + 1] + else: + return activities[0] + + def get_active_activity(self): + """Returns the activity that the user is currently working in""" + return self._active_activity + + def add_shared_activity(self, activity_id, color): + self._shared_activities[activity_id] = color + + def remove_shared_activity(self, activity_id): + del self._shared_activities[activity_id] + + def get_tabbing_activity(self): + """Returns the activity that is currently highlighted during tabbing""" + return self._tabbing_activity + + def set_tabbing_activity(self, activity): + """Sets the activity that is currently highlighted during tabbing""" + self._tabbing_activity = activity + self.emit('tabbing-activity-changed', self._tabbing_activity) + + def _set_active_activity(self, home_activity): + if self._active_activity == home_activity: + return + + if home_activity: + home_activity.set_active(True) + + if self._active_activity: + self._active_activity.set_active(False) + + self._active_activity = home_activity + self.emit('active-activity-changed', self._active_activity) + + def __iter__(self): + return iter(self._activities) + + def __len__(self): + return len(self._activities) + + def __getitem__(self, i): + return self._activities[i] + + def index(self, obj): + return self._activities.index(obj) + + def _window_opened_cb(self, screen, window): + """Handle the callback for the 'window opened' event. + + Most activities will register 2 windows during + their lifetime: the launcher window, and the 'main' + app window. + + When the main window appears, we send a signal to + the launcher window to close. + + Some activities (notably non-native apps) open several + windows during their lifetime, switching from one to + the next as the 'main' window. We use a stack to track + them. + + """ + if window.get_window_type() == wnck.WINDOW_NORMAL: + home_activity = None + + activity_id = wm.get_activity_id(window) + + service_name = wm.get_bundle_id(window) + if service_name: + registry = get_registry() + activity_info = registry.get_bundle(service_name) + else: + activity_info = None + + if activity_id: + home_activity = self.get_activity_by_id(activity_id) + + xid = window.get_xid() + gdk_window = gtk.gdk.window_foreign_new(xid) + gdk_window.set_decorations(0) + + window.maximize() + + if not home_activity: + logging.debug('first window registered for %s', activity_id) + color = self._shared_activities.get(activity_id, None) + home_activity = Activity(activity_info, activity_id, + color, window) + self._add_activity(home_activity) + else: + logging.debug('window registered for %s', activity_id) + home_activity.add_window(window) + + if wm.get_sugar_window_type(window) != 'launcher' \ + and home_activity.get_launch_status() == Activity.LAUNCHING: + self.emit('launch-completed', home_activity) + startup_time = time.time() - home_activity.get_launch_time() + logging.debug('%s launched in %f seconds.', + activity_id, startup_time) + + if self._active_activity is None: + self._set_active_activity(home_activity) + + def _window_closed_cb(self, screen, window): + if window.get_window_type() == wnck.WINDOW_NORMAL: + xid = window.get_xid() + activity = self._get_activity_by_xid(xid) + if activity is not None: + activity.remove_window_by_xid(xid) + if activity.get_window() is None: + logging.debug('last window gone - remove activity %s', + activity) + self._remove_activity(activity) + + def _get_activity_by_xid(self, xid): + for home_activity in self._activities: + if home_activity.has_xid(xid): + return home_activity + return None + + def get_activity_by_id(self, activity_id): + for home_activity in self._activities: + if home_activity.get_activity_id() == activity_id: + return home_activity + return None + + def _active_window_changed_cb(self, screen, previous_window=None): + window = screen.get_active_window() + if window is None: + return + + if window.get_window_type() != wnck.WINDOW_DIALOG: + while window.get_transient() is not None: + window = window.get_transient() + + act = self._get_activity_by_xid(window.get_xid()) + if act is not None: + self._set_active_activity(act) + + self._update_zoom_level(window) + + def _add_activity(self, home_activity): + self._activities.append(home_activity) + self.emit('activity-added', home_activity) + + def _remove_activity(self, home_activity): + if home_activity == self._active_activity: + windows = wnck.screen_get_default().get_windows_stacked() + windows.reverse() + for window in windows: + new_activity = self._get_activity_by_xid(window.get_xid()) + if new_activity is not None: + self._set_active_activity(new_activity) + break + else: + logging.error('No activities are running') + self._set_active_activity(None) + + self.emit('activity-removed', home_activity) + self._activities.remove(home_activity) + + def notify_launch(self, activity_id, service_name): + registry = get_registry() + activity_info = registry.get_bundle(service_name) + if not activity_info: + raise ValueError("Activity service name '%s'" \ + " was not found in the bundle registry." + % service_name) + color = self._shared_activities.get(activity_id, None) + home_activity = Activity(activity_info, activity_id, color) + self._add_activity(home_activity) + + self._set_active_activity(home_activity) + + self.emit('launch-started', home_activity) + + # FIXME: better learn about finishing processes by receiving a signal. + # Now just check whether an activity has a window after ~90sec + gobject.timeout_add_seconds(90, self._check_activity_launched, + activity_id) + + def notify_launch_failed(self, activity_id): + home_activity = self.get_activity_by_id(activity_id) + if home_activity: + logging.debug('Activity %s (%s) launch failed', activity_id, + home_activity.get_type()) + if self.get_launcher(activity_id) is not None: + self.emit('launch-failed', home_activity) + else: + # activity sent failure notification after closing launcher + self._remove_activity(home_activity) + else: + logging.error('Model for activity id %s does not exist.', + activity_id) + + def _check_activity_launched(self, activity_id): + home_activity = self.get_activity_by_id(activity_id) + + if not home_activity: + logging.debug('Activity %s has been closed already.', activity_id) + return False + + if self.get_launcher(activity_id) is not None: + logging.debug('Activity %s still launching, assuming it failed.', + activity_id) + self.notify_launch_failed(activity_id) + return False + + +def get_model(): + global _model + if _model is None: + _model = ShellModel() + return _model diff --git a/src/jarabe/model/sound.py b/src/jarabe/model/sound.py new file mode 100644 index 0000000..9e1e748 --- /dev/null +++ b/src/jarabe/model/sound.py @@ -0,0 +1,65 @@ +# Copyright (C) 2006-2008 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import gconf + +from sugar import env +from sugar import _sugarext +from sugar import dispatch + + +VOLUME_STEP = 10 + +muted_changed = dispatch.Signal() +volume_changed = dispatch.Signal() + +_volume = _sugarext.VolumeAlsa() + + +def get_muted(): + return _volume.get_mute() + + +def get_volume(): + return _volume.get_volume() + + +def set_volume(new_volume): + old_volume = _volume.get_volume() + _volume.set_volume(new_volume) + + volume_changed.send(None) + save() + + +def set_muted(new_state): + old_state = _volume.get_mute() + _volume.set_mute(new_state) + + muted_changed.send(None) + save() + + +def save(): + if env.is_emulator() is False: + client = gconf.client_get_default() + client.set_int('/desktop/sugar/sound/volume', get_volume()) + + +def restore(): + if env.is_emulator() is False: + client = gconf.client_get_default() + set_volume(client.get_int('/desktop/sugar/sound/volume')) diff --git a/src/jarabe/model/speech.py b/src/jarabe/model/speech.py new file mode 100644 index 0000000..1cb0ad4 --- /dev/null +++ b/src/jarabe/model/speech.py @@ -0,0 +1,232 @@ +# Copyright (C) 2011 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import logging + +import gconf +import gst +import gtk +import gobject + + +DEFAULT_PITCH = 0 + + +DEFAULT_RATE = 0 + +_speech_manager = None + + +class SpeechManager(gobject.GObject): + + __gtype_name__ = 'SpeechManager' + + __gsignals__ = { + 'play': (gobject.SIGNAL_RUN_FIRST, None, []), + 'pause': (gobject.SIGNAL_RUN_FIRST, None, []), + 'stop': (gobject.SIGNAL_RUN_FIRST, None, []) + } + + MIN_PITCH = -100 + MAX_PITCH = 100 + + MIN_RATE = -100 + MAX_RATE = 100 + + def __init__(self, **kwargs): + gobject.GObject.__init__(self, **kwargs) + self._player = _GstSpeechPlayer() + self._player.connect('play', self._update_state, 'play') + self._player.connect('stop', self._update_state, 'stop') + self._player.connect('pause', self._update_state, 'pause') + self._voice_name = self._player.get_default_voice() + self._pitch = DEFAULT_PITCH + self._rate = DEFAULT_RATE + self._is_playing = False + self._is_paused = False + self.restore() + + def _update_state(self, player, signal): + self._is_playing = (signal == 'play') + self._is_paused = (signal == 'pause') + self.emit(signal) + + def get_is_playing(self): + return self._is_playing + + is_playing = gobject.property(type=bool, getter=get_is_playing, + setter=None, default=False) + + def get_is_paused(self): + return self._is_paused + + is_paused = gobject.property(type=bool, getter=get_is_paused, + setter=None, default=False) + + def get_pitch(self): + return self._pitch + + def get_rate(self): + return self._rate + + def set_pitch(self, pitch): + self._pitch = pitch + self.save() + + def set_rate(self, rate): + self._rate = rate + self.save() + + def say_text(self, text): + if text: + self._player.speak(self._pitch, self._rate, self._voice_name, text) + + def say_selected_text(self): + clipboard = gtk.clipboard_get(selection='PRIMARY') + clipboard.request_text(self.__primary_selection_cb) + + def pause(self): + self._player.pause_sound_device() + + def restart(self): + self._player.restart_sound_device() + + def stop(self): + self._player.stop_sound_device() + + def __primary_selection_cb(self, clipboard, text, user_data): + self.say_text(text) + + def save(self): + client = gconf.client_get_default() + client.set_int('/desktop/sugar/speech/pitch', self._pitch) + client.set_int('/desktop/sugar/speech/rate', self._rate) + logging.debug('saving speech configuration pitch %s rate %s', + self._pitch, self._rate) + + def restore(self): + client = gconf.client_get_default() + self._pitch = client.get_int('/desktop/sugar/speech/pitch') + self._rate = client.get_int('/desktop/sugar/speech/rate') + logging.debug('loading speech configuration pitch %s rate %s', + self._pitch, self._rate) + + +class _GstSpeechPlayer(gobject.GObject): + + __gsignals__ = { + 'play': (gobject.SIGNAL_RUN_FIRST, None, []), + 'pause': (gobject.SIGNAL_RUN_FIRST, None, []), + 'stop': (gobject.SIGNAL_RUN_FIRST, None, []) + } + + def __init__(self): + gobject.GObject.__init__(self) + self._pipeline = None + + def restart_sound_device(self): + if self._pipeline is None: + logging.debug('Trying to restart not initialized sound device') + return + + self._pipeline.set_state(gst.STATE_PLAYING) + self.emit('play') + + def pause_sound_device(self): + if self._pipeline is None: + return + + self._pipeline.set_state(gst.STATE_PAUSED) + self.emit('pause') + + def stop_sound_device(self): + if self._pipeline is None: + return + + self._pipeline.set_state(gst.STATE_NULL) + self.emit('stop') + + def make_pipeline(self, command): + if self._pipeline is not None: + self.stop_sound_device() + del self._pipeline + + self._pipeline = gst.parse_launch(command) + + bus = self._pipeline.get_bus() + bus.add_signal_watch() + bus.connect('message', self.__pipe_message_cb) + + def __pipe_message_cb(self, bus, message): + if message.type == gst.MESSAGE_EOS: + self._pipeline.set_state(gst.STATE_NULL) + self.emit('stop') + elif message.type == gst.MESSAGE_ERROR: + self._pipeline.set_state(gst.STATE_NULL) + self.emit('stop') + + def speak(self, pitch, rate, voice_name, text): + # TODO workaround for http://bugs.sugarlabs.org/ticket/1801 + if not [i for i in text if i.isalnum()]: + return + + self.make_pipeline('espeak name=espeak ! autoaudiosink') + src = self._pipeline.get_by_name('espeak') + + src.props.text = text + src.props.pitch = pitch + src.props.rate = rate + src.props.voice = voice_name + src.props.track = 2 # track for marks + + self.restart_sound_device() + + def get_all_voices(self): + all_voices = {} + for voice in gst.element_factory_make('espeak').props.voices: + name, language, dialect = voice + if dialect != 'none': + all_voices[language + '_' + dialect] = name + else: + all_voices[language] = name + return all_voices + + def get_default_voice(self): + """Try to figure out the default voice, from the current locale ($LANG) + Fall back to espeak's voice called Default.""" + voices = self.get_all_voices() + + locale = os.environ.get('LANG', '') + language_location = locale.split('.', 1)[0].lower() + language = language_location.split('_')[0] + # if the language is es but not es_es default to es_la (latin voice) + if language == 'es' and language_location != 'es_es': + language_location = 'es_la' + + best = voices.get(language_location) or voices.get(language) \ + or 'default' + logging.debug('Best voice for LANG %s seems to be %s', + locale, best) + return best + + +def get_speech_manager(): + global _speech_manager + + if _speech_manager is None: + _speech_manager = SpeechManager() + return _speech_manager diff --git a/src/jarabe/model/telepathyclient.py b/src/jarabe/model/telepathyclient.py new file mode 100644 index 0000000..2604af6 --- /dev/null +++ b/src/jarabe/model/telepathyclient.py @@ -0,0 +1,126 @@ +# Copyright (C) 2010 Collabora Ltd. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import dbus +from dbus import PROPERTIES_IFACE +from telepathy.interfaces import CLIENT, \ + CHANNEL, \ + CHANNEL_TYPE_TEXT, \ + CLIENT_APPROVER, \ + CLIENT_HANDLER, \ + CLIENT_INTERFACE_REQUESTS +from telepathy.server import DBusProperties + +from telepathy.constants import CONNECTION_HANDLE_TYPE_ROOM +from telepathy.constants import CONNECTION_HANDLE_TYPE_CONTACT + +from sugar import dispatch + + +SUGAR_CLIENT_SERVICE = 'org.freedesktop.Telepathy.Client.Sugar' +SUGAR_CLIENT_PATH = '/org/freedesktop/Telepathy/Client/Sugar' + +_instance = None + + +class TelepathyClient(dbus.service.Object, DBusProperties): + def __init__(self): + self._interfaces = set([CLIENT, CLIENT_HANDLER, + CLIENT_INTERFACE_REQUESTS, PROPERTIES_IFACE, + CLIENT_APPROVER]) + + bus = dbus.Bus() + bus_name = dbus.service.BusName(SUGAR_CLIENT_SERVICE, bus=bus) + + dbus.service.Object.__init__(self, bus_name, SUGAR_CLIENT_PATH) + DBusProperties.__init__(self) + + self._implement_property_get(CLIENT, { + 'Interfaces': lambda: list(self._interfaces), + }) + self._implement_property_get(CLIENT_HANDLER, { + 'HandlerChannelFilter': self.__get_filters_handler_cb, + }) + self._implement_property_get(CLIENT_APPROVER, { + 'ApproverChannelFilter': self.__get_filters_approver_cb, + }) + + self.got_channel = dispatch.Signal() + self.got_dispatch_operation = dispatch.Signal() + + def __get_filters_handler_cb(self): + filter_dict = dbus.Dictionary({}, signature='sv') + return dbus.Array([filter_dict], signature='a{sv}') + + def __get_filters_approver_cb(self): + activity_invitation = { + CHANNEL + '.ChannelType': CHANNEL_TYPE_TEXT, + CHANNEL + '.TargetHandleType': CONNECTION_HANDLE_TYPE_ROOM, + } + filter_dict = dbus.Dictionary(activity_invitation, signature='sv') + filters = dbus.Array([filter_dict], signature='a{sv}') + + text_invitation = { + CHANNEL + '.ChannelType': CHANNEL_TYPE_TEXT, + CHANNEL + '.TargetHandleType': CONNECTION_HANDLE_TYPE_CONTACT, + } + filter_dict = dbus.Dictionary(text_invitation, signature='sv') + filters.append(filter_dict) + + logging.debug('__get_filters_approver_cb %r', filters) + + return filters + + @dbus.service.method(dbus_interface=CLIENT_HANDLER, + in_signature='ooa(oa{sv})aota{sv}', out_signature='') + def HandleChannels(self, account, connection, channels, requests_satisfied, + user_action_time, handler_info): + logging.debug('HandleChannels\n%r\n%r\n%r\n%r\n%r\n%r\n', account, + connection, channels, requests_satisfied, + user_action_time, handler_info) + for channel in channels: + self.got_channel.send(self, account=account, + connection=connection, channel=channel) + + @dbus.service.method(dbus_interface=CLIENT_INTERFACE_REQUESTS, + in_signature='oa{sv}', out_signature='') + def AddRequest(self, request, properties): + logging.debug('AddRequest\n%r\n%r', request, properties) + + @dbus.service.method(dbus_interface=CLIENT_APPROVER, + in_signature='a(oa{sv})oa{sv}', out_signature='', + async_callbacks=('success_cb', 'error_cb_')) + def AddDispatchOperation(self, channels, dispatch_operation_path, + properties, success_cb, error_cb_): + success_cb() + try: + logging.debug('AddDispatchOperation\n%r\n%r\n%r', channels, + dispatch_operation_path, properties) + + self.got_dispatch_operation.send(self, channels=channels, + dispatch_operation_path=dispatch_operation_path, + properties=properties) + except Exception, e: + logging.exception(e) + + +def get_instance(): + global _instance + if not _instance: + _instance = TelepathyClient() + return _instance diff --git a/src/jarabe/util/Makefile.am b/src/jarabe/util/Makefile.am new file mode 100644 index 0000000..8bda3d6 --- /dev/null +++ b/src/jarabe/util/Makefile.am @@ -0,0 +1,7 @@ +SUBDIRS = \ + telepathy + +sugardir = $(pythondir)/jarabe/util +sugar_PYTHON = \ + __init__.py \ + emulator.py diff --git a/src/jarabe/util/Makefile.in b/src/jarabe/util/Makefile.in new file mode 100644 index 0000000..30f46ac --- /dev/null +++ b/src/jarabe/util/Makefile.in @@ -0,0 +1,646 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src/jarabe/util +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = \ + telepathy + +sugardir = $(pythondir)/jarabe/util +sugar_PYTHON = \ + __init__.py \ + emulator.py + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/jarabe/util/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/jarabe/util/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/jarabe/util/__init__.py b/src/jarabe/util/__init__.py new file mode 100644 index 0000000..9c80ecb --- /dev/null +++ b/src/jarabe/util/__init__.py @@ -0,0 +1,18 @@ +"""OLPC Sugar Jarabe utility modules +""" + +# Copyright (C) 2008, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/src/jarabe/util/emulator.py b/src/jarabe/util/emulator.py new file mode 100644 index 0000000..fda1b59 --- /dev/null +++ b/src/jarabe/util/emulator.py @@ -0,0 +1,185 @@ +# Copyright (C) 2006-2008, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import signal +import subprocess +import sys +import time +from optparse import OptionParser +from gettext import gettext as _ + +import gtk +import gobject + +from sugar import env + + +ERROR_NO_DISPLAY = 30 +ERROR_NO_SERVER = 31 +default_dimensions = (800, 600) + + +def _run_xephyr(display, dpi, dimensions, fullscreen): + cmd = ['Xephyr'] + cmd.append(':%d' % display) + cmd.append('-ac') + cmd += ['-title', _('Sugar in a window')] + + screen_size = (gtk.gdk.screen_width(), gtk.gdk.screen_height()) + + if (not dimensions) and (fullscreen is None) and \ + (screen_size <= default_dimensions): + # no forced settings, screen too small => fit screen + fullscreen = True + elif not dimensions: + # screen is big enough or user has en/disabled fullscreen manually + # => use default size (will get ignored for fullscreen) + dimensions = '%dx%d' % default_dimensions + + if not dpi: + dpi = gtk.settings_get_default().get_property('gtk-xft-dpi') / 1024 + + if fullscreen: + cmd.append('-fullscreen') + + if dimensions: + cmd.append('-screen') + cmd.append(dimensions) + + if dpi: + cmd.append('-dpi') + cmd.append('%d' % dpi) + + cmd.append('-noreset') + + try: + pipe = subprocess.Popen(cmd) + + except OSError, exc: + sys.stderr.write('Error executing server: %s\n' % (exc, )) + return None + + return pipe + + +def _check_server(display): + result = subprocess.call(['xdpyinfo', '-display', ':%d' % display], + stdout=open(os.devnull, 'w'), + stderr=open(os.devnull, 'w')) + return result == 0 + + +def _kill_pipe(pipe): + """Terminate and wait for child process.""" + try: + os.kill(pipe.pid, signal.SIGTERM) + except OSError: + pass + + pipe.wait() + + +def _start_xephyr(dpi, dimensions, fullscreen): + for display in range(30, 40): + if not _check_server(display): + pipe = _run_xephyr(display, dpi, dimensions, fullscreen) + if pipe is None: + return None, None + + for i_ in range(10): + if _check_server(display): + return pipe, display + + time.sleep(0.1) + + _kill_pipe(pipe) + + return None, None + + +def _start_window_manager(): + cmd = ['metacity'] + + cmd.extend(['--no-force-fullscreen']) + + gobject.spawn_async(cmd, flags=gobject.SPAWN_SEARCH_PATH) + + +def _setup_env(display, scaling, emulator_pid): + os.environ['SUGAR_EMULATOR'] = 'yes' + os.environ['GABBLE_LOGFILE'] = os.path.join( + env.get_profile_path(), 'logs', 'telepathy-gabble.log') + os.environ['SALUT_LOGFILE'] = os.path.join( + env.get_profile_path(), 'logs', 'telepathy-salut.log') + os.environ['MC_LOGFILE'] = os.path.join( + env.get_profile_path(), 'logs', 'mission-control.log') + os.environ['STREAM_ENGINE_LOGFILE'] = os.path.join( + env.get_profile_path(), 'logs', 'telepathy-stream-engine.log') + os.environ['DISPLAY'] = ':%d' % (display) + os.environ['SUGAR_EMULATOR_PID'] = emulator_pid + os.environ['MC_ACCOUNT_DIR'] = os.path.join( + env.get_profile_path(), 'accounts') + + if scaling: + os.environ['SUGAR_SCALING'] = scaling + + +def main(): + """Script-level operations""" + + parser = OptionParser() + parser.add_option('-d', '--dpi', dest='dpi', type='int', + help='Emulator dpi') + parser.add_option('-s', '--scaling', dest='scaling', + help='Sugar scaling in %') + parser.add_option('-i', '--dimensions', dest='dimensions', + help='Emulator dimensions (ex. 1200x900)') + parser.add_option('-f', '--fullscreen', dest='fullscreen', + action='store_true', default=None, + help='Run emulator in fullscreen mode') + parser.add_option('-F', '--no-fullscreen', dest='fullscreen', + action='store_false', + help='Do not run emulator in fullscreen mode') + (options, args) = parser.parse_args() + + if not os.environ.get('DISPLAY'): + sys.stderr.write('DISPLAY not set, cannot connect to host X server.\n') + return ERROR_NO_DISPLAY + + server, display = _start_xephyr(options.dpi, options.dimensions, + options.fullscreen) + if server is None: + sys.stderr.write('Failed to start server. Please check output above' + ' for any error message.\n') + return ERROR_NO_SERVER + + _setup_env(display, options.scaling, str(server.pid)) + + command = ['dbus-launch', '--exit-with-session'] + + if not args: + command.append('sugar') + else: + _start_window_manager() + + if args[0].endswith('.py'): + command.append('python') + + command.append(args[0]) + + subprocess.call(command) + _kill_pipe(server) diff --git a/src/jarabe/util/telepathy/Makefile.am b/src/jarabe/util/telepathy/Makefile.am new file mode 100644 index 0000000..d40349d --- /dev/null +++ b/src/jarabe/util/telepathy/Makefile.am @@ -0,0 +1,4 @@ +sugardir = $(pythondir)/jarabe/util/telepathy +sugar_PYTHON = \ + __init__.py \ + connection_watcher.py diff --git a/src/jarabe/util/telepathy/Makefile.in b/src/jarabe/util/telepathy/Makefile.in new file mode 100644 index 0000000..62f6c00 --- /dev/null +++ b/src/jarabe/util/telepathy/Makefile.in @@ -0,0 +1,441 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src/jarabe/util/telepathy +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pythondir)/jarabe/util/telepathy +sugar_PYTHON = \ + __init__.py \ + connection_watcher.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/jarabe/util/telepathy/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/jarabe/util/telepathy/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/jarabe/util/telepathy/__init__.py b/src/jarabe/util/telepathy/__init__.py new file mode 100644 index 0000000..eee4abb --- /dev/null +++ b/src/jarabe/util/telepathy/__init__.py @@ -0,0 +1,18 @@ +"""OLPC Sugar Jarabe utility telepathy modules +""" + +# Copyright (C) 2008, 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/src/jarabe/util/telepathy/connection_watcher.py b/src/jarabe/util/telepathy/connection_watcher.py new file mode 100644 index 0000000..96af1cf --- /dev/null +++ b/src/jarabe/util/telepathy/connection_watcher.py @@ -0,0 +1,122 @@ +# This should eventually land in telepathy-python, so has the same license: +# Copyright (C) 2008 Collabora Ltd. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 of the License, or +# (at your option) 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +# FIXME: this sould go upstream, in telepathy-python + +import logging + +import dbus +import dbus.mainloop.glib +import gobject + +from telepathy.client import Connection +from telepathy.interfaces import CONN_INTERFACE +from telepathy.constants import CONNECTION_STATUS_CONNECTED, \ + CONNECTION_STATUS_DISCONNECTED + + +_instance = None + + +class ConnectionWatcher(gobject.GObject): + __gsignals__ = { + 'connection-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'connection-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + } + + def __init__(self, bus=None): + gobject.GObject.__init__(self) + + if bus is None: + self.bus = dbus.Bus() + else: + self.bus = bus + + # D-Bus path -> Connection + self._connections = {} + + self.bus.add_signal_receiver(self._status_changed_cb, + dbus_interface=CONN_INTERFACE, signal_name='StatusChanged', + path_keyword='path') + + for conn in Connection.get_connections(bus): + conn.call_when_ready(self._conn_ready_cb) + + def _status_changed_cb(self, *args, **kwargs): + path = kwargs['path'] + if not path.startswith('/org/freedesktop/Telepathy/Connection/'): + return + + status, reason_ = args + service_name = path.replace('/', '.')[1:] + + if status == CONNECTION_STATUS_CONNECTED: + self._add_connection(service_name, path) + elif status == CONNECTION_STATUS_DISCONNECTED: + self._remove_connection(service_name, path) + + def _conn_ready_cb(self, conn): + if conn.object_path in self._connections: + return + + self._connections[conn.object_path] = conn + self.emit('connection-added', conn) + + def _add_connection(self, service_name, path): + if path in self._connections: + return + + try: + Connection(service_name, path, ready_handler=self._conn_ready_cb) + except dbus.exceptions.DBusException: + logging.debug('%s is propably already gone.', service_name) + + def _remove_connection(self, service_name, path): + conn = self._connections.pop(path, None) + if conn is None: + return + + self.emit('connection-removed', conn) + + def get_connections(self): + return self._connections.values() + + +def get_instance(): + global _instance + if _instance is None: + _instance = ConnectionWatcher() + return _instance + + +if __name__ == '__main__': + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + + def connection_added_cb(conn_watcher, conn): + print 'new connection', conn.service_name + + def connection_removed_cb(conn_watcher, conn): + print 'removed connection', conn.service_name + + watcher = ConnectionWatcher() + watcher.connect('connection-added', connection_added_cb) + watcher.connect('connection-removed', connection_removed_cb) + + loop = gobject.MainLoop() + loop.run() diff --git a/src/jarabe/view/Makefile.am b/src/jarabe/view/Makefile.am new file mode 100644 index 0000000..630f184 --- /dev/null +++ b/src/jarabe/view/Makefile.am @@ -0,0 +1,13 @@ +sugardir = $(pythondir)/jarabe/view +sugar_PYTHON = \ + __init__.py \ + buddyicon.py \ + buddymenu.py \ + customizebundle.py \ + keyhandler.py \ + launcher.py \ + palettes.py \ + pulsingicon.py \ + service.py \ + tabbinghandler.py \ + viewsource.py diff --git a/src/jarabe/view/Makefile.in b/src/jarabe/view/Makefile.in new file mode 100644 index 0000000..2ef1572 --- /dev/null +++ b/src/jarabe/view/Makefile.in @@ -0,0 +1,450 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = src/jarabe/view +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(sugar_PYTHON) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) +am__installdirs = "$(DESTDIR)$(sugardir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCONFTOOL = @GCONFTOOL@ +GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ +GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ +INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ +INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ +INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHELL_CFLAGS = @SHELL_CFLAGS@ +SHELL_LIBS = @SHELL_LIBS@ +STRIP = @STRIP@ +SUCROSE_VERSION = @SUCROSE_VERSION@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +intltool__v_merge_options_ = @intltool__v_merge_options_@ +intltool__v_merge_options_0 = @intltool__v_merge_options_0@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +sugardir = $(pythondir)/jarabe/view +sugar_PYTHON = \ + __init__.py \ + buddyicon.py \ + buddymenu.py \ + customizebundle.py \ + keyhandler.py \ + launcher.py \ + palettes.py \ + pulsingicon.py \ + service.py \ + tabbinghandler.py \ + viewsource.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/jarabe/view/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/jarabe/view/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sugarPYTHON: $(sugar_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sugardir)" || $(MKDIR_P) "$(DESTDIR)$(sugardir)" + @list='$(sugar_PYTHON)'; dlist=; list2=; test -n "$(sugardir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sugardir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sugardir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + $(am__py_compile) --destdir "$(DESTDIR)" \ + --basedir "$(sugardir)" $$dlist; \ + else :; fi + +uninstall-sugarPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sugar_PYTHON)'; test -n "$(sugardir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + dir='$(DESTDIR)$(sugardir)'; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + st=0; \ + for files in "$$files" "$$filesc" "$$fileso"; do \ + $(am__uninstall_files_from_dir) || st=$$?; \ + done; \ + exit $$st +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(sugardir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-sugarPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sugarPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sugarPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-sugarPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/jarabe/view/__init__.py b/src/jarabe/view/__init__.py new file mode 100644 index 0000000..85f6a24 --- /dev/null +++ b/src/jarabe/view/__init__.py @@ -0,0 +1,15 @@ +# Copyright (C) 2006-2007, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/src/jarabe/view/buddyicon.py b/src/jarabe/view/buddyicon.py new file mode 100644 index 0000000..e0e8b3f --- /dev/null +++ b/src/jarabe/view/buddyicon.py @@ -0,0 +1,65 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +from sugar.graphics.icon import CanvasIcon +from sugar.graphics import style + +from jarabe.view.buddymenu import BuddyMenu + +_FILTERED_ALPHA = 0.33 + + +class BuddyIcon(CanvasIcon): + def __init__(self, buddy, size=style.STANDARD_ICON_SIZE): + CanvasIcon.__init__(self, icon_name='computer-xo', size=size) + + self._filtered = False + self._buddy = buddy + self._buddy.connect('notify::present', self.__buddy_notify_present_cb) + self._buddy.connect('notify::color', self.__buddy_notify_color_cb) + + self.palette_invoker.cache_palette = False + + self._update_color() + + def create_palette(self): + return BuddyMenu(self._buddy) + + def __buddy_notify_present_cb(self, buddy, pspec): + # Update the icon's color when the buddy comes and goes + self._update_color() + + def __buddy_notify_color_cb(self, buddy, pspec): + self._update_color() + + def _update_color(self): + # keep the icon in the palette in sync with the view + palette = self.get_palette() + self.props.xo_color = self._buddy.get_color() + if self._filtered: + self.alpha = _FILTERED_ALPHA + if palette is not None: + palette.props.icon.props.stroke_color = self.props.stroke_color + palette.props.icon.props.fill_color = self.props.fill_color + else: + self.alpha = 1.0 + if palette is not None: + palette.props.icon.props.xo_color = self._buddy.get_color() + + def set_filter(self, query): + self._filtered = (self._buddy.get_nick().lower().find(query) == -1) \ + and not self._buddy.is_owner() + self._update_color() diff --git a/src/jarabe/view/buddymenu.py b/src/jarabe/view/buddymenu.py new file mode 100644 index 0000000..de5a772 --- /dev/null +++ b/src/jarabe/view/buddymenu.py @@ -0,0 +1,180 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2010 Collabora Ltd. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from gettext import gettext as _ + +import gtk +import gconf +import glib +import dbus + +from sugar.graphics.palette import Palette +from sugar.graphics.menuitem import MenuItem +from sugar.graphics.icon import Icon + +from jarabe.model import shell +from jarabe.model import friends +from jarabe.model.session import get_session_manager +from jarabe.controlpanel.gui import ControlPanel +import jarabe.desktop.homewindow + + +class BuddyMenu(Palette): + def __init__(self, buddy): + self._buddy = buddy + + buddy_icon = Icon(icon_name='computer-xo', + xo_color=buddy.get_color(), + icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR) + nick = buddy.get_nick() + Palette.__init__(self, None, + primary_text=glib.markup_escape_text(nick), + icon=buddy_icon) + self._invite_menu = None + self._active_activity_changed_hid = None + self.connect('destroy', self.__destroy_cb) + + self._buddy.connect('notify::nick', self.__buddy_notify_nick_cb) + + if buddy.is_owner(): + self._add_my_items() + else: + self._add_buddy_items() + + def __destroy_cb(self, menu): + if self._active_activity_changed_hid is not None: + home_model = shell.get_model() + home_model.disconnect(self._active_activity_changed_hid) + self._buddy.disconnect_by_func(self.__buddy_notify_nick_cb) + + def _add_buddy_items(self): + if friends.get_model().has_buddy(self._buddy): + menu_item = MenuItem(_('Remove friend'), 'list-remove') + menu_item.connect('activate', self._remove_friend_cb) + else: + menu_item = MenuItem(_('Make friend'), 'list-add') + menu_item.connect('activate', self._make_friend_cb) + + self.menu.append(menu_item) + menu_item.show() + + self._invite_menu = MenuItem('') + self._invite_menu.connect('activate', self._invite_friend_cb) + self.menu.append(self._invite_menu) + + home_model = shell.get_model() + self._active_activity_changed_hid = home_model.connect( + 'active-activity-changed', self._cur_activity_changed_cb) + activity = home_model.get_active_activity() + self._update_invite_menu(activity) + + def _add_my_items(self): + item = MenuItem(_('Shutdown'), 'system-shutdown') + item.connect('activate', self.__shutdown_activate_cb) + self.menu.append(item) + item.show() + + client = gconf.client_get_default() + + if client.get_bool('/desktop/sugar/show_restart'): + item = MenuItem(_('Restart'), 'system-restart') + item.connect('activate', self.__reboot_activate_cb) + self.menu.append(item) + item.show() + + if client.get_bool('/desktop/sugar/show_logout'): + item = MenuItem(_('Logout'), 'system-logout') + item.connect('activate', self.__logout_activate_cb) + self.menu.append(item) + item.show() + + item = MenuItem(_('My Settings'), 'preferences-system') + item.connect('activate', self.__controlpanel_activate_cb) + self.menu.append(item) + item.show() + + def _quit(self, action): + home_window = jarabe.desktop.homewindow.get_instance() + home_window.busy_during_delayed_action(action) + + def __logout_activate_cb(self, menu_item): + self._quit(get_session_manager().logout) + + def __reboot_activate_cb(self, menu_item): + self._quit(get_session_manager().reboot) + + def __shutdown_activate_cb(self, menu_item): + self._quit(get_session_manager().shutdown) + + def __controlpanel_activate_cb(self, menu_item): + panel = ControlPanel() + panel.set_transient_for(self.get_toplevel()) + panel.show() + + def _update_invite_menu(self, activity): + buddy_activity = self._buddy.props.current_activity + if buddy_activity is not None: + buddy_activity_id = buddy_activity.activity_id + else: + buddy_activity_id = None + + if activity is None or activity.is_journal() or \ + activity.get_activity_id() == buddy_activity_id: + self._invite_menu.hide() + else: + title = activity.get_title() + label = self._invite_menu.get_children()[0] + label.set_text(_('Invite to %s') % title) + + icon = Icon(file=activity.get_icon_path()) + icon.props.xo_color = activity.get_icon_color() + self._invite_menu.set_image(icon) + icon.show() + + self._invite_menu.show() + + def _cur_activity_changed_cb(self, home_model, activity_model): + self._update_invite_menu(activity_model) + + def __buddy_notify_nick_cb(self, buddy, pspec): + self.set_primary_text(glib.markup_escape_text(buddy.props.nick)) + + def _make_friend_cb(self, menuitem): + friends.get_model().make_friend(self._buddy) + + def _remove_friend_cb(self, menuitem): + friends.get_model().remove(self._buddy) + + def _invite_friend_cb(self, menuitem): + activity = shell.get_model().get_active_activity() + service = activity.get_service() + if service: + try: + service.InviteContact(self._buddy.props.account, + self._buddy.props.contact_id) + except dbus.DBusException, e: + expected_exceptions = [ + 'org.freedesktop.DBus.Error.UnknownMethod', + 'org.freedesktop.DBus.Python.NotImplementedError'] + if e.get_dbus_name() in expected_exceptions: + logging.warning('Trying deprecated Activity.Invite') + service.Invite(self._buddy.props.key) + else: + raise + else: + logging.error('Invite failed, activity service not ') diff --git a/src/jarabe/view/customizebundle.py b/src/jarabe/view/customizebundle.py new file mode 100644 index 0000000..42da1b3 --- /dev/null +++ b/src/jarabe/view/customizebundle.py @@ -0,0 +1,217 @@ +# Copyright (C) 2011 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import glob +import hashlib + +import gtk + +from sugar import profile +from sugar.activity import bundlebuilder +from sugar.datastore import datastore +from sugar.env import get_user_activities_path + +import logging +_logger = logging.getLogger('ViewSource') + + +BADGE_SUBPATH = 'emblems/emblem-view-source.svg' +BADGE_TRANSFORM = ' \n' +ICON_TRANSFORM = ' \n' +XML_HEADER = ' \ +\n\ +\n]>\n' +SVG_START = '\n' +SVG_END = '\n' + + +def generate_unique_id(): + """Generate an id based on the user's nick name and their public key + (Based on schema used by IRC activity). + + """ + nick = profile.get_nick_name() + pubkey = profile.get_pubkey() + m = hashlib.sha1() + m.update(pubkey) + hexhash = m.hexdigest() + + nick_letters = "".join([x for x in nick if x.isalpha()]) + + if not nick_letters: + nick_letters = 'XO' + + return nick_letters + '_' + hexhash[:4] + + +def generate_bundle(nick, new_basename): + """Generate a new .xo bundle for the activity and copy it into the + Journal. + + """ + new_activity_name = _customize_activity_info( + nick, new_basename) + + user_activities_path = get_user_activities_path() + if os.path.exists(os.path.join(user_activities_path, new_basename, + 'dist')): + for path in glob.glob(os.path.join(user_activities_path, new_basename, + 'dist', '*')): + os.remove(path) + + config = bundlebuilder.Config(source_dir=os.path.join( + user_activities_path, new_basename), + dist_name='%s-1.xo' % (new_activity_name)) + bundlebuilder.cmd_dist_xo(config, None) + + dsobject = datastore.create() + dsobject.metadata['title'] = '%s-1.xo' % (new_activity_name) + dsobject.metadata['mime_type'] = 'application/vnd.olpc-sugar' + dsobject.set_file_path(os.path.join( + user_activities_path, new_basename, 'dist', + '%s-1.xo' % (new_activity_name))) + datastore.write(dsobject) + dsobject.destroy() + + +def _customize_activity_info(nick, new_basename): + """Modify bundle_id in new activity.info file: + (1) change the bundle_id to bundle_id_[NICKNAME]; + (2) change the activity_icon [NICKNAME]-activity-icon.svg; + (3) set activity_version to 1; + (4) modify the activity icon by applying a customize overlay. + + """ + new_activity_name = '' + user_activities_path = get_user_activities_path() + + info_old = open(os.path.join(user_activities_path, new_basename, + 'activity', 'activity.info'), 'r') + info_new = open(os.path.join(user_activities_path, new_basename, + 'activity', 'new_activity.info'), 'w') + + for line in info_old: + if line.find('=') < 0: + info_new.write(line) + continue + name, value = [token.strip() for token in line.split('=', 1)] + if name == 'bundle_id': + new_value = '%s_%s' % (value, nick) + elif name == 'activity_version': + new_value = '1' + elif name == 'icon': + new_value = value + icon_name = value + elif name == 'name': + new_value = '%s_copy_of_%s' % (nick, value) + new_activity_name = new_value + else: + info_new.write(line) + continue + + info_new.write('%s = %s\n' % (name, new_value)) + + info_old.close() + info_new.close() + + os.rename(os.path.join(user_activities_path, new_basename, + 'activity', 'new_activity.info'), + os.path.join(user_activities_path, new_basename, + 'activity', 'activity.info')) + + _create_custom_icon(new_basename, icon_name) + + return new_activity_name + + +def _create_custom_icon(new_basename, icon_name): + """Modify activity icon by overlaying a badge: + (1) Extract the payload from the badge icon; + (2) Add a transform to resize it and position it; + (3) Insert it into the activity icon. + + """ + user_activities_path = get_user_activities_path() + badge_path = None + for path in gtk.icon_theme_get_default().get_search_path(): + if os.path.exists(os.path.join(path, 'sugar', 'scalable', + BADGE_SUBPATH)): + badge_path = path + break + + if badge_path is None: + _logger.debug('%s not found', BADGE_SUBPATH) + return + + badge_fd = open(os.path.join(badge_path, 'sugar', 'scalable', + BADGE_SUBPATH), 'r') + badge_payload = _extract_svg_payload(badge_fd) + badge_fd.close() + + badge_svg = BADGE_TRANSFORM + badge_payload + '\n' + + icon_path = os.path.join(user_activities_path, new_basename, 'activity', + icon_name + '.svg') + icon_fd = open(icon_path, 'r') + icon_payload = _extract_svg_payload(icon_fd) + icon_fd.close() + + icon_svg = ICON_TRANSFORM + icon_payload + '\n' + + tmp_path = os.path.join(user_activities_path, new_basename, 'activity', + 'tmp.svg') + tmp_icon_fd = open(tmp_path, 'w') + tmp_icon_fd.write(XML_HEADER) + tmp_icon_fd.write(SVG_START) + tmp_icon_fd.write(icon_svg) + tmp_icon_fd.write(badge_svg) + tmp_icon_fd.write(SVG_END) + tmp_icon_fd.close() + + os.remove(icon_path) + os.rename(tmp_path, icon_path) + + +def _extract_svg_payload(fd): + """Returns everything between and """ + payload = '' + looking_for_start_svg_token = True + looking_for_close_token = True + looking_for_end_svg_token = True + for line in fd: + if looking_for_start_svg_token: + if line.find('') < 0: + continue + looking_for_close_token = False + line = line.split('>', 1)[1] + if looking_for_end_svg_token: + if line.find('') < 0: + payload += line + continue + payload += line.split('')[0] + break + return payload diff --git a/src/jarabe/view/keyhandler.py b/src/jarabe/view/keyhandler.py new file mode 100644 index 0000000..530da75 --- /dev/null +++ b/src/jarabe/view/keyhandler.py @@ -0,0 +1,216 @@ +# Copyright (C) 2006-2007, Red Hat, Inc. +# Copyright (C) 2009 Simon Schampijer +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import logging + +import dbus +import gtk + +from sugar._sugarext import KeyGrabber + +from jarabe.model import sound +from jarabe.model import shell +from jarabe.model import session +from jarabe.view.tabbinghandler import TabbingHandler +from jarabe.model.shell import ShellModel +from jarabe import config +from jarabe.journal import journalactivity + + +_VOLUME_STEP = sound.VOLUME_STEP +_VOLUME_MAX = 100 +_TABBING_MODIFIER = gtk.gdk.MOD1_MASK + + +_actions_table = { + 'F1': 'zoom_mesh', + 'F2': 'zoom_group', + 'F3': 'zoom_home', + 'F4': 'zoom_activity', + 'F5': 'open_search', + 'F6': 'frame', + 'XF86AudioMute': 'volume_mute', + 'F11': 'volume_down', + 'XF86AudioLowerVolume': 'volume_down', + 'F12': 'volume_up', + 'XF86AudioRaiseVolume': 'volume_up', + 'F11': 'volume_min', + 'F12': 'volume_max', + 'XF86MenuKB': 'frame', + 'Tab': 'next_window', + 'Tab': 'previous_window', + 'Escape': 'close_window', + 'XF86WebCam': 'open_search', +# the following are intended for emulator users + 'f': 'frame', + 'q': 'quit_emulator', + 'XF86Search': 'open_search', + 'o': 'open_search' +} + + +_instance = None + + +class KeyHandler(object): + def __init__(self, frame): + self._frame = frame + self._key_pressed = None + self._keycode_pressed = 0 + self._keystate_pressed = 0 + + self._key_grabber = KeyGrabber() + self._key_grabber.connect('key-pressed', + self._key_pressed_cb) + self._key_grabber.connect('key-released', + self._key_released_cb) + + self._tabbing_handler = TabbingHandler(self._frame, _TABBING_MODIFIER) + + for f in os.listdir(os.path.join(config.ext_path, 'globalkey')): + if f.endswith('.py') and not f.startswith('__'): + module_name = f[:-3] + try: + logging.debug('Loading module %r', module_name) + module = __import__('globalkey.' + module_name, globals(), + locals(), [module_name]) + for key in module.BOUND_KEYS: + if key in _actions_table: + raise ValueError('Key %r is already bound' % key) + _actions_table[key] = module + except Exception: + logging.exception('Exception while loading extension:') + + self._key_grabber.grab_keys(_actions_table.keys()) + + def _change_volume(self, step=None, value=None): + if step is not None: + volume = sound.get_volume() + step + elif value is not None: + volume = value + + volume = min(max(0, volume), _VOLUME_MAX) + + sound.set_volume(volume) + sound.set_muted(volume == 0) + + def handle_previous_window(self, event_time): + self._tabbing_handler.previous_activity(event_time) + + def handle_next_window(self, event_time): + self._tabbing_handler.next_activity(event_time) + + def handle_close_window(self, event_time): + active_activity = shell.get_model().get_active_activity() + if active_activity.is_journal(): + return + + active_activity.get_window().close() + + def handle_zoom_mesh(self, event_time): + shell.get_model().set_zoom_level(ShellModel.ZOOM_MESH, event_time) + + def handle_zoom_group(self, event_time): + shell.get_model().set_zoom_level(ShellModel.ZOOM_GROUP, event_time) + + def handle_zoom_home(self, event_time): + shell.get_model().set_zoom_level(ShellModel.ZOOM_HOME, event_time) + + def handle_zoom_activity(self, event_time): + shell.get_model().set_zoom_level(ShellModel.ZOOM_ACTIVITY, event_time) + + def handle_volume_max(self, event_time): + self._change_volume(value=_VOLUME_MAX) + + def handle_volume_min(self, event_time): + self._change_volume(value=0) + + def handle_volume_mute(self, event_time): + if sound.get_muted() is True: + sound.set_muted(False) + else: + sound.set_muted(True) + + def handle_volume_up(self, event_time): + self._change_volume(step=_VOLUME_STEP) + + def handle_volume_down(self, event_time): + self._change_volume(step=-_VOLUME_STEP) + + def handle_frame(self, event_time): + self._frame.notify_key_press() + + def handle_quit_emulator(self, event_time): + session.get_session_manager().shutdown() + + def handle_open_search(self, event_time): + journalactivity.get_journal().focus_search() + + def _key_pressed_cb(self, grabber, keycode, state, event_time): + key = grabber.get_key(keycode, state) + logging.debug('_key_pressed_cb: %i %i %s', keycode, state, key) + if key is not None: + self._key_pressed = key + self._keycode_pressed = keycode + self._keystate_pressed = state + + action = _actions_table[key] + if self._tabbing_handler.is_tabbing(): + # Only accept window tabbing events, everything else + # cancels the tabbing operation. + if not action in ['next_window', 'previous_window']: + self._tabbing_handler.stop(event_time) + return True + + if hasattr(action, 'handle_key_press'): + action.handle_key_press(key) + elif isinstance(action, basestring): + method = getattr(self, 'handle_' + action) + method(event_time) + else: + raise TypeError('Invalid action %r' % action) + + return True + else: + # If this is not a registered key, then cancel tabbing. + if self._tabbing_handler.is_tabbing(): + if not grabber.is_modifier(keycode): + self._tabbing_handler.stop(event_time) + return True + + return False + + def _key_released_cb(self, grabber, keycode, state, event_time): + logging.debug('_key_released_cb: %i %i', keycode, state) + if self._tabbing_handler.is_tabbing(): + # We stop tabbing and switch to the new window as soon as the + # modifier key is raised again. + if grabber.is_modifier(keycode, mask=_TABBING_MODIFIER): + self._tabbing_handler.stop(event_time) + + return True + return False + + +def setup(frame): + global _instance + + if _instance: + del _instance + + _instance = KeyHandler(frame) diff --git a/src/jarabe/view/launcher.py b/src/jarabe/view/launcher.py new file mode 100644 index 0000000..5c645c4 --- /dev/null +++ b/src/jarabe/view/launcher.py @@ -0,0 +1,172 @@ +# Copyright (C) 2008, Red Hat, Inc. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging +from gettext import gettext as _ + +import gtk +import gobject + +from sugar import wm +from sugar.graphics import style + +from jarabe.model import shell +from jarabe.view.pulsingicon import PulsingIcon + + +class LaunchWindow(gtk.Window): + + def __init__(self, activity_id, icon_path, icon_color): + gobject.GObject.__init__(self) + + self.props.type_hint = gtk.gdk.WINDOW_TYPE_HINT_NORMAL + self.props.decorated = False + self.modify_bg(gtk.STATE_NORMAL, style.COLOR_WHITE.get_gdk_color()) + + canvas = gtk.VBox() + canvas.show() + self.add(canvas) + + bar_size = gtk.gdk.screen_height() / 5 * 2 + + header = gtk.VBox() + header.set_size_request(-1, bar_size) + header.show() + canvas.pack_start(header, expand=False) + + self._activity_id = activity_id + + self._activity_icon = PulsingIcon(file=icon_path, + pixel_size=style.XLARGE_ICON_SIZE) + self._activity_icon.set_base_color(icon_color) + self._activity_icon.set_zooming(style.SMALL_ICON_SIZE, + style.XLARGE_ICON_SIZE, 10) + self._activity_icon.set_pulsing(True) + self._activity_icon.show() + canvas.pack_start(self._activity_icon) + + footer = gtk.VBox(spacing=style.DEFAULT_SPACING) + footer.set_size_request(-1, bar_size) + footer.show() + canvas.pack_end(footer, expand=False) + + self.error_text = gtk.Label() + self.error_text.props.use_markup = True + footer.pack_start(self.error_text, expand=False) + + button_box = gtk.Alignment(xalign=0.5) + button_box.show() + footer.pack_start(button_box, expand=False) + self.cancel_button = gtk.Button(stock=gtk.STOCK_STOP) + button_box.add(self.cancel_button) + + self.connect('realize', self.__realize_cb) + + screen = gtk.gdk.screen_get_default() + screen.connect('size-changed', self.__size_changed_cb) + + self._home = shell.get_model() + self._home.connect('active-activity-changed', + self.__active_activity_changed_cb) + + self.connect('destroy', self.__destroy_cb) + + self._update_size() + + def show(self): + self.present() + + def _update_size(self): + self.resize(gtk.gdk.screen_width(), gtk.gdk.screen_height()) + + def __realize_cb(self, widget): + wm.set_activity_id(widget.window, str(self._activity_id)) + widget.window.property_change('_SUGAR_WINDOW_TYPE', 'STRING', 8, + gtk.gdk.PROP_MODE_REPLACE, 'launcher') + + def __size_changed_cb(self, screen): + self._update_size() + + def __active_activity_changed_cb(self, model, activity): + if activity.get_activity_id() == self._activity_id: + self._activity_icon.props.paused = False + else: + self._activity_icon.props.paused = True + + def __destroy_cb(self, box): + self._activity_icon.props.pulsing = False + self._home.disconnect_by_func(self.__active_activity_changed_cb) + + +def setup(): + model = shell.get_model() + model.connect('launch-started', __launch_started_cb) + model.connect('launch-failed', __launch_failed_cb) + model.connect('launch-completed', __launch_completed_cb) + + +def add_launcher(activity_id, icon_path, icon_color): + model = shell.get_model() + + if model.get_launcher(activity_id) is not None: + return + + launch_window = LaunchWindow(activity_id, icon_path, icon_color) + launch_window.show() + + model.register_launcher(activity_id, launch_window) + + +def __launch_started_cb(home_model, home_activity): + add_launcher(home_activity.get_activity_id(), + home_activity.get_icon_path(), home_activity.get_icon_color()) + + +def __launch_failed_cb(home_model, home_activity): + activity_id = home_activity.get_activity_id() + launcher = shell.get_model().get_launcher(activity_id) + + if launcher is None: + logging.error('Launcher for %s is missing', activity_id) + else: + launcher.error_text.props.label = _('%s failed to start.') % \ + home_activity.get_activity_name() + launcher.error_text.show() + + launcher.cancel_button.connect('clicked', + __cancel_button_clicked_cb, home_activity) + launcher.cancel_button.show() + + +def __cancel_button_clicked_cb(button, home_activity): + _destroy_launcher(home_activity) + + +def __launch_completed_cb(home_model, home_activity): + _destroy_launcher(home_activity) + + +def _destroy_launcher(home_activity): + activity_id = home_activity.get_activity_id() + + launcher = shell.get_model().get_launcher(activity_id) + if launcher is None: + if not home_activity.is_journal(): + logging.error('Launcher was not registered for %s', activity_id) + return + + shell.get_model().unregister_launcher(activity_id) + launcher.destroy() diff --git a/src/jarabe/view/palettes.py b/src/jarabe/view/palettes.py new file mode 100644 index 0000000..3195c0c --- /dev/null +++ b/src/jarabe/view/palettes.py @@ -0,0 +1,255 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import statvfs +from gettext import gettext as _ +import logging + +import gconf +import glib +import gtk + +from sugar import env +from sugar.graphics.palette import Palette +from sugar.graphics.menuitem import MenuItem +from sugar.graphics.icon import Icon +from sugar.graphics import style +from sugar.graphics.xocolor import XoColor +from sugar.activity.i18n import pgettext + +from jarabe.model import shell +from jarabe.view.viewsource import setup_view_source +from jarabe.journal import misc + + +class BasePalette(Palette): + def __init__(self, home_activity): + Palette.__init__(self) + + self._notify_launch_hid = None + + if home_activity.props.launch_status == shell.Activity.LAUNCHING: + self._notify_launch_hid = home_activity.connect( \ + 'notify::launch-status', self.__notify_launch_status_cb) + self.set_primary_text(glib.markup_escape_text(_('Starting...'))) + elif home_activity.props.launch_status == shell.Activity.LAUNCH_FAILED: + self._on_failed_launch() + else: + self.setup_palette() + + def setup_palette(self): + raise NotImplementedError + + def _on_failed_launch(self): + message = _('Activity failed to start') + self.set_primary_text(glib.markup_escape_text(message)) + + def __notify_launch_status_cb(self, home_activity, pspec): + home_activity.disconnect(self._notify_launch_hid) + self._notify_launch_hid = None + if home_activity.props.launch_status == shell.Activity.LAUNCH_FAILED: + self._on_failed_launch() + else: + self.setup_palette() + + +class CurrentActivityPalette(BasePalette): + def __init__(self, home_activity): + self._home_activity = home_activity + BasePalette.__init__(self, home_activity) + + def setup_palette(self): + activity_name = self._home_activity.get_activity_name() + if activity_name: + self.props.primary_text = glib.markup_escape_text(activity_name) + + title = self._home_activity.get_title() + if title and title != activity_name: + self.props.secondary_text = glib.markup_escape_text(title) + + menu_item = MenuItem(_('Resume'), 'activity-start') + menu_item.connect('activate', self.__resume_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + # TODO: share-with, keep + + menu_item = MenuItem(_('View Source'), 'view-source') + # TODO Make this accelerator translatable + menu_item.props.accelerator = 'v' + menu_item.connect('activate', self.__view_source__cb) + self.menu.append(menu_item) + menu_item.show() + + separator = gtk.SeparatorMenuItem() + self.menu.append(separator) + separator.show() + + menu_item = MenuItem(_('Stop'), 'activity-stop') + menu_item.connect('activate', self.__stop_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + def __resume_activate_cb(self, menu_item): + self._home_activity.get_window().activate(gtk.get_current_event_time()) + + def __view_source__cb(self, menu_item): + setup_view_source(self._home_activity) + shell_model = shell.get_model() + if self._home_activity is not shell_model.get_active_activity(): + self._home_activity.get_window().activate( \ + gtk.get_current_event_time()) + + def __stop_activate_cb(self, menu_item): + self._home_activity.get_window().close(1) + + +class ActivityPalette(Palette): + __gtype_name__ = 'SugarActivityPalette' + + def __init__(self, activity_info): + self._activity_info = activity_info + + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) + activity_icon = Icon(file=activity_info.get_icon(), + xo_color=color, + icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR) + + name = activity_info.get_name() + Palette.__init__(self, primary_text=glib.markup_escape_text(name), + icon=activity_icon) + + xo_color = XoColor('%s,%s' % (style.COLOR_WHITE.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + menu_item = MenuItem(text_label=_('Start new'), + file_name=activity_info.get_icon(), + xo_color=xo_color) + menu_item.connect('activate', self.__start_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + # TODO: start-with + + def __start_activate_cb(self, menu_item): + self.popdown(immediate=True) + misc.launch(self._activity_info) + + +class JournalPalette(BasePalette): + def __init__(self, home_activity): + self._home_activity = home_activity + self._progress_bar = None + self._free_space_label = None + + BasePalette.__init__(self, home_activity) + + def setup_palette(self): + title = self._home_activity.get_title() + self.set_primary_text(glib.markup_escape_text(title)) + + vbox = gtk.VBox() + self.set_content(vbox) + vbox.show() + + self._progress_bar = gtk.ProgressBar() + vbox.add(self._progress_bar) + self._progress_bar.show() + + self._free_space_label = gtk.Label() + self._free_space_label.set_alignment(0.5, 0.5) + vbox.add(self._free_space_label) + self._free_space_label.show() + + self.connect('popup', self.__popup_cb) + + menu_item = MenuItem(_('Show contents')) + + icon = Icon(file=self._home_activity.get_icon_path(), + icon_size=gtk.ICON_SIZE_MENU, + xo_color=self._home_activity.get_icon_color()) + menu_item.set_image(icon) + icon.show() + + menu_item.connect('activate', self.__open_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + def __open_activate_cb(self, menu_item): + self._home_activity.get_window().activate(gtk.get_current_event_time()) + + def __popup_cb(self, palette): + stat = os.statvfs(env.get_profile_path()) + free_space = stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL] + total_space = stat[statvfs.F_BSIZE] * stat[statvfs.F_BLOCKS] + + fraction = (total_space - free_space) / float(total_space) + self._progress_bar.props.fraction = fraction + self._free_space_label.props.label = _('%(free_space)d MB Free') % \ + {'free_space': free_space / (1024 * 1024)} + + +class VolumePalette(Palette): + def __init__(self, mount): + Palette.__init__(self, label=mount.get_name()) + self._mount = mount + + path = mount.get_root().get_path() + self.props.secondary_text = glib.markup_escape_text(path) + + vbox = gtk.VBox() + self.set_content(vbox) + vbox.show() + + self._progress_bar = gtk.ProgressBar() + vbox.add(self._progress_bar) + self._progress_bar.show() + + self._free_space_label = gtk.Label() + self._free_space_label.set_alignment(0.5, 0.5) + vbox.add(self._free_space_label) + self._free_space_label.show() + + self.connect('popup', self.__popup_cb) + + menu_item = MenuItem(pgettext('Volume', 'Remove')) + + icon = Icon(icon_name='media-eject', icon_size=gtk.ICON_SIZE_MENU) + menu_item.set_image(icon) + icon.show() + + menu_item.connect('activate', self.__unmount_activate_cb) + self.menu.append(menu_item) + menu_item.show() + + def __unmount_activate_cb(self, menu_item): + self._mount.unmount(self.__unmount_cb) + + def __unmount_cb(self, mount, result): + logging.debug('__unmount_cb %r %r', mount, result) + mount.unmount_finish(result) + + def __popup_cb(self, palette): + mount_point = self._mount.get_root().get_path() + stat = os.statvfs(mount_point) + free_space = stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL] + total_space = stat[statvfs.F_BSIZE] * stat[statvfs.F_BLOCKS] + + fraction = (total_space - free_space) / float(total_space) + self._progress_bar.props.fraction = fraction + self._free_space_label.props.label = _('%(free_space)d MB Free') % \ + {'free_space': free_space / (1024 * 1024)} diff --git a/src/jarabe/view/pulsingicon.py b/src/jarabe/view/pulsingicon.py new file mode 100644 index 0000000..9a98a80 --- /dev/null +++ b/src/jarabe/view/pulsingicon.py @@ -0,0 +1,237 @@ +# Copyright (C) 2008 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import math + +import gobject + +from sugar.graphics.icon import Icon, CanvasIcon +from sugar.graphics import style + +_INTERVAL = 100 +_STEP = math.pi / 10 # must be a fraction of pi, for clean caching +_MINIMAL_ALPHA_VALUE = 0.33 + + +class Pulser(object): + def __init__(self, icon): + self._pulse_hid = None + self._icon = icon + self._phase = 0 + self._start_scale = 1.0 + self._end_scale = 1.0 + self._zoom_steps = 1 + self._current_zoom_step = 1 + self._current_scale_step = 1 + + def set_zooming(self, start_scale, end_scale, zoom_steps): + """ Set start and end scale and number of steps in zoom animation """ + self._start_scale = start_scale + self._end_scale = end_scale + self._zoom_steps = zoom_steps + self._current_scale_step = abs(self._start_scale - self._end_scale) / \ + self._zoom_steps + self._icon.scale = self._start_scale + + def start(self, restart=False): + if restart: + self._phase = 0 + if self._pulse_hid is None: + self._pulse_hid = gobject.timeout_add(_INTERVAL, self.__pulse_cb) + if self._start_scale != self._end_scale: + self._icon.scale = self._start_scale + \ + self._current_scale_step * self._current_zoom_step + + def stop(self): + if self._pulse_hid is not None: + gobject.source_remove(self._pulse_hid) + self._pulse_hid = None + self._icon.xo_color = self._icon.get_base_color() + self._phase = 0 + self._icon.alpha = 1.0 + + def update(self): + self._icon.xo_color = self._icon.base_color + self._icon.alpha = _MINIMAL_ALPHA_VALUE + \ + (1 - _MINIMAL_ALPHA_VALUE) * (math.cos(self._phase) + 1) / 2 + + def __pulse_cb(self): + self._phase += _STEP + if self._current_zoom_step <= self._zoom_steps and \ + self._start_scale != self._end_scale: + self._icon.scale = self._start_scale + \ + self._current_scale_step * self._current_zoom_step + self._current_zoom_step += 1 + self.update() + return True + + +class PulsingIcon(Icon): + __gtype_name__ = 'SugarPulsingIcon' + + def __init__(self, **kwargs): + self._pulser = Pulser(self) + self._base_color = None + self._pulse_color = None + self._paused = False + self._pulsing = False + + Icon.__init__(self, **kwargs) + + self._palette = None + self.connect('destroy', self.__destroy_cb) + + def set_pulse_color(self, pulse_color): + self._pulse_color = pulse_color + self._pulser.update() + + def get_pulse_color(self): + return self._pulse_color + + pulse_color = gobject.property( + type=object, getter=get_pulse_color, setter=set_pulse_color) + + def set_base_color(self, base_color): + self._base_color = base_color + self._pulser.update() + + def get_base_color(self): + return self._base_color + + def set_zooming(self, start_size=style.SMALL_ICON_SIZE, + end_size=style.XLARGE_ICON_SIZE, + zoom_steps=10): + if start_size > end_size: + start_scale = 1.0 + end_scale = float(end_size) / start_size + else: + start_scale = float(start_size) / end_size + end_scale = 1.0 + self._pulser.set_zooming(start_scale, end_scale, zoom_steps) + + base_color = gobject.property( + type=object, getter=get_base_color, setter=set_base_color) + + def set_paused(self, paused): + self._paused = paused + + if self._paused: + self._pulser.stop() + else: + self._pulser.start(restart=False) + + def get_paused(self): + return self._paused + + paused = gobject.property( + type=bool, default=False, getter=get_paused, setter=set_paused) + + def set_pulsing(self, pulsing): + self._pulsing = pulsing + + if self._pulsing: + self._pulser.start(restart=True) + else: + self._pulser.stop() + + def get_pulsing(self): + return self._pulsing + + pulsing = gobject.property( + type=bool, default=False, getter=get_pulsing, setter=set_pulsing) + + def _get_palette(self): + return self._palette + + def _set_palette(self, palette): + if self._palette is not None: + self._palette.props.invoker = None + self._palette = palette + + palette = property(_get_palette, _set_palette) + + def __destroy_cb(self, icon): + self._pulser.stop() + if self._palette is not None: + self._palette.destroy() + + +class CanvasPulsingIcon(CanvasIcon): + __gtype_name__ = 'SugarCanvasPulsingIcon' + + def __init__(self, **kwargs): + self._pulser = Pulser(self) + self._base_color = None + self._pulse_color = None + self._paused = False + self._pulsing = False + + CanvasIcon.__init__(self, **kwargs) + + self.connect('destroy', self.__destroy_cb) + + def __destroy_cb(self, box): + self._pulser.stop() + + def set_pulse_color(self, pulse_color): + self._pulse_color = pulse_color + self._pulser.update() + + def get_pulse_color(self): + return self._pulse_color + + pulse_color = gobject.property( + type=object, getter=get_pulse_color, setter=set_pulse_color) + + def set_base_color(self, base_color): + self._base_color = base_color + self._pulser.update() + + def get_base_color(self): + return self._base_color + + base_color = gobject.property( + type=object, getter=get_base_color, setter=set_base_color) + + def set_paused(self, paused): + self._paused = paused + + if self._paused: + self._pulser.stop() + elif self._pulsing: + self._pulser.start(restart=False) + + def get_paused(self): + return self._paused + + paused = gobject.property( + type=bool, default=False, getter=get_paused, setter=set_paused) + + def set_pulsing(self, pulsing): + self._pulsing = pulsing + if self._paused: + return + + if self._pulsing: + self._pulser.start(restart=True) + else: + self._pulser.stop() + + def get_pulsing(self): + return self._pulsing + + pulsing = gobject.property( + type=bool, default=False, getter=get_pulsing, setter=set_pulsing) diff --git a/src/jarabe/view/service.py b/src/jarabe/view/service.py new file mode 100644 index 0000000..29e46b2 --- /dev/null +++ b/src/jarabe/view/service.py @@ -0,0 +1,90 @@ +# Copyright (C) 2006-2007 Red Hat, Inc. +# Copyright (C) 2010 Collabora Ltd. +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +"""D-bus service providing access to the shell's functionality""" + +import dbus +import gtk + +from jarabe.model import shell +from jarabe.model import bundleregistry + + +_DBUS_SERVICE = 'org.laptop.Shell' +_DBUS_SHELL_IFACE = 'org.laptop.Shell' +_DBUS_PATH = '/org/laptop/Shell' + + +class UIService(dbus.service.Object): + """Provides d-bus service to script the shell's operations + + Uses a shell_model object to observe events such as changes to: + + * nickname + * colour + * icon + * currently active activity + + and pass the event off to the methods in the dbus signature. + + Key method here at the moment is add_bundle, which is used to + do a run-time registration of a bundle using it's application path. + + XXX At the moment the d-bus service methods do not appear to do + anything other than add_bundle + """ + + def __init__(self): + bus = dbus.SessionBus() + bus_name = dbus.service.BusName(_DBUS_SERVICE, bus=bus) + dbus.service.Object.__init__(self, bus_name, _DBUS_PATH) + + self._shell_model = shell.get_model() + + @dbus.service.method(_DBUS_SHELL_IFACE, + in_signature='s', out_signature='s') + def GetBundlePath(self, bundle_id): + bundle = bundleregistry.get_registry().get_bundle(bundle_id) + if bundle: + return bundle.get_path() + else: + return '' + + @dbus.service.method(_DBUS_SHELL_IFACE, + in_signature='s', out_signature='b') + def ActivateActivity(self, activity_id): + """Switch to the window related to this activity_id and return a + boolean indicating if there is a real (ie. not a launcher window) + activity already open. + """ + activity = self._shell_model.get_activity_by_id(activity_id) + + if activity is not None and activity.get_window() is not None: + activity.get_window().activate(gtk.get_current_event_time()) + return self._shell_model.get_launcher(activity_id) is None + + return False + + @dbus.service.method(_DBUS_SHELL_IFACE, + in_signature='ss', out_signature='') + def NotifyLaunch(self, bundle_id, activity_id): + shell.get_model().notify_launch(activity_id, bundle_id) + + @dbus.service.method(_DBUS_SHELL_IFACE, + in_signature='s', out_signature='') + def NotifyLaunchFailure(self, activity_id): + shell.get_model().notify_launch_failed(activity_id) diff --git a/src/jarabe/view/tabbinghandler.py b/src/jarabe/view/tabbinghandler.py new file mode 100644 index 0000000..0889792 --- /dev/null +++ b/src/jarabe/view/tabbinghandler.py @@ -0,0 +1,149 @@ +# Copyright (C) 2008, Benjamin Berg +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import gobject +import gtk + +from jarabe.model import shell + + +_RAISE_DELAY = 250 + + +class TabbingHandler(object): + def __init__(self, frame, modifier): + self._frame = frame + self._tabbing = False + self._modifier = modifier + self._timeout = None + + def _start_tabbing(self): + if not self._tabbing: + logging.debug('Grabing the input.') + + screen = gtk.gdk.screen_get_default() + window = screen.get_root_window() + keyboard_grab_result = gtk.gdk.keyboard_grab(window) + pointer_grab_result = gtk.gdk.pointer_grab(window) + + self._tabbing = (keyboard_grab_result == gtk.gdk.GRAB_SUCCESS and + pointer_grab_result == gtk.gdk.GRAB_SUCCESS) + + # Now test that the modifier is still active to prevent race + # conditions. We also test if one of the grabs failed. + mask = window.get_pointer()[2] + if not self._tabbing or not (mask & self._modifier): + logging.debug('Releasing grabs again.') + + # ungrab keyboard/pointer if the grab was successfull. + if keyboard_grab_result == gtk.gdk.GRAB_SUCCESS: + gtk.gdk.keyboard_ungrab() + if pointer_grab_result == gtk.gdk.GRAB_SUCCESS: + gtk.gdk.pointer_ungrab() + + self._tabbing = False + else: + self._frame.show(self._frame.MODE_NON_INTERACTIVE) + + def __timeout_cb(self, event_time): + self._activate_current(event_time) + self._timeout = None + return False + + def _start_timeout(self, event_time): + self._cancel_timeout() + self._timeout = gobject.timeout_add(_RAISE_DELAY, + lambda: self.__timeout_cb(event_time)) + + def _cancel_timeout(self): + if self._timeout: + gobject.source_remove(self._timeout) + self._timeout = None + + def _activate_current(self, event_time): + home_model = shell.get_model() + activity = home_model.get_tabbing_activity() + if activity and activity.get_window(): + activity.get_window().activate(event_time) + + def next_activity(self, event_time): + if not self._tabbing: + first_switch = True + self._start_tabbing() + else: + first_switch = False + + if self._tabbing: + shell_model = shell.get_model() + zoom_level = shell_model.zoom_level + zoom_activity = (zoom_level == shell.ShellModel.ZOOM_ACTIVITY) + + if not zoom_activity and first_switch: + activity = shell_model.get_active_activity() + else: + activity = shell_model.get_tabbing_activity() + activity = shell_model.get_next_activity(current=activity) + + shell_model.set_tabbing_activity(activity) + self._start_timeout(event_time) + else: + self._activate_next_activity(event_time) + + def previous_activity(self, event_time): + if not self._tabbing: + first_switch = True + self._start_tabbing() + else: + first_switch = False + + if self._tabbing: + shell_model = shell.get_model() + zoom_level = shell_model.zoom_level + zoom_activity = (zoom_level == shell.ShellModel.ZOOM_ACTIVITY) + + if not zoom_activity and first_switch: + activity = shell_model.get_active_activity() + else: + activity = shell_model.get_tabbing_activity() + activity = shell_model.get_previous_activity(current=activity) + + shell_model.set_tabbing_activity(activity) + self._start_timeout(event_time) + else: + self._activate_next_activity(event_time) + + def _activate_next_activity(self, event_time): + next_activity = shell.get_model().get_next_activity() + if next_activity: + next_activity.get_window().activate(event_time) + + def stop(self, event_time): + gtk.gdk.keyboard_ungrab() + gtk.gdk.pointer_ungrab() + self._tabbing = False + + self._frame.hide() + + self._cancel_timeout() + self._activate_current(event_time) + + home_model = shell.get_model() + home_model.set_tabbing_activity(None) + + def is_tabbing(self): + return self._tabbing diff --git a/src/jarabe/view/viewsource.py b/src/jarabe/view/viewsource.py new file mode 100644 index 0000000..1285e69 --- /dev/null +++ b/src/jarabe/view/viewsource.py @@ -0,0 +1,570 @@ +# Copyright (C) 2008 One Laptop Per Child +# Copyright (C) 2009 Tomeu Vizoso, Simon Schampijer +# Copyright (C) 2011 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 2 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, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os +import shutil +import sys +import logging +from gettext import gettext as _ + +import gobject +import pango +import gtk +import gtksourceview2 +import dbus +import gconf + +from sugar.graphics import style +from sugar.graphics.icon import Icon +from sugar.graphics.xocolor import XoColor +from sugar.graphics.menuitem import MenuItem +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.radiotoolbutton import RadioToolButton +from sugar.bundle.activitybundle import ActivityBundle +from sugar.datastore import datastore +from sugar.env import get_user_activities_path +from sugar import mime + +from jarabe.view import customizebundle + +_EXCLUDE_EXTENSIONS = ('.pyc', '.pyo', '.so', '.o', '.a', '.la', '.mo', '~', + '.xo', '.tar', '.bz2', '.zip', '.gz') +_EXCLUDE_NAMES = ['.deps', '.libs'] + +_SOURCE_FONT = pango.FontDescription('Monospace %d' % style.FONT_SIZE) + +_logger = logging.getLogger('ViewSource') +map_activity_to_window = {} + + +def setup_view_source(activity): + service = activity.get_service() + if service is not None: + try: + service.HandleViewSource() + return + except dbus.DBusException, e: + expected_exceptions = ['org.freedesktop.DBus.Error.UnknownMethod', + 'org.freedesktop.DBus.Python.NotImplementedError'] + if e.get_dbus_name() not in expected_exceptions: + logging.exception('Exception occured in HandleViewSource():') + except Exception: + logging.exception('Exception occured in HandleViewSource():') + + window_xid = activity.get_xid() + if window_xid is None: + _logger.error('Activity without a window xid') + return + + bundle_path = activity.get_bundle_path() + + if window_xid in map_activity_to_window: + _logger.debug('Viewsource window already open for %s %s', window_xid, + bundle_path) + return + + document_path = None + if service is not None: + try: + document_path = service.GetDocumentPath() + except dbus.DBusException, e: + expected_exceptions = ['org.freedesktop.DBus.Error.UnknownMethod', + 'org.freedesktop.DBus.Python.NotImplementedError'] + if e.get_dbus_name() not in expected_exceptions: + logging.exception('Exception occured in GetDocumentPath():') + except Exception: + logging.exception('Exception occured in GetDocumentPath():') + + if bundle_path is None and document_path is None: + _logger.debug('Activity without bundle_path nor document_path') + return + + sugar_toolkit_path = None + for path in sys.path: + if path.endswith('site-packages'): + if os.path.exists(os.path.join(path, 'sugar')): + sugar_toolkit_path = os.path.join(path, 'sugar') + break + + view_source = ViewSource(window_xid, bundle_path, document_path, + sugar_toolkit_path, activity.get_title()) + map_activity_to_window[window_xid] = view_source + view_source.show() + + +class ViewSource(gtk.Window): + __gtype_name__ = 'SugarViewSource' + + def __init__(self, window_xid, bundle_path, document_path, + sugar_toolkit_path, title): + gtk.Window.__init__(self) + + _logger.debug('ViewSource paths: %r %r %r', bundle_path, + document_path, sugar_toolkit_path) + + self.set_decorated(False) + self.set_position(gtk.WIN_POS_CENTER_ALWAYS) + self.set_border_width(style.LINE_WIDTH) + + width = gtk.gdk.screen_width() - style.GRID_CELL_SIZE * 2 + height = gtk.gdk.screen_height() - style.GRID_CELL_SIZE * 2 + self.set_size_request(width, height) + + self._parent_window_xid = window_xid + self._sugar_toolkit_path = sugar_toolkit_path + + self.connect('realize', self.__realize_cb) + self.connect('destroy', self.__destroy_cb, document_path) + self.connect('key-press-event', self.__key_press_event_cb) + + vbox = gtk.VBox() + self.add(vbox) + vbox.show() + + toolbar = Toolbar(title, bundle_path, document_path, + sugar_toolkit_path) + vbox.pack_start(toolbar, expand=False) + toolbar.connect('stop-clicked', self.__stop_clicked_cb) + toolbar.connect('source-selected', self.__source_selected_cb) + toolbar.show() + + pane = gtk.HPaned() + vbox.pack_start(pane) + pane.show() + + self._selected_bundle_file = None + self._selected_sugar_file = None + file_name = '' + + activity_bundle = ActivityBundle(bundle_path) + command = activity_bundle.get_command() + if len(command.split(' ')) > 1: + name = command.split(' ')[1].split('.')[-1] + tmppath = command.split(' ')[1].replace('.', '/') + file_name = tmppath[0:-(len(name) + 1)] + '.py' + path = os.path.join(activity_bundle.get_path(), file_name) + self._selected_bundle_file = path + + # Split the tree pane into two vertical panes, one of which + # will be hidden + tree_panes = gtk.VPaned() + tree_panes.show() + + self._bundle_source_viewer = FileViewer(bundle_path, file_name) + self._bundle_source_viewer.connect('file-selected', + self.__file_selected_cb) + tree_panes.add1(self._bundle_source_viewer) + self._bundle_source_viewer.show() + + file_name = 'env.py' + self._selected_sugar_file = os.path.join(sugar_toolkit_path, file_name) + self._sugar_source_viewer = FileViewer(sugar_toolkit_path, file_name) + self._sugar_source_viewer.connect('file-selected', + self.__file_selected_cb) + tree_panes.add2(self._sugar_source_viewer) + self._sugar_source_viewer.hide() + + pane.add1(tree_panes) + + self._source_display = SourceDisplay() + pane.add2(self._source_display) + self._source_display.show() + self._source_display.file_path = self._selected_bundle_file + + if document_path is not None: + self._select_source(document_path) + + def _calculate_char_width(self, char_count): + widget = gtk.Label('') + context = widget.get_pango_context() + pango_font = context.load_font(_SOURCE_FONT) + metrics = pango_font.get_metrics() + return pango.PIXELS(metrics.get_approximate_char_width()) * char_count + + def __realize_cb(self, widget): + self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + self.window.set_accept_focus(True) + + parent = gtk.gdk.window_foreign_new(self._parent_window_xid) + self.window.set_transient_for(parent) + + def __stop_clicked_cb(self, widget): + self.destroy() + + def __source_selected_cb(self, widget, path): + self._select_source(path) + + def _select_source(self, path): + if os.path.isfile(path): + _logger.debug('_select_source called with file: %r', path) + self._source_display.file_path = path + self._bundle_source_viewer.hide() + self._sugar_source_viewer.hide() + elif path == self._sugar_toolkit_path: + _logger.debug('_select_source called with sugar toolkit path: %r', + path) + self._sugar_source_viewer.set_path(path) + self._source_display.file_path = self._selected_sugar_file + self._sugar_source_viewer.show() + self._bundle_source_viewer.hide() + else: + _logger.debug('_select_source called with path: %r', path) + self._bundle_source_viewer.set_path(path) + self._source_display.file_path = self._selected_bundle_file + self._bundle_source_viewer.show() + self._sugar_source_viewer.hide() + + def __destroy_cb(self, window, document_path): + del map_activity_to_window[self._parent_window_xid] + if document_path is not None and os.path.exists(document_path): + os.unlink(document_path) + + def __key_press_event_cb(self, window, event): + keyname = gtk.gdk.keyval_name(event.keyval) + if keyname == 'Escape': + self.destroy() + + def __file_selected_cb(self, file_viewer, file_path): + if file_path is not None and os.path.isfile(file_path): + self._source_display.file_path = file_path + if file_viewer == self._bundle_source_viewer: + self._selected_bundle_file = file_path + else: + self._selected_sugar_file = file_path + else: + self._source_display.file_path = None + + +class DocumentButton(RadioToolButton): + __gtype_name__ = 'SugarDocumentButton' + + def __init__(self, file_name, document_path, title, bundle=False): + RadioToolButton.__init__(self) + + self._document_path = document_path + self._title = title + self._jobject = None + + self.props.tooltip = _('Instance Source') + + client = gconf.client_get_default() + self._color = client.get_string('/desktop/sugar/user/color') + icon = Icon(file=file_name, + icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR, + xo_color=XoColor(self._color)) + self.set_icon_widget(icon) + icon.show() + + if bundle: + menu_item = MenuItem(_('Duplicate')) + icon = Icon(icon_name='edit-duplicate', + icon_size=gtk.ICON_SIZE_MENU, + xo_color=XoColor(self._color)) + menu_item.connect('activate', self.__copy_to_home_cb) + else: + menu_item = MenuItem(_('Keep')) + icon = Icon(icon_name='document-save', + icon_size=gtk.ICON_SIZE_MENU, + xo_color=XoColor(self._color)) + menu_item.connect('activate', self.__keep_in_journal_cb) + + menu_item.set_image(icon) + + self.props.palette.menu.append(menu_item) + menu_item.show() + + def __copy_to_home_cb(self, menu_item): + """Make a local copy of the activity bundle in user_activities_path""" + user_activities_path = get_user_activities_path() + nick = customizebundle.generate_unique_id() + new_basename = '%s_copy_of_%s' % ( + nick, os.path.basename(self._document_path)) + if not os.path.exists(os.path.join(user_activities_path, + new_basename)): + shutil.copytree(self._document_path, + os.path.join(user_activities_path, new_basename), + symlinks=True) + customizebundle.generate_bundle(nick, new_basename) + else: + _logger.debug('%s already exists', new_basename) + + def __keep_in_journal_cb(self, menu_item): + mime_type = mime.get_from_file_name(self._document_path) + if mime_type == 'application/octet-stream': + mime_type = mime.get_for_file(self._document_path) + + self._jobject = datastore.create() + title = _('Source') + ': ' + self._title + self._jobject.metadata['title'] = title + self._jobject.metadata['keep'] = '0' + self._jobject.metadata['buddies'] = '' + self._jobject.metadata['preview'] = '' + self._jobject.metadata['icon-color'] = self._color + self._jobject.metadata['mime_type'] = mime_type + self._jobject.metadata['source'] = '1' + self._jobject.file_path = self._document_path + datastore.write(self._jobject, transfer_ownership=True, + reply_handler=self.__internal_save_cb, + error_handler=self.__internal_save_error_cb) + + def __internal_save_cb(self): + _logger.debug('Saved Source object to datastore.') + self._jobject.destroy() + + def __internal_save_error_cb(self, err): + _logger.debug('Error saving Source object to datastore: %s', err) + self._jobject.destroy() + + +class Toolbar(gtk.Toolbar): + __gtype_name__ = 'SugarViewSourceToolbar' + + __gsignals__ = { + 'stop-clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), + 'source-selected': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([str])), + } + + def __init__(self, title, bundle_path, document_path, sugar_toolkit_path): + gtk.Toolbar.__init__(self) + + document_button = None + self.bundle_path = bundle_path + self.sugar_toolkit_path = sugar_toolkit_path + + self._add_separator() + + activity_bundle = ActivityBundle(bundle_path) + file_name = activity_bundle.get_icon() + + if document_path is not None and os.path.exists(document_path): + document_button = DocumentButton(file_name, document_path, title) + document_button.connect('toggled', self.__button_toggled_cb, + document_path) + self.insert(document_button, -1) + document_button.show() + self._add_separator() + + if bundle_path is not None and os.path.exists(bundle_path): + activity_button = DocumentButton(file_name, bundle_path, title, + bundle=True) + icon = Icon(file=file_name, + icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR, + fill_color=style.COLOR_TRANSPARENT.get_svg(), + stroke_color=style.COLOR_WHITE.get_svg()) + activity_button.set_icon_widget(icon) + icon.show() + if document_button is not None: + activity_button.props.group = document_button + activity_button.props.tooltip = _('Activity Bundle Source') + activity_button.connect('toggled', self.__button_toggled_cb, + bundle_path) + self.insert(activity_button, -1) + activity_button.show() + self._add_separator() + + if sugar_toolkit_path is not None: + sugar_button = RadioToolButton() + icon = Icon(icon_name='computer-xo', + icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR, + fill_color=style.COLOR_TRANSPARENT.get_svg(), + stroke_color=style.COLOR_WHITE.get_svg()) + sugar_button.set_icon_widget(icon) + icon.show() + if document_button is not None: + sugar_button.props.group = document_button + else: + sugar_button.props.group = activity_button + sugar_button.props.tooltip = _('Sugar Toolkit Source') + sugar_button.connect('toggled', self.__button_toggled_cb, + sugar_toolkit_path) + self.insert(sugar_button, -1) + sugar_button.show() + self._add_separator() + + self.activity_title_text = _('View source: %s') % title + self.sugar_toolkit_title_text = _('View source: %r') % 'Sugar Toolkit' + self.label = gtk.Label() + self.label.set_markup('%s' % self.activity_title_text) + self.label.set_alignment(0, 0.5) + self._add_widget(self.label) + + self._add_separator(True) + + stop = ToolButton(icon_name='dialog-cancel') + stop.set_tooltip(_('Close')) + stop.connect('clicked', self.__stop_clicked_cb) + self.insert(stop, -1) + stop.show() + + def _add_separator(self, expand=False): + separator = gtk.SeparatorToolItem() + separator.props.draw = False + if expand: + separator.set_expand(True) + else: + separator.set_size_request(style.DEFAULT_SPACING, -1) + self.insert(separator, -1) + separator.show() + + def _add_widget(self, widget, expand=False): + tool_item = gtk.ToolItem() + tool_item.set_expand(expand) + + tool_item.add(widget) + widget.show() + + self.insert(tool_item, -1) + tool_item.show() + + def __stop_clicked_cb(self, button): + self.emit('stop-clicked') + + def __button_toggled_cb(self, button, path): + if button.props.active: + self.emit('source-selected', path) + if path == self.sugar_toolkit_path: + self.label.set_markup('%s' % self.sugar_toolkit_title_text) + else: # Use activity title for either bundle path or document path + self.label.set_markup('%s' % self.activity_title_text) + + +class FileViewer(gtk.ScrolledWindow): + __gtype_name__ = 'SugarFileViewer' + + __gsignals__ = { + 'file-selected': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([str])), + } + + def __init__(self, path, initial_filename): + gtk.ScrolledWindow.__init__(self) + + self.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC + self.props.vscrollbar_policy = gtk.POLICY_AUTOMATIC + self.set_size_request(style.GRID_CELL_SIZE * 3, -1) + + self._path = None + self._initial_filename = initial_filename + + self._tree_view = gtk.TreeView() + self.add(self._tree_view) + self._tree_view.show() + + self._tree_view.props.headers_visible = False + selection = self._tree_view.get_selection() + selection.connect('changed', self.__selection_changed_cb) + + cell = gtk.CellRendererText() + column = gtk.TreeViewColumn() + column.pack_start(cell, True) + column.add_attribute(cell, 'text', 0) + self._tree_view.append_column(column) + self._tree_view.set_search_column(0) + + self.set_path(path) + + def set_path(self, path): + self.emit('file-selected', None) + if self._path == path: + return + + self._path = path + self._tree_view.set_model(gtk.TreeStore(str, str)) + self._model = self._tree_view.get_model() + self._add_dir_to_model(path) + + def _add_dir_to_model(self, dir_path, parent=None): + for f in os.listdir(dir_path): + if f.endswith(_EXCLUDE_EXTENSIONS) or f in _EXCLUDE_NAMES: + continue + + full_path = os.path.join(dir_path, f) + if os.path.isdir(full_path): + new_iter = self._model.append(parent, [f, full_path]) + self._add_dir_to_model(full_path, new_iter) + else: + current_iter = self._model.append(parent, [f, full_path]) + if f == self._initial_filename: + selection = self._tree_view.get_selection() + selection.select_iter(current_iter) + + def __selection_changed_cb(self, selection): + model, tree_iter = selection.get_selected() + if tree_iter is None: + file_path = None + else: + file_path = model.get_value(tree_iter, 1) + self.emit('file-selected', file_path) + + +class SourceDisplay(gtk.ScrolledWindow): + __gtype_name__ = 'SugarSourceDisplay' + + def __init__(self): + gtk.ScrolledWindow.__init__(self) + + self.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC + self.props.vscrollbar_policy = gtk.POLICY_AUTOMATIC + + self._buffer = gtksourceview2.Buffer() + self._buffer.set_highlight_syntax(True) + + self._source_view = gtksourceview2.View(self._buffer) + self._source_view.set_editable(False) + self._source_view.set_cursor_visible(True) + self._source_view.set_show_line_numbers(True) + self._source_view.set_show_right_margin(True) + self._source_view.set_right_margin_position(80) + #self._source_view.set_highlight_current_line(True) #FIXME: Ugly color + self._source_view.modify_font(_SOURCE_FONT) + self.add(self._source_view) + self._source_view.show() + + self._file_path = None + + def _set_file_path(self, file_path): + self._file_path = file_path + + if self._file_path is None: + self._buffer.set_text('') + return + + mime_type = mime.get_for_file(self._file_path) + _logger.debug('Detected mime type: %r', mime_type) + + language_manager = gtksourceview2.language_manager_get_default() + detected_language = None + for language_id in language_manager.get_language_ids(): + language = language_manager.get_language(language_id) + if mime_type in language.get_mime_types(): + detected_language = language + break + + if detected_language is not None: + _logger.debug('Detected language: %r', + detected_language.get_name()) + + self._buffer.set_language(detected_language) + self._buffer.set_text(open(self._file_path, 'r').read()) + + def _get_file_path(self): + return self._file_path + + file_path = property(_get_file_path, _set_file_path) -- cgit v0.9.1