[gnome-devel-docs] Updated Galician translations



commit 84d375fe908cc2e4e83bc96149f83cb84abeec8d
Author: Fran Diéguez <fran dieguez mabishu com>
Date:   Tue Mar 5 15:42:37 2013 +0100

    Updated Galician translations
    
    Signed-off-by: Fran Diéguez <fran dieguez mabishu com>

 integration-guide/gl/gl.po  |  853 +-
 optimization-guide/gl/gl.po | 1231 +-
 platform-demos/gl/gl.po     |43006 +++++++++++++++++++++++++++++++------------
 platform-overview/gl/gl.po  | 2588 ++--
 4 files changed, 33836 insertions(+), 13842 deletions(-)
---
diff --git a/integration-guide/gl/gl.po b/integration-guide/gl/gl.po
index d80c890..38a2f22 100644
--- a/integration-guide/gl/gl.po
+++ b/integration-guide/gl/gl.po
@@ -5,8 +5,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: gnome-devel-docs master\n"
-"POT-Creation-Date: 2012-09-14 16:41+0000\n"
-"PO-Revision-Date: 2012-09-23 21:45+0200\n"
+"POT-Creation-Date: 2012-10-31 14:50+0000\n"
+"PO-Revision-Date: 2012-12-25 15:39+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez gnome org>\n"
 "Language-Team: gnome-l10n-gl gnome org\n"
 "Language: gl\n"
@@ -17,79 +17,68 @@ msgstr ""
 "X-Generator: Virtaal 0.7.1\n"
 "X-Project-Style: gnome\n"
 
-#: C/integration-guide.xml:8(title)
+#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
+#| msgid "translator-credits"
+msgctxt "_"
+msgid "translator-credits"
+msgstr "Fran Dieguez <frandieguez gnome org>, 2011, 2012"
+
+#: C/index.docbook:8(bookinfo/title)
 msgid "Integrating existing software with GNOME"
 msgstr "Integrar software existente con GNOME"
 
-#: C/integration-guide.xml:9(subtitle) C/integration-guide.xml:10(para)
+#: C/index.docbook:9(bookinfo/subtitle) C/index.docbook:10(abstract/para)
 msgid "Guide for Independent Software Vendors"
 msgstr "Guía para fabricantes de software independente"
 
-#: C/integration-guide.xml:14(firstname)
-msgid "Rosanna"
-msgstr "Rosanna"
-
-#: C/integration-guide.xml:15(surname)
-msgid "Yuen"
-msgstr "Yuen"
-
-#: C/integration-guide.xml:18(email)
-msgid "zana gnome org"
-msgstr "zana gnome org"
-
-#: C/integration-guide.xml:23(firstname)
-msgid "Federico"
-msgstr "Federico"
-
-#: C/integration-guide.xml:24(surname)
-msgid "Mena-Quintero"
-msgstr "Mena-Quintero"
-
-#: C/integration-guide.xml:27(email)
-msgid "federico gnu org"
-msgstr "federico gnu org"
-
-#: C/integration-guide.xml:32(firstname)
-msgid "Mike"
-msgstr "Mike"
-
-#: C/integration-guide.xml:33(surname)
-msgid "Hearn"
-msgstr "Hearn"
-
-#: C/integration-guide.xml:36(email)
-msgid "mike navi cx"
-msgstr "mike navi cx"
-
-#: C/integration-guide.xml:43(year)
-msgid "2005, 2006"
-msgstr "2005, 2006"
+#: C/index.docbook:13(authorgroup/author)
+msgid ""
+"<firstname>Rosanna</firstname> <surname>Yuen</surname> <affiliation> "
+"<address> <email>zana gnome org</email> </address> </affiliation>"
+msgstr ""
+"<firstname>Rosanna</firstname> <surname>Yuen</surname> <affiliation> "
+"<address> <email>zana gnome org</email> </address> </affiliation>"
 
-#: C/integration-guide.xml:44(holder)
-msgid "Rosanna Yuen, Federico Mena-Quintero, Mike Hearn"
-msgstr "Rosanna Yuen, Federico Mena-Quintero, Mike Hearn"
+#: C/index.docbook:22(authorgroup/author)
+msgid ""
+"<firstname>Federico</firstname> <surname>Mena-Quintero</surname> "
+"<affiliation> <address> <email>federico gnu org</email> </address> </"
+"affiliation>"
+msgstr ""
+"<firstname>Federico</firstname> <surname>Mena-Quintero</surname> "
+"<affiliation> <address> <email>federico gnu org</email> </address> "
+"</affiliation>"
 
-#: C/integration-guide.xml:49(revnumber)
-msgid "0.6"
-msgstr "0.6"
+#: C/index.docbook:31(authorgroup/author)
+msgid ""
+"<firstname>Mike</firstname> <surname>Hearn</surname> <affiliation> <address> "
+"<email>mike navi cx</email> </address> </affiliation>"
+msgstr ""
+"<firstname>Mike</firstname> <surname>Hearn</surname> <affiliation> <address> "
+"<email>mike navi cx</email> </address> </affiliation>"
 
-#: C/integration-guide.xml:50(date)
-msgid "2006/September/19"
-msgstr "2006/Setembro/19"
+#: C/index.docbook:42(bookinfo/copyright)
+#| msgid "Rosanna Yuen, Federico Mena-Quintero, Mike Hearn"
+msgid ""
+"<year>2005, 2006</year> <holder>Rosanna Yuen, Federico Mena-Quintero, Mike "
+"Hearn</holder>"
+msgstr ""
+"<year>2005, 2006</year> <holder>Rosanna Yuen, Federico Mena-Quintero, Mike "
+"Hearn</holder>"
 
-#: C/integration-guide.xml:52(para)
+#: C/index.docbook:52(revdescription/para)
 msgid "Extended the icon guidelines."
 msgstr "Extensión das guías de iconas."
 
-#: C/integration-guide.xml:58(revnumber)
-msgid "0.5"
-msgstr "0.5"
-
-#: C/integration-guide.xml:59(date)
-msgid "2006/September/18"
-msgstr "2006/September/18"
+#: C/index.docbook:48(revhistory/revision)
+msgid ""
+"<revnumber>0.6</revnumber> <date>2006/September/19</date> <_:"
+"revdescription-1/>"
+msgstr ""
+"<revnumber>0.6</revnumber> <date>2006/September/19</date> "
+"<_:revdescription-1/>"
 
-#: C/integration-guide.xml:61(para)
+#: C/index.docbook:61(revdescription/para)
 msgid ""
 "Integrated the content of Rosanna Yuen's first article on freedesktop.org "
 "standards."
@@ -97,19 +86,23 @@ msgstr ""
 "Integración do contido do primeiro artigo de Rosanna Yuen sobre os "
 "estándares de freedesktop.org"
 
-#: C/integration-guide.xml:68(revnumber)
-msgid "0.0"
-msgstr "0.0"
-
-#: C/integration-guide.xml:69(date)
-msgid "June 2005"
-msgstr "Xuño 2005"
+#: C/index.docbook:57(revhistory/revision)
+msgid ""
+"<revnumber>0.5</revnumber> <date>2006/September/18</date> <_:"
+"revdescription-1/>"
+msgstr ""
+"<revnumber>0.5</revnumber> <date>2006/September/18</date> "
+"<_:revdescription-1/>"
 
-#: C/integration-guide.xml:71(para)
+#: C/index.docbook:71(revdescription/para)
 msgid "Initial version of this document."
 msgstr "Versión inicial deste documento."
 
-#: C/integration-guide.xml:79(para)
+#: C/index.docbook:67(revhistory/revision)
+msgid "<revnumber>0.0</revnumber> <date>June 2005</date> <_:revdescription-1/>"
+msgstr "<revnumber>0.0</revnumber> <date>June 2005</date> <_:revdescription-1/>"
+
+#: C/index.docbook:79(legalnotice/para)
 msgid ""
 "Permission is granted to copy, distribute and/or modify this document under "
 "the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
@@ -125,7 +118,7 @@ msgstr ""
 "<ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> ou no ficheiro COPYING-"
 "DOCS distribuído xunto con este manual."
 
-#: C/integration-guide.xml:88(para)
+#: C/index.docbook:88(legalnotice/para)
 msgid ""
 "This manual is part of a collection of GNOME manuals distributed under the "
 "GFDL. If you want to distribute this manual separately from the collection, "
@@ -137,7 +130,7 @@ msgstr ""
 "engadindo unha copia da licenza do manual, tal como se describe na sección 6 "
 "da licenza."
 
-#: C/integration-guide.xml:94(para)
+#: C/index.docbook:94(legalnotice/para)
 msgid ""
 "Many of the names used by companies to distinguish their products and "
 "services are claimed as trademarks. Where those names appear in any GNOME "
@@ -151,7 +144,7 @@ msgstr ""
 "Proxecto de documentación de GNOME de ditas marcas comerciais, os nomes "
 "aparecerán en maiúsculas ou coas iniciais en maiúsculas."
 
-#: C/integration-guide.xml:107(para)
+#: C/index.docbook:107(listitem/para)
 msgid ""
 "DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
 "EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
@@ -179,7 +172,7 @@ msgstr ""
 "LICENZA. NON SE AUTORIZA NINGÚN USO DE CALQUERA DOCUMENTO OU VERSIÓN "
 "MODIFICADA DO MESMO SE NON É CON SUXECCIÓN A ESTA LIMITACIÓN DE GARANTÍAS; E"
 
-#: C/integration-guide.xml:124(para)
+#: C/index.docbook:124(listitem/para)
 msgid ""
 "UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
 "NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
@@ -204,20 +197,24 @@ msgstr ""
 "DO DOCUMENTO E AS VERSIÓNS MODIFICADAS DO MESMO, OU RELACIONADO CON ILO, "
 "INCLUSO SE SE COMUNICOU A AQUELA PARTE A POSIBILIDADE DE TALES DANOS.\t"
 
-#: C/integration-guide.xml:101(para)
+#: C/index.docbook:101(legalnotice/para)
+#| msgid ""
+#| "DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE "
+#| "TERMS OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER "
+#| "UNDERSTANDING THAT: <placeholder-1/>"
 msgid ""
 "DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
 "OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
-"<placeholder-1/>"
+"<_:orderedlist-1/>"
 msgstr ""
 "O DOCUMENTO E VERSIÓNS MODIFICADAS FORNÉCENSE BAIXO OS TERMOS DA LICENZA "
-"LIBRE DE DOCUMENTACIÓ DE GNU E TENDO EN CONTA QUE: <placeholder-1/>"
+"LIBRE DE DOCUMENTACIÓ DE GNU E TENDO EN CONTA QUE: <_:orderedlist-1/>"
 
-#: C/integration-guide.xml:144(title)
+#: C/index.docbook:144(preface/title)
 msgid "Preface"
 msgstr "Prefacio"
 
-#: C/integration-guide.xml:146(para)
+#: C/index.docbook:146(preface/para)
 msgid ""
 "GNOME is a project to build a complete desktop and development platform "
 "based entirely on free software. Many companies, governments, schools, "
@@ -241,11 +238,11 @@ msgstr ""
 "existente con GNOME sen ter que reescribir o software para usar "
 "explicitamente as bibliotecas e ferramentas de desenvolvemento de GNOME."
 
-#: C/integration-guide.xml:161(para)
+#: C/index.docbook:161(preface/para)
 msgid "This guide will be useful in the following situations:"
 msgstr "Esta guía é útil nas seguintes circunstancias:"
 
-#: C/integration-guide.xml:167(para)
+#: C/index.docbook:167(listitem/para)
 msgid ""
 "You are a software developer or distributor who has an application that is "
 "not explicitly designed to work with GNOME, but you want to ensure that it "
@@ -255,7 +252,7 @@ msgstr ""
 "non está deseñada especificamente para traballar con GNOME, pero quere "
 "asegurarse de que se executa correctametne nun Escritorio GNOME."
 
-#: C/integration-guide.xml:176(para)
+#: C/index.docbook:176(listitem/para)
 msgid ""
 "You are a system administrator for an institution that has deployed GNOME "
 "desktops to its users. You also have legacy or in-house applications, and "
@@ -267,7 +264,7 @@ msgstr ""
 "caseriso e quere que os usuarios de GNOME poidan acceder a elas "
 "correctamente."
 
-#: C/integration-guide.xml:185(para)
+#: C/index.docbook:185(listitem/para)
 msgid ""
 "You are writing a GNOME application proper and you need a checklist of basic "
 "things to do to ensure that your application integrates well with the rest "
@@ -277,7 +274,7 @@ msgstr ""
 "básicas para asegurar que o seu aplicativo se integra correctametne co resto "
 "do Escritorio de GNOME."
 
-#: C/integration-guide.xml:194(para)
+#: C/index.docbook:194(preface/para)
 msgid ""
 "In general, this guide is about integrating existing software into a GNOME "
 "desktop. On the other hand, if you are considering writing new software, we "
@@ -291,7 +288,7 @@ msgstr ""
 "consulte o <ulink url=\"http://developer.gnome.org\";>sitio do desenvolvedor "
 "de GNOME</ulink> para obter máis información."
 
-#: C/integration-guide.xml:203(para)
+#: C/index.docbook:203(preface/para)
 msgid ""
 "One of the main concerns of GNOME is the user experience. Users should have "
 "a comfortable computing environment: this means having a complete desktop "
@@ -306,11 +303,11 @@ msgstr ""
 "non están escritos explicitamente para GNOME poden executarse dunha forma "
 "confortábel nun escritorio GNOME."
 
-#: C/integration-guide.xml:213(title)
+#: C/index.docbook:213(section/title)
 msgid "Structure of this guide"
 msgstr "Estrutura desta guía"
 
-#: C/integration-guide.xml:215(para)
+#: C/index.docbook:215(section/para)
 msgid ""
 "This guide is structured as a list of tasks that you need to perform to "
 "integrate existing software with GNOME. The guide presents these tasks "
@@ -328,11 +325,11 @@ msgstr ""
 "integration-checklist\">apéndice cunha lista de comprobación para a "
 "integración</link> que lle axudará a avaliar o seu traballo de integración."
 
-#: C/integration-guide.xml:229(title)
+#: C/index.docbook:229(section/title)
 msgid "Standards and freedesktop.org"
 msgstr "Estándares e freedesktop.org"
 
-#: C/integration-guide.xml:231(para)
+#: C/index.docbook:231(section/para)
 msgid ""
 "Many of the integration tasks in this guide rely on standards which are "
 "relevant to more than GNOME. Other desktop projects like the <ulink url="
@@ -348,7 +345,7 @@ msgstr ""
 "realizar un pequeno traballo adicional, ou ningún, para facer que se execute "
 "tamén neses escritorios."
 
-#: C/integration-guide.xml:241(para)
+#: C/index.docbook:241(section/para)
 msgid ""
 "Creating a perfect application is a wonderful feeling. Whether large or "
 "small, you want the desktop to recognize your application and for them to "
@@ -365,7 +362,7 @@ msgstr ""
 "non existan regras oficiais, hai unhas especificacións dispoñíbeis en "
 "<emphasis>freedesktop.org</emphasis>."
 
-#: C/integration-guide.xml:252(para)
+#: C/index.docbook:252(section/para)
 msgid ""
 "Although not a formal standards body, freedesktop.org maintains a set of "
 "informal but commonly agreed upon guidelines. When followed, these "
@@ -376,11 +373,11 @@ msgstr ""
 "guías permiten que os aplicativos se integren nos escritorios que seguen o "
 "estándar."
 
-#: C/integration-guide.xml:262(title)
+#: C/index.docbook:262(chapter/title)
 msgid "Basic Integration"
 msgstr "Integración básica"
 
-#: C/integration-guide.xml:264(para)
+#: C/index.docbook:264(chapter/para)
 msgid ""
 "This chapter teaches you about the very basic steps you should take to "
 "integrate a program into the GNOME desktop. These steps concern the "
@@ -389,7 +386,7 @@ msgstr ""
 "Este capítulo enséñalle os pasos básicos que debe realizar para integrar un "
 "programa co Escritorio de GNOME. Estes pasos inclúen o seguinte:"
 
-#: C/integration-guide.xml:272(para)
+#: C/index.docbook:272(listitem/para)
 msgid ""
 "Letting the user launch your application by making it appear in the "
 "desktop's panel menus, or any other launching mechanism in the desktop."
@@ -397,7 +394,7 @@ msgstr ""
 "Permitir que o usuario inicie o seu aplicativo facendo que apareza nos menús "
 "do panel do escritorio, ou calquera outro mecanismo de inicio no escritorio."
 
-#: C/integration-guide.xml:279(para)
+#: C/index.docbook:279(listitem/para)
 msgid ""
 "Letting the desktop know which types of user-created files require your "
 "application to be launched."
@@ -405,7 +402,7 @@ msgstr ""
 "Permitir que o escritorio saiba que tipo de ficheiros creados polo usuario "
 "requiren o seu aplicativo para poderse iniciar."
 
-#: C/integration-guide.xml:285(para)
+#: C/index.docbook:285(listitem/para)
 msgid ""
 "Letting the desktop know how to display the appropriate icons for your "
 "program and the files which your program creates."
@@ -413,12 +410,12 @@ msgstr ""
 "Permitir que o escritorio saiba como mostrar as iconas axeitadas para o seu "
 "programa e os ficheiros que o seu programa crea."
 
-#: C/integration-guide.xml:293(title)
+#: C/index.docbook:293(section/title)
 msgid "Desktop files: putting your application in the desktop menus"
 msgstr ""
 "Ficheiros de escritorio: poñer o seu aplicativo nos menús do escritorio"
 
-#: C/integration-guide.xml:295(para)
+#: C/index.docbook:295(section/para)
 msgid ""
 "To run applications from GNOME, users click on icons on their desktops or "
 "they select the applications which they want to run from a menu. Therefore, "
@@ -432,7 +429,7 @@ msgstr ""
 "<firstterm>rexistralo</firstterm> co conxunto de aplicativos que os usuarios "
 "pode executar."
 
-#: C/integration-guide.xml:304(para)
+#: C/index.docbook:304(section/para)
 msgid ""
 "Unlike in Windows or MacOS, in GNOME the users menus are automatically "
 "constructed from the list of registered applications. Each published "
@@ -446,7 +443,7 @@ msgstr ""
 "configuración do menú do sistema ordénaas e xestiona. Este mecanismo segue "
 "os estándares de escritorio e de menú de freedesktop.org"
 
-#: C/integration-guide.xml:313(para)
+#: C/index.docbook:313(note/para)
 msgid ""
 "Though common in other desktops, creating your own application-specific "
 "submenu is not recommended. Instead, provide one menu item for each "
@@ -459,7 +456,7 @@ msgstr ""
 "ficheiros de axuda, os ficheiros LEAME, ou ligazóns á súa páxina web pódense "
 "empotrar no aplicativo en si."
 
-#: C/integration-guide.xml:321(para)
+#: C/index.docbook:321(section/para)
 msgid ""
 "In GNOME and other freedesktop.org-compliant desktops, an application gets "
 "registered into the desktop's menus through a <firstterm>desktop entry</"
@@ -475,7 +472,7 @@ msgstr ""
 "unha lista de configuración do aplicativo. O escritorio obtén a información "
 "do ficheiro e úsao para:"
 
-#: C/integration-guide.xml:332(para)
+#: C/index.docbook:332(listitem/para)
 msgid ""
 "put the application in the <guimenu>Main Menu</guimenu>. To find a list of "
 "valid categories, take a look into FreeDesktop.org's <ulink url=\"http://";
@@ -483,11 +480,11 @@ msgid ""
 "ulink>."
 msgstr ""
 "poñer o aplicativo no <guimenu>Menú principal</guimenu>. Para atopar unha "
-"lista das categorías válidas, vote unha ollada á <ulink "
-"url=\"http://standards.freedesktop.org/menu-spec/latest/\";>Especificación do "
-"menú de escritorio</ulink> de FreeDestop.org"
+"lista das categorías válidas, vote unha ollada á <ulink url=\"http://";
+"standards.freedesktop.org/menu-spec/latest/\">Especificación do menú de "
+"escritorio</ulink> de FreeDestop.org"
 
-#: C/integration-guide.xml:340(para)
+#: C/index.docbook:340(listitem/para)
 msgid ""
 "list the application in the <application>Run Application...</application> "
 "dialog"
@@ -495,23 +492,23 @@ msgstr ""
 "liste o aplicativo no diálogo <application>Executar aplicativo...</"
 "application>."
 
-#: C/integration-guide.xml:344(para)
+#: C/index.docbook:344(listitem/para)
 msgid "create appropriate launchers in the menu or on the desktop."
 msgstr "cree os iniciadores axeitados no menú ou no escritorio"
 
-#: C/integration-guide.xml:347(para)
+#: C/index.docbook:347(listitem/para)
 msgid "associate the name and description of the application."
 msgstr "asocie o nome e a descrición do aplicativo."
 
-#: C/integration-guide.xml:350(para)
+#: C/index.docbook:350(listitem/para)
 msgid "use the appropriate icon."
 msgstr "use a icona axeitada."
 
-#: C/integration-guide.xml:353(para)
+#: C/index.docbook:353(listitem/para)
 msgid "recognize the MIME types it supports for opening files."
 msgstr "recoǹeza o tipo MIME que admite para abir ficheiros."
 
-#: C/integration-guide.xml:357(para)
+#: C/index.docbook:357(section/para)
 msgid ""
 "To add a menu entry for your application, create a desktop file. It should "
 "have a unique filename, and there are no length limits so avoid "
@@ -530,7 +527,28 @@ msgstr ""
 "Pro.desktop» O ficheiro debería estar codificado en UTF-8, e parecerse á "
 "seguinte plantilla:"
 
-#: C/integration-guide.xml:378(para)
+#: C/index.docbook:369(section/programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"\t[Desktop Entry]\n"
+"\tName=FooCorp Painter Pro\n"
+"\tExec=foocorp-painter-pro\n"
+"\tIcon=foocorp-painter-pro\n"
+"\tType=Application\n"
+"\tCategories=GTK;GNOME;Utility;\n"
+"\t"
+msgstr ""
+"\n"
+"\t[Desktop Entry]\n"
+"\tName=FooCorp Painter Pro\n"
+"\tExec=foocorp-painter-pro\n"
+"\tIcon=foocorp-painter-pro\n"
+"\tType=Application\n"
+"\tCategories=GTK;GNOME;Utility;\n"
+"\t"
+
+#: C/index.docbook:378(section/para)
 msgid ""
 "These desktop files contain metadata about your application, and play a "
 "central role in integrating the program with the GNOME and other standards "
@@ -544,7 +562,7 @@ msgstr ""
 "posíbel. O ficheiro pódese traducir lingüísticamente de tal forma que o nome "
 "do seu aplicativo poida aparecer no idioma nativo do usuario."
 
-#: C/integration-guide.xml:398(para)
+#: C/index.docbook:398(footnote/para)
 msgid ""
 "Note that the <literal>~/.local/share/applications</literal> location is not "
 "monitored by versions of GNOME prior to version 2.10 or on Fedora Core "
@@ -563,7 +581,7 @@ msgstr ""
 "2.10, así que par aunha máxima compatibilidade entre escritorios, poña o "
 "ficheiro en ámbalas dúas localizacións."
 
-#: C/integration-guide.xml:411(para)
+#: C/index.docbook:411(footnote/para)
 msgid ""
 "Note that the KDE Desktop requires one to run <command>kbuildsycoca</"
 "command> to force a refresh of the menus."
@@ -571,7 +589,15 @@ msgstr ""
 "Teña en conta que o Escritorio KDE requrie unha execución de "
 "<command>kbuildsycoca</command> para forzar o refresco dos menús."
 
-#: C/integration-guide.xml:387(para)
+#: C/index.docbook:387(section/para)
+#| msgid ""
+#| "Place this file in the <literal>/usr/share/applications</literal> "
+#| "directory so that it is accessible by everyone, or in <literal>~/.local/"
+#| "share/applications</literal> if you only wish to make it accessible to a "
+#| "single user. Which is used should depend on whether your application is "
+#| "installed systemwide or into a user's home directory. GNOME monitors "
+#| "these directories for changes, so simply copying the file to the right "
+#| "location is enough to register it with the desktop. <placeholder-1/>"
 msgid ""
 "Place this file in the <literal>/usr/share/applications</literal> directory "
 "so that it is accessible by everyone, or in <literal>~/.local/share/"
@@ -579,17 +605,17 @@ msgid ""
 "user. Which is used should depend on whether your application is installed "
 "systemwide or into a user's home directory. GNOME monitors these directories "
 "for changes, so simply copying the file to the right location is enough to "
-"register it with the desktop. <placeholder-1/>"
+"register it with the desktop. <_:footnote-1/>"
 msgstr ""
 "Poña este ficheiro no cartafol <literal>/usr/share/applications</literal> "
-"para que sexa accesíbel para todo o mundo, ou en <literal>̣~/.local/share/"
-"applications</literal> se quere que só sexa accesíbel para un usuario. Isto "
-"úsase dependendo de se o seu aplicativo se instalou no sistema ou ben no "
-"cartafol dun usuario. GNOME monitoriza estes cartafoles, así que simplemente "
-"copiar o ficheiro á localización correcta é dabondo para rexistralo no "
-"escritorio. <placeholder-1/>"
+"para que sexa accesíbel para todo o mundo, ou en "
+"<literal>̣~/.local/share/applications</literal> se quere que só sexa "
+"accesíbel para un usuario. Isto úsase dependendo de se o seu aplicativo se "
+"instalou no sistema ou ben no cartafol dun usuario. GNOME monitoriza estes "
+"cartafoles, así que simplemente copiar o ficheiro á localización correcta é "
+"dabondo para rexistralo no escritorio. <_:footnote-1/>"
 
-#: C/integration-guide.xml:441(para)
+#: C/index.docbook:441(section/para)
 msgid ""
 "Each working desktop file needs to follow the same format. A minimal example "
 "of a desktop file is shown in <xref linkend=\"ex-sample-desktop-file\"/>. "
@@ -611,7 +637,7 @@ msgstr ""
 "firstterm>. Móstrase unha explicación de cada liña na <xref linkend=\"tb-"
 "desktop-file\"/>."
 
-#: C/integration-guide.xml:456(para)
+#: C/index.docbook:456(note/para)
 msgid ""
 "Other than the first line identifying the desktop file, the order of the "
 "lines is not important. In <xref linkend=\"ex-sample-desktop-file\"/>, the "
@@ -623,7 +649,7 @@ msgstr ""
 "<command>Type=Application</command> podería estar na segunda ringleira, na "
 "quinta ou na última e o resultado sería o mesmo."
 
-#: C/integration-guide.xml:465(para)
+#: C/index.docbook:465(note/para)
 msgid ""
 "However, the keys are case sensitive. <command>Type=Application</command> is "
 "not the same as <command>type=Application</command> or "
@@ -633,11 +659,11 @@ msgstr ""
 "<command>Type=Application</command> non é o mesmo que "
 "<command>type=application</command> ou <command>TYPE=Application</command>."
 
-#: C/integration-guide.xml:474(title)
+#: C/index.docbook:474(example/title)
 msgid "Sample desktop file"
 msgstr "Ficheiro de escritorio de exemplo"
 
-#: C/integration-guide.xml:475(screen)
+#: C/index.docbook:475(example/screen)
 #, no-wrap
 msgid ""
 "\n"
@@ -660,23 +686,24 @@ msgstr ""
 "Icon=application.png\n"
 "Terminal=false\n"
 
-#: C/integration-guide.xml:488(title)
+#: C/index.docbook:488(table/title)
 msgid "Line by line explanation"
 msgstr "Explicacións liña a liña"
 
-#: C/integration-guide.xml:495(entry)
+#: C/index.docbook:495(row/entry)
 msgid "Line"
 msgstr "Liña"
 
-#: C/integration-guide.xml:496(entry)
+#: C/index.docbook:496(row/entry)
 msgid "Description"
 msgstr "Descrición"
 
-#: C/integration-guide.xml:502(command)
-msgid "[Desktop Entry]"
-msgstr "[Desktop Entry]"
+#: C/index.docbook:502(row/entry)
+#| msgid "[Desktop Entry]"
+msgid "<command>[Desktop Entry]</command>"
+msgstr "<command>[Desktop Entry]</command>"
 
-#: C/integration-guide.xml:503(entry)
+#: C/index.docbook:503(row/entry)
 msgid ""
 "The first line of every desktop file and the section header to identify the "
 "block of key value pairs associated with the desktop. Necessary for the "
@@ -686,82 +713,83 @@ msgstr ""
 "identificar o bloque de pares de chaves asociados co escritorio. Necesario "
 "para que o escritorio recoñeza o ficheiro correctamente."
 
-#: C/integration-guide.xml:509(command)
-msgid "Type=Application"
-msgstr "Type=Application"
+#: C/index.docbook:509(row/entry)
+#| msgid "Type=Application"
+msgid "<command>Type=Application</command>"
+msgstr "<command>Type=Application</command>"
 
-#: C/integration-guide.xml:512(command)
-msgid "Link"
-msgstr "Ligazón"
-
-#: C/integration-guide.xml:513(command)
-msgid "Directory"
-msgstr "Cartafol"
-
-#: C/integration-guide.xml:510(entry)
+#: C/index.docbook:510(row/entry)
+#| msgid ""
+#| "Tells the desktop that this desktop file pertains to an application. "
+#| "Other valid values for this key are <placeholder-1/> and <placeholder-2/>."
 msgid ""
 "Tells the desktop that this desktop file pertains to an application. Other "
-"valid values for this key are <placeholder-1/> and <placeholder-2/>."
+"valid values for this key are <command>Link</command> and "
+"<command>Directory</command>."
 msgstr ""
 "Dílle ao escritorio que este ficheiro de escritorio pertence a un "
-"aplicativo. Outros valores válidos para esta chave son <placeholder-1/> e "
-"<placeholder-2/>."
+"aplicativo. Outros valores válidos para esta chave son "
+"<command>Link</command> e <command>Directory</command>."
 
-#: C/integration-guide.xml:516(command)
-msgid "Encoding=UTF-8"
-msgstr "Encoding=UTF-8"
+#: C/index.docbook:516(row/entry)
+msgid "<command>Encoding=UTF-8</command>"
+msgstr "<command>Encoding=UTF-8</command>"
 
-#: C/integration-guide.xml:517(entry)
+#: C/index.docbook:517(row/entry)
 msgid "Describes the encoding of the entries in this desktop file."
 msgstr "Describe a codificación das entradas neste ficheiro de escritorio."
 
-#: C/integration-guide.xml:521(command)
-msgid "Name=Sample Application Name"
-msgstr "Name=Nome de exemplo de aplicativo"
+#: C/index.docbook:521(row/entry)
+#| msgid "Name=Sample Application Name"
+msgid "<command>Name=Sample Application Name</command>"
+msgstr "<command>Name=Nome de exemplo de aplicativo</command>"
 
-#: C/integration-guide.xml:522(entry)
+#: C/index.docbook:522(row/entry)
 msgid "Names of your application for the main menu and any launchers."
 msgstr ""
 "Dalle o nome ao seu aplicativo para o menú principal e calquera iniciador."
 
-#: C/integration-guide.xml:525(command)
-msgid "Comment=A sample application"
-msgstr "Comment=Un aplicativo de exemplo"
+#: C/index.docbook:525(row/entry)
+#| msgid "Comment=A sample application"
+msgid "<command>Comment=A sample application</command>"
+msgstr "<command>Comment=Un aplicativo de exemplo</command>"
 
-#: C/integration-guide.xml:526(entry)
+#: C/index.docbook:526(row/entry)
 msgid "Describes the application. Used as a tooltip."
 msgstr "Describe o aplicativo. Usando un consello."
 
-#: C/integration-guide.xml:529(command)
-msgid "Exec=application"
-msgstr "Exec=application"
+#: C/index.docbook:529(row/entry)
+#| msgid "Exec=application"
+msgid "<command>Exec=application</command>"
+msgstr "<command>Exec=application</command>"
 
-#: C/integration-guide.xml:530(entry)
+#: C/index.docbook:530(row/entry)
 msgid ""
 "The command that starts this application from a shell. It can have arguments."
 msgstr "A orde que inicia o aplicativo desde consola. Pode ter argumentos."
 
-#: C/integration-guide.xml:534(command)
-msgid "Icon=application.png"
-msgstr "Icon=application.png"
+#: C/index.docbook:534(row/entry)
+#| msgid "Icon=application.png"
+msgid "<command>Icon=application.png</command>"
+msgstr "<command>Icon=application.png</command>"
 
-#: C/integration-guide.xml:535(entry)
+#: C/index.docbook:535(row/entry)
 msgid "The icon name associated with this application."
 msgstr "O nome da icona asociada con este aplicativo."
 
-#: C/integration-guide.xml:538(command)
-msgid "Terminal=false"
-msgstr "Terminal=false"
+#: C/index.docbook:538(row/entry)
+msgid "<command>Terminal=false</command>"
+msgstr "<command>Terminal=false</command>"
 
-#: C/integration-guide.xml:539(entry)
+#: C/index.docbook:539(row/entry)
 msgid "Describes whether application should run in a terminal."
 msgstr "Describe se o aplicativo se debería executar nun terminal."
 
-#: C/integration-guide.xml:547(title)
+#: C/index.docbook:547(section/title)
 msgid "Starting your application"
 msgstr "Iniciar o seu aplicativo"
 
-#: C/integration-guide.xml:548(para)
+#: C/index.docbook:548(section/para)
 msgid ""
 "If your application can take command line arguments, you can signify that by "
 "using the fields as shown in <xref linkend=\"tb-exec-params\"/>."
@@ -769,113 +797,119 @@ msgstr ""
 "Se o seu aplicativo pode levar argumentos desde a liña de ordes, pode "
 "detallalo usando os campos mostrados na <xref linkend=\"tb-exec-params\"/>"
 
-#: C/integration-guide.xml:555(title)
+#: C/index.docbook:555(table/title)
 msgid "Exec variables"
 msgstr "Variábeis de execución"
 
-#: C/integration-guide.xml:562(entry)
+#: C/index.docbook:562(row/entry)
 msgid "Add..."
 msgstr "Engadir…"
 
-#: C/integration-guide.xml:563(entry)
+#: C/index.docbook:563(row/entry)
 msgid "Accepts..."
 msgstr "Acepta…"
 
-#: C/integration-guide.xml:569(command) C/integration-guide.xml:587(command)
-msgid "%f"
-msgstr "%f"
+#: C/index.docbook:569(row/entry)
+msgid "<command>%f</command>"
+msgstr "<command>%f</command>"
 
-#: C/integration-guide.xml:570(entry)
+#: C/index.docbook:570(row/entry)
 msgid "a single filename."
 msgstr "un só nome de ficheiro."
 
-#: C/integration-guide.xml:573(command) C/integration-guide.xml:592(command)
-msgid "%F"
-msgstr "%F"
+#: C/index.docbook:573(row/entry)
+msgid "<command>%F</command>"
+msgstr "<command>%F</command>"
 
-#: C/integration-guide.xml:574(entry)
+#: C/index.docbook:574(row/entry)
 msgid "multiple filenames."
 msgstr "múltiples nomes de ficheiro."
 
-#: C/integration-guide.xml:577(command) C/integration-guide.xml:981(literal)
-#: C/integration-guide.xml:984(literal)
-msgid "%u"
-msgstr "%u"
+#: C/index.docbook:577(row/entry)
+msgid "<command>%u</command>"
+msgstr "<command>%u</command>"
 
-#: C/integration-guide.xml:578(entry)
+#: C/index.docbook:578(row/entry)
 msgid "a single URL."
 msgstr "un só URL."
 
-#: C/integration-guide.xml:581(command)
-msgid "%U"
-msgstr "%U"
+#: C/index.docbook:581(row/entry)
+msgid "<command>%U</command>"
+msgstr "<command>%U</command>"
 
-#: C/integration-guide.xml:582(entry)
+#: C/index.docbook:582(row/entry)
 msgid "multiple URLs."
 msgstr "múltiples URL."
 
-#: C/integration-guide.xml:585(command)
-msgid "%d"
-msgstr "%d"
+#: C/index.docbook:585(row/entry)
+msgid "<command>%d</command>"
+msgstr "<command>%d</command>"
 
-#: C/integration-guide.xml:586(entry)
+#: C/index.docbook:586(row/entry)
+#| msgid ""
+#| "a single directory. Used in conjunction with <placeholder-1/> to locate a "
+#| "file."
 msgid ""
-"a single directory. Used in conjunction with <placeholder-1/> to locate a "
-"file."
+"a single directory. Used in conjunction with <command>%f</command> to locate "
+"a file."
 msgstr ""
-"un só cartafol. Usado xunto con <placeholder-1/> para localizar un ficheiro."
+"un só cartafol. Usado xunto con <command>%f</command> para localizar un "
+"ficheiro."
 
-#: C/integration-guide.xml:590(command)
-msgid "%D"
-msgstr "%D"
+#: C/index.docbook:590(row/entry)
+msgid "<command>%D</command>"
+msgstr "<command>%D</command>"
 
-#: C/integration-guide.xml:591(entry)
+#: C/index.docbook:591(row/entry)
+#| msgid ""
+#| "multiple directories. Used in conjunction with <placeholder-1/> to locate "
+#| "files."
 msgid ""
-"multiple directories. Used in conjunction with <placeholder-1/> to locate "
-"files."
+"multiple directories. Used in conjunction with <command>%F</command> to "
+"locate files."
 msgstr ""
-"múltiples cartafoles. Usado xunto con <placeholder-1/> para localizar "
+"múltiples cartafoles. Usado xunto con <command>%F</command> para localizar "
 "ficheiros."
 
-#: C/integration-guide.xml:595(command)
-msgid "%n"
-msgstr "%n"
+#: C/index.docbook:595(row/entry)
+msgid "<command>%n</command>"
+msgstr "<command>%n</command>"
 
-#: C/integration-guide.xml:596(entry)
+#: C/index.docbook:596(row/entry)
 msgid "a single filename without a path."
 msgstr "un só nome de ficheiro sen ruta."
 
-#: C/integration-guide.xml:599(command)
-msgid "%N"
-msgstr "%N"
+#: C/index.docbook:599(row/entry)
+msgid "<command>%N</command>"
+msgstr "<command>%N</command>"
 
-#: C/integration-guide.xml:600(entry)
+#: C/index.docbook:600(row/entry)
 msgid "multiple filenames without paths."
 msgstr "múltiples ficheiros sen rutas."
 
-#: C/integration-guide.xml:603(command)
-msgid "%k"
-msgstr "%k"
+#: C/index.docbook:603(row/entry)
+msgid "<command>%k</command>"
+msgstr "<command>%k</command>"
 
-#: C/integration-guide.xml:604(entry)
+#: C/index.docbook:604(row/entry)
 msgid "a URI or local filename of the location of the desktop file."
 msgstr ""
 "un URI ou nome de ficheiro local para a localización do ficheiro de "
 "escritorio."
 
-#: C/integration-guide.xml:608(command)
-msgid "%v"
-msgstr "%v"
+#: C/index.docbook:608(row/entry)
+msgid "<command>%v</command>"
+msgstr "<command>%v</command>"
 
-#: C/integration-guide.xml:609(entry)
+#: C/index.docbook:609(row/entry)
 msgid "the name of the Device entry."
 msgstr "o nome do dispositivo de entrada."
 
-#: C/integration-guide.xml:618(title)
+#: C/index.docbook:618(section/title)
 msgid "Foreign languages"
 msgstr "Idiomas estranxeiros"
 
-#: C/integration-guide.xml:620(para)
+#: C/index.docbook:620(section/para)
 msgid ""
 "To create localized names and comments, additional lines for each locale "
 "need to be added. For example, to add a Swedish version of the comment, add "
@@ -885,15 +919,16 @@ msgstr ""
 "para cada local necesaria. Por exemplo, para engadir a versión en galego do "
 "comentario engada a seguinte liña"
 
-#: C/integration-guide.xml:627(command)
-msgid "Comment[sv]=Exempelprogramnamn"
-msgstr "Comment[gl]=Exemplo do nome do programa"
+#: C/index.docbook:626(section/para)
+#| msgid "Comment[sv]=Exempelprogramnamn"
+msgid "<command> Comment[sv]=Exempelprogramnamn </command>"
+msgstr "<command> Comment[gl]=Exemplo do nome do programa </command>"
 
-#: C/integration-guide.xml:632(para)
+#: C/index.docbook:632(section/para)
 msgid "There is no limit to the number of translations in the file."
 msgstr "Non existen límites no número de traducións para o ficheiro."
 
-#: C/integration-guide.xml:637(para)
+#: C/index.docbook:637(tip/para)
 msgid ""
 "Since maintaining a long list of translations in a file is cumbersome, a "
 "better way to create these translations is to use the <application>intltool</"
@@ -907,12 +942,12 @@ msgstr ""
 "páxinas do manual de <application>intltool-extract</application> e "
 "<application>intltool-merge</application>."
 
-#: C/integration-guide.xml:650(title) C/integration-guide.xml:694(title)
-#: C/integration-guide.xml:797(title) C/integration-guide.xml:880(title)
+#: C/index.docbook:650(section/title) C/index.docbook:694(section/title)
+#: C/index.docbook:797(section/title) C/index.docbook:880(section/title)
 msgid "References"
 msgstr "Referencias"
 
-#: C/integration-guide.xml:652(para)
+#: C/index.docbook:652(section/para)
 msgid ""
 "<ulink url=\"http://standards.freedesktop.org/desktop-entry-spec/latest/";
 "index.html\">Desktop Entry Specification</ulink> — Specifications for "
@@ -922,11 +957,11 @@ msgstr ""
 "index.html\">Especificación de entradas de escritorio</ulink>; "
 "Especificacións para crear un ficheiro de escritorio."
 
-#: C/integration-guide.xml:662(title)
+#: C/index.docbook:662(section/title)
 msgid "Installing icons"
 msgstr "Instalar iconas"
 
-#: C/integration-guide.xml:664(para)
+#: C/index.docbook:664(section/para)
 msgid ""
 "In <xref linkend=\"ex-sample-desktop-file\"/>, we have specified the icon "
 "for this application as <filename><replaceable>application.png</"
@@ -938,7 +973,7 @@ msgstr ""
 "filename>. Para que esto funcione, precisa poñer ese ficheiro de icona no "
 "cartafol correcto."
 
-#: C/integration-guide.xml:672(para)
+#: C/index.docbook:672(section/para)
 msgid ""
 "The desktop looks for icons in the selected theme directory of <filename>/"
 "usr/share/icons/</filename>. Application icons should be available at least "
@@ -955,7 +990,7 @@ msgstr ""
 "seu aplicativo no tema seleccionado. Se ten iconas para temas, pópaos nos "
 "cartafoles axeitados."
 
-#: C/integration-guide.xml:682(para)
+#: C/index.docbook:682(section/para)
 msgid ""
 "To better visually integrate with the GNOME desktop, while keeping your "
 "application look native when run under KDE, Windows XP or Mac OS X, follow "
@@ -972,7 +1007,7 @@ msgstr ""
 "iconas, incluíndo as cores, iluminación e tamaño. Tamén fornécese o típico "
 "fluxo de traballo e titoriais en vídeo."
 
-#: C/integration-guide.xml:696(para)
+#: C/index.docbook:696(section/para)
 msgid ""
 "<ulink url=\"http://standards.freedesktop.org/icon-theme-spec/icon-theme-";
 "spec-latest.html\">Icon Theme Specification</ulink> — Describes how to "
@@ -982,7 +1017,7 @@ msgstr ""
 "spec-latest.html\">Especificación de temas de iconas</ulink>: Describe como "
 "instalar e buscar iconas en forma de temas."
 
-#: C/integration-guide.xml:703(para)
+#: C/index.docbook:703(section/para)
 msgid ""
 "<ulink url=\"http://standards.freedesktop.org/icon-naming-spec/latest/";
 "\">Icon Naming Specification</ulink> — Provides a canonical naming scheme "
@@ -992,7 +1027,7 @@ msgstr ""
 "\">Especificación de nomes de iconas</ulink>: Fornece un esquema canónico de "
 "nomes para os ficheiros de iconas."
 
-#: C/integration-guide.xml:710(para)
+#: C/index.docbook:710(section/para)
 msgid ""
 "<ulink url=\"http://tango.freedesktop.org/Tango_Icon_Theme_Guidelines";
 "\">Tango Style Guidelines</ulink> — Provides description on how to design "
@@ -1002,11 +1037,11 @@ msgstr ""
 "\">Guías de estilo para Tango</ulink>: Fornece unha descrición sobre como "
 "deseñar arte de iconas limpos e «multiplataforma»"
 
-#: C/integration-guide.xml:719(title)
+#: C/index.docbook:719(section/title)
 msgid "Adding MIME types"
 msgstr "Engadir tipos MIME"
 
-#: C/integration-guide.xml:721(para)
+#: C/index.docbook:721(section/para)
 msgid ""
 "If your application can open specific MIME types, you need to let the "
 "desktop know in the desktop file. For example, if your application can "
@@ -1018,12 +1053,12 @@ msgstr ""
 "aceptar ficheiros <acronym>PNG</acronym>, engada a seguinte liña no seu "
 "ficheiro desktop:"
 
-#: C/integration-guide.xml:729(screen)
+#: C/index.docbook:729(para/screen)
 #, no-wrap
 msgid "MimeType=image/png"
 msgstr "MimeType=image/png"
 
-#: C/integration-guide.xml:732(para)
+#: C/index.docbook:732(section/para)
 msgid ""
 "Additional Mime types can be added by separating the different types with "
 "semicolons."
@@ -1031,7 +1066,7 @@ msgstr ""
 "Pode engadir tipos MIME adicionais separando os diferentes tipos con puntos "
 "e comas."
 
-#: C/integration-guide.xml:737(para)
+#: C/index.docbook:737(section/para)
 msgid ""
 "The system already knows of a large number of MIME types. However, if you "
 "are creating one of your own, you need to register your MIME type into the "
@@ -1045,50 +1080,52 @@ msgstr ""
 "<acronym>XML</acronym> co formato mostrado na <xref linkend=\"ex-mime-xml\"/"
 ">."
 
-#: C/integration-guide.xml:747(title)
+#: C/index.docbook:747(example/title)
 msgid "Sample file for registering a new MIME type"
 msgstr "Ficheiro de exemplo para rexistrar un tipo MIME novo"
 
-#: C/integration-guide.xml:751(replaceable)
-msgid "example"
-msgstr "exemplo"
-
-#: C/integration-guide.xml:754(replaceable)
-msgid "search-string"
-msgstr "cadena-de-busca"
-
-#: C/integration-guide.xml:756(replaceable)
-msgid "newextension"
-msgstr "extensión-nova"
-
-#: C/integration-guide.xml:748(screen)
+#: C/index.docbook:748(example/screen)
 #, no-wrap
+#| msgid ""
+#| "\n"
+#| "&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n"
+#| "&lt;mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\"&gt;\n";
+#| "   &lt;mime-type type=\"application/x-<placeholder-1/>\"&gt;\n"
+#| "     &lt;comment&gt;Example file type &lt;/comment&gt;\n"
+#| "     &lt;magic priority=\"50\"&gt;\n"
+#| "       &lt;match value=\"<placeholder-2/>\" type=\"string\" offset=\"10:140\"/&gt;\n"
+#| "     &lt;/magic&gt;\n"
+#| "     &lt;glob pattern=\"*.<placeholder-3/>\"/&gt;\n"
+#| "   &lt;/mime-type&gt;\n"
+#| "&lt;/mime-info&gt;\n"
 msgid ""
 "\n"
 "&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n"
 "&lt;mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\"&gt;\n";
-"   &lt;mime-type type=\"application/x-<placeholder-1/>\"&gt;\n"
+"   &lt;mime-type type=\"application/x-<replaceable>example</replaceable>\"&gt;\n"
 "     &lt;comment&gt;Example file type &lt;/comment&gt;\n"
 "     &lt;magic priority=\"50\"&gt;\n"
-"       &lt;match value=\"<placeholder-2/>\" type=\"string\" offset=\"10:140\"/&gt;\n"
+"       &lt;match value=\"<replaceable>search-string</replaceable>\" type=\"string\" 
offset=\"10:140\"/&gt;\n"
 "     &lt;/magic&gt;\n"
-"     &lt;glob pattern=\"*.<placeholder-3/>\"/&gt;\n"
+"     &lt;glob pattern=\"*.<replaceable>newextension</replaceable>\"/&gt;\n"
 "   &lt;/mime-type&gt;\n"
 "&lt;/mime-info&gt;\n"
 msgstr ""
 "\n"
 "&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n"
-"&lt;mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\"&gt;\n";
-"   &lt;mime-type type=\"application/x-<placeholder-1/>\"&gt;\n"
-"     &lt;comment&gt;Tipo de ficheiro de exemplo &lt;/comment&gt;\n"
+"&lt;mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-";
+"info\"&gt;\n"
+"   &lt;mime-type type=\"application/x-<replaceable>example</replaceable>\"&gt;\n"
+"     &lt;comment&gt;Example file type &lt;/comment&gt;\n"
 "     &lt;magic priority=\"50\"&gt;\n"
-"       &lt;match value=\"<placeholder-2/>\" type=\"string\" offset=\"10:140\"/&gt;\n"
+"       &lt;match value=\"<replaceable>search-string</replaceable>\" "
+"type=\"string\" offset=\"10:140\"/&gt;\n"
 "     &lt;/magic&gt;\n"
-"     &lt;glob pattern=\"*.<placeholder-3/>\"/&gt;\n"
+"     &lt;glob pattern=\"*.<replaceable>newextension</replaceable>\"/&gt;\n"
 "   &lt;/mime-type&gt;\n"
 "&lt;/mime-info&gt;\n"
 
-#: C/integration-guide.xml:762(para)
+#: C/index.docbook:762(section/para)
 msgid ""
 "In this example, replace the example MIME type with the name of your MIME "
 "type. The <firstterm>magic</firstterm> section searches files for the search "
@@ -1100,7 +1137,7 @@ msgstr ""
 "de cadea, A liña <firstterm>glob</firstterm> usa o sufixo dos nomes de "
 "ficheiro para identificalos."
 
-#: C/integration-guide.xml:771(para)
+#: C/index.docbook:771(tip/para)
 msgid ""
 "Because the <command>magic</command> command forces the computer to open the "
 "files to search for the string, the <command>glob</command> command is "
@@ -1109,7 +1146,7 @@ msgstr ""
 "Xa que a orde <command>magic</command> forza ao equipo a abrir os ficheiros "
 "para buscar a cadea, prefírese a orde <command>glob</command>."
 
-#: C/integration-guide.xml:778(para)
+#: C/index.docbook:778(section/para)
 msgid ""
 "Once your new MIME type is adequately described in the file, run the "
 "following in a shell:"
@@ -1117,12 +1154,12 @@ msgstr ""
 "Unha vez que o seu novo tipo MIME está correctamente descrito no ficheiro, "
 "execute o seguinte nunha consola:"
 
-#: C/integration-guide.xml:784(screen)
+#: C/index.docbook:784(para/screen)
 #, no-wrap
 msgid "update-mime-database /usr/share/mime"
 msgstr "update-mime-database /usr/share/mime"
 
-#: C/integration-guide.xml:788(para)
+#: C/index.docbook:788(tip/para)
 msgid ""
 "For more information on choosing a good MIME extension and to register your "
 "MIME type, go to the <ulink url=\"http://www.iana.org/cgi-bin/mediatypes.pl";
@@ -1132,7 +1169,7 @@ msgstr ""
 "o seu tipo MIME, vaia á páxina web da <ulink url=\"http://www.iana.org/cgi-";
 "bin/mediatypes.pl\">IANA</ulink>."
 
-#: C/integration-guide.xml:799(para)
+#: C/index.docbook:799(section/para)
 msgid ""
 "<ulink url=\"http://standards.freedesktop.org/shared-mime-info-spec/latest/";
 "\">Shared MIME Info Specification</ulink> — Describes the MIME registration "
@@ -1142,11 +1179,11 @@ msgstr ""
 "\">Especificación de información de tipos MIME</ulink>: Describe o sistema "
 "de rexistro de tipos MIME en detalle."
 
-#: C/integration-guide.xml:812(title)
+#: C/index.docbook:812(chapter/title)
 msgid "Deeper Integration with the Desktop"
 msgstr "Integración máis profunda co Escritorio"
 
-#: C/integration-guide.xml:814(para)
+#: C/index.docbook:814(chapter/para)
 msgid ""
 "This chapter contains a list of things which you can do to make your "
 "application have better integration with GNOME than the absolute minimum. "
@@ -1164,11 +1201,11 @@ msgstr ""
 "utilidade de xestión de miniaturas para permitir ao xestor de ficheiros de "
 "GONME crear imaxes en miniatura específicas para o seu programa."
 
-#: C/integration-guide.xml:826(title)
+#: C/index.docbook:826(section/title)
 msgid "Startup notification"
 msgstr "Notificación de inicio"
 
-#: C/integration-guide.xml:828(para)
+#: C/index.docbook:828(section/para)
 msgid ""
 "Although the fields shown in <xref linkend=\"desktop-files\"/> provide "
 "enough information for the desktop to recognize your application, there are "
@@ -1180,7 +1217,7 @@ msgstr ""
 "existen outros campos que poden ser útiles para o seu caso particular. Un "
 "destes campos é <firstterm>startup notification</firstterm>."
 
-#: C/integration-guide.xml:836(para)
+#: C/index.docbook:836(section/para)
 msgid ""
 "When startup notification is set, the panel and cursor notifies the user "
 "that the application has started. When the application appears onscreen, the "
@@ -1190,7 +1227,7 @@ msgstr ""
 "ao usuario que o aplicativo iniciouse. Cando o aplicativo aparece na "
 "pantalla, o panel e o cursor volven ao seu estado normal."
 
-#: C/integration-guide.xml:842(para)
+#: C/index.docbook:842(section/para)
 msgid ""
 "To let the launcher know your application supports startup notification, add "
 "the following line to your desktop file:"
@@ -1198,11 +1235,12 @@ msgstr ""
 "Para permitir que o iniciador saiba que o seu aplicativo admite a "
 "notificación de inicio, engada a seguinte liña ao seu ficheiro de escritorio:"
 
-#: C/integration-guide.xml:848(command)
-msgid "StartupNotify=true"
-msgstr "StartupNotify=true"
+#: C/index.docbook:847(section/para)
+#| msgid "StartupNotify=true"
+msgid "<command> StartupNotify=true </command>"
+msgstr "<command> StartupNotify=true </command>"
 
-#: C/integration-guide.xml:853(para)
+#: C/index.docbook:853(section/para)
 msgid ""
 "This command in the desktop file enables the desktop to use whatever startup "
 "notification is built in to either your application or your toolkit. Most "
@@ -1220,7 +1258,7 @@ msgstr ""
 "\">especificación de notificacións de inicio</ulink> contén detalles que "
 "debe implementar vostede mesmo."
 
-#: C/integration-guide.xml:865(para)
+#: C/index.docbook:865(tip/para)
 msgid ""
 "Regardless of toolkit, there is one type of application where you would have "
 "to manually handle feedback. Applications with remoting capabilities (where "
@@ -1242,7 +1280,7 @@ msgstr ""
 "<function>gdk_notify_startup_complete()</function> ten algo máis de "
 "información."
 
-#: C/integration-guide.xml:882(para)
+#: C/index.docbook:882(section/para)
 msgid ""
 "<ulink url=\"http://standards.freedesktop.org/startup-notification-spec/";
 "startup-notification-latest.txt\">Startup Notification Protocol</ulink> — "
@@ -1254,11 +1292,11 @@ msgstr ""
 "ulink>: Describe os detalles de baixo nivel de como se comporta a "
 "notificación de inicio no sistema X Window."
 
-#: C/integration-guide.xml:893(title)
+#: C/index.docbook:893(section/title)
 msgid "Installing a Thumbnailer Program"
 msgstr "Instalar un programa xerador de miniaturas"
 
-#: C/integration-guide.xml:895(para)
+#: C/index.docbook:895(section/para)
 msgid ""
 "The GNOME file manager, Nautilus, can display little thumbnails tailored for "
 "each file instead of generic icons in its file lists. For example, a word "
@@ -1276,8 +1314,7 @@ msgstr ""
 "visíbeis nos seus ficheiros, o que axuda a saber o que están buscando. Pode "
 "facer que o seu aplicativo cree esas miniaturas cuns simples pasos."
 
-#. FIXME: screenshot of Nautilus showing thumbnails
-#: C/integration-guide.xml:909(para)
+#: C/index.docbook:909(section/para)
 msgid ""
 "A <firstterm>thumbnailer</firstterm> is a program with no user interface "
 "that takes a file and a pixel size as inputs, and it writes a thumbnail for "
@@ -1293,7 +1330,7 @@ msgstr ""
 "debe xerar a miniatura. O mapeado entre tipos MIME e os programas xeradores "
 "de miniaturas almacénanse como series de chaves de GConf."
 
-#: C/integration-guide.xml:919(para)
+#: C/index.docbook:919(section/para)
 msgid ""
 "For each MIME type which you want to handle, you have to create a pair of "
 "GConf keys:"
@@ -1301,16 +1338,16 @@ msgstr ""
 "Para cada tipo MIME que queira manexar, terá que crear un par de chaves de "
 "GConf:"
 
-#: C/integration-guide.xml:926(replaceable)
-#: C/integration-guide.xml:938(replaceable)
-msgid "application x-foo"
-msgstr "application x-foo"
-
-#: C/integration-guide.xml:926(literal)
-msgid "/desktop/gnome/thumbnailers/<placeholder-1/>/enable"
-msgstr "/desktop/gnome/thumbnailers/<placeholder-1/>/enable"
+#: C/index.docbook:926(varlistentry/term)
+#| msgid "/desktop/gnome/thumbnailers/<placeholder-1/>/enable"
+msgid ""
+"<literal>/desktop/gnome/thumbnailers/<replaceable>application x-foo</"
+"replaceable>/enable</literal>"
+msgstr ""
+"<literal>/desktop/gnome/thumbnailers/<replaceable>application x-foo</replace"
+"able>/enable</literal>"
 
-#: C/integration-guide.xml:928(para)
+#: C/index.docbook:928(listitem/para)
 msgid ""
 "Type: boolean. Determines whether this thumbnailer will be run. You can "
 "enable or disable each individual thumbnailer. When you install a new "
@@ -1322,11 +1359,16 @@ msgstr ""
 "instale un xerador de miniaturas novo deberá cambiar o valor desta chave a "
 "<symbol>true</symbol>."
 
-#: C/integration-guide.xml:938(literal)
-msgid "/desktop/gnome/thumbnailers/<placeholder-1/>/command"
-msgstr "/desktop/gnome/thumbnailers/<placeholder-1/>/command"
+#: C/index.docbook:938(varlistentry/term)
+#| msgid "/desktop/gnome/thumbnailers/<placeholder-1/>/command"
+msgid ""
+"<literal>/desktop/gnome/thumbnailers/<replaceable>application x-foo</"
+"replaceable>/command</literal>"
+msgstr ""
+"<literal>/desktop/gnome/thumbnailers/<replaceable>application x-foo</replace"
+"able>/command</literal>"
 
-#: C/integration-guide.xml:940(para)
+#: C/index.docbook:940(listitem/para)
 msgid ""
 "Type: string. The command which GNOME will use when it needs to generate a "
 "thumbnail for a file of type <replaceable>application x-foo</replaceable>. "
@@ -1339,7 +1381,7 @@ msgstr ""
 "thumbnailer %i %o %s</literal>». Consulte máis abaixo para obter unha "
 "explicación dos signos con porcentaxes."
 
-#: C/integration-guide.xml:953(para)
+#: C/index.docbook:953(section/para)
 msgid ""
 "That is, each MIME type requires two GConf keys (<literal>enable</literal> "
 "and <literal>command</literal>) under the same path. The path name can be "
@@ -1357,7 +1399,7 @@ msgstr ""
 "desktop/gnome/thumbnailers/image x-mei-formato/enable</literal> e <literal>/"
 "desktop/gnome/thumbnailers/image x-meu-formato/comando</literal>."
 
-#: C/integration-guide.xml:965(para)
+#: C/index.docbook:965(section/para)
 msgid ""
 "Within the <literal>command</literal> key, GNOME will look for percent "
 "sequences and substitute them with actual values:"
@@ -1365,29 +1407,37 @@ msgstr ""
 "Dentro da chave <literal>command</literal> GNOME buscará secuencias de "
 "porcentaes e os substituirá con valores actuais:"
 
-#: C/integration-guide.xml:974(literal) C/integration-guide.xml:985(literal)
-msgid "%i"
-msgstr "%i"
+#: C/index.docbook:974(row/entry)
+msgid "<literal>%i</literal>"
+msgstr "<literal>%i</literal>"
 
-#: C/integration-guide.xml:975(entry)
+#: C/index.docbook:975(row/entry)
 msgid "Input file name. This is the file that your thumbnailer needs to read."
 msgstr ""
 "Nome do ficheiro de entrada. Isto é o ficheiro que o seu xerador de "
 "miniaturas debe ler."
 
-#: C/integration-guide.xml:982(entry)
+#: C/index.docbook:981(row/entry)
+msgid "<literal>%u</literal>"
+msgstr "<literal>%u</literal>"
+
+#: C/index.docbook:982(row/entry)
+#| msgid ""
+#| "Input URI. If your thumbnailer can handle URIs instead of plain file "
+#| "names, use <placeholder-1/> instead of <placeholder-2/>."
 msgid ""
 "Input URI. If your thumbnailer can handle URIs instead of plain file names, "
-"use <placeholder-1/> instead of <placeholder-2/>."
+"use <literal>%u</literal> instead of <literal>%i</literal>."
 msgstr ""
 "URI de entrada. SE o seu xerador de miniatura pode xestionar URI no lugar de "
-"ficheiros de nomes planos, use <placeholder-1/> no lugar de <placeholder-2/>."
+"ficheiros de nomes planos, use <literal>%u</literal> no lugar de <literal>%"
+"i</literal>."
 
-#: C/integration-guide.xml:989(literal)
-msgid "%o"
-msgstr "%o"
+#: C/index.docbook:989(row/entry)
+msgid "<literal>%o</literal>"
+msgstr "<literal>%o</literal>"
 
-#: C/integration-guide.xml:990(entry)
+#: C/index.docbook:990(row/entry)
 msgid ""
 "Output file name. This is where your thumbnailer should write the thumbnail "
 "image in PNG format."
@@ -1395,25 +1445,25 @@ msgstr ""
 "Nome do ficheiro de saída. Isto é onde o seu xerador de miniaturas debe "
 "escribir a imaxe en miniatura en formato PNG."
 
-#: C/integration-guide.xml:996(literal)
-msgid "%s"
-msgstr "%s"
+#: C/index.docbook:996(row/entry)
+msgid "<literal>%s</literal>"
+msgstr "<literal>%s</literal>"
 
-#: C/integration-guide.xml:1000(literal)
-msgid "128"
-msgstr "128"
-
-#: C/integration-guide.xml:997(entry)
+#: C/index.docbook:997(row/entry)
+#| msgid ""
+#| "Size of the thumbnail as a single integer. For example, if this gets "
+#| "substituted with <placeholder-1/>, it means that your thumbnailer should "
+#| "output an image no bigger than 128×128 pixels."
 msgid ""
 "Size of the thumbnail as a single integer. For example, if this gets "
-"substituted with <placeholder-1/>, it means that your thumbnailer should "
-"output an image no bigger than 128×128 pixels."
+"substituted with <literal>128</literal>, it means that your thumbnailer "
+"should output an image no bigger than 128×128 pixels."
 msgstr ""
 "Tamaño da miniatura cun só enteiro. Por exemplo, se isto se substitúe con "
-"<placeholder-1/> significa que o seu xerador de miniaturas debería xerar "
-"unha imaxe de saída máis pequena de 128x128 píxeles."
+"<literal>128</literal> significa que o seu xerador de miniaturas debería "
+"xerar unha imaxe de saída máis pequena de 128x128 píxeles."
 
-#: C/integration-guide.xml:1009(para)
+#: C/index.docbook:1009(section/para)
 msgid ""
 "Either of <literal>%i</literal> and <literal>%u</literal> must appear in "
 "your command, and <literal>%o</literal> is also mandatory. The <literal>%s</"
@@ -1425,11 +1475,11 @@ msgstr ""
 "<literal>%s</literal> é opcional, pero recoméndase que o seu xerador de "
 "miniaturas a teña en conta."
 
-#: C/integration-guide.xml:1018(title)
+#: C/index.docbook:1018(section/title)
 msgid "Additional information"
 msgstr "Información adicional"
 
-#: C/integration-guide.xml:1020(para)
+#: C/index.docbook:1020(section/para)
 msgid ""
 "As an additional configuration parameter, you can turn on the boolean key "
 "<literal>/desktop/gnome/thumbnailers/disable_all</literal> to disable the "
@@ -1439,11 +1489,11 @@ msgstr ""
 "gnome/thumbnailers/disable_all</literal> para deactivar a xeración tódalas "
 "miniaturas."
 
-#: C/integration-guide.xml:1036(title)
+#: C/index.docbook:1036(appendix/title)
 msgid "Integration Checklist"
 msgstr "Lista de comprobación da integración"
 
-#: C/integration-guide.xml:1038(para)
+#: C/index.docbook:1038(appendix/para)
 msgid ""
 "This appendix provides a checklist of the various tasks presented through "
 "this guide. You can use the checklist to ensure that your software is "
@@ -1455,11 +1505,11 @@ msgstr ""
 "verificar que o seu software está integrado en GNOME cando menos dunha forma "
 "básica, así como un recurso para planificar futuros traballos de integración."
 
-#: C/integration-guide.xml:1048(para)
+#: C/index.docbook:1048(listitem/para)
 msgid "Does your application appear in the menus of the GNOME Panel?"
 msgstr "Aparece o seu aplicativo nos menús do panel de GNOME?"
 
-#: C/integration-guide.xml:1053(para)
+#: C/index.docbook:1053(listitem/para)
 msgid ""
 "Does your application have an icon for the panel menus or the desktop? If "
 "so, does it have multiple pre-rendered sizes and a scalable <acronym>SVG</"
@@ -1469,7 +1519,7 @@ msgstr ""
 "Se é así, ten tamaños múltiples e prerenderizados e unha versión "
 "<acronym>SVG</acronym>?"
 
-#: C/integration-guide.xml:1060(para)
+#: C/index.docbook:1060(listitem/para)
 msgid ""
 "If your application can load or save files, does it register the MIME types "
 "that it can handle?"
@@ -1477,11 +1527,11 @@ msgstr ""
 "Se o seu aplicativo pode cargar ou gardar ficheiros, rexistra os tipos MIME "
 "que poida manexar?"
 
-#: C/integration-guide.xml:1066(para)
+#: C/index.docbook:1066(listitem/para)
 msgid "Does your application provide MIME icons for the file manager?"
 msgstr "Fornece o seu aplicativo iconas MIME para o xestor de ficheiros?"
 
-#: C/integration-guide.xml:1072(para)
+#: C/index.docbook:1072(listitem/para)
 msgid ""
 "Does your application support startup notification, so that GNOME can "
 "display feedback to the user while your application is being launched?"
@@ -1490,7 +1540,7 @@ msgstr ""
 "mostrarlle comentarios ao usuario mentras que o seu aplicativo se está "
 "iniciando?"
 
-#: C/integration-guide.xml:1079(para)
+#: C/index.docbook:1079(listitem/para)
 msgid ""
 "If your application creates \"printable\" documents, does it install a "
 "thumbnailer for use by the file manager?"
@@ -1498,11 +1548,11 @@ msgstr ""
 "Se o seu aplicativo crea documentos «imprimíbeis», instala un creador de "
 "miniaturas para que o use o xestor de ficheiros?"
 
-#: C/integration-guide.xml:1088(title)
+#: C/index.docbook:1088(appendix/title)
 msgid "Acknowledgments"
 msgstr "Agradecementos"
 
-#: C/integration-guide.xml:1090(para)
+#: C/index.docbook:1090(appendix/para)
 msgid ""
 "Many thanks to Jakub Steiner for providing a beautiful CSS stylesheet for "
 "the HTML version of this guide!"
@@ -1510,10 +1560,119 @@ msgstr ""
 "Moitas grazas a JAkub Steiner por fornecer unha folla de setilo bonita para "
 "a versión HTML desta guía."
 
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
-#: C/integration-guide.xml:0(None)
-msgid "translator-credits"
-msgstr "Fran Dieguez <frandieguez gnome org>, 2011."
+#~ msgid "Rosanna"
+#~ msgstr "Rosanna"
+
+#~ msgid "Yuen"
+#~ msgstr "Yuen"
+
+#~ msgid "zana gnome org"
+#~ msgstr "zana gnome org"
+
+#~ msgid "Federico"
+#~ msgstr "Federico"
+
+#~ msgid "Mena-Quintero"
+#~ msgstr "Mena-Quintero"
+
+#~ msgid "federico gnu org"
+#~ msgstr "federico gnu org"
+
+#~ msgid "Mike"
+#~ msgstr "Mike"
+
+#~ msgid "Hearn"
+#~ msgstr "Hearn"
+
+#~ msgid "mike navi cx"
+#~ msgstr "mike navi cx"
+
+#~ msgid "2005, 2006"
+#~ msgstr "2005, 2006"
+
+#~ msgid "0.6"
+#~ msgstr "0.6"
+
+#~ msgid "2006/September/19"
+#~ msgstr "2006/Setembro/19"
+
+#~ msgid "0.5"
+#~ msgstr "0.5"
+
+#~ msgid "2006/September/18"
+#~ msgstr "2006/September/18"
+
+#~ msgid "0.0"
+#~ msgstr "0.0"
+
+#~ msgid "June 2005"
+#~ msgstr "Xuño 2005"
+
+#~ msgid "Link"
+#~ msgstr "Ligazón"
+
+#~ msgid "Directory"
+#~ msgstr "Cartafol"
+
+#~ msgid "Encoding=UTF-8"
+#~ msgstr "Encoding=UTF-8"
+
+#~ msgid "Terminal=false"
+#~ msgstr "Terminal=false"
+
+#~ msgid "%f"
+#~ msgstr "%f"
+
+#~ msgid "%F"
+#~ msgstr "%F"
+
+#~ msgid "%u"
+#~ msgstr "%u"
+
+#~ msgid "%U"
+#~ msgstr "%U"
+
+#~ msgid "%d"
+#~ msgstr "%d"
+
+#~ msgid "%D"
+#~ msgstr "%D"
+
+#~ msgid "%n"
+#~ msgstr "%n"
+
+#~ msgid "%N"
+#~ msgstr "%N"
+
+#~ msgid "%k"
+#~ msgstr "%k"
+
+#~ msgid "%v"
+#~ msgstr "%v"
+
+#~ msgid "example"
+#~ msgstr "exemplo"
+
+#~ msgid "search-string"
+#~ msgstr "cadena-de-busca"
+
+#~ msgid "newextension"
+#~ msgstr "extensión-nova"
+
+#~ msgid "application x-foo"
+#~ msgstr "application x-foo"
+
+#~ msgid "%i"
+#~ msgstr "%i"
+
+#~ msgid "%o"
+#~ msgstr "%o"
+
+#~ msgid "%s"
+#~ msgstr "%s"
+
+#~ msgid "128"
+#~ msgstr "128"
 
 #~ msgid "put the application in the <guimenu>Main Menu</guimenu>."
 #~ msgstr "poña o aplicativo no <guimenu>Menú principal</guimenu>."
diff --git a/optimization-guide/gl/gl.po b/optimization-guide/gl/gl.po
index d03a6c7..d5ff8fd 100644
--- a/optimization-guide/gl/gl.po
+++ b/optimization-guide/gl/gl.po
@@ -1,12 +1,12 @@
 # Galician translation for gnome-devel-docs.
 # Copyright (C) 2011 gnome-devel-docs's COPYRIGHT HOLDER
 # This file is distributed under the same license as the gnome-devel-docs package.
-# Fran Dieguez <frandieguez gnome org>, 2011, 2012.
+# Fran Dieguez <frandieguez gnome org>, 2011, 2012, 2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: gnome-devel-docs master\n"
-"POT-Creation-Date: 2012-09-23 19:31+0000\n"
-"PO-Revision-Date: 2012-09-23 23:45+0200\n"
+"POT-Creation-Date: 2012-10-31 14:51+0000\n"
+"PO-Revision-Date: 2013-03-05 15:17+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez gnome org>\n"
 "Language-Team: gnome-l10n-gl gnome org\n"
 "Language: gl\n"
@@ -17,451 +17,227 @@ msgstr ""
 "X-Generator: Virtaal 0.7.1\n"
 "X-Project-Style: gnome\n"
 
-#: C/optimization-intro.xml:3(title)
-msgid "The Quick Guide to Optimizing GNOME Programs"
-msgstr "Guía rápida para optimizar programas de GNOME"
+#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
+#| msgid "translator-credits"
+msgctxt "_"
+msgid "translator-credits"
+msgstr "Fran Dieguez <frandieguez gnome org>, 2011-2013."
+
+#: C/index.docbook:5(book/title)
+msgid "Optimizing GNOME Software"
+msgstr "Optimizar software para GNOME"
+
+#: C/index.docbook:8(publisher/publishername)
+#: C/index.docbook:56(revdescription/para)
+msgid "GNOME Documentation Project"
+msgstr "GNOME Documentation Project"
+
+#: C/index.docbook:10(bookinfo/copyright)
+msgid "<year>2004-2005</year> <holder>Callum McKenzie</holder>"
+msgstr "<year>2004-2005</year> <holder>Callum McKenzie</holder>"
+
+#: C/index.docbook:14(bookinfo/copyright)
+msgid "<year>2004-2005</year> <holder>Robert Love</holder>"
+msgstr "<year>2004-2005</year> <holder>Robert Love</holder>"
+
+#: C/index.docbook:19(bookinfo/author)
+msgid "<firstname>Callum</firstname> <surname>McKenzie</surname>"
+msgstr "<firstname>Callum</firstname> <surname>McKenzie</surname>"
 
-#: C/optimization-intro.xml:5(para)
+#: C/index.docbook:23(bookinfo/author)
+msgid "<firstname>Robert</firstname> <surname>Love</surname>"
+msgstr "<firstname>Robert</firstname> <surname>Love</surname>"
+
+#: C/index.docbook:29(legalnotice/para)
 msgid ""
-"This is a brief introduction to optimization, both the hows and the whys. "
-"Details of individual tools and techniques are left for later articles, but "
-"a collection of hints and tricks is provided."
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the <citetitle>GNU Free Documentation License</citetitle>, "
+"Version 1.1 or any later version published by the Free Software Foundation "
+"with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. "
+"You may obtain a copy of the <citetitle>GNU Free Documentation License</"
+"citetitle> from the Free Software Foundation by visiting <ulink type=\"http"
+"\" url=\"http://www.fsf.org\";>their Web site</ulink> or by writing to: Free "
+"Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA "
+"02111-1307, USA."
 msgstr ""
-"Esta é unha breve introdución á optimización, dos cómos tanto dos porqués. "
-"Déixanse para posteriores artigos os detalles de ferramentas e técnicas "
-"individuais pero fornécese unha colección de suxestións e trucos."
+"Concédese o permiso para copiar, distribuír e/ou modificar este documento "
+"baixo os termos da <citetitle>Licenza de documentación libre de "
+"GNU</citetitle>, versión 1.1 ou calquera versión publicada pola Free "
+"Software Foundation con seccións invariantes, sen textos de portada e sen "
+"textos de portada traseira. Pode obter unha copia da <citetitle>Licenza de "
+"documentación libre de GNU</citetitle> da Free Software Foundation visitando "
+"<ulink type=\"http\" url=\"http://www.fsf.org\";>a súa páxina web</ulink> ou "
+"enviando unha carta a: Free Software Foundation, Inc., 59 Temple Place - "
+"Suite 330, Boston, MA 02111-1307, USA."
 
-#: C/optimization-intro.xml:10(title)
-msgid "What are we Optimizing?"
-msgstr "Que se está optimizando?"
-
-#: C/optimization-intro.xml:11(para)
+#: C/index.docbook:41(legalnotice/para)
 msgid ""
-"When we optimize for GNOME the first thing to remember is this: we are not "
-"trying to make the program better, we are trying to make the person using "
-"the computer happier."
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any GNOME "
+"documentation, and those trademarks are made aware to the members of the "
+"GNOME Documentation Project, the names have been printed in caps or initial "
+"caps."
 msgstr ""
-"Ao optimizar GNOME o primeiro que hai que lembrar é isto: non se está "
-"tentando mellorar o programa, estase tentando mellorando facer que as "
-"persoas usen o equipo máis felices."
+"Moitos dos nomes usados por empresas para distinguir os seus produtos e "
+"servizos son marcas rexistradas. Cando aparezan ditos nomes na documentación "
+"de GNOME, e esas marcas rexistradas se lle mostren aos membros do Proxecto "
+"de Documentación de GNOME, os nomes son escritos en maiúsculas ou maiúscula "
+"inicial."
+
+#: C/index.docbook:55(revdescription/para)
+msgid "William Johnston"
+msgstr "William Johnston"
+
+#: C/index.docbook:57(revdescription/para)
+msgid "Intial conversion to docbook format."
+msgstr "Conversión inicial ao formato docbook."
 
-#: C/optimization-intro.xml:14(para)
+#: C/index.docbook:51(revhistory/revision)
 msgid ""
-"Better programs make people happier, but there are some improvements that "
-"will make them a lot happier than others: Responsiveness, start-up time, "
-"easy to access commands and not having the computer go into swap the moment "
-"more than two programs are open."
+"<revnumber>0.1</revnumber> <date>November 2007</date> <_:revdescription-1/>"
 msgstr ""
-"Programas mellores fan á xente máis feliz pero existen algunhas mellores que "
-"faranos máis felices que outras: tempo de resposta, tempo de inicio, "
-"facilidade para acceder a ordes e que o equipo non teña que usar a memoria "
-"de intercambio cando máis de dous programas estean abertos."
+"<revnumber>0.1</revnumber> <date>Novembro 2007</date> <_:revdescription-1/>"
 
-#: C/optimization-intro.xml:17(para)
+#: C/index.docbook:63(abstract/para)
 msgid ""
-"Traditional optimization tackles concepts like CPU use, code size, the "
-"number of mouse clicks and the memory use of the program. This second list "
-"has been chosen to correlate with the first list, however there is an "
-"important difference: The person using GNOME doesn't care about the second "
-"list, but they care a lot about the first list. When optimizing GNOME "
-"programs we will reduce CPU use, memory use and all those things, but these "
-"are the means to the end, not the final goal. We are optimizing for people."
+"Software can be optimized in many ways: for speed, program size, or memory "
+"use. This section contains guides and tutorials for optimizing your software."
 msgstr ""
-"A optimización tradicional contempla conceptos como o uso de CPI, o tamaño "
-"do código, o número de pulsacións do reato e o uso de memoria de programa. "
-"Elixiuse esta segunda lista para correlar como a primeira, porén existe unha "
-"diferenza importante. Á persoa que usa GNOME non lle importa a segunda "
-"lista, pero sí a primeira. Ao optimizar os programas de GNOME reducirase o "
-"uso de CPU, o uso de memoria e todo aquelo, pero son conceptos para o fin, "
-"non o obxectivo final. Optimízase para as persoas."
+"O software pode optimizarse de moitas formas: para maior velocidade, tamaño "
+"do programa ou uso de memoria. Esta sección contén guías e titoriais para "
+"optimizar o seu software."
 
-#: C/optimization-intro.xml:23(title)
-msgid "Doing the Optimization"
-msgstr "Realizar a optimización"
+#: C/optimization-harmful.xml:3(chapter/title)
+msgid "Disk Seeks Considered Harmful"
+msgstr "Buscas de disco consideradas dañinas"
 
-#: C/optimization-intro.xml:24(para)
+#: C/optimization-harmful.xml:5(chapter/para)
 msgid ""
-"The previous section omitted one important qualifier: To optimize something "
-"it has to be measurable. You can't measure happiness. However, you can "
-"measure start-up time so you can tell if you have improved it. Happiness "
-"will then, hopefully, follow."
+"Disk seeks are one of the most expensive operations you can possibly "
+"perform. You might not know this from looking at how many of them we "
+"perform, but trust me, they are. Consequently, please refrain from the "
+"following suboptimal behavior:"
 msgstr ""
-"Na sección anterior omitiuse un calificador importante: optimizar algo debe "
-"ser medíbel. Non se pode medir a felicidade. Porén pódese medir o tempo de "
-"inicio dun programa para saber se se mellorou. A felicidade do usuario "
-"aumentará pois."
+"As buscas de disco son unha das operacións máis caras que pode realizar. "
+"Pode que non saiba isto simplemente mirando cantas se realizan, pero crea "
+"que realmente o son. Por iso, evite os seguintes comportamentos:"
+
+#: C/optimization-harmful.xml:10(listitem/para)
+msgid "Placing lots of small files all over the disk."
+msgstr "Localizar montóns de pequenos ficheiros por todo o disco."
+
+#: C/optimization-harmful.xml:15(listitem/para)
+msgid "Opening, stating, and reading lots of files all over the disk"
+msgstr "Abrir, iniciar e ler montóns de ficheiros por todo o disco"
 
-#: C/optimization-intro.xml:27(para)
+#: C/optimization-harmful.xml:20(listitem/para)
 msgid ""
-"Optimization is the process of measurement, refinement and re-measurement. "
-"So the first thing you must do is find a way to measure what you are "
-"optimizing. Ideally this measurement is a single number, for example: the "
-"time taken to perform a task. This is your benchmark, it is the only way to "
-"tell if you are winning or losing. There is a big difference between a "
-"program that <emphasis>should</emphasis> be fast and a program that "
-"<emphasis>is</emphasis> fast."
+"Doing the above on files that are laid out at different times, so as to "
+"ensure that they are fragmented and cause even more seeking."
 msgstr ""
-"A optimización é un proceso de medida, refinamento e remedida. O primeiro "
-"que debe facer é atopar unha forma de medir o que está optimizando. "
-"Idealmente a medida é un simple número, por exemplo: o tempo que se tarda en "
-"realiar unha tarefa. ESta é a súa proba, é a única forma de saber se está "
-"ganando ou perdendo. Existe unha gran diferenza entre un programa que "
-"<emphasis>deería</emphasis> ser rápido e un programa que <emphasis>é</"
-"emphasis> rápido."
+"Realizar o anterior sobre ficheiros que se abren en diferentes momentos, "
+"para asegurarse de que están fragmentados e causan aínda máis buscas no "
+"disco."
 
-#: C/optimization-intro.xml:30(para)
+#: C/optimization-harmful.xml:25(listitem/para)
 msgid ""
-"Once you have a basic benchmark you need to find out why your code is not "
-"doing as well as it should. It is tempting to do this by inspection: just "
-"looking at the code and trying to spot something that looks like it needs "
-"improvement. You will invariably be wrong. Using a profiler to get a "
-"detailed break-down of what your program really does is the only way to be "
-"sure."
+"Doing the above on files that are in different directories, so as to ensure "
+"that they are in different cylinder groups and and cause even more seeking."
 msgstr ""
-"Unha vez que ten unha proba de rendemento básica debe atopar por que o seu "
-"código non o está facendo tan ben como debería. É tentado facelo "
-"inspeccionando: simplemente mirar o código e tratar de atopar algo que "
-"parece que precisa unha mellora. Estará perdendo o tempo, usar un perfilador "
-"para obter unha lista detallada do que o seu programa está facendo é, "
-"realmente, a única forma de estar seguro."
+"Realizar o seguinte sobre ficheiros que están en diferentes cartafoles, para "
+"asegurarse de que están en grupos de cilindros diferentes e poden causar "
+"incluso máis buscas."
 
-#: C/optimization-intro.xml:33(para)
-msgid ""
-"Usually the problem is isolated to small sections of code. Pick the worst "
-"place and concentrate on that first. Once that is done, rerun the profiler "
-"and repeat. As you proceed the gains made at each step will get less and "
-"less, at some point you will have to decide that the results are good "
-"enough. If your efforts are only extracting 10% improvements then you are "
-"well past the point where you should have stopped."
+#: C/optimization-harmful.xml:30(listitem/para)
+msgid "Repeatedly doing the above when it only needs to be done once."
 msgstr ""
-"Xeralmente o problema está illado en pequenas partes do código. Elixa a peor "
-"parte e concéntrese nesa primeiro. Unha vez que o teña feito, volva ao "
-"perfilador e repita o proceso. Segundo proceda, as melloras obtidas en cada "
-"paso faranse cada vez máis pequenas, nalgún punto terá que decidir que os "
-"resultados son suficientes. Se os seus esforzos só están obtendo un 10% de "
-"melloras entón fai tempo que pasou o punto en que debería ter parado."
+"Realizar de forma repetida o anterior cando só se precisa realizar unha vez."
 
-#: C/optimization-intro.xml:36(para)
-msgid ""
-"Don't forget the big picture. For example, rather than just trying to speed "
-"up a piece of code, ask yourself if it needs to be run at all. Could it be "
-"combined with another piece of code? Can the results of previous "
-"calculations be saved and reused? It won't even need to be optimized if it "
-"is in a place where the user is never going to notice it. Worse still, the "
-"code may already be optimized and is doing the heavy calculations now to "
-"avoid doing them later. Code does not run in isolation and neither does the "
-"optimization process."
+#: C/optimization-harmful.xml:35(chapter/para)
+msgid "Ways in which you can optimize your code to be seek-friendly:"
 msgstr ""
-"Non esqueza a visión xeral. Por exemplo, fronte a só tentar incrementar o "
-"rendemento dunha parte do código, pregúntese se realmente se precisa dita "
-"parte. Pode ser fornecida por outra parte do seu código? Poden os resultados "
-"de cálculos previos gardados e ser reusados? Podería non ser nin preciso "
-"optimizalo se é un lugar onde nunca vai ir o usuario para que poida notalo. "
-"Ou peor aínda, que o código xa estea optimizado e está facendo un cálculo "
-"moi grande agora para evitar facelo máis tarde. O código non se executa en "
-"separación e tampouco o fai nun proceso de optimizado."
+"Formas nas que pode optimizar o seu código para que sexa amigábel á hora de "
+"facer buscas:"
 
-#: C/optimization-intro.xml:41(title)
-msgid "Hints"
-msgstr "Suxestións"
+#: C/optimization-harmful.xml:40(listitem/para)
+msgid "Consolidate data into a single file."
+msgstr "Consolidar os datos nun só ficheiro."
 
-#: C/optimization-intro.xml:43(title)
-msgid "The Fundamentals"
-msgstr "O fundamental"
+#: C/optimization-harmful.xml:45(listitem/para)
+msgid "Keep data together in the same directory."
+msgstr "Manter os datos xuntos no mesmo cartafol."
 
-#: C/optimization-intro.xml:45(para)
+#: C/optimization-harmful.xml:50(listitem/para)
+msgid "Cache data so as to not need to reread constantly."
+msgstr "Cachear os datos para non ter que volver a lelos constantemente."
+
+#: C/optimization-harmful.xml:55(listitem/para)
 msgid ""
-"Re-run your benchmark after every change you make to the code and keep a log "
-"of everything you change and how it affects the benchmark. This lets you "
-"undo mistakes and also helps you not to repeat mistakes."
+"Share data so as not to have to reread it from disk when each application "
+"loads."
 msgstr ""
-"Volva a executar a súa proba de rendemento despois de cada cambio que "
-"realice sobre o código e manteña un rexistro de todo o que cambia e de como "
-"afecta ao rendemento. Isto permítelle desfacer erros e tamén axúdalle a non "
-"repetilos."
+"Compartir os datos para non ter que volver a lelos do disco cada vez que un "
+"aplicativo se carga."
 
-#: C/optimization-intro.xml:50(para)
+#: C/optimization-harmful.xml:60(listitem/para)
 msgid ""
-"Make sure your code is correct and bug-free before optimizing it. Check that "
-"it remains correct and bug-free after optimization."
+"Consider caching all of the data in a single binary file that is properly "
+"aligned and can be mmaped."
 msgstr ""
-"Asegúrse de que o seu código é correcto e está libre de erros antes de "
-"optimizalo. Comprobe que permanece correcto e libre de erros desois de telo "
-"optimizado."
-
-#: C/optimization-intro.xml:55(para)
-msgid "Optimize at the high level before optimizing the details."
-msgstr "Optimizar ao nivel máis alto antes de optimizar os detalles."
+"Considerar cachear tódolos datos nun ficheiro binario único que está aliñado "
+"axeitadamente e pódse mapear."
 
-#: C/optimization-intro.xml:60(para)
+#: C/optimization-harmful.xml:65(chapter/para)
 msgid ""
-"Use the right algorithm. The classic text-book example is using quick-sort "
-"instead of bubble-sort. There are many others, some save memory, some save "
-"CPU. Also, see what shortcuts you can make: you can do quicker than quick-"
-"sort if you are prepared to make some compromises."
+"The trouble with disk seeks are compounded for reads, which is unfortunately "
+"what we are doing. Remember, reads are generally synchronous while writes "
+"are asynchronous. This only compounds the problem, serializing each read, "
+"and contributing to program latency."
 msgstr ""
-"Use o algoritmo correcto. O clásico exemplo de libro de texto é usar "
-"ordenación rápida no lugar de ordenación por burbulla. Existen moitos "
-"outros, algúns aforran memoria, alguns aforran CPU. Tamén debe ver que "
-"atallos de teclado pode crear: pode facelo máis rápido que unha ordenación "
-"rápida se está preparado para tomar certos compromisos."
+"O problema coas buscas nos discos complícase para as lecturas, que é "
+"desafortunadamente o que se busca. Lembre, as lecturas son xeralmente "
+"síncronas mentres que as escrituras son asíncronas. Isto só complica o "
+"problema, serializando cada lectura e contribuíndo á latencia do programa."
 
-#: C/optimization-intro.xml:65(para)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/optimization-massif.xml:52(imagedata)
+#| msgid ""
+#| "@@image: 'figures/massif-before.png'; md5=1a6b2ace548e6789ab8bfacb3727b345"
+msgctxt "_"
 msgid ""
-"Optimization is a trade-off. Caching results speeds up calculations, but "
-"increases memory use. Saving data to disk saves memory, but costs time when "
-"it is loaded back from disk."
+"external ref='figures/massif-before.png' "
+"md5='1a6b2ace548e6789ab8bfacb3727b345'"
 msgstr ""
-"A optimización é intercambio. Obter resultados mellora os cálculos pero "
-"aumenta a memoria en uso. Gardar datos ao disco aforra memoria pero custa "
-"tempo ao cargalos de novo desde o disco."
+"external ref='figures/massif-before.png' "
+"md5='1a6b2ace548e6789ab8bfacb3727b345'"
 
-#: C/optimization-intro.xml:70(para)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/optimization-massif.xml:114(imagedata)
+#| msgid ""
+#| "@@image: 'figures/massif-after.png'; md5=36d1b4ad7ab49b28b69ad3eabbaa7069"
+msgctxt "_"
 msgid ""
-"Make sure you choose a wide variety of inputs to optimize against. If you "
-"don't it is easy to end up with a piece of code carefully optimized for one "
-"file and no others."
+"external ref='figures/massif-after.png' "
+"md5='36d1b4ad7ab49b28b69ad3eabbaa7069'"
 msgstr ""
-"Asegúrese de elixir certa variedade de entradas que optimizar. SE non o fai "
-"é doado que remate cun trozo de código coidadosamente optimizado par aun "
-"campo e non para outros."
+"external ref='figures/massif-after.png' "
+"md5='36d1b4ad7ab49b28b69ad3eabbaa7069'"
 
-#: C/optimization-intro.xml:75(para)
+#: C/optimization-massif.xml:3(chapter/title)
 msgid ""
-"Avoid expensive operations: Multiple small disk reads. Using up lots of "
-"memory so disk swapping becomes necessary. Avoid anything that writes or "
-"reads from the hard disk unnecessarily. The network is slow too. Also avoid "
-"graphics operations that need a response from the X server."
+"Using <application>Massif</application> for Profiling Memory Use in GNOME "
+"Software"
 msgstr ""
-"Evite as operacións caras: múltiples lecturas de disco pequenas. Use un "
-"montón de memoria para que a área de intercambio («swap») fágase "
-"innecesario. Evite calquera cousa que escriba ou lea innecesariamente do "
-"disco. A rede tamén é lenta. Evite tamén operacións gráficas que precisan "
-"unha resposta do servidor X."
-
-#: C/optimization-intro.xml:81(title)
-msgid "Traps for the Unwary"
-msgstr "Trampas para os imprudentes"
+"Usando <application>Massif</application> para perfila o uso de memoria en "
+"software de GNOME"
 
-#: C/optimization-intro.xml:83(para)
-msgid ""
-"Beware of side effects. There can often be strange interactions between "
-"different sections of code, a speed-up in one part can slow another part "
-"down."
-msgstr ""
-"Estea atento aos efectos colaterais. Xeralmente son interaccións estranas "
-"entre diferentes seccións do código, unha extensión dunha parte pode "
-"retardar outra."
-
-#: C/optimization-intro.xml:88(para)
-msgid ""
-"When timing code, even on a quiet system, events outside the program add "
-"noise to the timing results. Average over multiple runs. If the code is very "
-"short, timer resolution is also a problem. In this case measure the time the "
-"computer takes to run the code 100 or 1000 times. If the times you are "
-"recording are longer than a few seconds, you should be OK."
-msgstr ""
-"Ao cronometrar o tempo do código, incluso nun sistema parado, os eventos "
-"fora do programa engaden ruido aos resultados de tempo. Faga unha medida "
-"sobre múltiples execucións. Se o código é moi pequeno a resolución do tempo "
-"tamén é un problema. Neste caso mida o tempo que o equipo tarda en executar "
-"o código 100 ou 1000 veces. Se os tempos que está obtendo son algo "
-"superiores a uns poucos segundos todo debería estar correcto."
-
-#: C/optimization-intro.xml:93(para)
-msgid ""
-"It is very easy to be misled by the profiler. There are stories of people "
-"optimizing the operating system idle-loop because that is where it spent all "
-"its time! Don't optimize code that does nothing the user cares about."
-msgstr ""
-"É moi doado perferse co perfilador. Existen historias de programadores "
-"optimizando o búcle de inactividade porque é onde se perdía todo o seu "
-"tempo. Non optimice código do que o usuario non se preocupe."
-
-#: C/optimization-intro.xml:98(para)
-msgid ""
-"Remember the resources on the X server. Your program's memory usage doesn't "
-"include the pixmaps that are stored in the X server's process, but they are "
-"still using up memory. Use xrestop to see what resources your program is "
-"using."
-msgstr ""
-"Lembre os resultados do servidor X. O uso de memoria do seu programa non "
-"inclúe os pixmaps almacenados nos procesos do servidor X, pero aínda seguen "
-"usando memoria. Use xrestop para ver os recursos que está usando o seu "
-"programa."
-
-#: C/optimization-intro.xml:104(title)
-msgid "Low Level Hints"
-msgstr "Consellos de baixo nivel"
-
-#: C/optimization-intro.xml:106(para)
-msgid ""
-"When optimizing memory use, be wary of the difference between peak usage and "
-"average memory usage. Some memory is almost always allocated, this is "
-"usually bad. Some is only briefly allocated, this may be quite acceptable. "
-"Tools like massif use the concept of space-time, the product of memory used "
-"and the duration it was allocated for, instead."
-msgstr ""
-"Ao optimizar o uso de memoria considere a diferenza entre o uso de pico e o "
-"uso medio de memoria. Algunha memoria sempre está reservada, isto xeralmente "
-"é malo. Algunha está temporalmente reservada, isto pode ser aceptábel. "
-"Ferramentas como massif usan o concepto de espazo-tempo, o produto da "
-"memoria usada e o tempo durante o que estivo reservada."
-
-#: C/optimization-intro.xml:111(para)
-msgid ""
-"Time simplified bits of code that do only the things you know are essential, "
-"this gives an absolute lower limit on the time your code will take. For "
-"example, when optimizing a loop time the empty loop. If that is still too "
-"long no amount of micro-optimization will help and you will have to change "
-"your design. Make sure the compiler doesn't optimize away your empty loop."
-msgstr ""
-"Controle o tempo de trozos de código simplificados que só fan cousas "
-"esenciais, isto fornece un límite absoluto inferior no tempo que usará o "
-"código. Por exemplo, ao optimizar un búcle, controle o tempo do búcle "
-"baleiro. Se aínda é moito tempo calquera intento de optimización non axudará "
-"e deberá cambiar o seu deseño. Asegúrese de que o compilador non desoptimiza "
-"o búcle baleiro."
-
-#: C/optimization-intro.xml:116(para)
-msgid ""
-"Move code out from inside loops. A slightly more complicated piece of code "
-"that is executed once is far quicker than a simple piece of code executed a "
-"thousand times. Avoid calling slow code often."
-msgstr ""
-"mova o código fora dos bucles internos. Un anaco de código máis complicado "
-"que se executa unha soa vez é moito máis rápido que un trozo de código máis "
-"sinxelo que se executa mil veces. Evite chamar habitualmente a código lento."
-
-#: C/optimization-intro.xml:121(para)
-msgid ""
-"Give the compiler as many hints as possible. Use the const keyword. Use "
-"<envar>G_INLINE_FUNC</envar> for short, frequently called, functions. Look "
-"up <envar>G_GNUC_PURE</envar>, <envar>G_LIKELY</envar> and the other glib "
-"miscellaneous macros. Use the macros instead of gcc-specific keywords to "
-"ensure portability."
-msgstr ""
-"Forneza ao compilador tantas suxestións como lle sea posíbel. Usa a palabra "
-"chave «const». Use <envar>G_INLINE_FUNC</envar> para funcións curtas "
-"frecuentemente chamadas. Busque <envar>G_GNUC_PURE</envar>, <envar>G_LIKELY</"
-"envar> e outras macros misceláneas de glib. Use as macros no lugar de "
-"palabras chave específicas de gcc para asegurar a portabilidade."
-
-#: C/optimization-intro.xml:126(para)
-msgid ""
-"Don't use assembly language. It is not portable and, while it may be fast on "
-"one processor, it is not even guaranteed to be fast on every processor that "
-"supports that architecture (e.g. Athlon vs. Pentium 4)."
-msgstr ""
-"Non use linguaxes de ensamblado. O código non é portábel e pode ser máis "
-"rápido nun procesador que noutro, ademais non está garantizado que sea "
-"rápido en cada procesador que admite esa arquitectura (p.ex. Athlon contra "
-"Pentium 4)."
-
-#: C/optimization-intro.xml:131(para)
-msgid ""
-"Don't rewrite an existing library routine unless you are sure it is "
-"unnecessarily slow. Many CPU-intensive library routines have already been "
-"optimized. Conversely, some library routines are slow, especially ones that "
-"make system calls to the operating system."
-msgstr ""
-"Non rescriba unha rutina existente dunha biblioteca a non ser que estea "
-"seguro de que é demasiado lenta. Moitas rutinas de bibliotecas de uso "
-"intensivo pola CPU xa se optimizaron. Algunhas rutinas de bibliotecas son "
-"lentas, especialmente aquelas que realizan chamadas ao sistema operativo."
-
-#: C/optimization-intro.xml:136(para)
-msgid ""
-"Minimize the number of libraries you link to. The fewer libraries to link "
-"in, the faster the program starts. This is a difficult thing to do with "
-"GNOME."
-msgstr ""
-"Minimice o número de bibliotecas ás que liga. Canto menor sexa o número de "
-"bibliotecas a ligar, máis rápido se iniciará o programa. É unha tarefa "
-"difícil en GNOME."
-
-#: C/optimization-intro.xml:142(title)
-msgid "High Level Tricks"
-msgstr "Trucos de alto nivel"
-
-#: C/optimization-intro.xml:144(para)
-msgid ""
-"Take advantage of concurrency. This doesn't just mean using multiple "
-"processors, it also means taking advantage of the time the user spends "
-"thinking about what they are going to do next to perform some calculations "
-"in anticipation. Do calculations while waiting for data to be loaded off "
-"disk. Take advantage of multiple resources, use them all at once."
-msgstr ""
-"A ventaxa da concurrencia. Isto non significa simplemente usar varios "
-"procesadores, tamén significa aproveitarse do tempo que o usuario pasa "
-"pensando en que fará despois, para realizar algúns cálculos anticipados. "
-"Faga cálculos mentres se agarda a carga de datos desde o disco. Aprovéitese "
-"dos recursos múltiples, úseos todos á vez."
-
-#: C/optimization-intro.xml:149(para)
-msgid ""
-"Cheat. The user only has to think that the computer is fast, it doesn't "
-"matter whether it actually is or not. It is the time between the command and "
-"the answer that is important, it doesn't matter if the response is pre-"
-"calculated, cached, or will in fact be worked out later at a more convenient "
-"time, as long as the user gets what they expect."
-msgstr ""
-"Engane. O usuario só ten que pensar que o equipo é rápido, non importa se "
-"realmente o é ou non. É o tempo entre a orde e a resposta o que importa, non "
-"importa se a resposta esta precalculada, cacheada ou se traballará nela en "
-"calquera momento posterior conveniente, sempre que o usuario obteña o que "
-"agarda."
-
-#: C/optimization-intro.xml:154(para)
-msgid ""
-"Do things in the idle loop. It is easier to program than using full multi-"
-"threading but still gets things done out of the users eye. Be careful "
-"though, if you spend too long in the idle loop your program will become "
-"sluggish. So regularly give control back to the main loop."
-msgstr ""
-"Facer cousas no búcle ocioso. É máis doado programar usando multifíos e "
-"facer cousas por detrás dos ollos do usuario. Teña coidado, se pasa gasta "
-"moito tempo no bucle ocioso o seu programa podería volverse lento. Polo que "
-"de forma regular déalle de novo o control ao bucle principal."
-
-#: C/optimization-intro.xml:159(para)
-msgid ""
-"If all else fails, tell the user that the code is going to be slow and put "
-"up a progress bar. They won't be as happy as if you had just presented the "
-"results, but they will at least know the program hasn't crashed and they can "
-"go get a cup of coffee."
-msgstr ""
-"Se todo isto falla, dígalle ao usuario que o código vai a executarse vai ser "
-"lento e móstrelle unha barra de progreso. Non estará tan contento con isto "
-"como se simplemente lle mostrara os resultados, porén cando menos saberá que "
-"o programa non se pechou ou ten problemas e pode ir a tomarse un café "
-"mentres."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/optimization-massif.xml:52(None)
-msgid ""
-"@@image: 'figures/massif-before.png'; md5=1a6b2ace548e6789ab8bfacb3727b345"
-msgstr ""
-"@@image: 'figures/massif-before.png'; md5=1a6b2ace548e6789ab8bfacb3727b345"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/optimization-massif.xml:114(None)
-msgid ""
-"@@image: 'figures/massif-after.png'; md5=36d1b4ad7ab49b28b69ad3eabbaa7069"
-msgstr ""
-"@@image: 'figures/massif-after.png'; md5=36d1b4ad7ab49b28b69ad3eabbaa7069"
-
-#: C/optimization-massif.xml:3(title)
-msgid ""
-"Using <application>Massif</application> for Profiling Memory Use in GNOME "
-"Software"
-msgstr ""
-"Usando <application>Massif</application> para perfila o uso de memoria en "
-"software de GNOME"
-
-#: C/optimization-massif.xml:5(para)
+#: C/optimization-massif.xml:5(chapter/para)
 msgid ""
 "This article describes how to use the <application>Massif</application> heap "
 "profiler with GNOME applications. We describe how to invoke, interpret, and "
@@ -473,11 +249,11 @@ msgstr ""
 "interpretar e actual sobre a saída de <application>Massif</application>. "
 "Usaremos o xogo <application>Swell Foop</application> para este exemplo."
 
-#: C/optimization-massif.xml:10(title)
+#: C/optimization-massif.xml:10(sect1/title)
 msgid "Introduction"
 msgstr "Introdución"
 
-#: C/optimization-massif.xml:11(para)
+#: C/optimization-massif.xml:11(sect1/para)
 msgid ""
 "<application>Massif</application> is a member of the <ulink type=\"http\" "
 "url=\"http://valgrind.org/\";>valgrind</ulink> suite of memory-profiling "
@@ -491,7 +267,7 @@ msgstr ""
 "do uso da memoria dinámica durante o ciclo de vida dun programa. "
 "Específicamente garda a memoria usada no heap e na stack."
 
-#: C/optimization-massif.xml:14(para)
+#: C/optimization-massif.xml:14(sect1/para)
 msgid ""
 "The heap is the region of memory which is allocated with functions like "
 "malloc. It grows on demand and is usually the largest region of memory in a "
@@ -508,12 +284,12 @@ msgstr ""
 "programa. A rima é onde se gardan os datos locais para as funcións. Isto "
 "inclúe as variábeis «automáticas» en C e o enderezo de devolución das "
 "subrutinas. A rima normalmente é moito máis pequena e máis activa que a "
-"pila. Non consideramos a pila explicitamente xa que "
-"<application>Massif</application> trátaa como se fora outra parte da rima. "
-"<application>Massif</application> tamén lle fornece información sobre canta "
-"memoria se usa para xestionar a pila."
+"pila. Non consideramos a pila explicitamente xa que <application>Massif</"
+"application> trátaa como se fora outra parte da rima. <application>Massif</"
+"application> tamén lle fornece información sobre canta memoria se usa para "
+"xestionar a pila."
 
-#: C/optimization-massif.xml:17(para)
+#: C/optimization-massif.xml:17(sect1/para)
 msgid ""
 "<application>Massif</application> produces two output files: a graphical "
 "overview in a postscript file and a detailed breakdown in a text file."
@@ -522,11 +298,11 @@ msgstr ""
 "vista gráfica xeral nun ficheiro postscript e unha explicación detallada nun "
 "ficheiro de texto."
 
-#: C/optimization-massif.xml:22(title)
+#: C/optimization-massif.xml:22(sect1/title)
 msgid "Using <application>Massif</application> with GNOME"
 msgstr "Usar <application>Massif</application> con GNOME"
 
-#: C/optimization-massif.xml:23(para)
+#: C/optimization-massif.xml:23(sect1/para)
 msgid ""
 "<application>Massif</application> has very few options and for many programs "
 "does not need them. However for GNOME applications, where memory allocation "
@@ -549,7 +325,7 @@ msgstr ""
 "inxestionábel é mellor comezar con un valor de profundidade menos profundo e "
 "só incrementalo cando aparentemente non sexa dabondo."
 
-#: C/optimization-massif.xml:26(para)
+#: C/optimization-massif.xml:26(sect1/para)
 msgid ""
 "It is also useful to tell <application>Massif</application> which functions "
 "allocate memory in glib. It removes an unnecessary layer of function calls "
@@ -565,11 +341,11 @@ msgstr ""
 "g_realloc, g_try_malloc e g_mem_chunk_alloc. Usará a opción --alloc-fn para "
 "dicirlle a Massif sobre elas."
 
-#: C/optimization-massif.xml:29(para)
+#: C/optimization-massif.xml:29(sect1/para)
 msgid "Your command-line should therefore look something like:"
 msgstr "A súa liña de orde debería semellarse a esta:"
 
-#: C/optimization-massif.xml:32(programlisting)
+#: C/optimization-massif.xml:32(sect1/programlisting)
 #, no-wrap
 msgid ""
 "\n"
@@ -582,7 +358,7 @@ msgstr ""
 "         --alloc-fn=g_malloc0 --alloc-fn=g_mem_chunk_alloc swell-foop\n"
 "        "
 
-#: C/optimization-massif.xml:36(para)
+#: C/optimization-massif.xml:36(sect1/para)
 msgid ""
 "<application>Swell Foop</application> is the program we will be using as an "
 "example. Be warned that, since valgrind emulates the CPU, it will run "
@@ -592,11 +368,11 @@ msgstr ""
 "exemplo. Teña en conta isto, xa que valgrind emula o CPU, executarase "
 "<emphasis>moi</emphasis> lento. E tamén precisara moita memoria."
 
-#: C/optimization-massif.xml:41(title)
+#: C/optimization-massif.xml:41(sect1/title)
 msgid "Interpreting the Results"
 msgstr "Interpretar os resultados"
 
-#: C/optimization-massif.xml:42(para)
+#: C/optimization-massif.xml:42(sect1/para)
 msgid ""
 "The graphical output of <application>Massif</application> is largely self "
 "explanatory. Each band represents the memory allocated by one function over "
@@ -610,7 +386,7 @@ msgstr ""
 "normalmente a máis ancha estará na parte superior polo que terá que "
 "consultar o ficheiro de texto para obter máis detalles."
 
-#: C/optimization-massif.xml:45(para)
+#: C/optimization-massif.xml:45(sect1/para)
 msgid ""
 "The text file is arranged as a hierarchy of sections, at the top is a list "
 "of the worst memory users arranged in order of decreasing spacetime. Below "
@@ -624,7 +400,7 @@ msgstr ""
 "dividindo os resultados en maior detalle como se procedera cara abaixo na "
 "pila de chamadas. Para ilustrar isto usaremos a saída da orde de arriba."
 
-#: C/optimization-massif.xml:49(title)
+#: C/optimization-massif.xml:49(figure/title)
 msgid ""
 "<application>Massif</application> output for the unoptimized version of the "
 "<application>Swell Foop</application> program."
@@ -632,7 +408,7 @@ msgstr ""
 "A saída de <application>Massif</application> para a versión non optimizada "
 "do programa <application>Swell GNOME</application>."
 
-#: C/optimization-massif.xml:56(para)
+#: C/optimization-massif.xml:56(sect1/para)
 msgid ""
 "<xref linkend=\"optimization-massif-FIG-output-unoptimized\"/> shows a "
 "typical postscript output from <application>Massif</application>. This is "
@@ -646,8 +422,18 @@ msgid ""
 "starts a second process and <application>Massif</application> follows that "
 "too. We will ignore this second process, it consumes very little memory."
 msgstr ""
+"<xref linkend=\"optimization-massif-FIG-output-unoptimized\"/> mostra unha "
+"saída postscript típica de <application>Massif</application>. Este é o "
+"resultado que poderá obter ao xogar un único xogo de <application>Swell "
+"Foop</application> (versión 2.8.0) e logo saír. O ficheiro postscript terá "
+"un nome como <filename>masif.12345.ps</filename> e o ficheiro de texto terá "
+"no medio o ID do proceso do programa que foi examinado. Se realmente proba "
+"este exemplo poderá atopar dúas versións de cada ficheiro, con números "
+"diferentes, isto é porque <application>Swell Foop</application> inicia un "
+"segundo proceso e <application>Massif</application> segue os dous. "
+"Ignoraremos ese segundo proceso xa que consume moi pouca memoria."
 
-#: C/optimization-massif.xml:59(para)
+#: C/optimization-massif.xml:59(sect1/para)
 msgid ""
 "At the top of the graph we see a large yellow band labelled gdk_pixbuf_new. "
 "This seems like an ideal candidate for optimization, but we will need to use "
@@ -660,7 +446,7 @@ msgstr ""
 "gdk_pixbuf_new. A parte superior do ficheiro de texto mostrará algo como o "
 "seguinte:"
 
-#: C/optimization-massif.xml:62(programlisting)
+#: C/optimization-massif.xml:62(sect1/programlisting)
 #, no-wrap
 msgid ""
 "\n"
@@ -695,7 +481,7 @@ msgstr ""
 "    3.5% : 0x2A4A6B: __gconv_open (in /lib/tls/libc-2.3.3.so)\n"
 "        "
 
-#: C/optimization-massif.xml:77(para)
+#: C/optimization-massif.xml:77(sect1/para)
 msgid ""
 "The line with the '=' signs indicates how far down the stack trace we are, "
 "in this case we are at the top. After this it lists the heaviest users of "
@@ -706,7 +492,7 @@ msgid ""
 "out what called gdk_pixbuf_new we need to search further down the text file:"
 msgstr ""
 
-#: C/optimization-massif.xml:80(programlisting)
+#: C/optimization-massif.xml:80(sect1/programlisting)
 #, no-wrap
 msgid ""
 "\n"
@@ -741,7 +527,7 @@ msgstr ""
 "  and 1 other insignificant place\n"
 "        "
 
-#: C/optimization-massif.xml:95(para)
+#: C/optimization-massif.xml:95(sect1/para)
 msgid ""
 "The first line tells us we are now four levels deep into the stack. Below it "
 "is a listing of the function calls that leads from here to gdk_pixbuf_new. "
@@ -751,8 +537,16 @@ msgid ""
 "to the <application>Swell Foop</application> code. From this listing, we can "
 "see instantly that the problem code is load_scenario."
 msgstr ""
+"A primeira liña dinos que agora temos catro niveis de profundidade para cada "
+"pila. Embaixo hai unha lista das chamadas de funcións que lle leva desde "
+"aquí até gdk_pixbuf_new. Finalmente hai unha lista de funcións que están no "
+"nivel inmediatamente inferior e chama a esas funcións. Hai, por suposto, "
+"tamén entradas para os niveis 1, 2 e 3 pero este é o primeiro nivel a "
+"alcazar mediante o código GDK do código de <application>Swell-"
+"Foop</application>. Deste esta lista, podemos ver instantaneamente que o "
+"código problemático é load_scenario."
 
-#: C/optimization-massif.xml:98(para)
+#: C/optimization-massif.xml:98(sect1/para)
 msgid ""
 "Now that we know what part of our code is using all the spacetime we can "
 "look at it and find out why. It turns out that the load_scenario is loading "
@@ -764,11 +558,11 @@ msgstr ""
 "nunca libera esa memoria. Tendo identificado o código do problema pódese "
 "comezar a arranxalo."
 
-#: C/optimization-massif.xml:103(title)
+#: C/optimization-massif.xml:103(sect1/title)
 msgid "Acting on the Results"
 msgstr "Actuar sobre os resultados"
 
-#: C/optimization-massif.xml:104(para)
+#: C/optimization-massif.xml:104(sect1/para)
 msgid ""
 "Reducing spacetime consumption is good, but there are two ways of reducing "
 "it and they are not equal. You can either reduce the amount of memory "
@@ -782,8 +576,18 @@ msgid ""
 "their periods of high memory use don't overlap. So it is better to reduce "
 "the amount of memory allocated."
 msgstr ""
+"Reducir o consumo do espazo de tempo é bo, pero hai dúas formas de reducilo "
+"e non son iguais. Pode tanto reducir a cantidade de memoria reservada como "
+"reducir a cantidade de tempo na que está reservada. Considere por un momento "
+"un sistema modelo con só dous procesos executándose. Ámbolos dous procesos "
+"usan case toda a RAM física e superpóñense por completo polo que o sistema "
+"terá que usar a swap e todo se ralentizará. Se no lugar disto reducimos o "
+"tempo que está reservada a memoria por un factor de dous entón os dous "
+"programas poden coexistir, pero mentres os seus períodos de alto uso de "
+"memoria non se superpoñan. Polo tanto é mellor reducir o consumo de memoria "
+"reservada."
 
-#: C/optimization-massif.xml:107(para)
+#: C/optimization-massif.xml:107(sect1/para)
 msgid ""
 "Unfortunately, the choice of optimization is also constrained by the needs "
 "of the program. The size of the pixbuf data in <application>Swell Foop</"
@@ -794,8 +598,17 @@ msgid ""
 "<application>Swell Foop</application> after being altered to dispose of the "
 "pixbufs once the images have been loaded into the X server."
 msgstr ""
+"Desafortunadamente, a elección da optimización tamén está limitada polas "
+"necesidades do programa. O tamaño dos datos pixbuf en <application>Swell "
+"Foop</application> está determinado polo tamaño dos gráficos do xogo e non "
+"poden reducirse de forma doada. porén, a cantidade de tempo que gasta "
+"cargando en memoria pode reducirse drasticamente. <xref linkend"
+"=\"optimization-massif-FIG-output-optimized\"/> mostra o análise de "
+"<application>Massif</application> de <application>Swell Foop</application> "
+"despois de cambiar a disposición dos pixbuf en canto as imaxes se cargan no "
+"servidor X."
 
-#: C/optimization-massif.xml:111(title)
+#: C/optimization-massif.xml:111(figure/title)
 msgid ""
 "<application>Massif</application> output for the optimized "
 "<application>Swell Foop</application> program."
@@ -803,7 +616,7 @@ msgstr ""
 "A saída de <application>Massif</application> para o programa optimizado "
 "<application>Swell GNOME</application>."
 
-#: C/optimization-massif.xml:118(para)
+#: C/optimization-massif.xml:118(sect1/para)
 msgid ""
 "The spacetime use of gdk_pixbuf_new is now a thin band that only spikes "
 "briefly (it is now the sixteenth band down and shaded magenta). As a bonus, "
@@ -812,8 +625,14 @@ msgid ""
 "chances of the peak memory usage coinciding, and hence the risk of swapping, "
 "would be quite low."
 msgstr ""
+"O uso do espazo de tempo do gdk_pixbuf_new é agora unha banda máis estreita "
+"que só ten picos moi brebes (agora é a dezaseisava banda e pintada en "
+"maxenta). Ademáis, o pico de uso de memoria baixou 200 kB xa que o pico se "
+"produce antes de que se reserve outra memoria. Se dous procesos como este "
+"estiveran executándose á vez as opcións dun pico de uso de memoria "
+"coincidente, e polo tanto o risco de facer swapping, serán moi poucas."
 
-#: C/optimization-massif.xml:121(para)
+#: C/optimization-massif.xml:121(sect1/para)
 msgid ""
 "Can we do better ? A quick examination of <application>Massif</"
 "application>'s text output reveals: g_strdup to be the new major offender."
@@ -822,7 +641,7 @@ msgstr ""
 "<application>Massif</application> revela: g_strdup para ser un ofensor máis "
 "importante."
 
-#: C/optimization-massif.xml:124(programlisting)
+#: C/optimization-massif.xml:124(sect1/programlisting)
 #, no-wrap
 msgid ""
 "\n"
@@ -857,13 +676,13 @@ msgstr ""
 "    5.2% : 0x2A4A6B: __gconv_open (in /lib/tls/libc-2.3.3.so)\n"
 "        "
 
-#: C/optimization-massif.xml:139(para)
+#: C/optimization-massif.xml:139(sect1/para)
 msgid ""
 "If we look closer though we see that it is called from many, many, places."
 msgstr ""
 "Se miramos máis cerca nas partes que vemos se chaman desde moitas partes."
 
-#: C/optimization-massif.xml:142(programlisting)
+#: C/optimization-massif.xml:142(sect1/programlisting)
 #, no-wrap
 msgid ""
 "\n"
@@ -900,7 +719,7 @@ msgstr ""
 "  and 155 other insignificant places\n"
 "        "
 
-#: C/optimization-massif.xml:158(para)
+#: C/optimization-massif.xml:158(sect1/para)
 msgid ""
 "We now face diminishing returns for our optimization efforts. The graph "
 "hints at another possible approach: Both the \"other\" and \"heap admin\" "
@@ -916,11 +735,11 @@ msgstr ""
 "será difícil, pero se se poden agrupar, entón as reservas son individuais "
 "poden ser máis grandes e a elevada banda «heap admin» pode reducirse."
 
-#: C/optimization-massif.xml:163(title)
+#: C/optimization-massif.xml:163(sect1/title)
 msgid "Caveats"
 msgstr "Advertencias"
 
-#: C/optimization-massif.xml:164(para)
+#: C/optimization-massif.xml:164(sect1/para)
 msgid ""
 "There are a couple of things to watch out for: Firstly, spacetime is only "
 "reported as a percentage, you have to compare it to the overall size of the "
@@ -932,7 +751,7 @@ msgstr ""
 "programa para decidir se merece a pena perseguir a cantidade total de "
 "memoria. O gráfico, co seu eixe vertical de kilobytes, é bo para iso."
 
-#: C/optimization-massif.xml:167(para)
+#: C/optimization-massif.xml:167(sect1/para)
 msgid ""
 "Secondly, <application>Massif</application> only takes into account the "
 "memory used by your own program. Resources like pixmaps are stored in the X "
@@ -948,187 +767,449 @@ msgid ""
 "\">xrestop</ulink> program."
 msgstr ""
 
-#: C/optimization-harmful.xml:3(title)
-msgid "Disk Seeks Considered Harmful"
-msgstr "Buscas de disco consideradas dañinas"
+#: C/optimization-intro.xml:3(chapter/title)
+msgid "The Quick Guide to Optimizing GNOME Programs"
+msgstr "Guía rápida para optimizar programas de GNOME"
 
-#: C/optimization-harmful.xml:5(para)
+#: C/optimization-intro.xml:5(chapter/para)
 msgid ""
-"Disk seeks are one of the most expensive operations you can possibly "
-"perform. You might not know this from looking at how many of them we "
-"perform, but trust me, they are. Consequently, please refrain from the "
-"following suboptimal behavior:"
+"This is a brief introduction to optimization, both the hows and the whys. "
+"Details of individual tools and techniques are left for later articles, but "
+"a collection of hints and tricks is provided."
 msgstr ""
-"As buscas de disco son unha das operacións máis caras que pode realizar. "
-"Pode que non saiba isto simplemente mirando cantas se realizan, pero crea "
-"que realmente o son. Por iso, evite os seguintes comportamentos:"
-
-#: C/optimization-harmful.xml:10(para)
-msgid "Placing lots of small files all over the disk."
-msgstr "Localizar montóns de pequenos ficheiros por todo o disco."
+"Esta é unha breve introdución á optimización, dos cómos tanto dos porqués. "
+"Déixanse para posteriores artigos os detalles de ferramentas e técnicas "
+"individuais pero fornécese unha colección de suxestións e trucos."
 
-#: C/optimization-harmful.xml:15(para)
-msgid "Opening, stating, and reading lots of files all over the disk"
-msgstr "Abrir, iniciar e ler montóns de ficheiros por todo o disco"
+#: C/optimization-intro.xml:10(sect1/title)
+msgid "What are we Optimizing?"
+msgstr "Que se está optimizando?"
 
-#: C/optimization-harmful.xml:20(para)
+#: C/optimization-intro.xml:11(sect1/para)
 msgid ""
-"Doing the above on files that are laid out at different times, so as to "
-"ensure that they are fragmented and cause even more seeking."
+"When we optimize for GNOME the first thing to remember is this: we are not "
+"trying to make the program better, we are trying to make the person using "
+"the computer happier."
 msgstr ""
-"Realizar o anterior sobre ficheiros que se abren en diferentes momentos, "
-"para asegurarse de que están fragmentados e causan aínda máis buscas no "
-"disco."
+"Ao optimizar GNOME o primeiro que hai que lembrar é isto: non se está "
+"tentando mellorar o programa, estase tentando mellorando facer que as "
+"persoas usen o equipo máis felices."
 
-#: C/optimization-harmful.xml:25(para)
+#: C/optimization-intro.xml:14(sect1/para)
 msgid ""
-"Doing the above on files that are in different directories, so as to ensure "
-"that they are in different cylinder groups and and cause even more seeking."
+"Better programs make people happier, but there are some improvements that "
+"will make them a lot happier than others: Responsiveness, start-up time, "
+"easy to access commands and not having the computer go into swap the moment "
+"more than two programs are open."
 msgstr ""
-"Realizar o seguinte sobre ficheiros que están en diferentes cartafoles, para "
-"asegurarse de que están en grupos de cilindros diferentes e poden causar "
-"incluso máis buscas."
+"Programas mellores fan á xente máis feliz pero existen algunhas mellores que "
+"faranos máis felices que outras: tempo de resposta, tempo de inicio, "
+"facilidade para acceder a ordes e que o equipo non teña que usar a memoria "
+"de intercambio cando máis de dous programas estean abertos."
 
-#: C/optimization-harmful.xml:30(para)
-msgid "Repeatedly doing the above when it only needs to be done once."
+#: C/optimization-intro.xml:17(sect1/para)
+msgid ""
+"Traditional optimization tackles concepts like CPU use, code size, the "
+"number of mouse clicks and the memory use of the program. This second list "
+"has been chosen to correlate with the first list, however there is an "
+"important difference: The person using GNOME doesn't care about the second "
+"list, but they care a lot about the first list. When optimizing GNOME "
+"programs we will reduce CPU use, memory use and all those things, but these "
+"are the means to the end, not the final goal. We are optimizing for people."
 msgstr ""
-"Realizar de forma repetida o anterior cando só se precisa realizar unha vez."
+"A optimización tradicional contempla conceptos como o uso de CPI, o tamaño "
+"do código, o número de pulsacións do reato e o uso de memoria de programa. "
+"Elixiuse esta segunda lista para correlar como a primeira, porén existe unha "
+"diferenza importante. Á persoa que usa GNOME non lle importa a segunda "
+"lista, pero sí a primeira. Ao optimizar os programas de GNOME reducirase o "
+"uso de CPU, o uso de memoria e todo aquelo, pero son conceptos para o fin, "
+"non o obxectivo final. Optimízase para as persoas."
 
-#: C/optimization-harmful.xml:35(para)
-msgid "Ways in which you can optimize your code to be seek-friendly:"
-msgstr ""
-"Formas nas que pode optimizar o seu código para que sexa amigábel á hora de "
-"facer buscas:"
+#: C/optimization-intro.xml:23(sect1/title)
+msgid "Doing the Optimization"
+msgstr "Realizar a optimización"
 
-#: C/optimization-harmful.xml:40(para)
-msgid "Consolidate data into a single file."
-msgstr "Consolidar os datos nun só ficheiro."
+#: C/optimization-intro.xml:24(sect1/para)
+msgid ""
+"The previous section omitted one important qualifier: To optimize something "
+"it has to be measurable. You can't measure happiness. However, you can "
+"measure start-up time so you can tell if you have improved it. Happiness "
+"will then, hopefully, follow."
+msgstr ""
+"Na sección anterior omitiuse un calificador importante: optimizar algo debe "
+"ser medíbel. Non se pode medir a felicidade. Porén pódese medir o tempo de "
+"inicio dun programa para saber se se mellorou. A felicidade do usuario "
+"aumentará pois."
 
-#: C/optimization-harmful.xml:45(para)
-msgid "Keep data together in the same directory."
-msgstr "Manter os datos xuntos no mesmo cartafol."
+#: C/optimization-intro.xml:27(sect1/para)
+msgid ""
+"Optimization is the process of measurement, refinement and re-measurement. "
+"So the first thing you must do is find a way to measure what you are "
+"optimizing. Ideally this measurement is a single number, for example: the "
+"time taken to perform a task. This is your benchmark, it is the only way to "
+"tell if you are winning or losing. There is a big difference between a "
+"program that <emphasis>should</emphasis> be fast and a program that "
+"<emphasis>is</emphasis> fast."
+msgstr ""
+"A optimización é un proceso de medida, refinamento e remedida. O primeiro "
+"que debe facer é atopar unha forma de medir o que está optimizando. "
+"Idealmente a medida é un simple número, por exemplo: o tempo que se tarda en "
+"realiar unha tarefa. ESta é a súa proba, é a única forma de saber se está "
+"ganando ou perdendo. Existe unha gran diferenza entre un programa que "
+"<emphasis>deería</emphasis> ser rápido e un programa que <emphasis>é</"
+"emphasis> rápido."
 
-#: C/optimization-harmful.xml:50(para)
-msgid "Cache data so as to not need to reread constantly."
-msgstr "Cachear os datos para non ter que volver a lelos constantemente."
+#: C/optimization-intro.xml:30(sect1/para)
+msgid ""
+"Once you have a basic benchmark you need to find out why your code is not "
+"doing as well as it should. It is tempting to do this by inspection: just "
+"looking at the code and trying to spot something that looks like it needs "
+"improvement. You will invariably be wrong. Using a profiler to get a "
+"detailed break-down of what your program really does is the only way to be "
+"sure."
+msgstr ""
+"Unha vez que ten unha proba de rendemento básica debe atopar por que o seu "
+"código non o está facendo tan ben como debería. É tentado facelo "
+"inspeccionando: simplemente mirar o código e tratar de atopar algo que "
+"parece que precisa unha mellora. Estará perdendo o tempo, usar un perfilador "
+"para obter unha lista detallada do que o seu programa está facendo é, "
+"realmente, a única forma de estar seguro."
 
-#: C/optimization-harmful.xml:55(para)
+#: C/optimization-intro.xml:33(sect1/para)
 msgid ""
-"Share data so as not to have to reread it from disk when each application "
-"loads."
+"Usually the problem is isolated to small sections of code. Pick the worst "
+"place and concentrate on that first. Once that is done, rerun the profiler "
+"and repeat. As you proceed the gains made at each step will get less and "
+"less, at some point you will have to decide that the results are good "
+"enough. If your efforts are only extracting 10% improvements then you are "
+"well past the point where you should have stopped."
 msgstr ""
-"Compartir os datos para non ter que volver a lelos do disco cada vez que un "
-"aplicativo se carga."
+"Xeralmente o problema está illado en pequenas partes do código. Elixa a peor "
+"parte e concéntrese nesa primeiro. Unha vez que o teña feito, volva ao "
+"perfilador e repita o proceso. Segundo proceda, as melloras obtidas en cada "
+"paso faranse cada vez máis pequenas, nalgún punto terá que decidir que os "
+"resultados son suficientes. Se os seus esforzos só están obtendo un 10% de "
+"melloras entón fai tempo que pasou o punto en que debería ter parado."
 
-#: C/optimization-harmful.xml:60(para)
+#: C/optimization-intro.xml:36(sect1/para)
 msgid ""
-"Consider caching all of the data in a single binary file that is properly "
-"aligned and can be mmaped."
+"Don't forget the big picture. For example, rather than just trying to speed "
+"up a piece of code, ask yourself if it needs to be run at all. Could it be "
+"combined with another piece of code? Can the results of previous "
+"calculations be saved and reused? It won't even need to be optimized if it "
+"is in a place where the user is never going to notice it. Worse still, the "
+"code may already be optimized and is doing the heavy calculations now to "
+"avoid doing them later. Code does not run in isolation and neither does the "
+"optimization process."
 msgstr ""
-"Considerar cachear tódolos datos nun ficheiro binario único que está aliñado "
-"axeitadamente e pódse mapear."
+"Non esqueza a visión xeral. Por exemplo, fronte a só tentar incrementar o "
+"rendemento dunha parte do código, pregúntese se realmente se precisa dita "
+"parte. Pode ser fornecida por outra parte do seu código? Poden os resultados "
+"de cálculos previos gardados e ser reusados? Podería non ser nin preciso "
+"optimizalo se é un lugar onde nunca vai ir o usuario para que poida notalo. "
+"Ou peor aínda, que o código xa estea optimizado e está facendo un cálculo "
+"moi grande agora para evitar facelo máis tarde. O código non se executa en "
+"separación e tampouco o fai nun proceso de optimizado."
+
+#: C/optimization-intro.xml:41(sect1/title)
+msgid "Hints"
+msgstr "Suxestións"
+
+#: C/optimization-intro.xml:43(itemizedlist/title)
+msgid "The Fundamentals"
+msgstr "O fundamental"
 
-#: C/optimization-harmful.xml:65(para)
+#: C/optimization-intro.xml:45(listitem/para)
 msgid ""
-"The trouble with disk seeks are compounded for reads, which is unfortunately "
-"what we are doing. Remember, reads are generally synchronous while writes "
-"are asynchronous. This only compounds the problem, serializing each read, "
-"and contributing to program latency."
+"Re-run your benchmark after every change you make to the code and keep a log "
+"of everything you change and how it affects the benchmark. This lets you "
+"undo mistakes and also helps you not to repeat mistakes."
 msgstr ""
-"O problema coas buscas nos discos complícase para as lecturas, que é "
-"desafortunadamente o que se busca. Lembre, as lecturas son xeralmente "
-"síncronas mentres que as escrituras son asíncronas. Isto só complica o "
-"problema, serializando cada lectura e contribuíndo á latencia do programa."
+"Volva a executar a súa proba de rendemento despois de cada cambio que "
+"realice sobre o código e manteña un rexistro de todo o que cambia e de como "
+"afecta ao rendemento. Isto permítelle desfacer erros e tamén axúdalle a non "
+"repetilos."
 
-#: C/optimization-guide.xml:5(title)
-msgid "Optimizing GNOME Software"
-msgstr "Optimizar software para GNOME"
+#: C/optimization-intro.xml:50(listitem/para)
+msgid ""
+"Make sure your code is correct and bug-free before optimizing it. Check that "
+"it remains correct and bug-free after optimization."
+msgstr ""
+"Asegúrse de que o seu código é correcto e está libre de erros antes de "
+"optimizalo. Comprobe que permanece correcto e libre de erros desois de telo "
+"optimizado."
 
-#: C/optimization-guide.xml:8(publishername) C/optimization-guide.xml:56(para)
-msgid "GNOME Documentation Project"
-msgstr "GNOME Documentation Project"
+#: C/optimization-intro.xml:55(listitem/para)
+msgid "Optimize at the high level before optimizing the details."
+msgstr "Optimizar ao nivel máis alto antes de optimizar os detalles."
 
-#: C/optimization-guide.xml:11(year) C/optimization-guide.xml:15(year)
-msgid "2004-2005"
-msgstr "2004-2005"
+#: C/optimization-intro.xml:60(listitem/para)
+msgid ""
+"Use the right algorithm. The classic text-book example is using quick-sort "
+"instead of bubble-sort. There are many others, some save memory, some save "
+"CPU. Also, see what shortcuts you can make: you can do quicker than quick-"
+"sort if you are prepared to make some compromises."
+msgstr ""
+"Use o algoritmo correcto. O clásico exemplo de libro de texto é usar "
+"ordenación rápida no lugar de ordenación por burbulla. Existen moitos "
+"outros, algúns aforran memoria, alguns aforran CPU. Tamén debe ver que "
+"atallos de teclado pode crear: pode facelo máis rápido que unha ordenación "
+"rápida se está preparado para tomar certos compromisos."
 
-#: C/optimization-guide.xml:12(holder)
-msgid "Callum McKenzie"
-msgstr "Callum McKenzie"
+#: C/optimization-intro.xml:65(listitem/para)
+msgid ""
+"Optimization is a trade-off. Caching results speeds up calculations, but "
+"increases memory use. Saving data to disk saves memory, but costs time when "
+"it is loaded back from disk."
+msgstr ""
+"A optimización é intercambio. Obter resultados mellora os cálculos pero "
+"aumenta a memoria en uso. Gardar datos ao disco aforra memoria pero custa "
+"tempo ao cargalos de novo desde o disco."
 
-#: C/optimization-guide.xml:16(holder)
-msgid "Robert Love"
-msgstr "Robert Love"
+#: C/optimization-intro.xml:70(listitem/para)
+msgid ""
+"Make sure you choose a wide variety of inputs to optimize against. If you "
+"don't it is easy to end up with a piece of code carefully optimized for one "
+"file and no others."
+msgstr ""
+"Asegúrese de elixir certa variedade de entradas que optimizar. SE non o fai "
+"é doado que remate cun trozo de código coidadosamente optimizado par aun "
+"campo e non para outros."
 
-#: C/optimization-guide.xml:20(firstname)
-msgid "Callum"
-msgstr "Callum"
+#: C/optimization-intro.xml:75(listitem/para)
+msgid ""
+"Avoid expensive operations: Multiple small disk reads. Using up lots of "
+"memory so disk swapping becomes necessary. Avoid anything that writes or "
+"reads from the hard disk unnecessarily. The network is slow too. Also avoid "
+"graphics operations that need a response from the X server."
+msgstr ""
+"Evite as operacións caras: múltiples lecturas de disco pequenas. Use un "
+"montón de memoria para que a área de intercambio («swap») fágase "
+"innecesario. Evite calquera cousa que escriba ou lea innecesariamente do "
+"disco. A rede tamén é lenta. Evite tamén operacións gráficas que precisan "
+"unha resposta do servidor X."
 
-#: C/optimization-guide.xml:21(surname)
-msgid "McKenzie"
-msgstr "McKenzie"
+#: C/optimization-intro.xml:81(itemizedlist/title)
+msgid "Traps for the Unwary"
+msgstr "Trampas para os imprudentes"
 
-#: C/optimization-guide.xml:24(firstname)
-msgid "Robert"
-msgstr "Robert"
+#: C/optimization-intro.xml:83(listitem/para)
+msgid ""
+"Beware of side effects. There can often be strange interactions between "
+"different sections of code, a speed-up in one part can slow another part "
+"down."
+msgstr ""
+"Estea atento aos efectos colaterais. Xeralmente son interaccións estranas "
+"entre diferentes seccións do código, unha extensión dunha parte pode "
+"retardar outra."
 
-#: C/optimization-guide.xml:25(surname)
-msgid "Love"
-msgstr "Love"
+#: C/optimization-intro.xml:88(listitem/para)
+msgid ""
+"When timing code, even on a quiet system, events outside the program add "
+"noise to the timing results. Average over multiple runs. If the code is very "
+"short, timer resolution is also a problem. In this case measure the time the "
+"computer takes to run the code 100 or 1000 times. If the times you are "
+"recording are longer than a few seconds, you should be OK."
+msgstr ""
+"Ao cronometrar o tempo do código, incluso nun sistema parado, os eventos "
+"fora do programa engaden ruido aos resultados de tempo. Faga unha medida "
+"sobre múltiples execucións. Se o código é moi pequeno a resolución do tempo "
+"tamén é un problema. Neste caso mida o tempo que o equipo tarda en executar "
+"o código 100 ou 1000 veces. Se os tempos que está obtendo son algo "
+"superiores a uns poucos segundos todo debería estar correcto."
 
-#: C/optimization-guide.xml:29(para)
+#: C/optimization-intro.xml:93(listitem/para)
 msgid ""
-"Permission is granted to copy, distribute and/or modify this document under "
-"the terms of the <citetitle>GNU Free Documentation License</citetitle>, "
-"Version 1.1 or any later version published by the Free Software Foundation "
-"with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. "
-"You may obtain a copy of the <citetitle>GNU Free Documentation License</"
-"citetitle> from the Free Software Foundation by visiting <ulink type=\"http"
-"\" url=\"http://www.fsf.org\";>their Web site</ulink> or by writing to: Free "
-"Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA "
-"02111-1307, USA."
+"It is very easy to be misled by the profiler. There are stories of people "
+"optimizing the operating system idle-loop because that is where it spent all "
+"its time! Don't optimize code that does nothing the user cares about."
 msgstr ""
+"É moi doado perferse co perfilador. Existen historias de programadores "
+"optimizando o búcle de inactividade porque é onde se perdía todo o seu "
+"tempo. Non optimice código do que o usuario non se preocupe."
 
-#: C/optimization-guide.xml:41(para)
+#: C/optimization-intro.xml:98(listitem/para)
 msgid ""
-"Many of the names used by companies to distinguish their products and "
-"services are claimed as trademarks. Where those names appear in any GNOME "
-"documentation, and those trademarks are made aware to the members of the "
-"GNOME Documentation Project, the names have been printed in caps or initial "
-"caps."
+"Remember the resources on the X server. Your program's memory usage doesn't "
+"include the pixmaps that are stored in the X server's process, but they are "
+"still using up memory. Use xrestop to see what resources your program is "
+"using."
 msgstr ""
-"Moitos dos nomes usados por empresas para distinguir os seus produtos e "
-"servizos son marcas rexistradas. Cando aparezan ditos nomes na documentación "
-"de GNOME, e esas marcas rexistradas se lle mostren aos membros do Proxecto "
-"de Documentación de GNOME, os nomes son escritos en maiúsculas ou maiúscula "
-"inicial."
+"Lembre os resultados do servidor X. O uso de memoria do seu programa non "
+"inclúe os pixmaps almacenados nos procesos do servidor X, pero aínda seguen "
+"usando memoria. Use xrestop para ver os recursos que está usando o seu "
+"programa."
 
-#: C/optimization-guide.xml:52(revnumber)
-msgid "0.1"
-msgstr "0.1"
+#: C/optimization-intro.xml:104(itemizedlist/title)
+msgid "Low Level Hints"
+msgstr "Consellos de baixo nivel"
 
-#: C/optimization-guide.xml:53(date)
-msgid "November 2007"
-msgstr "Novembro de 2007"
+#: C/optimization-intro.xml:106(listitem/para)
+msgid ""
+"When optimizing memory use, be wary of the difference between peak usage and "
+"average memory usage. Some memory is almost always allocated, this is "
+"usually bad. Some is only briefly allocated, this may be quite acceptable. "
+"Tools like massif use the concept of space-time, the product of memory used "
+"and the duration it was allocated for, instead."
+msgstr ""
+"Ao optimizar o uso de memoria considere a diferenza entre o uso de pico e o "
+"uso medio de memoria. Algunha memoria sempre está reservada, isto xeralmente "
+"é malo. Algunha está temporalmente reservada, isto pode ser aceptábel. "
+"Ferramentas como massif usan o concepto de espazo-tempo, o produto da "
+"memoria usada e o tempo durante o que estivo reservada."
 
-#: C/optimization-guide.xml:55(para)
-msgid "William Johnston"
-msgstr "William Johnston"
+#: C/optimization-intro.xml:111(listitem/para)
+msgid ""
+"Time simplified bits of code that do only the things you know are essential, "
+"this gives an absolute lower limit on the time your code will take. For "
+"example, when optimizing a loop time the empty loop. If that is still too "
+"long no amount of micro-optimization will help and you will have to change "
+"your design. Make sure the compiler doesn't optimize away your empty loop."
+msgstr ""
+"Controle o tempo de trozos de código simplificados que só fan cousas "
+"esenciais, isto fornece un límite absoluto inferior no tempo que usará o "
+"código. Por exemplo, ao optimizar un búcle, controle o tempo do búcle "
+"baleiro. Se aínda é moito tempo calquera intento de optimización non axudará "
+"e deberá cambiar o seu deseño. Asegúrese de que o compilador non desoptimiza "
+"o búcle baleiro."
 
-#: C/optimization-guide.xml:57(para)
-msgid "Intial conversion to docbook format."
-msgstr "Conversión inicial ao formato docbook."
+#: C/optimization-intro.xml:116(listitem/para)
+msgid ""
+"Move code out from inside loops. A slightly more complicated piece of code "
+"that is executed once is far quicker than a simple piece of code executed a "
+"thousand times. Avoid calling slow code often."
+msgstr ""
+"mova o código fora dos bucles internos. Un anaco de código máis complicado "
+"que se executa unha soa vez é moito máis rápido que un trozo de código máis "
+"sinxelo que se executa mil veces. Evite chamar habitualmente a código lento."
 
-#: C/optimization-guide.xml:63(para)
+#: C/optimization-intro.xml:121(listitem/para)
 msgid ""
-"Software can be optimized in many ways: for speed, program size, or memory "
-"use. This section contains guides and tutorials for optimizing your software."
+"Give the compiler as many hints as possible. Use the const keyword. Use "
+"<envar>G_INLINE_FUNC</envar> for short, frequently called, functions. Look "
+"up <envar>G_GNUC_PURE</envar>, <envar>G_LIKELY</envar> and the other glib "
+"miscellaneous macros. Use the macros instead of gcc-specific keywords to "
+"ensure portability."
 msgstr ""
-"O software pode optimizarse de moitas formas: para maior velocidade, tamaño "
-"do programa ou uso de memoria. Esta sección contén guías e titoriais para "
-"optimizar o seu software."
+"Forneza ao compilador tantas suxestións como lle sea posíbel. Usa a palabra "
+"chave «const». Use <envar>G_INLINE_FUNC</envar> para funcións curtas "
+"frecuentemente chamadas. Busque <envar>G_GNUC_PURE</envar>, <envar>G_LIKELY</"
+"envar> e outras macros misceláneas de glib. Use as macros no lugar de "
+"palabras chave específicas de gcc para asegurar a portabilidade."
 
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
-#: C/optimization-guide.xml:0(None)
-msgid "translator-credits"
-msgstr "Fran Dieguez <frandieguez gnome org>, 2011-2012."
+#: C/optimization-intro.xml:126(listitem/para)
+msgid ""
+"Don't use assembly language. It is not portable and, while it may be fast on "
+"one processor, it is not even guaranteed to be fast on every processor that "
+"supports that architecture (e.g. Athlon vs. Pentium 4)."
+msgstr ""
+"Non use linguaxes de ensamblado. O código non é portábel e pode ser máis "
+"rápido nun procesador que noutro, ademais non está garantizado que sea "
+"rápido en cada procesador que admite esa arquitectura (p.ex. Athlon contra "
+"Pentium 4)."
+
+#: C/optimization-intro.xml:131(listitem/para)
+msgid ""
+"Don't rewrite an existing library routine unless you are sure it is "
+"unnecessarily slow. Many CPU-intensive library routines have already been "
+"optimized. Conversely, some library routines are slow, especially ones that "
+"make system calls to the operating system."
+msgstr ""
+"Non rescriba unha rutina existente dunha biblioteca a non ser que estea "
+"seguro de que é demasiado lenta. Moitas rutinas de bibliotecas de uso "
+"intensivo pola CPU xa se optimizaron. Algunhas rutinas de bibliotecas son "
+"lentas, especialmente aquelas que realizan chamadas ao sistema operativo."
+
+#: C/optimization-intro.xml:136(listitem/para)
+msgid ""
+"Minimize the number of libraries you link to. The fewer libraries to link "
+"in, the faster the program starts. This is a difficult thing to do with "
+"GNOME."
+msgstr ""
+"Minimice o número de bibliotecas ás que liga. Canto menor sexa o número de "
+"bibliotecas a ligar, máis rápido se iniciará o programa. É unha tarefa "
+"difícil en GNOME."
+
+#: C/optimization-intro.xml:142(itemizedlist/title)
+msgid "High Level Tricks"
+msgstr "Trucos de alto nivel"
+
+#: C/optimization-intro.xml:144(listitem/para)
+msgid ""
+"Take advantage of concurrency. This doesn't just mean using multiple "
+"processors, it also means taking advantage of the time the user spends "
+"thinking about what they are going to do next to perform some calculations "
+"in anticipation. Do calculations while waiting for data to be loaded off "
+"disk. Take advantage of multiple resources, use them all at once."
+msgstr ""
+"A ventaxa da concurrencia. Isto non significa simplemente usar varios "
+"procesadores, tamén significa aproveitarse do tempo que o usuario pasa "
+"pensando en que fará despois, para realizar algúns cálculos anticipados. "
+"Faga cálculos mentres se agarda a carga de datos desde o disco. Aprovéitese "
+"dos recursos múltiples, úseos todos á vez."
+
+#: C/optimization-intro.xml:149(listitem/para)
+msgid ""
+"Cheat. The user only has to think that the computer is fast, it doesn't "
+"matter whether it actually is or not. It is the time between the command and "
+"the answer that is important, it doesn't matter if the response is pre-"
+"calculated, cached, or will in fact be worked out later at a more convenient "
+"time, as long as the user gets what they expect."
+msgstr ""
+"Engane. O usuario só ten que pensar que o equipo é rápido, non importa se "
+"realmente o é ou non. É o tempo entre a orde e a resposta o que importa, non "
+"importa se a resposta esta precalculada, cacheada ou se traballará nela en "
+"calquera momento posterior conveniente, sempre que o usuario obteña o que "
+"agarda."
+
+#: C/optimization-intro.xml:154(listitem/para)
+msgid ""
+"Do things in the idle loop. It is easier to program than using full multi-"
+"threading but still gets things done out of the users eye. Be careful "
+"though, if you spend too long in the idle loop your program will become "
+"sluggish. So regularly give control back to the main loop."
+msgstr ""
+"Facer cousas no búcle ocioso. É máis doado programar usando multifíos e "
+"facer cousas por detrás dos ollos do usuario. Teña coidado, se pasa gasta "
+"moito tempo no bucle ocioso o seu programa podería volverse lento. Polo que "
+"de forma regular déalle de novo o control ao bucle principal."
+
+#: C/optimization-intro.xml:159(listitem/para)
+msgid ""
+"If all else fails, tell the user that the code is going to be slow and put "
+"up a progress bar. They won't be as happy as if you had just presented the "
+"results, but they will at least know the program hasn't crashed and they can "
+"go get a cup of coffee."
+msgstr ""
+"Se todo isto falla, dígalle ao usuario que o código vai a executarse vai ser "
+"lento e móstrelle unha barra de progreso. Non estará tan contento con isto "
+"como se simplemente lle mostrara os resultados, porén cando menos saberá que "
+"o programa non se pechou ou ten problemas e pode ir a tomarse un café "
+"mentres."
+
+#~ msgid "2004-2005"
+#~ msgstr "2004-2005"
+
+#~ msgid "Callum McKenzie"
+#~ msgstr "Callum McKenzie"
+
+#~ msgid "Robert Love"
+#~ msgstr "Robert Love"
+
+#~ msgid "Callum"
+#~ msgstr "Callum"
+
+#~ msgid "McKenzie"
+#~ msgstr "McKenzie"
+
+#~ msgid "Robert"
+#~ msgstr "Robert"
+
+#~ msgid "Love"
+#~ msgstr "Love"
+
+#~ msgid "0.1"
+#~ msgstr "0.1"
+
+#~ msgid "November 2007"
+#~ msgstr "Novembro de 2007"
diff --git a/platform-demos/gl/gl.po b/platform-demos/gl/gl.po
index b516e3a..c2512f1 100644
--- a/platform-demos/gl/gl.po
+++ b/platform-demos/gl/gl.po
@@ -6,8 +6,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: gnome-devel-docs master\n"
-"POT-Creation-Date: 2012-09-14 16:41+0000\n"
-"PO-Revision-Date: 2012-09-23 23:27+0200\n"
+"POT-Creation-Date: 2012-12-21 09:12+0000\n"
+"PO-Revision-Date: 2012-12-25 17:38+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez gnome org>\n"
 "Language-Team: gnome-l10n-gl gnome org\n"
 "Language: gl\n"
@@ -18,7277 +18,19592 @@ msgstr ""
 "X-Generator: Virtaal 0.7.1\n"
 "X-Project-Style: gnome\n"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/window.vala.page:24(None) C/window.py.page:30(None)
-#: C/window.js.page:24(None) C/window.c.page:21(None)
-#: C/GtkApplicationWindow.vala.page:21(None)
-#: C/GtkApplicationWindow.py.page:26(None)
-#: C/GtkApplicationWindow.js.page:21(None)
-#: C/GtkApplicationWindow.c.page:21(None)
-#| msgid "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
-msgid "@@image: 'media/window.png'; md5=eb0cde3530978619c25bddfaeb453345"
-msgstr "@@image: 'media/window.png'; md5=eb0cde3530978619c25bddfaeb453345"
+#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
+#, fuzzy
+#| msgid "translator-credits"
+msgctxt "_"
+msgid "translator-credits"
+msgstr "Fran Dieguez <frandieguez gnome org>, 2011-2012."
 
-#: C/window.vala.page:7(title)
-#| msgid "Window"
-msgid "Window (Vala)"
-msgstr "Xanela (Vala)"
+#: C/index.page:7(credit/name)
+msgid "GNOME Documentation Team"
+msgstr "Equipo de documentación de GNOME"
 
-#: C/window.vala.page:12(name) C/window.py.page:12(name)
-#: C/window.c.page:12(name) C/vala.page:10(name) C/tutorial.py.page:14(name)
-#: C/translate.page:10(name) C/treeview_simple_liststore.vala.page:14(name)
-#: C/toolbar_builder.vala.page:14(name) C/toolbar_builder.py.page:14(name)
-#: C/toolbar.vala.page:13(name) C/toolbar.js.page:12(name)
-#: C/togglebutton.vala.page:15(name) C/textview.vala.page:12(name)
-#: C/switch.vala.page:16(name) C/statusbar.vala.page:15(name)
-#: C/spinner.vala.page:12(name) C/spinbutton.vala.page:14(name)
-#: C/scrolledwindow.vala.page:13(name) C/scale.vala.page:14(name)
-#: C/radiobutton.vala.page:15(name) C/py.page:10(name)
-#: C/progressbar.vala.page:12(name) C/messagedialog.vala.page:12(name)
-#: C/menubutton.py.page:12(name) C/menubutton.vala.page:12(name)
-#: C/menubar.vala.page:14(name) C/menubar.py.page:14(name)
-#: C/linkbutton.vala.page:12(name) C/label.vala.page:12(name)
-#: C/js.page:11(name) C/index.page:22(name) C/image-viewer.vala.page:26(name)
-#: C/image.vala.page:12(name) C/helloWorld.js.page:19(name)
-#: C/guitar-tuner.vala.page:21(name) C/GtkApplicationWindow.vala.page:12(name)
-#: C/GtkApplicationWindow.py.page:12(name)
-#: C/GtkApplicationWindow.js.page:12(name)
-#: C/GtkApplicationWindow.c.page:12(name) C/grid.vala.page:14(name)
-#: C/grid.py.page:13(name) C/gmenu.vala.page:19(name) C/gmenu.py.page:12(name)
-#: C/gmenu.js.page:12(name) C/gmenu.c.page:12(name)
-#: C/filechooserdialog.vala.page:15(name) C/entry.vala.page:12(name)
-#: C/documentation.page:10(name) C/dialog.vala.page:12(name)
-#: C/cpp.page:10(name) C/combobox.vala.page:12(name)
-#: C/colorbutton.vala.page:14(name) C/checkbutton.vala.page:12(name)
-#: C/checkbutton.c.page:12(name) C/c.page:10(name) C/button.vala.page:13(name)
-#: C/bug-filing.page:9(name) C/beginner.vala.page:14(name)
-#: C/beginner.py.page:14(name) C/aboutdialog.vala.page:20(name)
-msgid "Tiffany Antopolski"
-msgstr "Tiffany Antopolski"
+#: C/index.page:9(credit/years)
+msgid "2010, 2011"
+msgstr "2010, 2011"
 
-#: C/window.vala.page:13(email) C/window.py.page:13(email)
-#: C/window.c.page:13(email) C/vala.page:11(email)
-#: C/tutorial.py.page:15(email) C/translate.page:11(email)
-#: C/treeview_simple_liststore.vala.page:15(email)
-#: C/toolbar_builder.vala.page:15(email) C/toolbar_builder.py.page:15(email)
-#: C/toolbar.vala.page:14(email) C/toolbar.js.page:13(email)
-#: C/togglebutton.vala.page:16(email) C/textview.vala.page:13(email)
-#: C/switch.vala.page:17(email) C/statusbar.vala.page:16(email)
-#: C/spinner.vala.page:13(email) C/spinbutton.vala.page:15(email)
-#: C/scrolledwindow.vala.page:14(email) C/scale.vala.page:15(email)
-#: C/radiobutton.vala.page:16(email) C/py.page:11(email)
-#: C/progressbar.vala.page:13(email) C/messagedialog.vala.page:13(email)
-#: C/menubutton.py.page:13(email) C/menubutton.vala.page:13(email)
-#: C/menubar.vala.page:15(email) C/menubar.py.page:15(email)
-#: C/linkbutton.vala.page:13(email) C/label.vala.page:13(email)
-#: C/js.page:12(email) C/index.page:23(email)
-#: C/image-viewer.vala.page:27(email) C/image.vala.page:13(email)
-#: C/helloWorld.js.page:20(email) C/guitar-tuner.vala.page:22(email)
-#: C/GtkApplicationWindow.vala.page:13(email)
-#: C/GtkApplicationWindow.py.page:13(email)
-#: C/GtkApplicationWindow.js.page:13(email)
-#: C/GtkApplicationWindow.c.page:13(email) C/grid.vala.page:15(email)
-#: C/grid.py.page:14(email) C/gmenu.vala.page:20(email)
-#: C/gmenu.py.page:13(email) C/gmenu.js.page:13(email)
-#: C/gmenu.c.page:13(email) C/filechooserdialog.vala.page:16(email)
-#: C/entry.vala.page:13(email) C/documentation.page:11(email)
-#: C/dialog.vala.page:13(email) C/cpp.page:11(email)
-#: C/combobox.vala.page:13(email) C/colorbutton.vala.page:15(email)
-#: C/checkbutton.vala.page:13(email) C/c.page:11(email)
-#: C/button.vala.page:14(email) C/beginner.vala.page:15(email)
-#: C/beginner.py.page:15(email) C/aboutdialog.vala.page:21(email)
-msgid "tiffany antopolski gmail com"
-msgstr "tiffany antopolski gmail com"
-
-#: C/window.vala.page:14(years) C/window.py.page:14(years)
-#: C/window.py.page:19(years) C/window.js.page:14(years)
-#: C/window.c.page:14(years) C/weatherGeonames.js.page:12(years)
-#: C/weatherAutotools.js.page:12(years) C/weatherAppMain.js.page:12(years)
-#: C/weatherApp.js.page:13(years) C/tutorial.py.page:16(years)
-#: C/tutorial.py.page:21(years) C/treeview_treestore.py.page:14(years)
-#: C/treeview_simple_liststore.vala.page:16(years)
-#: C/treeview_simple_liststore.py.page:16(years)
-#: C/treeview_simple_liststore.js.page:17(years)
-#: C/treeview_cellrenderertoggle.py.page:14(years)
-#: C/treeview_advanced_liststore.py.page:17(years) C/tooltip.py.page:15(years)
-#: C/toolbar_builder.vala.page:16(years) C/toolbar_builder.py.page:16(years)
-#: C/toolbar_builder.py.page:22(years) C/toolbar.vala.page:15(years)
-#: C/toolbar.py.page:15(years) C/toolbar.js.page:14(years)
-#: C/togglebutton.vala.page:17(years) C/togglebutton.py.page:17(years)
-#: C/togglebutton.js.page:14(years) C/togglebutton.c.page:18(years)
-#: C/textview.vala.page:14(years) C/textview.py.page:22(years)
-#: C/textview.js.page:18(years) C/textview.c.page:14(years)
-#: C/switch.vala.page:18(years) C/switch.py.page:19(years)
-#: C/switch.js.page:14(years) C/switch.c.page:14(years)
-#: C/strings.py.page:21(years) C/statusbar.vala.page:17(years)
-#: C/statusbar.py.page:17(years) C/statusbar.js.page:14(years)
-#: C/statusbar.c.page:18(years) C/spinner.vala.page:14(years)
-#: C/spinner.py.page:14(years) C/spinner.js.page:14(years)
-#: C/spinner.c.page:15(years) C/spinbutton.vala.page:16(years)
-#: C/spinbutton.py.page:15(years) C/spinbutton.js.page:17(years)
-#: C/spinbutton.c.page:17(years) C/signals-callbacks.py.page:21(years)
-#: C/set-up-gedit.js.page:13(years) C/separator.py.page:15(years)
-#: C/scrolledwindow.vala.page:15(years) C/scrolledwindow.py.page:14(years)
-#: C/scale.vala.page:16(years) C/scale.py.page:15(years)
-#: C/scale.js.page:14(years) C/scale.c.page:16(years)
-#: C/radiobutton.vala.page:17(years) C/radiobutton.py.page:18(years)
-#: C/radiobutton.js.page:14(years) C/radiobutton.c.page:16(years)
-#: C/properties.py.page:21(years) C/progressbar.vala.page:14(years)
-#: C/progressbar.py.page:14(years) C/progressbar.js.page:13(years)
-#: C/progressbar.c.page:15(years) C/paned.py.page:14(years)
-#: C/model-view-controller.py.page:21(years)
-#: C/messagedialog.vala.page:14(years) C/messagedialog.py.page:15(years)
-#: C/messagedialog.js.page:17(years) C/messagedialog.c.page:15(years)
-#: C/menubutton.py.page:14(years) C/menubutton.py.page:20(years)
-#: C/menubutton.vala.page:14(years) C/menubutton.js.page:14(years)
-#: C/menubar.vala.page:16(years) C/menubar.py.page:16(years)
-#: C/menubar.py.page:21(years) C/linkbutton.vala.page:14(years)
-#: C/linkbutton.py.page:15(years) C/linkbutton.js.page:14(years)
-#: C/linkbutton.c.page:14(years) C/label.vala.page:14(years)
-#: C/label.py.page:15(years) C/label.py.page:20(years)
-#: C/label.js.page:14(years) C/label.c.page:15(years)
-#: C/image.vala.page:14(years) C/image.py.page:14(years)
-#: C/image.js.page:13(years) C/image.c.page:14(years)
-#: C/helloWorld.js.page:16(years) C/hellognome.js.page:13(years)
-#: C/guitar-tuner.js.page:13(years) C/GtkApplicationWindow.vala.page:14(years)
-#: C/GtkApplicationWindow.py.page:14(years)
-#: C/GtkApplicationWindow.py.page:19(years)
-#: C/GtkApplicationWindow.js.page:14(years)
-#: C/GtkApplicationWindow.c.page:14(years) C/grid.vala.page:16(years)
-#: C/grid.py.page:15(years) C/grid.py.page:21(years) C/grid.js.page:14(years)
-#: C/grid.c.page:14(years) C/gmenu.vala.page:15(years)
-#: C/gmenu.py.page:14(years) C/gmenu.py.page:20(years)
-#: C/gmenu.js.page:14(years) C/gmenu.c.page:14(years)
-#: C/fontchooserwidget.py.page:15(years)
-#: C/filechooserdialog.vala.page:17(years)
-#: C/filechooserdialog.py.page:17(years) C/entry.vala.page:14(years)
-#: C/entry.py.page:14(years) C/entry.js.page:14(years)
-#: C/entry.c.page:14(years) C/dialog.vala.page:14(years)
-#: C/dialog.py.page:15(years) C/dialog.js.page:14(years)
-#: C/dialog.c.page:16(years) C/combobox_multicolumn.py.page:15(years)
-#: C/combobox.vala.page:14(years) C/combobox.py.page:14(years)
-#: C/combobox.js.page:18(years) C/comboboxtext.js.page:16(years)
-#: C/colorbutton.vala.page:16(years) C/colorbutton.py.page:14(years)
-#: C/checkbutton.vala.page:14(years) C/checkbutton.py.page:15(years)
-#: C/checkbutton.js.page:14(years) C/checkbutton.c.page:14(years)
-#: C/buttonbox.py.page:15(years) C/button.vala.page:15(years)
-#: C/button.py.page:15(years) C/button.js.page:14(years)
-#: C/button.c.page:16(years) C/beginner.js.page:12(years)
-#: C/aboutdialog.vala.page:16(years) C/aboutdialog.py.page:15(years)
-#: C/aboutdialog.js.page:13(years) C/aboutdialog.c.page:16(years)
-#: C/03_getting_the_signal.js.page:17(years)
-#: C/02_welcome_to_the_grid.js.page:16(years)
-msgid "2012"
-msgstr "2012"
+#: C/index.page:12(credit/name) C/message-board.c.page:14(credit/name)
+msgid "Shaun McCance"
+msgstr "Shaun McCance"
 
-#: C/window.vala.page:17(desc) C/window.py.page:22(desc)
-#: C/window.c.page:17(desc)
-#| msgid "A button which can be connected to other widgets"
-msgid "A toplevel window which can contain other widgets"
-msgstr "Un botón de primeiro nivel que pode conter a outros widgets"
+#: C/index.page:14(credit/years) C/message-board.c.page:16(credit/years)
+msgid "2010"
+msgstr "2010"
 
-#: C/window.vala.page:20(title) C/window.py.page:25(title)
-#: C/window.js.page:20(title) C/window.c.page:20(title)
-msgid "Window"
-msgstr "Xanela"
+#: C/index.page:17(credit/name) C/guitar-tuner.c.page:18(credit/name)
+#: C/guitar-tuner.cpp.page:16(credit/name)
+#: C/guitar-tuner.py.page:18(credit/name)
+#: C/guitar-tuner.vala.page:17(credit/name)
+#: C/image-viewer.c.page:18(credit/name)
+#: C/image-viewer.cpp.page:16(credit/name)
+#: C/image-viewer.js.page:18(credit/name)
+#: C/image-viewer.py.page:18(credit/name)
+#: C/image-viewer.vala.page:18(credit/name)
+#: C/magic-mirror.vala.page:18(credit/name)
+#: C/photo-wall.c.page:17(credit/name)
+#: C/record-collection.js.page:18(credit/name)
+msgid "Johannes Schmid"
+msgstr "Johannes Schmid"
 
-#: C/window.vala.page:25(p)
-#| msgid "A first Gtk application"
-msgid "The simplest Gtk.Application"
-msgstr "O Gtk.Application máis simple"
+#: C/index.page:19(credit/years) C/bug-filing.page:11(credit/years)
+#: C/documentation.page:12(credit/years) C/entry.py.page:20(credit/years)
+#: C/model-view-controller.py.page:16(credit/years)
+#: C/properties.py.page:16(credit/years)
+#: C/signals-callbacks.py.page:16(credit/years)
+#: C/strings.py.page:16(credit/years) C/textview.py.page:16(credit/years)
+#: C/toolbar_builder.py.page:28(credit/years)
+#: C/translate.page:12(credit/years)
+msgid "2011"
+msgstr "2011"
 
-#: C/window.vala.page:28(p)
-msgid ""
-"Use <link xref=\"GtkApplicationWindow.vala\">Application Window</link> if "
-"you need GMenu support."
-msgstr ""
-"Use <link xref=\"GtkApplicationWindow.vala\">Xanela de aplicativo</link> se "
-"quere compatibilidade con GMenu."
+#: C/index.page:22(credit/name) C/aboutdialog.vala.page:20(credit/name)
+#: C/beginner.py.page:14(credit/name) C/beginner.vala.page:14(credit/name)
+#: C/bug-filing.page:9(credit/name) C/button.vala.page:13(credit/name)
+#: C/c.page:10(credit/name) C/checkbutton.c.page:12(credit/name)
+#: C/checkbutton.vala.page:12(credit/name)
+#: C/colorbutton.vala.page:14(credit/name)
+#: C/combobox.vala.page:12(credit/name) C/cpp.page:10(credit/name)
+#: C/dialog.vala.page:12(credit/name) C/documentation.page:10(credit/name)
+#: C/entry.vala.page:12(credit/name)
+#: C/filechooserdialog.vala.page:15(credit/name)
+#: C/gmenu.c.page:12(credit/name) C/gmenu.js.page:12(credit/name)
+#: C/gmenu.py.page:12(credit/name) C/gmenu.vala.page:19(credit/name)
+#: C/grid.py.page:13(credit/name) C/grid.vala.page:14(credit/name)
+#: C/GtkApplicationWindow.c.page:12(credit/name)
+#: C/GtkApplicationWindow.js.page:12(credit/name)
+#: C/GtkApplicationWindow.py.page:12(credit/name)
+#: C/GtkApplicationWindow.vala.page:12(credit/name)
+#: C/guitar-tuner.vala.page:21(credit/name)
+#: C/helloWorld.js.page:19(credit/name) C/image.vala.page:12(credit/name)
+#: C/image-viewer.vala.page:26(credit/name) C/js.page:11(credit/name)
+#: C/label.vala.page:12(credit/name) C/linkbutton.vala.page:12(credit/name)
+#: C/menubar.py.page:14(credit/name) C/menubar.vala.page:14(credit/name)
+#: C/menubutton.py.page:12(credit/name) C/menubutton.vala.page:12(credit/name)
+#: C/messagedialog.vala.page:12(credit/name)
+#: C/progressbar.vala.page:12(credit/name) C/py.page:10(credit/name)
+#: C/radiobutton.vala.page:15(credit/name) C/scale.vala.page:14(credit/name)
+#: C/scrolledwindow.vala.page:13(credit/name)
+#: C/spinbutton.vala.page:14(credit/name) C/spinner.vala.page:12(credit/name)
+#: C/statusbar.vala.page:15(credit/name) C/switch.vala.page:16(credit/name)
+#: C/textview.vala.page:12(credit/name)
+#: C/togglebutton.vala.page:15(credit/name) C/toolbar.js.page:12(credit/name)
+#: C/toolbar.vala.page:13(credit/name)
+#: C/toolbar_builder.py.page:14(credit/name)
+#: C/toolbar_builder.vala.page:14(credit/name)
+#: C/treeview_simple_liststore.vala.page:14(credit/name)
+#: C/translate.page:10(credit/name) C/tutorial.py.page:14(credit/name)
+#: C/vala.page:10(credit/name) C/window.c.page:12(credit/name)
+#: C/window.py.page:12(credit/name) C/window.vala.page:12(credit/name)
+msgid "Tiffany Antopolski"
+msgstr "Tiffany Antopolski"
 
-#: C/window.vala.page:33(p) C/window.py.page:60(p) C/window.c.page:29(p)
-#: C/treeview_treestore.py.page:39(p)
-#: C/treeview_simple_liststore.vala.page:27(p)
-#: C/treeview_simple_liststore.py.page:41(p)
-#: C/treeview_simple_liststore.js.page:272(p)
-#: C/treeview_cellrenderertoggle.py.page:39(p)
-#: C/treeview_advanced_liststore.py.page:43(p) C/tooltip.py.page:53(p)
-#: C/toolbar_builder.vala.page:146(p) C/toolbar_builder.py.page:189(p)
-#: C/toolbar.vala.page:29(p) C/toolbar.py.page:50(p) C/toolbar.js.page:26(p)
-#: C/togglebutton.vala.page:28(p) C/togglebutton.py.page:43(p)
-#: C/togglebutton.c.page:31(p) C/textview.vala.page:30(p)
-#: C/textview.py.page:93(p) C/textview.c.page:31(p) C/switch.vala.page:31(p)
-#: C/switch.py.page:46(p) C/switch.c.page:28(p) C/statusbar.vala.page:28(p)
-#: C/statusbar.py.page:50(p) C/statusbar.c.page:31(p)
-#: C/spinner.vala.page:25(p) C/spinner.py.page:38(p) C/spinner.js.page:25(p)
-#: C/spinner.c.page:28(p) C/spinbutton.vala.page:27(p)
-#: C/spinbutton.py.page:45(p) C/spinbutton.c.page:30(p)
-#: C/separator.py.page:35(p) C/scrolledwindow.vala.page:26(p)
-#: C/scrolledwindow.py.page:41(p) C/scale.vala.page:27(p)
-#: C/scale.py.page:53(p) C/scale.c.page:29(p) C/radiobutton.vala.page:28(p)
-#: C/radiobutton.py.page:49(p) C/radiobutton.c.page:29(p)
-#: C/progressbar.vala.page:25(p) C/progressbar.py.page:53(p)
-#: C/progressbar.js.page:34(p) C/progressbar.c.page:28(p)
-#: C/paned.py.page:38(p) C/messagedialog.vala.page:26(p)
-#: C/messagedialog.py.page:54(p) C/messagedialog.js.page:189(p)
-#: C/messagedialog.c.page:31(p) C/menubutton.py.page:50(p)
-#: C/menubutton.vala.page:28(p) C/menubutton.js.page:28(p)
-#: C/menubar.vala.page:187(p) C/menubar.py.page:181(p)
-#: C/linkbutton.vala.page:25(p) C/linkbutton.py.page:44(p)
-#: C/linkbutton.js.page:25(p) C/linkbutton.c.page:27(p)
-#: C/label.vala.page:26(p) C/label.py.page:86(p) C/label.js.page:25(p)
-#: C/label.c.page:32(p) C/image.vala.page:27(p) C/image.py.page:98(p)
-#: C/image.js.page:27(p) C/image.c.page:28(p)
-#: C/GtkApplicationWindow.vala.page:26(p) C/GtkApplicationWindow.py.page:48(p)
-#: C/GtkApplicationWindow.js.page:26(p) C/GtkApplicationWindow.c.page:25(p)
-#: C/grid.vala.page:27(p) C/grid.py.page:53(p) C/grid.js.page:29(p)
-#: C/grid.c.page:27(p) C/gmenu.vala.page:37(p) C/gmenu.py.page:74(p)
-#: C/gmenu.js.page:25(p) C/gmenu.c.page:27(p)
-#: C/fontchooserwidget.py.page:43(p) C/filechooserdialog.vala.page:35(p)
-#: C/filechooserdialog.py.page:69(p) C/entry.vala.page:25(p)
-#: C/entry.py.page:59(p) C/entry.js.page:25(p) C/entry.c.page:27(p)
-#: C/dialog.vala.page:27(p) C/dialog.py.page:45(p) C/dialog.js.page:25(p)
-#: C/dialog.c.page:29(p) C/combobox_multicolumn.py.page:41(p)
-#: C/combobox.vala.page:25(p) C/combobox.py.page:38(p)
-#: C/combobox.js.page:233(p) C/comboboxtext.js.page:176(p)
-#: C/colorbutton.vala.page:27(p) C/colorbutton.py.page:38(p)
-#: C/checkbutton.vala.page:25(p) C/checkbutton.py.page:44(p)
-#: C/checkbutton.c.page:25(p) C/buttonbox.py.page:45(p) C/button.py.page:50(p)
-#: C/button.js.page:26(p) C/button.c.page:29(p) C/aboutdialog.vala.page:34(p)
-#: C/aboutdialog.py.page:41(p) C/aboutdialog.js.page:24(p)
-#: C/aboutdialog.c.page:30(p)
-msgid "In this sample we used the following:"
-msgstr "Neste exemplo empregaremos o seguinte:"
+#: C/index.page:27(page/title)
+msgid "GNOME Developer Platform Demos"
+msgstr "Demostracións da plataforma de desenvolvemento de GNOME"
 
-#: C/window.vala.page:37(link) C/window.js.page:38(link)
-#: C/treeview_simple_liststore.js.page:276(link)
-#: C/togglebutton.js.page:154(link) C/textview.js.page:249(link)
-#: C/switch.js.page:267(link) C/statusbar.js.page:222(link)
-#: C/spinner.js.page:30(link) C/spinbutton.js.page:201(link)
-#: C/scale.js.page:210(link) C/radiobutton.js.page:275(link)
-#: C/progressbar.js.page:39(link) C/messagedialog.js.page:195(link)
-#: C/linkbutton.js.page:29(link) C/label.vala.page:30(link)
-#: C/label.js.page:29(link) C/image.js.page:31(link)
-#: C/GtkApplicationWindow.vala.page:30(link)
-#: C/GtkApplicationWindow.js.page:30(link) C/grid.js.page:33(link)
-#: C/gmenu.vala.page:41(link) C/entry.js.page:29(link)
-#: C/dialog.js.page:29(link) C/combobox.js.page:237(link)
-#: C/comboboxtext.js.page:180(link) C/checkbutton.js.page:137(link)
-#: C/button.js.page:30(link) C/aboutdialog.vala.page:38(link)
-#: C/aboutdialog.js.page:31(link)
-msgid "Gtk.Application"
-msgstr "Gtk.Application"
-
-#: C/window.vala.page:38(p)
-msgid ""
-"The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
-"\">Gtk.Window</link>"
+#: C/index.page:30(section/title)
+msgid "How to set up your development environment"
 msgstr ""
-"O widget <link "
-"href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk.Window</link>"
 
-#: C/window.vala.page:40(p)
-msgid ""
-"The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
-"\">Gtk.WindowPosition</link>"
+#: C/index.page:34(section/title)
+msgid "Tutorials, code samples, platform demos and more"
 msgstr ""
-"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html\";>"
-"Gtk.WindowPosition</link>"
 
-#: C/window.vala.page:42(p)
+#: C/index.page:38(section/title)
+msgid "Get Involved"
+msgstr "Involucrarse"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/02_welcome_to_the_grid.js.page:94(media)
+#| msgid ""
+#| "@@image: 'media/02_jsgrid_01.png'; md5=3fdc22d361cf801f71557fdc76ae5b49"
+msgctxt "_"
 msgid ""
-"The method <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
-"set_default_size.html\">set_default_size</link>"
+"external ref='media/02_jsgrid_01.png' md5='3fdc22d361cf801f71557fdc76ae5b49'"
 msgstr ""
-"O método <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.set_default_";
-"size.html\">set_default_size</link>"
-
-#: C/window.vala.page:44(link)
-msgid "border_width"
-msgstr "border_width"
-
-#: C/window.vala.page:46(link)
-msgid "window_position"
-msgstr "window_position"
-
-#: C/window.py.page:7(title)
-msgid "Window (Python)"
-msgstr "Xanela (Python)"
-
-#: C/window.py.page:17(name) C/tutorial.py.page:19(name)
-#: C/treeview_treestore.py.page:12(name)
-#: C/treeview_simple_liststore.py.page:14(name)
-#: C/treeview_cellrenderertoggle.py.page:12(name)
-#: C/treeview_advanced_liststore.py.page:15(name) C/tooltip.py.page:13(name)
-#: C/toolbar_builder.py.page:20(name) C/toolbar.py.page:13(name)
-#: C/togglebutton.py.page:15(name) C/textview.py.page:20(name)
-#: C/switch.py.page:17(name) C/strings.py.page:19(name)
-#: C/statusbar.py.page:15(name) C/spinner.py.page:12(name)
-#: C/spinbutton.py.page:13(name) C/signals-callbacks.py.page:19(name)
-#: C/separator.py.page:13(name) C/scrolledwindow.py.page:12(name)
-#: C/scale.py.page:13(name) C/radiobutton.py.page:16(name)
-#: C/properties.py.page:19(name) C/progressbar.py.page:12(name)
-#: C/paned.py.page:12(name) C/model-view-controller.py.page:19(name)
-#: C/messagedialog.py.page:13(name) C/menubutton.py.page:18(name)
-#: C/menubar.py.page:19(name) C/linkbutton.py.page:13(name)
-#: C/label.py.page:13(name) C/image.py.page:12(name)
-#: C/GtkApplicationWindow.py.page:17(name) C/grid.py.page:19(name)
-#: C/gmenu.py.page:18(name) C/fontchooserwidget.py.page:13(name)
-#: C/filechooserdialog.py.page:15(name) C/entry.py.page:12(name)
-#: C/dialog.py.page:13(name) C/combobox_multicolumn.py.page:13(name)
-#: C/combobox.py.page:12(name) C/colorbutton.py.page:12(name)
-#: C/checkbutton.py.page:13(name) C/buttonbox.py.page:13(name)
-#: C/button.py.page:13(name) C/aboutdialog.py.page:13(name)
-msgid "Marta Maria Casetti"
-msgstr "Marta Maria Casetti"
+"external ref='media/02_jsgrid_01.png' md5='3fdc22d361cf801f71557fdc76ae5b49'"
 
-#: C/window.py.page:18(email) C/tutorial.py.page:20(email)
-#: C/treeview_treestore.py.page:13(email)
-#: C/treeview_simple_liststore.py.page:15(email)
-#: C/treeview_cellrenderertoggle.py.page:13(email)
-#: C/treeview_advanced_liststore.py.page:16(email) C/tooltip.py.page:14(email)
-#: C/toolbar_builder.py.page:21(email) C/toolbar.py.page:14(email)
-#: C/togglebutton.py.page:16(email) C/textview.py.page:21(email)
-#: C/switch.py.page:18(email) C/strings.py.page:20(email)
-#: C/statusbar.py.page:16(email) C/spinner.py.page:13(email)
-#: C/spinbutton.py.page:14(email) C/signals-callbacks.py.page:20(email)
-#: C/separator.py.page:14(email) C/scrolledwindow.py.page:13(email)
-#: C/scale.py.page:14(email) C/radiobutton.py.page:17(email)
-#: C/properties.py.page:20(email) C/progressbar.py.page:13(email)
-#: C/paned.py.page:13(email) C/model-view-controller.py.page:20(email)
-#: C/messagedialog.py.page:14(email) C/menubutton.py.page:19(email)
-#: C/menubar.py.page:20(email) C/linkbutton.py.page:14(email)
-#: C/label.py.page:14(email) C/image.py.page:13(email)
-#: C/GtkApplicationWindow.py.page:18(email) C/grid.py.page:20(email)
-#: C/gmenu.py.page:19(email) C/fontchooserwidget.py.page:14(email)
-#: C/filechooserdialog.py.page:16(email) C/dialog.py.page:14(email)
-#: C/combobox_multicolumn.py.page:14(email) C/combobox.py.page:13(email)
-#: C/colorbutton.py.page:13(email) C/checkbutton.py.page:14(email)
-#: C/buttonbox.py.page:14(email) C/button.py.page:14(email)
-#: C/aboutdialog.py.page:14(email)
-#| msgid "mdhillca gmail com"
-msgid "mmcasetti gmail com"
-msgstr "mmcasetti gmail com"
-
-#: C/window.py.page:31(p)
-msgid "A minimal Gtk+ Application: a window with a title."
-msgstr "Un aplicativo Gtk+ mínimo: unha xanela con un título."
-
-#: C/window.py.page:34(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/02_welcome_to_the_grid.js.page:149(media)
+#| msgid ""
+#| "@@image: 'media/02_jsgrid_02.png'; md5=07db86b0043ba5c3c24a90d7322bd81e"
+msgctxt "_"
 msgid ""
-"Use <link xref=\"GtkApplicationWindow.py\">Application Window</link> if you "
-"need GMenu support."
+"external ref='media/02_jsgrid_02.png' md5='07db86b0043ba5c3c24a90d7322bd81e'"
 msgstr ""
-"Use <link xref=\"GtkApplicationWindow.py\">Xanela de aplicativo</link> se "
-"quere compatibilidade con GMenu."
+"external ref='media/02_jsgrid_02.png' md5='07db86b0043ba5c3c24a90d7322bd81e'"
 
-#: C/window.py.page:42(title) C/treeview_treestore.py.page:27(title)
-#: C/treeview_simple_liststore.py.page:29(title)
-#: C/treeview_cellrenderertoggle.py.page:27(title)
-#: C/treeview_advanced_liststore.py.page:30(title) C/tooltip.py.page:28(title)
-#: C/toolbar_builder.py.page:162(title) C/toolbar.py.page:29(title)
-#: C/togglebutton.py.page:30(title) C/textview.py.page:42(title)
-#: C/switch.py.page:34(title) C/statusbar.py.page:30(title)
-#: C/spinner.py.page:27(title) C/spinbutton.py.page:28(title)
-#: C/separator.py.page:29(title) C/scrolledwindow.py.page:27(title)
-#: C/scale.py.page:28(title) C/radiobutton.py.page:31(title)
-#: C/progressbar.py.page:37(title) C/paned.py.page:27(title)
-#: C/messagedialog.py.page:28(title) C/menubutton.py.page:35(title)
-#: C/linkbutton.py.page:29(title) C/label.py.page:33(title)
-#: C/image.py.page:31(title) C/GtkApplicationWindow.py.page:32(title)
-#: C/grid.py.page:35(title) C/gmenu.py.page:34(title)
-#: C/fontchooserwidget.py.page:29(title) C/filechooserdialog.py.page:51(title)
-#: C/entry.py.page:32(title) C/dialog.py.page:28(title)
-#: C/combobox_multicolumn.py.page:28(title) C/combobox.py.page:27(title)
-#: C/colorbutton.py.page:27(title) C/checkbutton.py.page:28(title)
-#: C/buttonbox.py.page:29(title) C/button.py.page:29(title)
-#: C/aboutdialog.py.page:28(title)
-msgid "Code used to generate this example"
-msgstr "Código usado para xerar este exemplo"
-
-#: C/window.py.page:49(title)
-msgid "Useful methods for a Window widget"
-msgstr "Métodos útiles para o widget de Xanela"
-
-#: C/window.py.page:50(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/02_welcome_to_the_grid.js.page:166(media)
+#| msgid ""
+#| "@@image: 'media/02_jsgrid_03.png'; md5=817351e73c687d47253c56ed06b6629f"
+msgctxt "_"
 msgid ""
-"<code>window = Gtk.Window(application=self, title=\"Welcome to GNOME\")</"
-"code> sets the title as well, without the need for the line <code>window."
-"set_title(\"Welcome to GNOME\")</code>. For a general discussion of this, "
-"see <link xref=\"properties.py\">here</link>."
+"external ref='media/02_jsgrid_03.png' md5='817351e73c687d47253c56ed06b6629f'"
 msgstr ""
+"external ref='media/02_jsgrid_03.png' md5='817351e73c687d47253c56ed06b6629f'"
 
-#: C/window.py.page:52(p) C/GtkApplicationWindow.py.page:41(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/02_welcome_to_the_grid.js.page:196(media)
+#| msgid ""
+#| "@@image: 'media/02_jsgrid_04.png'; md5=eeaead27cee2851877fc3cfe66177f07"
+msgctxt "_"
 msgid ""
-"<code>set_default_size(200, 100)</code> sets the default size of the window "
-"to a width of <code>200</code> and a height of <code>100</code>; if instead "
-"of a positive number we pass <code>-1</code> we have the default size."
+"external ref='media/02_jsgrid_04.png' md5='eeaead27cee2851877fc3cfe66177f07'"
 msgstr ""
+"external ref='media/02_jsgrid_04.png' md5='eeaead27cee2851877fc3cfe66177f07'"
 
-#: C/window.py.page:53(p) C/GtkApplicationWindow.py.page:42(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/02_welcome_to_the_grid.js.page:205(media)
+#| msgid ""
+#| "@@image: 'media/02_jsgrid_05.png'; md5=a3ad12f432d5977fc1f66302ad5b7498"
+msgctxt "_"
 msgid ""
-"<code>set_position(Gtk.WindowPosition.CENTER)</code> centers the window. "
-"Other options are <code>Gtk.WindowPosition.NONE, Gtk.WindowPosition.MOUSE, "
-"Gtk.WindowPosition.CENTER_ALWAYS, Gtk.WindowPosition.CENTER_ON_PARENT</code>."
+"external ref='media/02_jsgrid_05.png' md5='a3ad12f432d5977fc1f66302ad5b7498'"
 msgstr ""
+"external ref='media/02_jsgrid_05.png' md5='a3ad12f432d5977fc1f66302ad5b7498'"
 
-#: C/window.py.page:58(title) C/treeview_treestore.py.page:38(title)
-#: C/treeview_simple_liststore.py.page:40(title)
-#: C/treeview_cellrenderertoggle.py.page:38(title)
-#: C/treeview_advanced_liststore.py.page:42(title) C/tooltip.py.page:52(title)
-#: C/toolbar_builder.py.page:188(title) C/toolbar.py.page:49(title)
-#: C/togglebutton.py.page:42(title) C/textview.py.page:92(title)
-#: C/switch.py.page:45(title) C/statusbar.py.page:49(title)
-#: C/spinner.py.page:37(title) C/spinbutton.py.page:44(title)
-#: C/scrolledwindow.py.page:40(title) C/scale.py.page:52(title)
-#: C/radiobutton.py.page:48(title) C/progressbar.py.page:52(title)
-#: C/paned.py.page:37(title) C/messagedialog.py.page:53(title)
-#: C/menubutton.py.page:49(title) C/menubar.py.page:180(title)
-#: C/linkbutton.py.page:43(title) C/label.py.page:85(title)
-#: C/image.py.page:97(title) C/GtkApplicationWindow.py.page:47(title)
-#: C/grid.py.page:52(title) C/gmenu.py.page:73(title)
-#: C/fontchooserwidget.py.page:42(title) C/filechooserdialog.py.page:68(title)
-#: C/entry.py.page:58(title) C/dialog.py.page:44(title)
-#: C/combobox_multicolumn.py.page:40(title) C/combobox.py.page:37(title)
-#: C/colorbutton.py.page:37(title) C/checkbutton.py.page:43(title)
-#: C/buttonbox.py.page:44(title) C/button.py.page:49(title)
-#: C/aboutdialog.py.page:40(title)
-msgid "API References"
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/02_welcome_to_the_grid.js.page:216(media)
+#| msgid ""
+#| "@@image: 'media/02_jsgrid_06.png'; md5=450e48dbf6b8f5ce1c208e4812e1714b"
+msgctxt "_"
+msgid ""
+"external ref='media/02_jsgrid_06.png' md5='450e48dbf6b8f5ce1c208e4812e1714b'"
 msgstr ""
+"external ref='media/02_jsgrid_06.png' md5='450e48dbf6b8f5ce1c208e4812e1714b'"
 
-#: C/window.py.page:62(link) C/window.c.page:33(link)
-#: C/togglebutton.c.page:35(link) C/textview.c.page:35(link)
-#: C/switch.c.page:32(link) C/statusbar.c.page:35(link)
-#: C/spinner.c.page:32(link) C/spinbutton.c.page:34(link)
-#: C/scale.c.page:33(link) C/radiobutton.c.page:33(link)
-#: C/progressbar.c.page:32(link) C/messagedialog.py.page:64(link)
-#: C/messagedialog.c.page:35(link) C/linkbutton.c.page:31(link)
-#: C/label.c.page:36(link) C/image.vala.page:31(link) C/image.c.page:32(link)
-#: C/GtkApplicationWindow.py.page:52(link)
-#: C/GtkApplicationWindow.c.page:29(link) C/grid.py.page:55(link)
-#: C/grid.c.page:31(link) C/entry.c.page:31(link) C/dialog.c.page:33(link)
-#: C/checkbutton.py.page:46(link) C/button.c.page:33(link)
-#: C/aboutdialog.py.page:48(link) C/aboutdialog.c.page:34(link)
-#| msgid "Gtk.Application"
-msgid "GtkApplication"
-msgstr "GtkApplication"
-
-#: C/window.py.page:63(link) C/window.c.page:34(link)
-#: C/togglebutton.c.page:36(link) C/textview.c.page:36(link)
-#: C/switch.c.page:33(link) C/statusbar.c.page:36(link)
-#: C/spinner.c.page:33(link) C/spinbutton.c.page:35(link)
-#: C/separator.py.page:37(link) C/scale.c.page:34(link)
-#: C/radiobutton.py.page:51(link) C/radiobutton.c.page:34(link)
-#: C/progressbar.c.page:33(link) C/messagedialog.py.page:60(link)
-#: C/messagedialog.c.page:37(link) C/linkbutton.py.page:46(link)
-#: C/linkbutton.c.page:32(link) C/label.py.page:89(link)
-#: C/label.c.page:37(link) C/image.py.page:101(link) C/image.c.page:33(link)
-#: C/grid.c.page:32(link) C/filechooserdialog.py.page:73(link)
-#: C/entry.c.page:32(link) C/dialog.py.page:50(link) C/dialog.c.page:34(link)
-#: C/button.py.page:53(link) C/button.c.page:34(link)
-#: C/aboutdialog.c.page:35(link)
-#| msgid "Window"
-msgid "GtkWindow"
-msgstr "GtkWindow"
-
-#: C/window.js.page:7(title)
-#| msgid "JavaScript"
-msgid "Window (JavaScript)"
-msgstr "Xanela (JavaScript)"
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/02_welcome_to_the_grid.js.page:226(media)
+#| msgid ""
+#| "@@image: 'media/02_jsgrid_07.png'; md5=0b304d70728903fbb2601d55bf00fdb9"
+msgctxt "_"
+msgid ""
+"external ref='media/02_jsgrid_07.png' md5='0b304d70728903fbb2601d55bf00fdb9'"
+msgstr ""
+"external ref='media/02_jsgrid_07.png' md5='0b304d70728903fbb2601d55bf00fdb9'"
 
-#: C/window.js.page:12(name) C/treeview_simple_liststore.js.page:15(name)
-#: C/togglebutton.js.page:12(name) C/textview.js.page:16(name)
-#: C/switch.js.page:12(name) C/statusbar.js.page:12(name)
-#: C/spinner.js.page:12(name) C/spinbutton.js.page:15(name)
-#: C/set-up-gedit.js.page:11(name) C/scale.js.page:12(name)
-#: C/radiobutton.js.page:12(name) C/progressbar.js.page:11(name)
-#: C/messagedialog.js.page:15(name) C/linkbutton.js.page:12(name)
-#: C/label.js.page:12(name) C/image.js.page:11(name)
-#: C/hellognome.js.page:11(name) C/grid.js.page:17(name)
-#: C/entry.js.page:12(name) C/dialog.js.page:12(name)
-#: C/combobox.js.page:16(name) C/comboboxtext.js.page:14(name)
-#: C/checkbutton.js.page:12(name) C/button.js.page:12(name)
-#: C/aboutdialog.js.page:11(name) C/03_getting_the_signal.js.page:15(name)
-#: C/02_welcome_to_the_grid.js.page:14(name)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/02_welcome_to_the_grid.js.page:248(media)
+#| msgid "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
+msgctxt "_"
+msgid ""
+"external ref='media/02_jsgrid_08.png' md5='78890beb47bd11360154b8ca4d50d1ff'"
+msgstr ""
+"external ref='media/02_jsgrid_08.png' md5='78890beb47bd11360154b8ca4d50d1ff'"
+
+#: C/02_welcome_to_the_grid.js.page:14(credit/name)
+#: C/03_getting_the_signal.js.page:15(credit/name)
+#: C/aboutdialog.js.page:11(credit/name) C/button.js.page:12(credit/name)
+#: C/checkbutton.js.page:12(credit/name)
+#: C/comboboxtext.js.page:14(credit/name) C/combobox.js.page:16(credit/name)
+#: C/dialog.js.page:12(credit/name) C/entry.js.page:12(credit/name)
+#: C/grid.js.page:17(credit/name) C/hellognome.js.page:11(credit/name)
+#: C/image.js.page:11(credit/name) C/label.js.page:12(credit/name)
+#: C/linkbutton.js.page:12(credit/name)
+#: C/messagedialog.js.page:15(credit/name)
+#: C/progressbar.js.page:11(credit/name) C/radiobutton.js.page:12(credit/name)
+#: C/scale.js.page:12(credit/name) C/set-up-gedit.js.page:11(credit/name)
+#: C/spinbutton.js.page:15(credit/name) C/spinner.js.page:12(credit/name)
+#: C/statusbar.js.page:12(credit/name) C/switch.js.page:12(credit/name)
+#: C/textview.js.page:16(credit/name) C/togglebutton.js.page:12(credit/name)
+#: C/treeview_simple_liststore.js.page:15(credit/name)
+#: C/window.js.page:12(credit/name)
 msgid "Taryn Fox"
 msgstr "Taryn Fox"
 
-#: C/window.js.page:13(email) C/treeview_simple_liststore.js.page:16(email)
-#: C/togglebutton.js.page:13(email) C/textview.js.page:17(email)
-#: C/switch.js.page:13(email) C/statusbar.js.page:13(email)
-#: C/spinner.js.page:13(email) C/spinbutton.js.page:16(email)
-#: C/set-up-gedit.js.page:12(email) C/scale.js.page:13(email)
-#: C/radiobutton.js.page:13(email) C/progressbar.js.page:12(email)
-#: C/messagedialog.js.page:16(email) C/linkbutton.js.page:13(email)
-#: C/label.js.page:13(email) C/image.js.page:12(email)
-#: C/hellognome.js.page:12(email) C/grid.js.page:18(email)
-#: C/entry.js.page:13(email) C/dialog.js.page:13(email)
-#: C/combobox.js.page:17(email) C/comboboxtext.js.page:15(email)
-#: C/checkbutton.js.page:13(email) C/button.js.page:13(email)
-#: C/aboutdialog.js.page:12(email) C/03_getting_the_signal.js.page:16(email)
-#: C/02_welcome_to_the_grid.js.page:15(email)
-msgid "jewelfox fursona net"
-msgstr "jewelfox fursona net"
-
-#: C/window.js.page:17(desc)
-msgid "A basic window which can contain other widgets"
-msgstr "Unha xanela de primeiro nivel que pode conter a outros widgets"
+#: C/02_welcome_to_the_grid.js.page:16(credit/years)
+#: C/03_getting_the_signal.js.page:17(credit/years)
+#: C/aboutdialog.c.page:16(credit/years)
+#: C/aboutdialog.js.page:13(credit/years)
+#: C/aboutdialog.py.page:15(credit/years)
+#: C/aboutdialog.vala.page:16(credit/years)
+#: C/beginner.js.page:12(credit/years) C/button.c.page:16(credit/years)
+#: C/button.js.page:14(credit/years) C/button.py.page:15(credit/years)
+#: C/button.vala.page:15(credit/years) C/buttonbox.py.page:15(credit/years)
+#: C/checkbutton.c.page:14(credit/years)
+#: C/checkbutton.js.page:14(credit/years)
+#: C/checkbutton.py.page:15(credit/years)
+#: C/checkbutton.vala.page:14(credit/years)
+#: C/colorbutton.py.page:14(credit/years)
+#: C/colorbutton.vala.page:16(credit/years)
+#: C/comboboxtext.js.page:16(credit/years) C/combobox.js.page:18(credit/years)
+#: C/combobox.py.page:14(credit/years) C/combobox.vala.page:14(credit/years)
+#: C/combobox_multicolumn.py.page:15(credit/years)
+#: C/dialog.c.page:16(credit/years) C/dialog.js.page:14(credit/years)
+#: C/dialog.py.page:15(credit/years) C/dialog.vala.page:14(credit/years)
+#: C/entry.c.page:14(credit/years) C/entry.js.page:14(credit/years)
+#: C/entry.py.page:14(credit/years) C/entry.vala.page:14(credit/years)
+#: C/filechooserdialog.py.page:17(credit/years)
+#: C/filechooserdialog.vala.page:17(credit/years)
+#: C/fontchooserwidget.py.page:15(credit/years)
+#: C/gmenu.c.page:14(credit/years) C/gmenu.js.page:14(credit/years)
+#: C/gmenu.py.page:14(credit/years) C/gmenu.py.page:20(credit/years)
+#: C/gmenu.vala.page:15(credit/years) C/grid.c.page:14(credit/years)
+#: C/grid.js.page:14(credit/years) C/grid.py.page:15(credit/years)
+#: C/grid.py.page:21(credit/years) C/grid.vala.page:16(credit/years)
+#: C/GtkApplicationWindow.c.page:14(credit/years)
+#: C/GtkApplicationWindow.js.page:14(credit/years)
+#: C/GtkApplicationWindow.py.page:14(credit/years)
+#: C/GtkApplicationWindow.py.page:19(credit/years)
+#: C/GtkApplicationWindow.vala.page:14(credit/years)
+#: C/guitar-tuner.js.page:13(credit/years)
+#: C/hellognome.js.page:13(credit/years) C/helloWorld.js.page:16(credit/years)
+#: C/image.c.page:14(credit/years) C/image.js.page:13(credit/years)
+#: C/image.py.page:14(credit/years) C/image.vala.page:14(credit/years)
+#: C/label.c.page:15(credit/years) C/label.js.page:14(credit/years)
+#: C/label.py.page:15(credit/years) C/label.py.page:20(credit/years)
+#: C/label.vala.page:14(credit/years) C/linkbutton.c.page:14(credit/years)
+#: C/linkbutton.js.page:14(credit/years) C/linkbutton.py.page:15(credit/years)
+#: C/linkbutton.vala.page:14(credit/years) C/menubar.py.page:16(credit/years)
+#: C/menubar.py.page:21(credit/years) C/menubar.vala.page:16(credit/years)
+#: C/menubutton.js.page:14(credit/years) C/menubutton.py.page:14(credit/years)
+#: C/menubutton.py.page:20(credit/years)
+#: C/menubutton.vala.page:14(credit/years)
+#: C/messagedialog.c.page:15(credit/years)
+#: C/messagedialog.js.page:17(credit/years)
+#: C/messagedialog.py.page:15(credit/years)
+#: C/messagedialog.vala.page:14(credit/years)
+#: C/model-view-controller.py.page:21(credit/years)
+#: C/paned.py.page:14(credit/years) C/progressbar.c.page:15(credit/years)
+#: C/progressbar.js.page:13(credit/years)
+#: C/progressbar.py.page:14(credit/years)
+#: C/progressbar.vala.page:14(credit/years)
+#: C/properties.py.page:21(credit/years) C/radiobutton.c.page:16(credit/years)
+#: C/radiobutton.js.page:14(credit/years)
+#: C/radiobutton.py.page:18(credit/years)
+#: C/radiobutton.vala.page:17(credit/years) C/scale.c.page:16(credit/years)
+#: C/scale.js.page:14(credit/years) C/scale.py.page:15(credit/years)
+#: C/scale.vala.page:16(credit/years)
+#: C/scrolledwindow.py.page:14(credit/years)
+#: C/scrolledwindow.vala.page:15(credit/years)
+#: C/separator.py.page:15(credit/years)
+#: C/set-up-gedit.js.page:13(credit/years)
+#: C/signals-callbacks.py.page:21(credit/years)
+#: C/spinbutton.c.page:17(credit/years) C/spinbutton.js.page:17(credit/years)
+#: C/spinbutton.py.page:15(credit/years)
+#: C/spinbutton.vala.page:16(credit/years) C/spinner.c.page:15(credit/years)
+#: C/spinner.js.page:14(credit/years) C/spinner.py.page:14(credit/years)
+#: C/spinner.vala.page:14(credit/years) C/statusbar.c.page:18(credit/years)
+#: C/statusbar.js.page:14(credit/years) C/statusbar.py.page:17(credit/years)
+#: C/statusbar.vala.page:17(credit/years) C/strings.py.page:21(credit/years)
+#: C/switch.c.page:14(credit/years) C/switch.js.page:14(credit/years)
+#: C/switch.py.page:19(credit/years) C/switch.vala.page:18(credit/years)
+#: C/textview.c.page:14(credit/years) C/textview.js.page:18(credit/years)
+#: C/textview.py.page:22(credit/years) C/textview.vala.page:14(credit/years)
+#: C/togglebutton.c.page:18(credit/years)
+#: C/togglebutton.js.page:14(credit/years)
+#: C/togglebutton.py.page:17(credit/years)
+#: C/togglebutton.vala.page:17(credit/years)
+#: C/toolbar.js.page:14(credit/years) C/toolbar.py.page:15(credit/years)
+#: C/toolbar.vala.page:15(credit/years)
+#: C/toolbar_builder.py.page:16(credit/years)
+#: C/toolbar_builder.py.page:22(credit/years)
+#: C/toolbar_builder.vala.page:16(credit/years)
+#: C/tooltip.py.page:15(credit/years)
+#: C/treeview_advanced_liststore.py.page:17(credit/years)
+#: C/treeview_cellrenderertoggle.py.page:14(credit/years)
+#: C/treeview_simple_liststore.js.page:17(credit/years)
+#: C/treeview_simple_liststore.py.page:16(credit/years)
+#: C/treeview_simple_liststore.vala.page:16(credit/years)
+#: C/treeview_treestore.py.page:14(credit/years)
+#: C/tutorial.py.page:16(credit/years) C/tutorial.py.page:21(credit/years)
+#: C/weatherApp.js.page:13(credit/years)
+#: C/weatherAppMain.js.page:12(credit/years)
+#: C/weatherAutotools.js.page:12(credit/years)
+#: C/weatherGeonames.js.page:12(credit/years) C/window.c.page:14(credit/years)
+#: C/window.js.page:14(credit/years) C/window.py.page:14(credit/years)
+#: C/window.py.page:19(credit/years) C/window.vala.page:14(credit/years)
+msgid "2012"
+msgstr "2012"
 
-#: C/window.js.page:25(p)
-#| msgid "A first Gtk application"
-msgid "A minimal GtkApplication"
-msgstr "Un GtkApplication mínimo"
+#: C/02_welcome_to_the_grid.js.page:19(info/desc)
+msgid "Learn how to lay out UI components, like Images and Labels."
+msgstr "Aprenda como dispor compoñentes de IU, como imaxes e etiquetas."
+
+#: C/02_welcome_to_the_grid.js.page:22(page/title)
+msgid "2. Welcome to the Grid"
+msgstr "2. Benvido á grella"
 
-#: C/window.js.page:28(p)
+#: C/02_welcome_to_the_grid.js.page:24(synopsis/p)
 msgid ""
-"Use <link xref=\"GtkApplicationWindow.js\">ApplicationWindow</link> if you "
-"need GMenu support."
+"This tutorial will show you how to create basic widgets, or parts of the "
+"GNOME user interface, like Images and Labels. You'll then learn how to "
+"arrange them all in a Grid, which lets you put widgets exactly where you "
+"want them."
 msgstr ""
-"Use <link xref=\"GtkApplicationWindow.js\">Xanela de aplicativo</link> se "
-"quere compatibilidade con GMenu."
-
-#: C/window.js.page:34(p)
-msgid "In this example we used the following:"
-msgstr "Neste exemplo empregaremos o seguinte:"
-
-#: C/window.js.page:39(link) C/toolbar.js.page:30(link)
-#| msgid "Window"
-msgid "Gtk.Window"
-msgstr "Gtk.Window"
-
-#: C/window.c.page:7(title)
-#| msgid "Window"
-msgid "Window (C)"
-msgstr "Xanela (C)"
+"Este titorial mostraralle como crear widgets básicos, ou partes da interface "
+"de usuario de GNOME, como as imaxes e etiquetas. Aprenderá como dispolas "
+"todas na Grella, que lle permite poñer widgets exactamente como quere."
 
-#: C/window.c.page:23(p)
+#: C/02_welcome_to_the_grid.js.page:25(note/p)
 msgid ""
-"A minimal GtkApplication. Use <link xref=\"GtkApplicationWindow.c"
-"\">Application Window</link> if you need GMenu support."
+"Have you taken <link xref=\"hellognome.js\">the first tutorial in this "
+"series</link> already? You'll want to do so before continuing."
 msgstr ""
-"Un GtkApplication mínimo. Use <link xref=\"GtkApplicationWindow.c\">Xanela de "
-"aplicativo</link> se quere compatibilidade con GMenu."
+"Ollou xa <link xref=\"hellognome.js\">o primeiro titorial nesta serie</link>? "
+"Debería facelo antes de continuar."
 
-#: C/weatherGeonames.js.page:10(name) C/weatherAutotools.js.page:10(name)
-#: C/weatherAppMain.js.page:10(name) C/weatherApp.js.page:11(name)
-#: C/helloWorld.js.page:14(name) C/guitar-tuner.js.page:11(name)
-#: C/grid.js.page:12(name) C/beginner.js.page:10(name)
-msgid "Susanna Huhtanen"
-msgstr "Susanna Huhtanen"
+#: C/02_welcome_to_the_grid.js.page:31(section/title)
+msgid "Going native"
+msgstr "Facelo nativo"
 
-#: C/weatherGeonames.js.page:11(email) C/weatherAutotools.js.page:11(email)
-#: C/weatherAppMain.js.page:11(email) C/weatherApp.js.page:12(email)
-#: C/helloWorld.js.page:15(email) C/guitar-tuner.js.page:12(email)
-#: C/grid.js.page:13(email) C/beginner.js.page:11(email)
-msgid "ihmis suski gmail com"
-msgstr "ihmis suski gmail com"
+#: C/02_welcome_to_the_grid.js.page:33(section/p)
+msgid ""
+"In the last tutorial, we created what was basically a GNOME window frame for "
+"a web app. All the GNOME-specific code we needed to learn revolved around "
+"putting the WebView -- the widget containing our application -- into an "
+"ApplicationWindow, and telling it to display. The application itself was "
+"written in HTML and JavaScript, just like most pages on the web."
+msgstr ""
+"No anterior titorial, creamos o que era basicamente o marco de xanela de "
+"GNOME para un aplicativo web. Todo o código específico de GNOME que "
+"precisamos aprender estaba relacionado sobre o WebView -- o widget que "
+"contén o noso aplicativo -- nun ApplicationWindow, e dicíndolle que se "
+"mostre. O aplicativo por si mesmo foi escrito en HTML e JavaScript, como se "
+"fora unha páxina web."
 
-#: C/weatherGeonames.js.page:18(title)
-msgid "Local library geoNames"
-msgstr "Biblioteca de geoNames local"
+#: C/02_welcome_to_the_grid.js.page:34(section/p)
+msgid ""
+"This time, we're going to use only native GNOME widgets. A widget is just a "
+"thing, like a checkbox or picture, and GNOME has a wide variety of them to "
+"choose from. We call them \"native\" widgets to distinguish them from things "
+"like the button and header in the web app we wrote. Because instead of using "
+"web code, these are going to be 100 percent GNOME, using Gtk+."
+msgstr ""
+"Desta vez imos usar só widgets de GNOME nativos. Un widget é simplemente "
+"unha cousa, como un campo de verificación ou unha imaxe, e GNOME ten unha "
+"gran cantidade de widgets onde escoller. Chamámolos widgets «nativos» para "
+"distinguilos das cousas como un botón e cabeceira no aplicativo web que "
+"escribimos. Xa que no lugar de usar código web, estes serán 100% GNOME, "
+"usando Gtk+."
 
-#: C/weatherGeonames.js.page:20(p)
+#: C/02_welcome_to_the_grid.js.page:35(note/p)
 msgid ""
-"In this part of the guide we'll construct the local library geoNames using "
-"asynchronous calls. Weather information in this example is fetched from "
-"geonames.org and the application is using the <link href=\"http://en.";
-"wikipedia.org/wiki/List_of_airports_by_ICAO_code:_E\">ICAO codes </link> to "
-"place your weather request. To write and run all the code examples yourself, "
-"you need an editor to write code in, Terminal and GNOME 3 or higher "
-"installed into your computer. In this guide we'll go through the following "
-"parts:"
+"Gtk+ stands for \"GIMP Toolkit\". It's like a toolbox of widgets that you "
+"can reach into, while building your applications. It was originally written "
+"for <link href=\"http://www.gimp.org/\";>the GIMP</link>, which is a free "
+"software image editor."
 msgstr ""
+"Gtk+ significa «GIMP Toolkit». É como unha caixa de ferramentas de widgets "
+"que pode obter, mentres constrúe os seus aplicativos. Foi escrito "
+"orixinalmente para <link href=\"http://www.gimp.org/\";>GIMP</link>, que é un "
+"editor de imaxes software libre."
 
-#: C/weatherGeonames.js.page:23(link) C/weatherGeonames.js.page:31(title)
-msgid "Local library for getting the weather"
-msgstr "Biblioteca global para obter o tempo"
+#: C/02_welcome_to_the_grid.js.page:39(section/title)
+msgid "Setting up our application"
+msgstr "Configurar o seu aplicativo"
 
-#: C/weatherGeonames.js.page:24(link)
-msgid "Creating function geoNames"
-msgstr "Crear función geoNames"
+#: C/02_welcome_to_the_grid.js.page:41(section/p)
+msgid ""
+"Before we dig out any widgets from the Gtk+ toolbox, we first need to write "
+"the basic boilerplate code that our application requires."
+msgstr ""
+"Antes de profundizar en calquera widget da caixa de ferramentas de Gtk+, "
+"primeiro debemos escribir un código básico de arrinque que o noso aplicativo "
+"require."
 
-#: C/weatherGeonames.js.page:25(link)
-msgid "Methods for geoNames"
-msgstr "Métodos para geoNames"
+#: C/02_welcome_to_the_grid.js.page:42(section/code)
+#: C/comboboxtext.js.page:30(section/code) C/textview.js.page:38(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+msgstr ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
 
-#: C/weatherGeonames.js.page:26(link) C/weatherGeonames.js.page:101(title)
-msgid "geonames.js"
-msgstr "geonames.js"
+#: C/02_welcome_to_the_grid.js.page:48(section/p)
+msgid ""
+"This part always goes at the start of your code. Depending on what you'll be "
+"doing with it, you may want to declare more imports here. What we're writing "
+"today is pretty basic, so these are all we need; Gtk for the widgets, and "
+"Lang so we can use Lang.bind to connect our application's activate and "
+"startup signals to the requisite functions."
+msgstr ""
+"Esta parte sempre vai ao inicio do seu código. Dependendo do que faga con "
+"el, pode querer declarar máis imports aquí. O que estamos escribindo hoxe é "
+"moi básico, polo que vai ser todo o que imos precisar; Gtk para os widgets e "
+"Lang para que poidamos usar Lang.bind para conectar os sinais do aplicativo "
+"«activate» e «startup» ás funcións requiridas."
 
-#: C/weatherGeonames.js.page:32(p)
-msgid "For this we need a new file that will be our local library."
-msgstr "Para isto precisamos un novo ficheiro que será a nosa biblioteca local."
+#: C/02_welcome_to_the_grid.js.page:49(section/p)
+msgid "Speaking of which:"
+msgstr "Falando diso:"
 
-#: C/weatherGeonames.js.page:38(p)
+#: C/02_welcome_to_the_grid.js.page:50(section/code)
+#, no-wrap
 msgid ""
-"In the first lines we'll import and initialize the libraries we need to use "
-"in this local library. Soup handles all the requests we have to make with "
-"http."
+"\n"
+"const WelcomeToTheGrid = new Lang.Class({\n"
+"    Name: 'Welcome to the Grid',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
 msgstr ""
-"Nas primeiras liñas precisamos importar e inicializar as bibliotecas que "
-"precisamos usar nesta biblioteca local. Soup xestiona todas as solicitudes "
-"que facemos con http."
-
-#: C/weatherGeonames.js.page:42(title)
-msgid "Creating function GeoNames"
-msgstr "Crear a función GeoNames"
+"\n"
+"const WelcomeToTheGrid = new Lang.Class({\n"
+"    Name: 'Benvida á Grella',\n"
+"\n"
+"    // Crear o aplicativo\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Conectar os sinais 'activate' e 'startup' ás funcións callback\n"
+"        this.application.connect('activate', Lang.bind(this, "
+"this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, "
+"this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Función callback para o sinal 'activate' presente cando a xanela se "
+"active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Función callback para o sinal 'startup' cando se constrúa a IU\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
 
-#: C/weatherGeonames.js.page:52(p)
+#: C/02_welcome_to_the_grid.js.page:73(section/p)
 msgid ""
-"Here we create the function GeoNames that will handle getting weather for "
-"us. JavaScript allows us to create functions that have little inside at "
-"first and later expand them. This will be done inside the GeoNames.prototype "
-"curly braces{}"
+"This is the start of the application itself, and the _init function which "
+"creates it. It tells _buildUI to create an ApplicationWindow, which we're "
+"going to call _window, and it tells our window to present itself whenever "
+"needed."
 msgstr ""
-"Aquí podemos crear a función GeoNames que xestionará a recollida do tempo "
-"por nós. JavaScript permítenos crear as funcións que terán pouco dentro "
-"delas ao principio pero que crecerán máis tarde. Isto farase dentro das "
-"chaves {} de GeoNames.prototype"
 
-#: C/weatherGeonames.js.page:56(title)
-msgid "Methods for GeoNames"
-msgstr "Métodos para GeoNames"
+#: C/02_welcome_to_the_grid.js.page:74(section/p)
+msgid ""
+"This part, again, is pretty much copy-and-paste, but you always want to give "
+"your application a unique name."
+msgstr ""
 
-#: C/weatherGeonames.js.page:96(p)
+#: C/02_welcome_to_the_grid.js.page:76(section/code)
+#, no-wrap
 msgid ""
-"The first method for GeoNames is getWeather and the second getIcon. In "
-"getWeather we make a http request with soup, handle errors and then parse "
-"the information from the request to form we can use it. In getIcon we simply "
-"compare the results we got from getWeather to the switch we have in order to "
-"get the icon matching current weather. Now that we have our local library "
-"ready, it's time to make use of it."
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 10,\n"
+"            title: \"Welcome to the Grid\"});\n"
 msgstr ""
+"\n"
+"    // Construír a IU do aplicativo\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Crear a xanela do aplicativo\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 10,\n"
+"            title: \"Benvida á grella\"});\n"
 
-#: C/weatherGeonames.js.page:102(p)
+#: C/02_welcome_to_the_grid.js.page:87(section/p)
 msgid ""
-"Here is the entire code for our local library. The main program file calls "
-"this asynchronously."
+"Finally, we start off the _buildUI function by creating a new "
+"ApplicationWindow. We specify that it goes with this application, that it "
+"should appear in the center of the screen, and that there should be at least "
+"10 pixels between the outside edge and any widgets inside of it. We also "
+"give it a title, which will appear at the top of the window."
 msgstr ""
-"Aquí está o código completo para a nosa biblioteca global. O ficheiro do "
-"programa principal chamará a isto de forma asíncrona."
 
-#: C/weatherAutotools.js.page:18(title) C/weatherApp.js.page:30(link)
-msgid "Autotools and Icons"
-msgstr "Autotools e iconas"
+#: C/02_welcome_to_the_grid.js.page:91(section/title)
+msgid "Reaching into the Gtk+ toolbox"
+msgstr ""
 
-#: C/weatherAutotools.js.page:20(p)
+#: C/02_welcome_to_the_grid.js.page:92(section/p)
 msgid ""
-"In this part of the guide well construct the autotools and custom icons "
-"needed for weather application to be a seamless part of your desktop. To "
-"write and run all the code examples yourself, you need an editor to write "
-"code in, Terminal and GNOME 3 or higher installed into your computer. In "
-"this guide we we'll go through the following parts:"
+"What widgets should we use? Well, let's say we want to write an application "
+"that looks like this:"
 msgstr ""
 
-#: C/weatherAutotools.js.page:23(link)
-msgid "Autotools"
-msgstr "Autotools"
-
-#: C/weatherAutotools.js.page:24(link) C/weatherAutotools.js.page:144(title)
-msgid "Custom icons for your application"
-msgstr "Iconas personalizadas para o seu aplicativo"
-
-#: C/weatherAutotools.js.page:31(title)
-msgid "Autotools and necessary files"
-msgstr "Autotools e os ficheiros precisos"
-
-#: C/weatherAutotools.js.page:32(p)
+#: C/02_welcome_to_the_grid.js.page:96(section/p)
 msgid ""
-"Having more than one file in your folder makes using autotools a bit tricky. "
-"You need the .desktop file, autogen.sh, Makefile.am, configure.ac and as a "
-"new file: myapp.sh.in file. Hacking the autotools file is a complicated "
-"field. More information can be found in many different sources, <link href="
-"\"http://en.wikipedia.org/wiki/GNU_build_system\";>the wikipedia article</"
-"link> provides a good overwiev on the subject."
+"We're going to need, at the very least, a picture and a text label to go "
+"with it. Let's start with the picture:"
 msgstr ""
 
-#: C/weatherAutotools.js.page:35(p) C/weatherAutotools.js.page:41(p)
-msgid "weatherapp.desktop"
-msgstr "weatherapp.desktop"
-
-#: C/weatherAutotools.js.page:36(p) C/weatherAutotools.js.page:56(p)
-msgid "weatherapp.sh.in"
-msgstr "weatherapp.sh.in"
-
-#: C/weatherAutotools.js.page:37(p) C/weatherAutotools.js.page:63(p)
-#: C/helloWorld.js.page:162(title)
-msgid "Makefile.am"
-msgstr "Makefile.am"
-
-#: C/weatherAutotools.js.page:38(p) C/weatherAutotools.js.page:130(p)
-#: C/helloWorld.js.page:167(title)
-msgid "configure.ac"
-msgstr "configure.ac"
-
-#: C/weatherAutotools.js.page:39(p) C/helloWorld.js.page:154(title)
-msgid "autogen.sh"
-msgstr "autogen.sh"
-
-#: C/weatherAutotools.js.page:54(p)
+#: C/02_welcome_to_the_grid.js.page:97(section/code)
+#, no-wrap
 msgid ""
-"The thing to notice in this file is that the Exec line will make this ."
-"desktop file work only after running all the other makefiles. Weatherapp.sh "
-"is a small shell script created with the weatherapp.sh.in."
+"\n"
+"        // Create an image\n"
+"        this._image = new Gtk.Image ({ file: \"gnome-image.png\" });\n"
 msgstr ""
+"\n"
+"        // Crear a imaxe\n"
+"        this._image = new Gtk.Image ({ file: \"gnome-image.png\" });\n"
 
-#: C/weatherAutotools.js.page:61(p)
+#: C/02_welcome_to_the_grid.js.page:102(section/p)
 msgid ""
-"This file is a template to the file Makefile will do to be run from .desktop."
+"You can download the image file used in this example <link href=\"https://";
+"live.gnome.org/TarynFox?action=AttachFile&amp;do=get&amp;target=gnome-image."
+"png\">here</link>. Be sure to put it in the same directory as the code "
+"you're writing."
 msgstr ""
-"Este ficheiro é un modelo para o ficheiro Makefile que terá que executar "
-"desde .desktop."
 
-#: C/weatherAutotools.js.page:124(p)
+#: C/02_welcome_to_the_grid.js.page:104(section/code)
+#, no-wrap
 msgid ""
-"This needs a bit more explaining. Compared to the HelloWorld Makefile.am "
-"this has changed quite a bit. Lets go through all the new blocks:"
+"\n"
+"        // Create a label\n"
+"        this._label = new Gtk.Label ({ label: \"Welcome to GNOME, too!\" });\n"
 msgstr ""
-"Isto precisa unha explicación máis profunda. En comparación co Makefile.am "
-"de HelloWorld este cambiou un pouco. Vamos coa explicación de todos os "
-"bloques novos:"
 
-#: C/weatherAutotools.js.page:125(p)
+#: C/02_welcome_to_the_grid.js.page:108(section/p)
 msgid ""
-"bin_scripts are the files that are needed to run your application. In thin "
-"case they are the first two files are the program itself and the third is "
-"the script that launches the application."
+"That code adds in the label beneath. You can see how we create widgets, "
+"here; each one is a part of Gtk, and we can give it properties that "
+"customize how it behaves. In this case, we set the Image's file property to "
+"be the filename of the picture we want, and the Label's label property to be "
+"the sentence that we want beneath the picture."
 msgstr ""
 
-#: C/weatherAutotools.js.page:126(p)
-msgid "EXTRA_DIST are the files that are to be distributed"
-msgstr "EXTRA_DIST son os ficheiros que van ser distribuidos"
-
-#: C/weatherAutotools.js.page:127(p)
-msgid "do_subst block is bits and pieces that need to be where they are"
-msgstr "o bloque do_subst son as partes que precisan estar onde estan"
-
-#: C/weatherAutotools.js.page:128(p)
+#: C/02_welcome_to_the_grid.js.page:109(note/p)
 msgid ""
-"after the comment #icons in the application there are all the icons that are "
-"used by the program. For them to be useful you need to install the icons in "
-"correct places and that is done byt the install-icons: bit"
+"Yes, it sounds redundant for a Label to have a label property, but it's not. "
+"Other widgets that contain text have a label property, so it's "
+"<em>consistent</em> for the Label widget to have one too."
 msgstr ""
 
-#: C/weatherAutotools.js.page:137(p)
-msgid "autohen.sh"
-msgstr "autohen.sh"
-
-#: C/weatherAutotools.js.page:145(p)
+#: C/02_welcome_to_the_grid.js.page:110(section/p)
 msgid ""
-"When thinking about custom icons a good rule of thumb is: do you expect to "
-"see that icon used elsewhere or is it private to your app? If the first (e."
-"g. the icons in the desktop file that are shown by the shell) then you need /"
-"usr/share/hicolor, otherwise (e.g. the weather icons of your app) /usr/share/"
-"$application/bla/bla"
+"We can't just add these widgets to our window in order, though, the same way "
+"HTML elements appear in the order you write them. That's because an "
+"ApplicationWindow can only contain one widget."
 msgstr ""
 
-#: C/weatherAutotools.js.page:146(p)
+#: C/02_welcome_to_the_grid.js.page:111(section/p)
 msgid ""
-"Using autotools you have to make some changes to your .desktop and Makefile."
-"am files. In the desktop file you change the Icon's name Icon=weather-icon. "
-"In the Makefile.am file you add these two lines to the end of your "
-"application #the application icon"
+"How do we get around that? By making that one widget a container widget, "
+"which can hold more than one widget and organize them inside it. Behold: The "
+"Grid."
 msgstr ""
 
-#: C/weatherAutotools.js.page:147(p)
-msgid "appicondir=$(datadir)/icons/hicolor/scalable/apps"
-msgstr "appicondir=$(datadir)/icons/hicolor/scalable/apps"
-
-#: C/weatherAutotools.js.page:148(p)
-msgid "appicon_DATA=weather-icon.svg"
-msgstr "appicon_DATA=weather-icon.svg"
-
-#: C/weatherAppMain.js.page:18(title) C/weatherApp.js.page:28(link)
-msgid "The main program file"
-msgstr "O ficheiro do programa principal"
-
-#: C/weatherAppMain.js.page:20(p)
+#: C/02_welcome_to_the_grid.js.page:112(section/code)
+#, no-wrap
 msgid ""
-"In this part of the guide well construct the main program file of the "
-"weather application. To write and run all the code examples yourself, you "
-"need an editor to write code in, Terminal and GNOME 3 or higher installed "
-"into your computer. In this part we we'll go through the following parts:"
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ();\n"
 msgstr ""
 
-#: C/weatherAppMain.js.page:22(link) C/weatherAppMain.js.page:32(title)
-#: C/helloWorld.js.page:45(title) C/guitar-tuner.js.page:25(link)
-#: C/guitar-tuner.js.page:47(title)
-#| msgid "Designing the application"
-msgid "Script for running the application"
-msgstr "Script para executar o aplicativo"
-
-#: C/weatherAppMain.js.page:23(link) C/weatherAppMain.js.page:40(title)
-#: C/treeview_simple_liststore.js.page:36(title)
-#: C/togglebutton.js.page:27(title) C/textview.js.page:37(title)
-#: C/switch.js.page:34(title) C/statusbar.js.page:27(title)
-#: C/spinbutton.js.page:30(title) C/scale.js.page:27(title)
-#: C/radiobutton.js.page:27(title) C/messagedialog.js.page:30(title)
-#: C/helloWorld.js.page:52(title) C/guitar-tuner.js.page:26(link)
-#: C/guitar-tuner.js.page:54(title) C/combobox.js.page:32(title)
-#: C/comboboxtext.js.page:29(title) C/checkbutton.js.page:27(title)
-msgid "Libraries to import"
-msgstr "Bibliotecas a importar"
-
-#: C/weatherAppMain.js.page:24(link) C/weatherAppMain.js.page:48(title)
-#: C/helloWorld.js.page:58(title) C/guitar-tuner.js.page:27(link)
-#: C/guitar-tuner.js.page:63(title)
-#| msgid "Designing the application"
-msgid "Creating the main window for the application"
-msgstr "Crear a xanela principal para o aplicativo"
+#: C/02_welcome_to_the_grid.js.page:117(section/p)
+msgid ""
+"We're not giving it any properties yet. Those will come later, as we learn "
+"how to use the Grid's powers. First, let's attach the Image and Label we "
+"made to our Grid."
+msgstr ""
 
-#: C/weatherAppMain.js.page:25(link) C/weatherAppMain.js.page:63(title)
-msgid "Adding a grid and all the necessary widgets to it"
-msgstr "Engadir unha grade e todos os widgets precisos para eso"
+#: C/02_welcome_to_the_grid.js.page:118(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Attach the image and label to the grid\n"
+"        this._grid.attach (this._image, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._label, 0, 1, 1, 1);\n"
+msgstr ""
+"\n"
+"        // Anexar a imaxe e a etiqueta á grella\n"
+"        this._grid.attach (this._image, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._label, 0, 1, 1, 1);\n"
 
-#: C/weatherAppMain.js.page:26(link) C/weatherAppMain.js.page:94(title)
-msgid "Requesting the weather information asynchronously"
-msgstr "Solicitando a información do tempo de forma asíncrona"
+#: C/02_welcome_to_the_grid.js.page:124(section/p)
+msgid ""
+"This code looks awfully complicated, but it's not. Here's what those numbers "
+"mean:"
+msgstr ""
 
-#: C/weatherAppMain.js.page:27(link)
-msgid "Connecting signals to button and entry.\"&gt;"
-msgstr "Conectando sinais ao botón e entrada.\"&gt;"
+#: C/02_welcome_to_the_grid.js.page:126(item/p)
+msgid ""
+"The <em>first</em> number is what left-to-right position to put things in, "
+"starting from 0. Any widget that uses a 0 here goes all the way to the left."
+msgstr ""
 
-#: C/weatherAppMain.js.page:28(link)
-msgid "weatherapp.js"
-msgstr "weatherapp.js"
+#: C/02_welcome_to_the_grid.js.page:127(item/p)
+msgid ""
+"The <em>second</em> number is what top-to-botton position to put a given "
+"widget in, starting from 0. The Label goes beneath the Image, so we give the "
+"Image a 0 and the Label a 1 here."
+msgstr ""
 
-#: C/weatherAppMain.js.page:35(p)
+#: C/02_welcome_to_the_grid.js.page:128(item/p)
 msgid ""
-"This line tells how to run the script. It needs to be the first line of the "
-"code and it needs to be executable. To get the execution rights go to "
-"Terminal and run in right folder: chmod +x scriptname. Or you can use the "
-"graphical filemanager. Just go to the right folder where your code is, right "
-"click you code file, choose properties, click the permissions tab and check "
-"the box for allow executing file as a program"
+"The <em>third</em> and <em>fourth</em> numbers are how many columns and rows "
+"a widget should take up. We'll see how these work in a minute."
 msgstr ""
 
-#: C/weatherAppMain.js.page:44(p)
+#: C/02_welcome_to_the_grid.js.page:131(section/code)
+#, no-wrap
 msgid ""
-"In order to have a working program we need to import a GObject Introspection "
-"-library to our use. For working UI, we need Gtk. Gtk is imported in the "
-"beginning so we have it in our use everywhere. We also import our own local "
-"JavaScript library geonames to our use here."
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new WelcomeToTheGrid ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/weatherAppMain.js.page:90(p)
+#: C/02_welcome_to_the_grid.js.page:145(section/p)
 msgid ""
-"In this section we create the grid we are going to use for positioning the "
-"widgets. All the buttons, labels and entrys are initialized and placed on "
-"the grid. As seen from the placing of the different widgets, they don't need "
-"to be related only to one widget. At this point some of the labels don't "
-"have any content. The content for those widgets is applied later. If you run "
-"the application at this stage, you have the UI ready, but the widgets are "
-"not connected to anything. For this we need to first build the weather "
-"searching local library, and then get the information we need "
-"asynchronously. When we have our local library ready we can connect it to "
-"the necessary widgets."
+"Now that we've created the Grid and attached all our widgets to it, we add "
+"it to the window and tell the window to show itself, as the last part of the "
+"_buildUI function. As always, to finish up we create a new instance of the "
+"application's class and tell it to run."
 msgstr ""
 
-#: C/weatherAppMain.js.page:120(p)
+#: C/02_welcome_to_the_grid.js.page:146(section/p)
 msgid ""
-"This function is dedicated for calling for the weather information and "
-"updating labels and icons accordingly. In the beginning of the function we "
-"get the user input for the search. So here for the first time we use our own "
-"library and assign it to variable GeoNames. While assigning WeatherService "
-"we give it the station. The firs thing we do with GeoNames is to request "
-"weather. Everything after GeoNames.getWeather(function(error, weather) "
-"happens only if we either get an error message or weather information. If "
-"either doesn't come, the rest of the program works as normal, so main_Quit "
-"works."
+"Save your application as welcome_to_the_grid.js. Then, to run your "
+"application just open a terminal, go to the directory where your application "
+"is at, and type"
 msgstr ""
 
-#: C/weatherAppMain.js.page:124(title)
-msgid "Connecting signals to button and entry."
+#: C/02_welcome_to_the_grid.js.page:147(section/screen)
+#, no-wrap
+msgid " <output style=\"prompt\">$ </output>gjs welcome_to_the_grid.js "
 msgstr ""
 
-#: C/weatherAppMain.js.page:137(p)
+#: C/02_welcome_to_the_grid.js.page:151(section/p)
 msgid ""
-"And finally we have the connections that make the whole application run as "
-"it should. We connect both the entry and the button to do the same thing, "
-"getting the weather. So it doesn't matter weather you press enter of click "
-"the search button."
+"There we go! But wait. That doesn't look right. Why is the Label crammed up "
+"next to the Image like that? That doesn't look as nice, and it makes it "
+"harder to read. What can we do about this?"
 msgstr ""
 
-#: C/weatherAppMain.js.page:141(title)
-msgid "Weatherapp.js"
-msgstr "Weatherapp.js"
-
-#: C/weatherAppMain.js.page:142(p)
-msgid "Weatherapp.js file looks like this:"
-msgstr "O ficheiro Weatherapp.js é algo como:"
+#: C/02_welcome_to_the_grid.js.page:155(section/title)
+msgid "Tweaking the Grid"
+msgstr ""
 
-#: C/weatherAppMain.js.page:228(p)
-msgid "Running until you have all the autotools files ready. :"
-msgstr "Executando até que todos os ficheiros de autotools estean listos. :"
+#: C/02_welcome_to_the_grid.js.page:157(section/p)
+msgid ""
+"One thing we can do, is we can give the Label a margin_top property when we "
+"create it. This works sort of like setting a margin for an HTML element "
+"using inline CSS styling."
+msgstr ""
 
-#: C/weatherAppMain.js.page:230(output) C/helloWorld.js.page:120(output)
-#: C/helloWorld.js.page:131(output) C/helloWorld.js.page:158(output)
-#: C/guitar-tuner.js.page:230(output)
-msgid "$"
-msgstr "$"
+#: C/02_welcome_to_the_grid.js.page:158(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create a label\n"
+"        this._label = new Gtk.Label ({\n"
+"            label: \"Welcome to GNOME, too!\",\n"
+"            margin_top: 20 });\n"
+msgstr ""
 
-#: C/weatherAppMain.js.page:230(input)
-msgid "GJS_PATH=`pwd` gjs weatherapp.js"
-msgstr "GJS_PATH=`pwd` gjs weatherapp.js"
+#: C/02_welcome_to_the_grid.js.page:165(section/p)
+msgid ""
+"Of course, if we do that then if we replace the Label with something else -- "
+"or add in another widget -- then we have to repeat the margin_top on it too. "
+"Otherwise we end up with something like this:"
+msgstr ""
 
-#: C/weatherAppMain.js.page:231(p)
+#: C/02_welcome_to_the_grid.js.page:168(section/p)
 msgid ""
-"Use this command on terminal while developing your modules. When calling "
-"your program in this manner it knows where to find your custom JSlibraries, "
-"in this case geonames.js."
+"We could give the Image a margin_bottom property, but that won't work when "
+"the new Label is in a separate column. So how about we try this instead:"
 msgstr ""
-"Use esta orde na terminal mentres está desenvolvendo os seus módulos. Cando "
-"chame o seu programa desta forma sabe onde buscar a súa JSLibraries "
-"personalizada, neste caso geonames.js."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/weatherApp.js.page:35(None)
-msgid "@@image: 'media/weatherAppJs.png'; md5=1fe859ac4854273d72ea8fc9203639b2"
-msgstr "@@image: 'media/weatherAppJs.png'; md5=1fe859ac4854273d72ea8fc9203639b2"
+#: C/02_welcome_to_the_grid.js.page:169(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            row_spacing: 20 });\n"
+msgstr ""
 
-#: C/weatherApp.js.page:6(title)
-#| msgid "4 Weather Application"
-msgid "Weather Application (JavaScript)"
-msgstr "Aplicativo de tempo (JavaScript)"
+#: C/02_welcome_to_the_grid.js.page:175(section/p)
+msgid ""
+"That makes it so that there are always 20 pixels of space in between each "
+"horizontal row."
+msgstr ""
 
-#: C/weatherApp.js.page:16(desc)
+#: C/02_welcome_to_the_grid.js.page:176(note/p)
 msgid ""
-"How to plan an application that uses asynchronous calls. Asynchronous calls "
-"will be presented through a weather application."
+"Yes, you can also set the column_spacing property on a Grid, or the "
+"margin_left and margin_right properties on any widget. Try them out, if you "
+"like!"
 msgstr ""
-"Como planificar un aplicativo que use chamadas asíncronas. As chamadas "
-"asíncronas presentaranse mediante un aplicativo de tempo."
 
-#: C/weatherApp.js.page:21(title)
-msgid "4 Weather Application"
-msgstr "4. Aplicativo do tempo"
+#: C/02_welcome_to_the_grid.js.page:180(section/title)
+msgid "Adding more widgets"
+msgstr "Engadir máis widgets"
 
-#: C/weatherApp.js.page:23(p)
+#: C/02_welcome_to_the_grid.js.page:182(section/p)
 msgid ""
-"In this guide well construct a weather application using asynchronous calls. "
-"Weather information in this example is fetched from geonames.org and the "
-"application is using the <link href=\"http://en.wikipedia.org/wiki/";
-"List_of_airports_by_ICAO_code:_E\">ICAO codes </link> to place your weather "
-"request. To write and run all the code examples yourself, you need an editor "
-"to write code in, Terminal and GNOME 3 or higher installed into your "
-"computer. In this guide we we'll go through the following parts:"
+"If we did want to add a second Label, how would we do it so that it actually "
+"looked like it belonged there? One way is to center the Image on top, so "
+"that it's above both Labels instead of just the one on the left. That's "
+"where those other numbers in the Grid's attach method come in:"
 msgstr ""
 
-#: C/weatherApp.js.page:26(link) C/weatherApp.js.page:38(title)
-#| msgid "Creating the user interface"
-msgid "Planning the graphical user interface"
-msgstr "Planificando a interface de usuario gráfica"
-
-#: C/weatherApp.js.page:27(link) C/weatherApp.js.page:42(title)
-msgid "Asynchronous calls"
-msgstr "Chamadas asíncronas"
-
-#: C/weatherApp.js.page:29(link)
-msgid "Local library GeoNames"
-msgstr "Biblioteca de GeoNames local"
-
-#: C/weatherApp.js.page:34(p) C/guitar-tuner.js.page:35(p)
-msgid "After reading this tutorial, you should see this in your screen:"
-msgstr "Despois de ler este manual, debería ver isto na pantalla:"
-
-#: C/weatherApp.js.page:39(p)
+#: C/02_welcome_to_the_grid.js.page:183(section/code)
+#, no-wrap
 msgid ""
-"Structuring an application for GNOME 3 means you will be using <link href="
-"\"http://developer.gnome.org/platform-overview/stable/gtk\";>GTK+</link>. The "
-"most important thing is to remember that the main window will only accept "
-"one widget. You must plan your structure accordingly (this example is using "
-"Gtk.Grid). A useful method is to draw out the main window and place every "
-"widget needed inside that box. By looking at an image of your future "
-"application it is easier to tell what are the relations between widgets. For "
-"example Gtk.Grid places your widgets in relation to other widgets, so after "
-"the first widget is in place, placing widgets can be done in relation to any "
-"widget on the grid."
+"\n"
+"        // Create a second label\n"
+"        this._labelTwo = new Gtk.Label ({\n"
+"            label: \"The cake is a pie.\" });\n"
+"\n"
+"        // Attach the image and labels to the grid\n"
+"        this._grid.attach (this._image, 0, 0, 2, 1);\n"
+"        this._grid.attach (this._label, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._labelTwo, 1, 1, 1, 1);\n"
 msgstr ""
 
-#: C/weatherApp.js.page:43(p)
+#: C/02_welcome_to_the_grid.js.page:194(section/p)
 msgid ""
-"With many programming languages, all operations are run synchronously - you "
-"tell the program to do something, and it will wait until that action "
-"completes before proceeding. This is however bad for graphical user "
-"interfaces, as then the whole application will be frozen while the program "
-"waits for the operation. Going asynchronous (async) helps here. With async "
-"calls, your UI won't be blocked with any requests. Async calls make your "
-"application more flexible and better equipped to handle situations when "
-"calls take more time than expected or for some reason get jammed. Async "
-"calls can be used for example file system I/O and for slower calculations in "
-"the background."
+"After we create the second Label, we attach it to the Grid to the right of "
+"the first Label. Remember, the first two numbers count columns and rows from "
+"left to right and top to bottom, starting with 0. So if the first Label is "
+"in column 0 and row 1, we can put the second in column 1 and row 1 to put it "
+"to the right of the first Label."
 msgstr ""
 
-#: C/weatherApp.js.page:46(p)
+#: C/02_welcome_to_the_grid.js.page:195(section/p)
 msgid ""
-"In this example we have to get data from geonames.org. While we do that we "
-"want the rest of our program to continue. If we wouldn't get any information "
-"from geonames.org for the lack of internet connection and this would be a "
-"synchronous application we would never get to the point where our main_quit"
-"() is processed correctly and the application would have to killed from "
-"Terminal."
+"Note the number 2 in the attach statement for the Image. That's what does "
+"the trick here. That number is how many columns the Image spans, remember? "
+"So when we put it together, we get something like this:"
 msgstr ""
 
-#: C/weatherApp.js.page:49(title)
-msgid "The different parts of the program"
-msgstr "As diferentes partes do programa"
-
-#: C/vala.page:6(title)
-msgid "Vala"
-msgstr "Vala"
-
-#: C/vala.page:15(title)
-msgid "Tutorials, code samples and platform demos in Vala"
-msgstr "Titoriais, exemplos de código e demostracións da plataforma en Vala"
-
-#: C/tutorial.py.page:8(title)
-#| msgid "0 Beginner's Tutorials"
-msgid "Beginner's Tutorial (Python)"
-msgstr "Titorial para principantes (Python)"
+#: C/02_welcome_to_the_grid.js.page:198(section/p)
+msgid "There are two things you should take note of, here."
+msgstr ""
 
-#: C/tutorial.py.page:12(desc)
+#: C/02_welcome_to_the_grid.js.page:200(item/p)
 msgid ""
-"A tutorial for beginners who want to learn how to program GUIs using GTK+ in "
-"Python."
+"Setting the Image to span two columns doesn't stretch the picture itself "
+"horizontally. Instead, it stretches the invisible box taken up by the Image "
+"widget to fill both columns, then places the Image in the center of that box."
 msgstr ""
-"Un titorial para principiantes que queren aprender como programar interfaces "
-"de usuario GTK+ empregando Python."
 
-#: C/tutorial.py.page:25(title)
-#| msgid "0 Beginner's Tutorials"
-msgid "0 Beginner's Tutorial"
-msgstr "0. Titorial para principiantes"
-
-#: C/tutorial.py.page:28(p) C/beginner.vala.page:32(p) C/beginner.c.page:29(p)
+#: C/02_welcome_to_the_grid.js.page:201(item/p)
 msgid ""
-"By following these tutorials you will learn the basics of GUI programming "
-"using Gtk+."
+"Even though we've set the Grid's row_spacing and the ApplicationWindow's "
+"border_width properties, we haven't yet set anything that puts a border in "
+"between the two Labels. They were separate earlier when the Image was in "
+"only one column, but now that it spans both GNOME doesn't see a reason to "
+"keep them apart."
 msgstr ""
-"Seguindo estes titoriais aprenderá as bases para programar interfaces de "
-"usuario empregando Gtk+."
 
-#: C/tutorial.py.page:30(p)
+#: C/02_welcome_to_the_grid.js.page:204(section/p)
 msgid ""
-"If you have never programmed before, or are not familiar with the concepts "
-"of object oriented programming, you may need to learn a few basics first. "
-"The book <link href=\"http://learnpythonthehardway.org/book/\";>Learn Python "
-"the Hard Way</link> or <link href=\"http://docs.python.org/tutorial/index.";
-"html\">The Python Tutorial</link> may be a better place for you to start. "
-"You may also be interested in <link href=\"http://python-gtk-3-tutorial.";
-"readthedocs.org/en/latest/index.html\">The Python GTK+ 3 Tutorial</link>. "
-"Once you master the basics, be sure to come back and check out these "
-"tutorials."
+"There are at least three ways we can get around that last one. First, we can "
+"set a margin_left or margin_right on one of the Labels:"
 msgstr ""
 
-#: C/tutorial.py.page:36(title)
-#| msgid "To run the code samples:"
-msgid "To run the code samples"
-msgstr "Para executar os exemplos de código"
-
-#: C/tutorial.py.page:38(p) C/beginner.vala.page:41(p)
-#: C/beginner.js.page:42(p) C/beginner.c.page:38(p)
-msgid "To run the code samples:"
-msgstr "Para executar os exemplos de código"
-
-#: C/tutorial.py.page:40(p)
-msgid "Copy and paste the code into <var>filename</var>.py"
-msgstr "Copie e pegue o código en <var>nomedeficheiro</var>.py"
-
-#: C/tutorial.py.page:41(p) C/beginner.vala.page:46(p) C/beginner.c.page:43(p)
-#: C/beginner.c.page:56(p)
-msgid "In the terminal type:"
-msgstr "Escriba no terminal"
+#: C/02_welcome_to_the_grid.js.page:207(section/p)
+msgid "Second, we can set the Grid's column_homogenous property to true."
+msgstr ""
 
-#: C/tutorial.py.page:42(screen)
+#: C/02_welcome_to_the_grid.js.page:208(section/code)
 #, no-wrap
-#| msgid "gjs <var>filename</var>.js"
-msgid "python <var>filename</var>.py"
-msgstr "python <var>nomeficheiro</var>.py"
-
-#: C/tutorial.py.page:48(title)
-msgid "A path through the widgets"
-msgstr "Unha ruta aos widgets"
-
-#: C/tutorial.py.page:50(title)
-#| msgid "Tutorials"
-msgid "Tutorial"
-msgstr "Titorial"
-
-#: C/tutorial.py.page:52(title)
-#| msgid "Windows"
-msgid "Basic windows"
-msgstr "Xanela básica"
-
-#: C/tutorial.py.page:57(title)
-msgid "Images and labels"
-msgstr "Imaxes e etiquetas"
-
-#: C/tutorial.py.page:62(title) C/grid.py.page:27(title)
-#: C/grid.js.page:24(title) C/grid.c.page:20(title)
-msgid "Grid"
-msgstr "Grade"
-
-#: C/tutorial.py.page:66(title) C/beginner.vala.page:77(title)
-#: C/beginner.py.page:54(title) C/beginner.js.page:73(title)
-#: C/beginner.c.page:88(title)
-msgid "Ornaments"
-msgstr "Adornos"
-
-#: C/tutorial.py.page:70(title)
-#| msgid "Button"
-msgid "Basic buttons"
-msgstr "Botóns básicos"
-
-#: C/tutorial.py.page:79(title)
-#| msgid "Display widgets"
-msgid "Other display widgets"
-msgstr "Outros widgets de visualización"
-
-#: C/tutorial.py.page:85(title)
-msgid "Entry widgets (with a detour on basic scrolling)"
+msgid ""
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            column_homogeneous: true,\n"
+"            row_spacing: 20 });\n"
 msgstr ""
 
-#: C/tutorial.py.page:93(title)
-#| msgid "AboutDialog"
-msgid "Dialogs"
-msgstr "Diálogos"
-
-#: C/tutorial.py.page:99(title)
-msgid "TreeViews and ComboBoxes (using the M/V/C design)"
-msgstr "TreeViews e ComboBoxes (usando o deseño M/V/C)"
-
-#: C/tutorial.py.page:108(title)
-msgid "Menus and toolbars (also: using Glade)"
-msgstr "Menús e barras de ferramentas (tamén: usando Glade)"
-
-#: C/tutorial.py.page:116(title)
-#| msgid "Selectors"
-msgid "Selectors (a recap)"
-msgstr "Selectores (un resumo)"
-
-#: C/tutorial.py.page:122(title) C/tooltip.py.page:21(title)
-msgid "Tooltip"
-msgstr "Consello"
-
-#: C/tutorial.py.page:126(title)
-#| msgid "Layout containers"
-msgid "More containers"
-msgstr "Máis contedores"
-
-#: C/tutorial.py.page:131(title)
-#| msgid "Scrolling"
-msgid "More scrolling"
-msgstr "Máis desprazamento"
-
-#: C/tutorial.py.page:132(p)
-msgid "\"scrollbar.py\""
-msgstr "\"scrollbar.py\""
+#: C/02_welcome_to_the_grid.js.page:215(section/p)
+msgid "That makes it look something like this:"
+msgstr "Iso fai que se vexa algo como isto:"
 
-#: C/tutorial.py.page:135(title)
-#| msgid "Button widget"
-msgid "Custom widget"
-msgstr "Widget personalizado"
+#: C/02_welcome_to_the_grid.js.page:218(section/p)
+msgid ""
+"And third, we can set the Grid's column_spacing property, the same way we "
+"set its row_spacing."
+msgstr ""
 
-#: C/tutorial.py.page:136(p)
-msgid "\"widget.py\""
-msgstr "\"widget.py\""
+#: C/02_welcome_to_the_grid.js.page:219(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            column_spacing: 20,\n"
+"            row_spacing: 20 });\n"
+msgstr ""
 
-#: C/tutorial.py.page:142(title)
-msgid "Some theory to help you"
-msgstr "Algunha teoría para axudarlle"
+#: C/02_welcome_to_the_grid.js.page:225(section/p)
+msgid "That makes it look like this:"
+msgstr "Iso fai que se vexa como isto:"
 
-#: C/tutorial.py.page:147(title) C/menubar.vala.page:197(title)
-#: C/beginner.vala.page:86(title) C/beginner.js.page:82(title)
-#: C/beginner.c.page:97(title)
-msgid "Exercises"
-msgstr "Exercicios"
+#: C/02_welcome_to_the_grid.js.page:230(section/title)
+msgid "Using stock images"
+msgstr "Cargar as imaxes de inventario"
 
-#: C/translate.page:12(years) C/toolbar_builder.py.page:28(years)
-#: C/textview.py.page:16(years) C/strings.py.page:16(years)
-#: C/signals-callbacks.py.page:16(years) C/properties.py.page:16(years)
-#: C/model-view-controller.py.page:16(years) C/index.page:19(years)
-#: C/entry.py.page:20(years) C/documentation.page:12(years)
-#: C/bug-filing.page:11(years)
-msgid "2011"
-msgstr "2011"
+#: C/02_welcome_to_the_grid.js.page:232(section/p)
+msgid ""
+"GNOME has a lot of stock images on hand already, that we can use if we don't "
+"feel like creating our own or if we want a universally-recognized icon. "
+"Here's how we create a stock image, compared to how we create a normal one:"
+msgstr ""
 
-#: C/translate.page:15(name)
-msgid "Michael Hill"
-msgstr "Michael Hill"
+#: C/02_welcome_to_the_grid.js.page:233(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create an image\n"
+"        this._image = new Gtk.Image ({ file: \"gnome-image.png\" });\n"
+"\n"
+"        // Create a second image using a stock icon\n"
+"        this._icon = new Gtk.Image ({ stock: 'gtk-about' });\n"
+msgstr ""
 
-#: C/translate.page:16(email)
-msgid "mdhillca gmail com"
-msgstr "mdhillca gmail com"
+#: C/02_welcome_to_the_grid.js.page:240(section/p)
+msgid ""
+"After that, we attach it to the Grid to the left of the first Label. (We "
+"aren't using the second one for this example.)"
+msgstr ""
 
-#: C/translate.page:19(p) C/documentation.page:15(p) C/bug-filing.page:14(p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "Creative Commons Compartir Igual 3.0"
+#: C/02_welcome_to_the_grid.js.page:241(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Attach the images and label to the grid\n"
+"        this._grid.attach (this._image, 0, 0, 2, 1);\n"
+"        this._grid.attach (this._icon,  0, 1, 1, 1);\n"
+"        this._grid.attach (this._label, 1, 1, 1, 1);\n"
+msgstr ""
 
-#: C/translate.page:23(title)
-msgid "Help translate"
-msgstr "Axude na tradución"
+#: C/02_welcome_to_the_grid.js.page:247(section/p)
+msgid "That gives us this, when we run it:"
+msgstr "Iso fornécenos isto, cando o executamos:"
 
-#: C/translate.page:24(p)
+#: C/02_welcome_to_the_grid.js.page:250(section/p)
 msgid ""
-"The <app>Tutorial Demos</app> are being translated by a world-wide volunteer "
-"community. You are welcome to participate."
+"That's what the stock \"About\" icon looks like. You can see a list of all "
+"the stock items starting with gtk-about in <link href=\"http://developer.";
+"gnome.org/gtk/2.24/gtk-Stock-Items.html#GTK-STOCK-ABOUT:CAPS\">GNOME's "
+"developer documentation</link>. It was written for C programmers, but you "
+"don't need to know C to use it; just look at the part in quotation marks, "
+"like \"gtk-about\", and copy that part to use the icon next to it."
 msgstr ""
 
-#: C/translate.page:27(p)
+#: C/02_welcome_to_the_grid.js.page:251(note/p)
 msgid ""
-"There are <link href=\"http://l10n.gnome.org/module/gnome-devel-docs/\";>many "
-"languages</link> for which translations are still needed."
+"We put single quotes around 'gtk-about' here because, unlike text strings "
+"that have double quotes around them, that part will never need to be "
+"translated into another language. In fact, if it <em>were</em> translated "
+"it'd break the icon, because its name is still \"gtk-about\" no matter which "
+"language you speak."
 msgstr ""
-"Hai <link href=\"http://l10n.gnome.org/module/gnome-devel-docs/\";>moitos "
-"idiomas</link> para os cales se precisan traducións."
 
-#: C/translate.page:30(p)
-msgid ""
-"To start translating you will need to <link href=\"http://l10n.gnome.org";
-"\">create an account</link> and join the <link href=\"http://l10n.gnome.org/";
-"teams/\">translation team</link> for your language. This will give you the "
-"ability to upload new translations."
+#: C/02_welcome_to_the_grid.js.page:256(section/title)
+#: C/03_getting_the_signal.js.page:339(section/title)
+#: C/hellognome.js.page:186(section/title)
+msgid "What's next?"
 msgstr ""
-"Para comezar a traducir precisará <link href=\"http://l10n.gnome.org\";>crear "
-"unha conta</link> e unirse ao <link "
-"href=\"http://l10n.gnome.org/teams/\";>equipo de tradución</link> do seu "
-"idioma. Isto daralle a posibilidade de subir traducións novas."
 
-#: C/translate.page:34(p)
+#: C/02_welcome_to_the_grid.js.page:257(section/p)
 msgid ""
-"You can chat with GNOME translators using <link href=\"https://cbe003.chat.";
-"mibbit.com/?url=irc%3A%2F%2Firc.gnome.org%2Fi18n\">irc</link>. People on the "
-"channel are located worldwide, so you may not get an immediate response as a "
-"result of timezone differences."
+"Before we go on to the next tutorial, let's try something a little different:"
 msgstr ""
-"Pode conversar cos tradutores de GNOME empregando <link "
-"href=\"https://cbe003.chat.mibbit.com/?url=irc%3A%2F%2Firc.gnome.org%";
-"2Fi18n\">irc</link>. As persoas da canle están espallados por todo o mundo, "
-"polo que poda que non obteña resposta de forma inmediata debido ás "
-"diferenzas de fuso de hora."
 
-#: C/translate.page:37(p)
+#: C/02_welcome_to_the_grid.js.page:258(section/code)
+#, no-wrap
 msgid ""
-"Alternatively, you can contact the Internationalization Team using their "
-"<link href=\"http://mail.gnome.org/mailman/listinfo/gnome-i18n\";>mailing "
-"list</link>."
+"\n"
+"        // Create a button\n"
+"        this._button = new Gtk.Button ({\n"
+"            label: \"Welcome to GNOME, too!\"});\n"
+"\n"
+"        // Attach the images and button to the grid\n"
+"        this._grid.attach (this._image,  0, 0, 2, 1);\n"
+"        this._grid.attach (this._icon,   0, 1, 1, 1);\n"
+"        this._grid.attach (this._button, 1, 1, 1, 1);\n"
 msgstr ""
-"De forma alternativa pode contactar o Equipo de Internacionalización "
-"empregando a <link href=\"http://mail.gnome.org/mailman/listinfo/gnome-";
-"i18n\">rolda de correo</link>."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/treeview_treestore.py.page:21(None)
+#: C/02_welcome_to_the_grid.js.page:269(section/p)
 msgid ""
-"@@image: 'media/treeview_treestore.png'; md5=5ca87bc4acd55c527b3fb5fd46779d85"
+"That's right, we turned the Label into a Button just by changing the name! "
+"If you run the application and click on it, though, you'll find that it "
+"doesn't do anything. How do we make our Button do something? That's what "
+"we'll find out, in <link xref=\"getting_the_signal.js\">our next tutorial</"
+"link>."
 msgstr ""
-"@@image: 'media/treeview_treestore.png'; "
-"md5=5ca87bc4acd55c527b3fb5fd46779d85"
 
-#: C/treeview_treestore.py.page:7(title)
-#: C/treeview_cellrenderertoggle.py.page:7(title)
-msgid "TreeView with TreeStore (Python)"
-msgstr "TreeView con TreeStore (Python)"
+#: C/02_welcome_to_the_grid.js.page:270(section/p)
+msgid ""
+"If you like, feel free to spend some time experimenting with Grids, Labels, "
+"and Images, including stock images."
+msgstr ""
 
-#: C/treeview_treestore.py.page:17(desc)
-msgid "A TreeView displaying a TreeStore (simpler example)"
-msgstr "Un TreeView mostrando un TreeStore (exemplo máis simple)"
-
-#: C/treeview_treestore.py.page:20(title)
-#: C/treeview_cellrenderertoggle.py.page:20(title)
-#| msgid "TreeView widget"
-msgid "TreeView with TreeStore"
-msgstr "TreeView con TreeStore"
-
-#: C/treeview_treestore.py.page:22(p)
-msgid "This TreeView displays a TreeStore."
-msgstr "Este TreeView mostra un TreeStore."
-
-#: C/treeview_treestore.py.page:33(title)
-#: C/treeview_simple_liststore.py.page:35(title)
-#: C/treeview_cellrenderertoggle.py.page:33(title)
-#: C/treeview_advanced_liststore.py.page:36(title)
-msgid "Useful methods for a TreeView widget"
-msgstr "Métodos útiles para o widget TreeView"
-
-#: C/treeview_treestore.py.page:34(p)
-#: C/treeview_simple_liststore.py.page:36(p)
-#: C/treeview_cellrenderertoggle.py.page:34(p)
-#: C/treeview_advanced_liststore.py.page:37(p)
+#: C/02_welcome_to_the_grid.js.page:271(note/p)
 msgid ""
-"The TreeView widget is designed around a <em>Model/View/Controller</em> "
-"design. For more information, and for a list of useful methods for TreeView "
-"and the interface TreeModel, see <link xref=\"model-view-controller.py"
-"\">here</link>."
+"One trick you can use to make more complex layouts is to nest Grids inside "
+"of each other. This lets you group together related widgets, and rearrange "
+"them easily. Take a look at the <link xref=\"radiobutton.js\">RadioButton</"
+"link> code sample if you'd like to see how this is done."
 msgstr ""
 
-#: C/treeview_treestore.py.page:41(link)
-#: C/treeview_simple_liststore.py.page:43(link)
-#: C/treeview_cellrenderertoggle.py.page:41(link)
-#: C/treeview_advanced_liststore.py.page:45(link)
-#: C/model-view-controller.py.page:186(link)
-#| msgid "TreeView widget"
-msgid "GtkTreeView"
-msgstr "GtkTreeView"
-
-#: C/treeview_treestore.py.page:42(link)
-#: C/treeview_simple_liststore.py.page:44(link)
-#: C/treeview_cellrenderertoggle.py.page:42(link)
-#: C/treeview_advanced_liststore.py.page:46(link)
-#: C/model-view-controller.py.page:185(link)
-msgid "GtkTreeModel"
-msgstr "GtkTreeModel"
-
-#: C/treeview_treestore.py.page:43(link)
-#: C/treeview_cellrenderertoggle.py.page:43(link)
-msgid "GtkTreeStore"
-msgstr "GtkTreeStore"
-
-#: C/treeview_treestore.py.page:44(link)
-#: C/treeview_simple_liststore.py.page:46(link)
-#: C/treeview_cellrenderertoggle.py.page:44(link)
-#: C/treeview_advanced_liststore.py.page:48(link)
-#: C/combobox_multicolumn.py.page:45(link) C/combobox.py.page:42(link)
-msgid "GtkCellRendererText"
-msgstr "GtkCellRendererText"
-
-#: C/treeview_treestore.py.page:45(link)
-#: C/treeview_simple_liststore.py.page:47(link)
-#: C/treeview_cellrenderertoggle.py.page:46(link)
-#: C/treeview_advanced_liststore.py.page:49(link)
-#: C/model-view-controller.py.page:187(link)
-msgid "GtkTreeViewColumn"
-msgstr "GtkTreeViewColumn"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/treeview_simple_liststore.vala.page:23(None)
-#: C/treeview_simple_liststore.py.page:23(None)
+#: C/02_welcome_to_the_grid.js.page:275(section/title)
+#: C/checkbutton.js.page:130(section/title)
+#: C/comboboxtext.js.page:170(section/title)
+#: C/combobox.js.page:227(section/title)
+#: C/hellognome.js.page:193(section/title)
+#: C/messagedialog.js.page:183(section/title)
+#: C/radiobutton.js.page:268(section/title) C/scale.js.page:202(section/title)
+#: C/spinbutton.js.page:193(section/title)
+#: C/statusbar.js.page:215(section/title) C/switch.js.page:258(section/title)
+#: C/textview.js.page:242(section/title)
+#: C/togglebutton.js.page:147(section/title)
+#: C/treeview_simple_liststore.js.page:266(section/title)
+msgid "Complete code sample"
+msgstr "Exemplos de código"
+
+#: C/02_welcome_to_the_grid.js.page:276(section/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const WelcomeToTheGrid = new Lang.Class({\n"
+"    Name: 'Welcome to the Grid',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 10,\n"
+"            title: \"Welcome to the Grid\"});\n"
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            // column_homogeneous: true,\n"
+"            // column_spacing: 20,\n"
+"            row_spacing: 20 });\n"
+"\n"
+"        // Create an image\n"
+"        this._image = new Gtk.Image ({ file: \"gnome-image.png\" });\n"
+"\n"
+"        // Create a second image using a stock icon\n"
+"        this._icon = new Gtk.Image ({ stock: 'gtk-about' });\n"
+"\n"
+"        // Create a label\n"
+"        this._label = new Gtk.Label ({\n"
+"            label: \"Welcome to GNOME, too!\",\n"
+"            /* margin_top: 20 */ });\n"
+"\n"
+"        /* Create a second label\n"
+"        this._labelTwo = new Gtk.Label ({\n"
+"            label: \"The cake is a pie.\" }); */\n"
+"\n"
+"        /* Create a button\n"
+"        this._button = new Gtk.Button ({\n"
+"            label: \"Welcome to GNOME, too!\"}); */\n"
+"\n"
+"        // Attach the images and button to the grid\n"
+"        this._grid.attach (this._image,  0, 0, 2, 1);\n"
+"        this._grid.attach (this._icon,   0, 1, 1, 1);\n"
+"        this._grid.attach (this._label,  1, 1, 1, 1);\n"
+"\n"
+"        // this._grid.attach (this._label, 0, 1, 1, 1);\n"
+"        // this._grid.attach (this._labelTwo, 1, 1, 1, 1);\n"
+"\n"
+"        // this._grid.attach (this._button, 1, 1, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new WelcomeToTheGrid ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/03_getting_the_signal.js.page:36(media)
+#: C/03_getting_the_signal.js.page:352(media)
+#, fuzzy
 #| msgid ""
-#| "@@image: 'media/guitar-tuner-pipeline.png'; "
-#| "md5=5adc952909d92af5dae6954781b4ad5f"
+#| "@@image: 'media/03_jssignal_01.png'; md5=8d6ecab185f4af4534cc255d62b58b8e"
+msgctxt "_"
 msgid ""
-"@@image: 'media/treeview_simple_liststore.png'; "
-"md5=2dc501a2b95b094da985d37b66aee90c"
+"external ref='media/03_jssignal_01.png' "
+"md5='8d6ecab185f4af4534cc255d62b58b8e'"
 msgstr ""
-"@@image: 'media/treeview_simple_liststore.png'; "
-"md5=2dc501a2b95b094da985d37b66aee90c"
-
-#: C/treeview_simple_liststore.vala.page:7(title)
-msgid "Simple Treeview with ListStore (Vala)"
-msgstr "Treeview simple con ListStore (Vala)"
+"@@image: 'media/03_jssignal_01.png'; md5=8d6ecab185f4af4534cc255d62b58b8e"
 
-#: C/treeview_simple_liststore.vala.page:19(desc)
-msgid "A widget can display any TreeModel implementation (lists and trees)"
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/03_getting_the_signal.js.page:156(media)
+#: C/03_getting_the_signal.js.page:358(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/03_jssignal_02.png'; md5=ba941390fbafc4a0f653c8f70bca92c0"
+msgctxt "_"
+msgid ""
+"external ref='media/03_jssignal_02.png' "
+"md5='ba941390fbafc4a0f653c8f70bca92c0'"
 msgstr ""
-"Un widget pode mostrar calquera implementación de TreeModel (listas e "
-"árbores)"
-
-#: C/treeview_simple_liststore.vala.page:22(title)
-#: C/treeview_advanced_liststore.py.page:23(title)
-msgid "Simple Treeview with ListStore"
-msgstr "TreeView simple con ListStore"
+"@@image: 'media/03_jssignal_02.png'; md5=ba941390fbafc4a0f653c8f70bca92c0"
 
-#: C/treeview_simple_liststore.vala.page:24(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/03_getting_the_signal.js.page:160(media)
+msgctxt "_"
+msgid "external ref='media/03_jssignal_02b.png' md5='__failed__'"
+msgstr ""
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/03_getting_the_signal.js.page:232(media)
+#: C/03_getting_the_signal.js.page:364(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/03_jssignal_03.png'; md5=49ecf251b0bf57543c8d79a77b6f306d"
+msgctxt "_"
 msgid ""
-"This TreeView displays a simple ListStore with the Selection \"changed\" "
-"signal connected."
+"external ref='media/03_jssignal_03.png' "
+"md5='49ecf251b0bf57543c8d79a77b6f306d'"
 msgstr ""
-"Este TreeView mostra un ListStore simple con un sinal de selección «changed» "
-"conectado."
-
-#: C/treeview_simple_liststore.vala.page:31(link)
-#: C/treeview_simple_liststore.js.page:282(link)
-msgid "Gtk.TreeView"
-msgstr "Gtk.TreeView"
-
-#: C/treeview_simple_liststore.vala.page:32(link)
-#: C/treeview_simple_liststore.js.page:279(link) C/combobox.vala.page:29(link)
-#: C/combobox.js.page:242(link)
-msgid "Gtk.ListStore"
-msgstr "Gtk.ListStore"
-
-#: C/treeview_simple_liststore.vala.page:33(link)
-#: C/treeview_simple_liststore.js.page:281(link)
-#| msgid "Gtk.Application"
-msgid "Gtk.TreeSelection"
-msgstr "Gtk.TreeSelection"
-
-#: C/treeview_simple_liststore.py.page:7(title)
-msgid "Simple TreeView with ListStore (Python)"
-msgstr "TreeView simple con ListStore (Python)"
-
-#: C/treeview_simple_liststore.py.page:19(desc)
-msgid "A TreeView displaying a ListStore (simpler example)"
-msgstr "Un TreeView mostrando un ListStore (exemplo máis simple)"
-
-#: C/treeview_simple_liststore.py.page:22(title)
-msgid "Simple TreeView with ListStore"
-msgstr "TreeView Simple con ListStore"
+"@@image: 'media/03_jssignal_03.png'; md5=49ecf251b0bf57543c8d79a77b6f306d"
 
-#: C/treeview_simple_liststore.py.page:24(p)
-#: C/treeview_advanced_liststore.py.page:25(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/03_getting_the_signal.js.page:303(media)
+#: C/03_getting_the_signal.js.page:370(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/03_jssignal_04.png'; md5=dfc5221ca15ca9fba7d3c76a73804e2d"
+msgctxt "_"
 msgid ""
-"This TreeView displays a simple ListStore with the selection \"changed\" "
-"signal connected."
+"external ref='media/03_jssignal_04.png' "
+"md5='dfc5221ca15ca9fba7d3c76a73804e2d'"
 msgstr ""
-"Este TreeView mostra un ListStore simple con un sinal de selección «changed» "
-"conectado."
-
-#: C/treeview_simple_liststore.py.page:45(link)
-#: C/treeview_advanced_liststore.py.page:47(link)
-#: C/combobox_multicolumn.py.page:44(link) C/combobox.py.page:41(link)
-msgid "GtkListStore"
-msgstr "GtkListStore"
+"@@image: 'media/03_jssignal_04.png'; md5=dfc5221ca15ca9fba7d3c76a73804e2d"
 
-#: C/treeview_simple_liststore.py.page:48(link)
-#: C/treeview_advanced_liststore.py.page:50(link)
-#: C/combobox_multicolumn.py.page:48(link) C/combobox.py.page:44(link)
-msgid "pygobject - Python bindings for GObject Introspection"
-msgstr "pygobject - ligazóns de Python para a introspección de GObject"
+#: C/03_getting_the_signal.js.page:20(info/desc)
+msgid "Create Buttons and other widgets that do things when you click on them."
+msgstr ""
 
-#: C/treeview_simple_liststore.py.page:49(link)
-msgid "Fonts"
-msgstr "Tipos de letra"
+#: C/03_getting_the_signal.js.page:23(page/title)
+msgid "3. Getting the Signal"
+msgstr "3. Conectar os sinais"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/treeview_simple_liststore.js.page:24(None)
+#: C/03_getting_the_signal.js.page:25(synopsis/p)
 msgid ""
-"@@image: 'media/treeview_simple_liststore_penguins.png'; "
-"md5=d750a0b9fddf8e508753cc639839871d"
+"In the last tutorial, we learned how to create widgets like Labels, Images, "
+"and Buttons. Here, we'll learn how to make Buttons and other input widgets "
+"actually do things, by writing functions which handle the signals they send "
+"when they are clicked on or interacted with."
 msgstr ""
-"@@image: 'media/treeview_simple_liststore_penguins.png'; "
-"md5=d750a0b9fddf8e508753cc639839871d"
-
-#: C/treeview_simple_liststore.js.page:7(title)
-msgid "TreeView with ListStore (JavaScript)"
-msgstr "TreeView con ListStore (JavaScript)"
-
-#: C/treeview_simple_liststore.js.page:20(desc)
-msgid "A widget that shows a separate list of items"
-msgstr "Un widget que mostra unha lista de elementos separada"
 
-#: C/treeview_simple_liststore.js.page:23(title)
-#| msgid "TreeView widget"
-msgid "TreeView with ListStore"
-msgstr "TreeView con ListStore"
+#: C/03_getting_the_signal.js.page:31(section/title)
+msgid "A basic application"
+msgstr "Un aplicativo básico"
 
-#: C/treeview_simple_liststore.js.page:25(p)
+#: C/03_getting_the_signal.js.page:32(section/p)
 msgid ""
-"A TreeView is like a window onto the contents of either a ListStore or a "
-"TreeStore. A ListStore is like a spreadsheet: a \"flat\", two-dimensional "
-"list of things broken up into rows and columns. A TreeStore, meanwhile, can "
-"branch out in different directions like a tree can. In this example, we "
-"create a TreeView that shows the contents of a ListStore with (fictitious) "
-"names and phone numbers in it, and set it so that the <link xref=\"label.js"
-"\">Label</link> at the bottom of the window shows more information about "
-"whichever name you click on."
+"In GNOME, widgets that you can interact with, like Buttons and Switches, "
+"send out signals when they are clicked on or activated. A Button, for "
+"instance, sends out the \"clicked\" signal when somebody clicks on it. When "
+"this happens, GNOME looks for the part in your code that says what to do."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:26(p)
+#: C/03_getting_the_signal.js.page:33(section/p)
 msgid ""
-"The TreeView is not just a single widget, but contains a number of smaller "
-"ones:"
+"How do we write that code? By connecting that Button's \"clicked\" signal to "
+"a callback function, which is a function you write just to handle that "
+"signal. So whenever it gives off that signal, the function connected to that "
+"signal is run."
 msgstr ""
-"Un TreView non é son un widget simple, senón que contén uns máis pequenos:"
 
-#: C/treeview_simple_liststore.js.page:28(p)
+#: C/03_getting_the_signal.js.page:34(section/p)
+msgid "Here is an extremely basic example:"
+msgstr "Aquí está un exemplo moi básico:"
+
+#: C/03_getting_the_signal.js.page:38(section/p)
 msgid ""
-"TreeViewColumn widgets show each (vertical) column of information from the "
-"ListStore. Each one has a title which can be shown at the top of the column, "
-"like in the screenshot."
+"This ApplicationWindow has a Button and a Label inside it, arranged in a "
+"Grid. Whenever the Button is clicked, a variable that holds the number of "
+"cookies is increased by 1, and the Label that shows how many cookies there "
+"are is updated."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:29(p)
+#: C/03_getting_the_signal.js.page:39(note/p)
 msgid ""
-"CellRenderer widgets are \"packed\" into each TreeViewColumn, and contain "
-"the instructions for how to display each individual \"cell\", or item from "
-"the ListStore. There are multiple different types, including the "
-"CellRendererText used here and the CellRendererPixbuf, which displays a "
-"picture (\"pixel buffer\")."
+"The cookies in this example are not the same as the cookies that you get "
+"from websites, which store your login information and may keep track of "
+"which sites you've visited. They're just imaginary treats. You may bake some "
+"real ones if you like."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:31(p)
+#: C/03_getting_the_signal.js.page:40(section/p)
 msgid ""
-"Finally, we're going to use an object called a TreeIter, which isn't a "
-"widget so much as an invisible cursor which points to a (horizontal) row in "
-"the ListStore. Whenever you click on a name in the phonebook, for instance, "
-"we create a TreeIter pointing to the row that's selected, and then use that "
-"to tell the ListStore which entry we want the Label to show more information "
-"about."
+"Here is the basic, boilerplate code that goes at the start of the "
+"application, before we start creating the window and widgets. Besides the "
+"application having a unique name, the biggest change from the usual "
+"boilerplate is that we create a global variable right near the beginning, to "
+"hold the number of cookies."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:32(p)
+#: C/03_getting_the_signal.js.page:41(section/code)
+#, no-wrap
 msgid ""
-"The TreeView is probably the most complicated Gtk widget, because of how "
-"many parts it has and how they all have to work together. Give yourself time "
-"to learn how it works and experiment with it, or try something easier first "
-"if you're having trouble."
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"const GettingTheSignal = new Lang.Class({\n"
+"    Name: 'Getting the Signal',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:45(p) C/togglebutton.js.page:35(p)
-#: C/textview.js.page:44(p) C/switch.js.page:42(p) C/statusbar.js.page:35(p)
-#: C/spinbutton.js.page:38(p) C/scale.js.page:35(p)
-#: C/radiobutton.js.page:35(p) C/messagedialog.js.page:38(p)
-#: C/combobox.js.page:40(p) C/comboboxtext.js.page:36(p)
-#: C/checkbutton.js.page:35(p)
+#: C/03_getting_the_signal.js.page:72(section/p)
 msgid ""
-"These are the libraries we need to import for this application to run. "
-"Remember that the line which tells GNOME that we're using Gjs always needs "
-"to go at the start."
+"Take a look at the part that uses our application's connect method and Lang."
+"bind, to connect its activate and startup signals to the functions that "
+"present the window and build the UI. We're going to do the same thing with "
+"our Button when we get to it, except that we're going to connect its "
+"\"clicked\" signal instead."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:49(title)
-#: C/togglebutton.js.page:39(title) C/textview.js.page:48(title)
-#: C/switch.js.page:46(title) C/statusbar.js.page:39(title)
-#: C/spinbutton.js.page:42(title) C/scale.js.page:39(title)
-#: C/radiobutton.js.page:39(title) C/messagedialog.js.page:42(title)
-#: C/combobox.js.page:44(title) C/comboboxtext.js.page:40(title)
-#: C/checkbutton.js.page:39(title)
-#| msgid "Designing the application"
-msgid "Creating the application window"
-msgstr "Deseñar unha xanela de aplicativo"
+#: C/03_getting_the_signal.js.page:76(section/title)
+msgid "Click the button"
+msgstr "Prema o botón"
 
-#: C/treeview_simple_liststore.js.page:75(p)
+#: C/03_getting_the_signal.js.page:78(section/p)
 msgid ""
-"All the code for this sample goes in the TreeViewExample class. The above "
-"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
-"go in."
+"As usual, we'll put all the code to create our Button and other widgets "
+"inside the _buildUI function, which is called when the application starts up."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:89(p) C/togglebutton.js.page:80(p)
-#: C/textview.js.page:87(p) C/switch.js.page:87(p) C/spinbutton.js.page:80(p)
-#: C/scale.js.page:77(p) C/radiobutton.js.page:78(p)
-#: C/messagedialog.js.page:83(p) C/combobox.js.page:82(p)
-#: C/comboboxtext.js.page:78(p)
+#: C/03_getting_the_signal.js.page:79(section/code)
+#, no-wrap
 msgid ""
-"The _buildUI function is where we put all the code to create the "
-"application's user interface. The first step is creating a new <link xref="
-"\"GtkApplicationWindow.js\">Gtk.ApplicationWindow</link> to put all our "
-"widgets into."
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:93(title) C/combobox.js.page:86(title)
-#| msgid "Creating the user interface"
-msgid "Creating the ListStore"
-msgstr "Crear un ListStore"
+#: C/03_getting_the_signal.js.page:84(section/p)
+msgid "First, we create the window itself:"
+msgstr ""
 
-#: C/treeview_simple_liststore.js.page:103(p)
+#: C/03_getting_the_signal.js.page:85(section/code)
+#, no-wrap
 msgid ""
-"We first create the ListStore like we would any widget. Then we call its "
-"set_column_types method, and pass it an array of GObject data types. (We "
-"could have put the types all on one line, but here we are breaking them up "
-"to make it easier to read.)"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            title: \"Click the button to get a cookie!\"});\n"
 msgstr ""
-"Primeiro creamos un ListStore como faríamos con calquera widget. Logo "
-"chamamos ao seu método set_column_types, e pasámoslle un array dos tipos de "
-"datos GObject. (Podemos poñerlle todos os tipos nunha liña, pero teremos que "
-"partila para facela máis doado de ler.)"
-
-#: C/treeview_simple_liststore.js.page:104(p)
-msgid "The GObject data types you can use include:"
-msgstr "Os tipos de datos GObject que pode usar son:"
-
-#: C/treeview_simple_liststore.js.page:106(p) C/combobox.js.page:97(p)
-msgid "<file>GObject.TYPE_BOOLEAN</file> -- True or false"
-msgstr "<file>GObject.TYPE_BOOLEAN</file> -- Verdadeiro ou falso"
 
-#: C/treeview_simple_liststore.js.page:107(p) C/combobox.js.page:98(p)
+#: C/03_getting_the_signal.js.page:94(section/p)
 msgid ""
-"<file>GObject.TYPE_FLOAT</file> -- A floating point number (one with a "
-"decimal point)"
+"Note that we've set its default_height and default_width properties. These "
+"let us control how tall and wide the ApplicationWindow will be, in pixels."
 msgstr ""
-"<file>GObject.TYPE_FLOAT</file> -- Un número en punto flotante (un con un "
-"punto decimal)"
-
-#: C/treeview_simple_liststore.js.page:108(p) C/combobox.js.page:99(p)
-msgid "<file>GObject.TYPE_STRING</file> -- A string of letters and numbers"
-msgstr "<file>GObject.TYPE_STRING</file> -- Unha cadea de números e letras"
-
-#: C/treeview_simple_liststore.js.page:109(p)
-msgid "<file>gtk.gdk.Pixbuf</file> -- A picture"
-msgstr "<file>gtk.gdk.Pixbuf</file> -- Unha imaxe"
 
-#: C/treeview_simple_liststore.js.page:111(p)
+#: C/03_getting_the_signal.js.page:95(section/p)
 msgid ""
-"In this case, we're making a ListStore of four columns, each one containing "
-"string values."
+"Next, we'll create the Label that shows us the number of cookies. We can use "
+"the cookies variable as part of the Label's label property."
 msgstr ""
-"Neste caso, crearemos unha ListStore para catro columnas, cada unha delas "
-"contén valores en cadeas."
 
-#: C/treeview_simple_liststore.js.page:112(p) C/combobox.js.page:101(p)
+#: C/03_getting_the_signal.js.page:96(section/code)
+#, no-wrap
 msgid ""
-"You need to put the line <file>const GObject = imports.gi.GObject;</file> at "
-"the start of your application's code, like we did in this example, if you "
-"want to be able to use GObject types."
+"\n"
+"        // Create the label\n"
+"        this._cookieLabel = new Gtk.Label ({\n"
+"            label: \"Number of cookies: \" + cookies });\n"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:131(p)
+#: C/03_getting_the_signal.js.page:102(section/p)
 msgid ""
-"Here we have the information to go in the ListStore. It's an array of "
-"objects, each one corresponding to a single entry in our phone book."
+"Now we'll create the Button. We set its label property to show the text that "
+"we want on the Button, and we connect its \"clicked\" signal to a function "
+"called _getACookie, which we'll write after we're done building our "
+"application's UI."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:132(p)
+#: C/03_getting_the_signal.js.page:103(section/code)
+#, no-wrap
 msgid ""
-"Note that the TreeView in the screenshot doesn't actually show the data from "
-"the \"description\" properties. Instead, that information's shown in the "
-"Label beneath it, for whichever row that you click on. That's because the "
-"TreeView and ListStore are two separate things, and a TreeView can show all "
-"or part of a ListStore, and display what's in it in different ways. You can "
-"even have multiple widgets show things from the same ListStore, like the "
-"Label in our example or even a second TreeView."
+"\n"
+"        // Create the cookie button\n"
+"        this._cookieButton = new Gtk.Button ({ label: \"Get a cookie\" });\n"
+"\n"
+"        // Connect the cookie button to the function that handles clicking it\n"
+"        this._cookieButton.connect ('clicked', Lang.bind (this, this._getACookie));\n"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:141(p)
+#: C/03_getting_the_signal.js.page:110(section/p)
 msgid ""
-"This <file>for</file> loop puts the strings from our phonebook into our "
-"ListStore in order. In order, we pass the ListStore's set method the iter "
-"that points to the correct row, an array which says which columns we want to "
-"set, and an array which contains the data we want to put into those columns."
+"Finally, we create a Grid, attach the Label and Button to it, add it to the "
+"window and tell the window to show itself and its contents. That's all we "
+"need inside the _buildUI function, so we close it with a bracket, as well as "
+"a comma that tells GNOME to go on to the next function. Note that even "
+"though we wrote the code for the Label first, we can still attach it to the "
+"Grid in a way that will put it on the bottom."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:142(p)
+#: C/03_getting_the_signal.js.page:111(section/code)
+#, no-wrap
 msgid ""
-"A ListStore's <file>append</file> method adds a horizontal row onto it (it "
-"starts out with none), and returns a TreeIter pointing to that row like a "
-"cursor. So by passing <file>this._listStore.append()</file> to the ListStore "
-"as a property, we're creating a new row and telling the <file>set</file> "
-"method which row to set data for at the same time."
+"\n"
+"        // Create a grid to arrange everything inside\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            row_spacing: 20 });\n"
+"\n"
+"        // Put everything inside the grid\n"
+"        this._grid.attach (this._cookieButton, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._cookieLabel, 0, 1, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"\n"
+"    },\n"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:147(title)
-#| msgid "Creating the user interface"
-msgid "Creating the TreeView"
-msgstr "Crear un TreeView"
-
-#: C/treeview_simple_liststore.js.page:154(p)
+#: C/03_getting_the_signal.js.page:130(section/p)
 msgid ""
-"Here we create a basic TreeView widget, that expands both horizontally and "
-"vertically to use as much space as needed. We set it to use the ListStore we "
-"created as its \"model\", or the thing it'll show us stuff from."
+"Now, we write the _getACookie function. Whenever our Button sends out its "
+"\"clicked\" signal, the code in this function will run. In this case, all it "
+"does is increase the number of cookies by 1, and update the Label to show "
+"the new number of cookies. We do this using the Label's set_label method."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:162(p)
+#: C/03_getting_the_signal.js.page:131(note/p)
 msgid ""
-"Now we create each of the vertical TreeViewColumns we'll see in the "
-"TreeView. The title for each one goes at the top, as you can see in the "
-"screenshot."
+"Many widgets have the same properties and methods. Both Labels and Buttons, "
+"for instance, have a label property that says what text is inside them, and "
+"get_label and set_label methods that let you check what that text is and "
+"change it, respectively. So if you learn how one widget works, you'll also "
+"know how others like it work."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:177(p)
+#: C/03_getting_the_signal.js.page:132(section/code)
+#, no-wrap
 msgid ""
-"Here we create the CellRenderers that we'll use to display the text from our "
-"ListStore, and pack them into the TreeViewColumns. Each CellRendererText is "
-"used for all the entries in that column. Our normal CellRendererText just "
-"creates plain text, while our bold one uses heavier-weight text. We put it "
-"into the first name column, and tell the other two to use copies of the "
-"normal one. The \"true\" used as the second parameter for the "
-"<file>pack_start</file> method tells it to expand the cells when possible, "
-"instead of keeping them compact."
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Increase the number of cookies by 1 and update the label\n"
+"        cookies++;\n"
+"        this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:178(p)
+#: C/03_getting_the_signal.js.page:144(section/p)
 msgid ""
-"<link href=\"http://www.pygtk.org/docs/pygtk/pango-constants.html\";>Here is "
-"a list</link> of other text properties you can use. In order to use these "
-"Pango constants, make sure to put the line <file>const Pango = imports.gi."
-"Pango;</file> at the beginning of your code like we did."
+"Finally, we run the application, using the same kind of code as in our last "
+"tutorial."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:190(p)
+#: C/03_getting_the_signal.js.page:145(section/code)
+#, no-wrap
 msgid ""
-"Now that we've put the CellRenderers into the TreeViewColumns, we use the "
-"<file>add_attribute</file> method to tell each column to pull in text from "
-"the model our TreeView is set to use; in this case, the ListStore with the "
-"phonebook."
+"\n"
+"// Run the application\n"
+"let app = new GettingTheSignal ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:192(p)
-msgid ""
-"The first parameter is which CellRenderer we're going to use to render what "
-"we're pulling in."
+#: C/03_getting_the_signal.js.page:153(section/title)
+msgid "Flip the switch"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:193(p)
+#: C/03_getting_the_signal.js.page:154(section/p)
 msgid ""
-"The second parameter is what kind of information we're going to pull in. In "
-"this case, we're letting it know that we're rendering text."
+"Buttons aren't the only input widgets in our Gtk+ toolbox. We can also use "
+"switches, like the one in this example. Switches don't have a label "
+"property, so we have to create a separate Label that says what it does to go "
+"next to it."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:194(p)
+#: C/03_getting_the_signal.js.page:158(section/p)
 msgid ""
-"The third parameter is which of the ListStore's columns we're pulling that "
-"information in from."
+"A Switch has two positions, Off and On. When a Switch is turned on, its text "
+"and background color change, so you can tell which position it's in."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:196(p)
+#: C/03_getting_the_signal.js.page:162(section/p)
 msgid ""
-"After we've set that up, we use the TreeView's <file>insert_column</file> "
-"method to put our TreeViewColumns inside it in order. Our TreeView is now "
-"complete."
+"You may have seen Switches like these in GNOME's accessibility menu, which "
+"let you turn features like large text and the on-screen keyboard on and off. "
+"In this case, the Switch controls our imaginary cookie dispenser. If the "
+"Switch is turned on, you can get cookies by clicking the \"Get a cookie\" "
+"Button. If it's turned off, clicking the Button won't do anything."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:197(p)
+#: C/03_getting_the_signal.js.page:163(note/p)
 msgid ""
-"Normally, you might want to use a loop to initialize your TreeView, but in "
-"this example we're spelling things out step by step for the sake of making "
-"it easier to understand."
+"You can get to the accessibility menu by clicking on the outline of a human, "
+"near your name in the upper-right corner of the screen."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:201(title)
-#| msgid "Build the code for the first time"
-msgid "Building the rest of the UI"
-msgstr "Construír o resto da IU"
+#: C/03_getting_the_signal.js.page:164(section/p)
+msgid "Here's how we create the Switch:"
+msgstr ""
 
-#: C/treeview_simple_liststore.js.page:212(p)
+#: C/03_getting_the_signal.js.page:165(section/code)
+#, no-wrap
 msgid ""
-"The TreeView's <file>get_selection</file> method returns an object called a "
-"TreeSelection. A TreeSelection is like a TreeIter in that it's basically a "
-"cursor that points at a particular row, except that the one it points to is "
-"the one that's visibly highlighted as selected."
+"\n"
+"        // Create the switch that controls whether or not you can win\n"
+"        this._cookieSwitch = new Gtk.Switch ();\n"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:213(p)
+#: C/03_getting_the_signal.js.page:170(section/p)
 msgid ""
-"After we get the TreeSelection that goes with our TreeView, we ask it to "
-"tell us when it changes which row it's pointing to. We do this by connecting "
-"its <file>changed</file> signal to the _onSelectionChanged function we "
-"wrote. This function changes the text displayed by the Label we just made."
+"We don't actually need to connect the Switch to anything. All we need to do "
+"is write an if statement in our _getACookie function, to check to see if the "
+"Switch is turned on. If we wanted to make something happen as soon as you "
+"flip the Switch, though, we would connect its notify::active signal, like so:"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:230(p)
+#: C/03_getting_the_signal.js.page:171(section/code)
+#, no-wrap
 msgid ""
-"After we've gotten that out of the way, we create a <link xref=\"grid.js"
-"\">Grid</link> to put everything in, then add it to our window and tell the "
-"window to show itself and its contents."
+"\n"
+"        // Connect the switch to the function that handles it\n"
+"        this._cookieSwitch.connect ('notify::active', Lang.bind (this, this._cookieDispenser));\n"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:234(title)
-msgid "Function which handles a changed selection"
-msgstr "Función que xestiona a selección cambiada"
-
-#: C/treeview_simple_liststore.js.page:253(p)
+#: C/03_getting_the_signal.js.page:176(section/p)
 msgid ""
-"The line of code with the let statement is a little convoluted, but it's "
-"nonetheless the best way to get a TreeIter pointing to the same row as our "
-"TreeSelection. It has to create a couple of other object references, but "
-"<file>iter</file> is the only one we need."
+"A Switch is set to the off position by default. If we wanted the Switch to "
+"start out turned on, we would set the value of its active property to true "
+"when we create it."
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:254(p)
+#: C/03_getting_the_signal.js.page:177(section/code)
+#, no-wrap
 msgid ""
-"After we've done that, we call the Label's <file>set_label</file> function, "
-"and use the ListStore's <file>get_value</file> function a handful of times "
-"to fill in the data we want to put in it. Its parameters are a TreeIter "
-"pointing to the row we want to get data from, and the column."
+"\n"
+"        this._cookieSwitch = new Gtk.Switch ({ active: true });\n"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:255(p)
+#: C/03_getting_the_signal.js.page:181(section/p)
 msgid ""
-"Here, we want to get data from all four columns, including the \"hidden\" "
-"one that's not part of the TreeView. This way, we can use our Label to show "
-"strings that are too large to fit in the TreeView, and that we don't need to "
-"see at a glance."
+"Let's just create it normally, though, and then create the Label that goes "
+"with it. We want the Switch and the Label to be kept right next to each "
+"other, so we'll create a Grid just for them, then put that Grid in our "
+"larger Grid that holds all the widgets inside it. Here's what the code looks "
+"like to create all that:"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:262(p)
+#: C/03_getting_the_signal.js.page:182(section/code)
+#, no-wrap
 msgid ""
-"Finally, we create a new instance of the finished TreeViewExample class, and "
-"set the application running."
+"\n"
+"        // Create the switch that controls whether or not you can win\n"
+"        this._cookieSwitch = new Gtk.Switch ();\n"
+"\n"
+"        // Create the label to go with the switch\n"
+"        this._switchLabel = new Gtk.Label ({\n"
+"            label: \"Cookie dispenser\" });\n"
+"\n"
+"        // Create a grid for the switch and its label\n"
+"        this._switchGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Put the switch and its label inside that grid\n"
+"        this._switchGrid.attach (this._switchLabel, 0, 0, 1, 1);\n"
+"        this._switchGrid.attach (this._cookieSwitch, 1, 0, 1, 1);\n"
 msgstr ""
 
-#: C/treeview_simple_liststore.js.page:266(title)
-#: C/togglebutton.js.page:147(title) C/textview.js.page:242(title)
-#: C/switch.js.page:258(title) C/statusbar.js.page:215(title)
-#: C/spinbutton.js.page:193(title) C/scale.js.page:202(title)
-#: C/radiobutton.js.page:268(title) C/messagedialog.js.page:183(title)
-#: C/hellognome.js.page:193(title) C/combobox.js.page:227(title)
-#: C/comboboxtext.js.page:170(title) C/checkbutton.js.page:130(title)
-#: C/02_welcome_to_the_grid.js.page:275(title)
-#| msgid "Code samples"
-msgid "Complete code sample"
-msgstr "Exemplos de código"
+#: C/03_getting_the_signal.js.page:200(section/p)
+msgid "And now we arrange everything in the larger Grid like so."
+msgstr ""
 
-#: C/treeview_simple_liststore.js.page:271(title)
-#: C/togglebutton.js.page:152(title) C/textview.js.page:247(title)
-#: C/switch.js.page:263(title) C/statusbar.js.page:220(title)
-#: C/spinbutton.js.page:198(title) C/scale.js.page:207(title)
-#: C/radiobutton.js.page:273(title) C/messagedialog.js.page:188(title)
-#: C/combobox.js.page:232(title) C/comboboxtext.js.page:175(title)
-#: C/checkbutton.js.page:135(title)
-msgid "In-depth documentation"
-msgstr "Documentación en profundo"
+#: C/03_getting_the_signal.js.page:201(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Put everything inside the grid\n"
+"        this._grid.attach (this._cookieButton, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._switchGrid, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._cookieLabel, 0, 2, 1, 1);\n"
+msgstr ""
 
-#: C/treeview_simple_liststore.js.page:277(link)
-#: C/togglebutton.js.page:155(link) C/textview.js.page:250(link)
-#: C/switch.js.page:268(link) C/statusbar.js.page:223(link)
-#: C/spinner.js.page:31(link) C/spinbutton.js.page:202(link)
-#: C/scale.js.page:211(link) C/radiobutton.js.page:276(link)
-#: C/progressbar.js.page:40(link) C/messagedialog.js.page:196(link)
-#: C/linkbutton.js.page:30(link) C/label.vala.page:31(link)
-#: C/label.js.page:30(link) C/image.js.page:32(link)
-#: C/GtkApplicationWindow.vala.page:31(link)
-#: C/GtkApplicationWindow.js.page:31(link) C/grid.js.page:34(link)
-#: C/gmenu.vala.page:42(link) C/entry.js.page:30(link)
-#: C/dialog.js.page:30(link) C/combobox.js.page:238(link)
-#: C/comboboxtext.js.page:181(link) C/checkbutton.js.page:138(link)
-#: C/button.js.page:31(link) C/aboutdialog.vala.page:39(link)
-#: C/aboutdialog.js.page:32(link)
-msgid "Gtk.ApplicationWindow"
-msgstr "Gtk.ApplicationWindow"
-
-#: C/treeview_simple_liststore.js.page:278(link) C/combobox.vala.page:31(link)
-#: C/combobox.js.page:240(link)
-msgid "Gtk.CellRendererText"
-msgstr "Gtk.CellRendererText"
-
-#: C/treeview_simple_liststore.js.page:280(link) C/combobox.js.page:244(link)
-msgid "Gtk.TreeIter"
-msgstr "Gtk.TreeIter"
-
-#: C/treeview_simple_liststore.js.page:283(link)
-msgid "Gtk.TreeViewColumn"
-msgstr "Gtk.TreeViewColumn"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/treeview_cellrenderertoggle.py.page:21(None)
+#: C/03_getting_the_signal.js.page:208(section/p)
 msgid ""
-"@@image: 'media/treeview_cellrenderertoggle.png'; "
-"md5=ade9b9437f8f83150acf37610dab834d"
+"Now we change the _getACookie function so that it checks to see if the "
+"cookie dispenser is turned on. We do that by using the Switch's get_active "
+"method. It returns true if the Switch is turned on, and false if the Switch "
+"is turned off."
 msgstr ""
-"@@image: 'media/treeview_cellrenderertoggle.png'; "
-"md5=ade9b9437f8f83150acf37610dab834d"
 
-#: C/treeview_cellrenderertoggle.py.page:17(desc)
+#: C/03_getting_the_signal.js.page:209(note/p)
 msgid ""
-"A TreeView displaying a TreeStore (more complex example, with "
-"CellRendererToggle)"
+"When a method is used in an if statement like this, the code inside the if "
+"statement is executed if the method returns true."
 msgstr ""
 
-#: C/treeview_cellrenderertoggle.py.page:22(p)
+#: C/03_getting_the_signal.js.page:210(section/code)
+#, no-wrap
 msgid ""
-"This TreeView displays a TreeStore with two columns, one of which is "
-"rendered as a toggle."
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Is the cookie dispenser turned on?\n"
+"        if (this._cookieSwitch.get_active()) {\n"
+"\n"
+"            // Increase the number of cookies by 1 and update the label\n"
+"            cookies++;\n"
+"            this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"        }\n"
+"\n"
+"    }\n"
 msgstr ""
 
-#: C/treeview_cellrenderertoggle.py.page:45(link)
-msgid "GtkCellRendererToggle"
-msgstr "GtkCellRendererToggle"
+#: C/03_getting_the_signal.js.page:228(section/title)
+msgid "Tuning the radio"
+msgstr "Axustando o radio"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/treeview_advanced_liststore.py.page:24(None)
+#: C/03_getting_the_signal.js.page:230(section/p)
 msgid ""
-"@@image: 'media/treeview_advanced_liststore.png'; "
-"md5=102b512197fb9aa4ed9a16462f6af911"
+"Another type of input widget we can use is called the RadioButton. You "
+"create them in groups, and then only one RadioButton in a group can be "
+"selected at a time. They're called RadioButtons because they work like the "
+"channel preset button in old-style car radios. The radio could only be tuned "
+"to one station at a time, so whenever you pressed one button in, another "
+"would pop back out."
 msgstr ""
-"@@image: 'media/treeview_advanced_liststore.png'; "
-"md5=102b512197fb9aa4ed9a16462f6af911"
 
-#: C/treeview_advanced_liststore.py.page:7(title)
-msgid "Simple Treeview with ListStore (Python)"
+#: C/03_getting_the_signal.js.page:234(section/p)
+msgid ""
+"First off, let's change our ApplicationWindow's name and increase its "
+"border_width property, so that our widgets aren't packed in too tightly. The "
+"border_width is the number of pixels between any widget and the edge of the "
+"window."
 msgstr ""
 
-#: C/treeview_advanced_liststore.py.page:20(desc)
-msgid "A TreeView displaying a ListStore (more complex example)"
+#: C/03_getting_the_signal.js.page:235(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            border_width: 20,\n"
+"            title: \"Choose the one that says 'cookie'!\"});\n"
 msgstr ""
 
-#: C/treeview_advanced_liststore.py.page:38(p)
+#: C/03_getting_the_signal.js.page:246(section/p)
 msgid ""
-"For buttons and callbacks functions, see <link xref=\"signals-callbacks.py"
-"\">here</link>"
+"After that, we create the RadioButtons. Remember how they're created in "
+"groups? The way we do that, is we set each new RadioButton's group property "
+"to the name of another RadioButton."
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/tooltip.py.page:22(None)
-#| msgid "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
-msgid "@@image: 'media/tooltip.png'; md5=6950da5f4444aa941ecc2f0fc5951d52"
-msgstr "@@image: 'media/tooltip.png'; md5=6950da5f4444aa941ecc2f0fc5951d52"
+#: C/03_getting_the_signal.js.page:247(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the radio buttons\n"
+"        this._cookieButton = new Gtk.RadioButton ({ label: \"Cookie\" });\n"
+"        this._notCookieOne = new Gtk.RadioButton ({ label: \"Not cookie\",\n"
+"            group: this._cookieButton });\n"
+"        this._notCookieTwo = new Gtk.RadioButton ({ label: \"Not cookie\",\n"
+"            group: this._cookieButton });\n"
+msgstr ""
 
-#: C/tooltip.py.page:7(title) C/menubutton.py.page:7(title)
-#: C/menubutton.py.page:26(title) C/menubutton.py.page:52(link)
-#: C/menubutton.vala.page:20(title) C/menubutton.vala.page:32(link)
-#: C/menubutton.js.page:20(title) C/menubutton.js.page:32(link)
-#| msgid "Button"
-msgid "MenuButton"
-msgstr "MenuButton"
+#: C/03_getting_the_signal.js.page:256(section/p)
+msgid ""
+"Next, we create a Grid for the RadioButtons. Remember, we don't have to "
+"arrange things in Grids in the same order that we create them in."
+msgstr ""
 
-#: C/tooltip.py.page:18(desc)
-msgid "Add tips to your widgets"
-msgstr "Engadir consellos aos seus widgets"
+#: C/03_getting_the_signal.js.page:257(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Arrange the radio buttons in their own grid\n"
+"        this._radioGrid = new Gtk.Grid ();\n"
+"        this._radioGrid.attach (this._notCookieOne, 0, 0, 1, 1);\n"
+"        this._radioGrid.attach (this._cookieButton, 0, 1, 1, 1);\n"
+"        this._radioGrid.attach (this._notCookieTwo, 0, 2, 1, 1);\n"
+msgstr ""
 
-#: C/tooltip.py.page:23(p)
-msgid "A toolbar with a tooltip (with an image) for a button."
+#: C/03_getting_the_signal.js.page:265(section/p)
+msgid ""
+"Normally, the RadioButton that's selected by default is the one that's the "
+"name of the group. We want the first \"Not cookie\" button to be selected by "
+"default, though, so we use its set_active method."
 msgstr ""
 
-#: C/tooltip.py.page:33(title)
-msgid "Useful methods for a Tooltip widget"
-msgstr "Métodos útiles para o widget Tooltip"
+#: C/03_getting_the_signal.js.page:266(note/p)
+msgid "We could also set its active property to true when we create it."
+msgstr ""
 
-#: C/tooltip.py.page:34(p)
+#: C/03_getting_the_signal.js.page:267(section/code)
+#, no-wrap
 msgid ""
-"<code>set_tooltip_text(text)</code> and <code>set_tooltip_markup(text)</"
-"code> can be used to add a tooltip of plain text (or text in the Pango "
-"Markup Language) to a widget."
+"\n"
+"        // Set the button that will be at the top to be active by default\n"
+"        this._notCookieOne.set_active (true);\n"
 msgstr ""
 
-#: C/tooltip.py.page:35(p)
-msgid "For more complex tooltips, for instance for a tooltip with an image:"
+#: C/03_getting_the_signal.js.page:272(section/p)
+msgid "Now we arrange everything in our main Grid like usual ..."
 msgstr ""
 
-#: C/tooltip.py.page:37(p)
+#: C/03_getting_the_signal.js.page:273(section/code)
+#, no-wrap
 msgid ""
-"Set the <code>\"has-tooltip\"</code> property of the widget to <code>True</"
-"code>; this will make GTK+ monitor the widget for motion and related events "
-"which are needed to determine when and where to show a tooltip."
+"\n"
+"        // Put everything inside the grid\n"
+"        this._grid.attach (this._radioGrid, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._cookieButton, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._cookieLabel, 0, 2, 1, 1);\n"
 msgstr ""
 
-#: C/tooltip.py.page:38(p)
+#: C/03_getting_the_signal.js.page:280(section/p)
 msgid ""
-"Connect to the <code>\"query-tooltip\"</code> signal. This signal will be "
-"emitted when a tooltip is supposed to be shown. One of the arguments passed "
-"to the signal handler is a GtkTooltip object. This is the object that we are "
-"about to display as a tooltip, and can be manipulated in your callback using "
-"functions like <code>set_icon()</code>. There are functions for setting the "
-"tooltip's markup (<code>set_markup(text)</code>), setting an image from a "
-"stock icon (<code>set_icon_from_stock(stock_id, size)</code>), or even "
-"putting in a custom widget (<code>set_custom(widget)</code>)."
-msgstr ""
-
-#: C/tooltip.py.page:39(p)
-msgid ""
-"Return <code>True</code> from your query-tooltip handler. This causes the "
-"tooltip to be show. If you return <code>False</code>, it will not be shown."
+"And then we change our _getACookie function to test to see if the cookie "
+"button is the one that's selected."
 msgstr ""
 
-#: C/tooltip.py.page:42(p)
+#: C/03_getting_the_signal.js.page:281(section/code)
+#, no-wrap
 msgid ""
-"In the probably rare case where you want to have even more control over the "
-"tooltip that is about to be shown, you can set your own GtkWindow which will "
-"be used as tooltip window. This works as follows:"
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Did you select \"cookie\" instead of \"not cookie\"?\n"
+"        if (this._cookieButton.get_active()) {\n"
+"\n"
+"            // Increase the number of cookies by 1 and update the label\n"
+"            cookies++;\n"
+"            this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"        }\n"
+"\n"
+"    }\n"
 msgstr ""
 
-#: C/tooltip.py.page:44(p)
-msgid ""
-"Set <code>\"has-tooltip\"</code> and connect to <code>\"query-tooltip\"</"
-"code> as before."
+#: C/03_getting_the_signal.js.page:299(section/title)
+msgid "Can you spell \"cookie\"?"
 msgstr ""
 
-#: C/tooltip.py.page:45(p)
+#: C/03_getting_the_signal.js.page:301(section/p)
 msgid ""
-"Use <code>set_tooltip_window()</code> on the widget to set a GtkWindow "
-"created by you as tooltip window."
+"The last input widget we're going to cover is the Entry widget, which is "
+"used for single-line text entry."
 msgstr ""
 
-#: C/tooltip.py.page:46(p)
+#: C/03_getting_the_signal.js.page:302(note/p)
 msgid ""
-"In the <code>\"query-tooltip\"</code> callback you can access your window "
-"using <code>get_tooltip_window()</code> and manipulate as you wish. The "
-"semantics of the return value are exactly as before, return <code>True</"
-"code> to show the window, <code>False</code> to not show it."
+"If you need to be able to enter in a whole paragraph or more, like if you "
+"are building a text editor, you'll want to look at the much more "
+"customizable <link xref=\"textview.js\">TextView</link> widget."
 msgstr ""
 
-#: C/tooltip.py.page:55(link)
-msgid "GtkTooltip"
-msgstr "GtkTooltip"
-
-#: C/tooltip.py.page:56(link) C/toolbar.py.page:52(link)
-msgid "GtkToolbar"
-msgstr "GtkToolbar"
-
-#: C/tooltip.py.page:57(link) C/toolbar_builder.py.page:195(link)
-#: C/toolbar.py.page:57(link) C/togglebutton.py.page:46(link)
-msgid "GtkWidget"
-msgstr "GtkWidget"
-
-#: C/tooltip.py.page:58(link) C/toolbar.py.page:55(link)
-#: C/combobox_multicolumn.py.page:47(link)
-msgid "Stock Items"
-msgstr "Elemento de inventario"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:24(None) C/toolbar_builder.py.page:36(None)
-#: C/toolbar.vala.page:23(None) C/toolbar.py.page:23(None)
-#: C/toolbar.js.page:21(None)
-#| msgid "@@image: 'media/toolbar.png'; md5=fca40afb940764d58f69b3a2add9a927"
-msgid "@@image: 'media/toolbar.png'; md5=f0350855eedf6343952b72d6d906f738"
-msgstr "@@image: 'media/toolbar.png'; md5=f0350855eedf6343952b72d6d906f738"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:32(None) C/toolbar_builder.py.page:48(None)
-#| msgid "@@image: 'media/toolbar.png'; md5=fca40afb940764d58f69b3a2add9a927"
-msgid "@@image: 'media/glade_ui.png'; md5=baea74fe213bc12ea934f64f6977215a"
-msgstr "@@image: 'media/glade_ui.png'; md5=baea74fe213bc12ea934f64f6977215a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:38(None) C/toolbar_builder.py.page:54(None)
-#| msgid "@@image: 'media/toolbar.png'; md5=fca40afb940764d58f69b3a2add9a927"
-msgid ""
-"@@image: 'media/glade_select_toolbar.png'; "
-"md5=f7b5b224050b2e387eb04362fc99df00"
+#: C/03_getting_the_signal.js.page:305(section/p)
+msgid "After we change the window's name, we create the Entry widget."
 msgstr ""
-"@@image: 'media/glade_select_toolbar.png'; "
-"md5=f7b5b224050b2e387eb04362fc99df00"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:44(None) C/toolbar_builder.py.page:60(None)
-#| msgid "@@image: 'media/toolbar.png'; md5=fca40afb940764d58f69b3a2add9a927"
+#: C/03_getting_the_signal.js.page:306(section/code)
+#, no-wrap
 msgid ""
-"@@image: 'media/glade_toolbar_general.png'; "
-"md5=e31daba6e8a3e526aca89d5f1622edaa"
+"\n"
+"        // Create the text entry field\n"
+"        this._spellCookie = new Gtk.Entry ();\n"
 msgstr ""
-"@@image: 'media/glade_toolbar_general.png'; "
-"md5=e31daba6e8a3e526aca89d5f1622edaa"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:50(None) C/toolbar_builder.py.page:66(None)
-#| msgid "@@image: 'media/toolbar.png'; md5=fca40afb940764d58f69b3a2add9a927"
-msgid ""
-"@@image: 'media/glade_toolbar_common.png'; "
-"md5=d5ec6cc0218ca98e195dbd033feb9ac5"
+#: C/03_getting_the_signal.js.page:311(section/p)
+msgid "Next, we arrange everything in the Grid ..."
 msgstr ""
-"@@image: 'media/glade_toolbar_common.png'; "
-"md5=d5ec6cc0218ca98e195dbd033feb9ac5"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:56(None) C/toolbar_builder.py.page:72(None)
-#| msgid "@@image: 'media/toolbar.png'; md5=fca40afb940764d58f69b3a2add9a927"
+#: C/03_getting_the_signal.js.page:312(section/code)
+#, no-wrap
 msgid ""
-"@@image: 'media/glade_toolbar_edit.png'; md5=feb1e2b7040d24a4d030f94cf07c81fd"
+"\n"
+"        // Put everything inside the grid\n"
+"        this._grid.attach (this._spellCookie, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._cookieButton, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._cookieLabel, 0, 2, 1, 1);\n"
 msgstr ""
-"@@image: 'media/glade_toolbar_edit.png'; "
-"md5=feb1e2b7040d24a4d030f94cf07c81fd"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:115(None) C/toolbar_builder.py.page:131(None)
-#| msgid ""
-#| "@@image: 'media/guitar-tuner-glade.png'; "
-#| "md5=f6606525443ab2160f53a87a454364d0"
+#: C/03_getting_the_signal.js.page:319(section/p)
 msgid ""
-"@@image: 'media/glade_toolbar_editor.png'; "
-"md5=8af65241e5ca47d5494a7b36640e6f1c"
+"And now we modify _getACookie's if statement again, using the Entry's "
+"get_text method to retrieve the text that you entered into it and see if you "
+"spelled \"cookie\" right. We don't care whether you capitalize \"cookie\" or "
+"not, so we use JavaScript's built-in toLowerCase method to change the "
+"Entry's text to all lower case inside the if statement."
 msgstr ""
-"@@image: 'media/glade_toolbar_editor.png'; "
-"md5=8af65241e5ca47d5494a7b36640e6f1c"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:124(None) C/toolbar_builder.py.page:140(None)
-#| msgid ""
-#| "@@image: 'media/aboutdialog.png'; md5=a36117a559fa98e25e2f6b3db593639f"
+#: C/03_getting_the_signal.js.page:320(note/p)
 msgid ""
-"@@image: 'media/glade_visible_no.png'; md5=dc6c025aa825f4d772fbd283d6330026"
+"An Entry widget doesn't have a label property, which is a set text string "
+"that the user can't change. (You can't normally change the label on a "
+"Button, for instance.) Instead, it has a text property, which changes to "
+"match what the user types in."
 msgstr ""
-"@@image: 'media/glade_visible_no.png'; md5=dc6c025aa825f4d772fbd283d6330026"
-
-#: C/toolbar_builder.vala.page:7(title)
-msgid "Toolbar created using Glade (Vala)"
-msgstr "Barra de ferramentas creada empregando Glade (Vala)"
-
-#: C/toolbar_builder.vala.page:19(desc) C/toolbar.vala.page:18(desc)
-msgid "A bar of buttons"
-msgstr "Unha barra de botóns"
 
-#: C/toolbar_builder.vala.page:22(title) C/toolbar_builder.py.page:34(title)
-msgid "Toolbar created using Glade"
-msgstr "Barra de ferramentas creada empregando Glade"
-
-#: C/toolbar_builder.vala.page:25(p)
+#: C/03_getting_the_signal.js.page:321(section/code)
+#, no-wrap
 msgid ""
-"This example is similar to <link xref=\"toolbar.vala\"/>, except we use "
-"Glade to create the toolbar in an XML ui file."
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Did you spell \"cookie\" correctly?\n"
+"        if ((this._spellCookie.get_text()).toLowerCase() == \"cookie\") {\n"
+"\n"
+"            // Increase the number of cookies by 1 and update the label\n"
+"            cookies++;\n"
+"            this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"        }\n"
+"\n"
+"    }\n"
 msgstr ""
 
-#: C/toolbar_builder.vala.page:27(p) C/toolbar_builder.py.page:43(p)
+#: C/03_getting_the_signal.js.page:340(section/p)
 msgid ""
-"To create the toolbar using the <link href=\"http://glade.gnome.org/\";>Glade "
-"Interface Designer</link>:"
-msgstr ""
-
-#: C/toolbar_builder.vala.page:31(p) C/toolbar_builder.py.page:47(p)
-msgid "Open Glade, and save the file as <file>toolbar_builder.ui</file>"
+"<link xref=\"04_popup_dialog_boxes.js\">Click here</link> to go on to the "
+"next tutorial. Or keep reading, if you'd like to see the complete code for "
+"each version of our cookie maker application."
 msgstr ""
 
-#: C/toolbar_builder.vala.page:32(media) C/toolbar_builder.py.page:48(media)
-msgid "Screenshot of Glade ui"
-msgstr "Captura de pantalla da IU de Glade"
-
-#: C/toolbar_builder.vala.page:37(p) C/toolbar_builder.py.page:53(p)
+#: C/03_getting_the_signal.js.page:341(note/p)
 msgid ""
-"Under <gui>Containers</gui> on the left hand side, right click on the "
-"toolbar icon and select <gui>Add widget as toplevel</gui>."
-msgstr ""
-
-#: C/toolbar_builder.vala.page:38(media) C/toolbar_builder.py.page:54(media)
-msgid "Screenshot of toolbar icon in Glade ui"
+"The main JavaScript tutorials page has <link xref=\"beginner.js#buttons"
+"\">more detailed code samples</link> for each input widget, including "
+"several not covered here."
 msgstr ""
 
-#: C/toolbar_builder.vala.page:43(p) C/toolbar_builder.py.page:59(p)
-msgid ""
-"Under the <gui>General</gui> tab on the bottom right, change the <gui>Name</"
-"gui> to <input>toolbar</input> and <gui>Show Arrow</gui> to <gui>No</gui>."
-msgstr ""
+#: C/03_getting_the_signal.js.page:346(section/title)
+msgid "Complete code samples"
+msgstr "Exemplos de código completo"
 
-#: C/toolbar_builder.vala.page:44(media) C/toolbar_builder.py.page:60(media)
-msgid "Screenshot of General tab"
-msgstr "Captura de pantalla da lapela Xeral"
+#: C/03_getting_the_signal.js.page:351(section/title)
+msgid "Code sample with Button"
+msgstr "Exemplo de código con Button"
 
-#: C/toolbar_builder.vala.page:49(p) C/toolbar_builder.py.page:65(p)
+#: C/03_getting_the_signal.js.page:353(section/code)
+#, no-wrap
 msgid ""
-"Under the <gui>Common</gui> tab, set <gui>Horizontal Expand</gui> to "
-"<gui>Yes</gui>."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"const GettingTheSignal = new Lang.Class({\n"
+"    Name: 'Getting the Signal',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            title: \"Click the button to get a cookie!\"});\n"
+"\n"
+"        // Create the label\n"
+"        this._cookieLabel = new Gtk.Label ({\n"
+"            label: \"Number of cookies: \" + cookies });\n"
+"\n"
+"        // Create the cookie button\n"
+"        this._cookieButton = new Gtk.Button ({ label: \"Get a cookie\" });\n"
+"\n"
+"        // Connect the cookie button to the function that handles clicking it\n"
+"        this._cookieButton.connect ('clicked', Lang.bind (this, this._getACookie));\n"
+"\n"
+"        // Create a grid to arrange everything inside\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            row_spacing: 20 });\n"
+"\n"
+"        // Put everything inside the grid\n"
+"        this._grid.attach (this._cookieButton, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._cookieLabel, 0, 1, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Increase the number of cookies by 1 and update the label\n"
+"        cookies++;\n"
+"        this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new GettingTheSignal ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/toolbar_builder.vala.page:50(media) C/toolbar_builder.py.page:66(media)
-msgid "Screenshot of Common tab"
-msgstr "Captura de pantalla da lapela Común"
+#: C/03_getting_the_signal.js.page:357(section/title)
+msgid "Code sample with Switch"
+msgstr "Exemplo de código con Switch"
 
-#: C/toolbar_builder.vala.page:55(p) C/toolbar_builder.py.page:71(p)
+#: C/03_getting_the_signal.js.page:359(section/code)
+#, no-wrap
 msgid ""
-"Right click on the toolbar in the top right and select <gui>Edit</gui>. The "
-"<gui>Tool Bar Editor</gui> window will appear."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"const GettingTheSignal = new Lang.Class({\n"
+"    Name: 'Getting the Signal',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            title: \"Click the button to get a cookie!\"});\n"
+"\n"
+"        // Create the label\n"
+"        this._cookieLabel = new Gtk.Label ({\n"
+"            label: \"Number of cookies: \" + cookies });\n"
+"\n"
+"        // Create the cookie button\n"
+"        this._cookieButton = new Gtk.Button ({\n"
+"            label: \"Get a cookie\" });\n"
+"\n"
+"        // Connect the cookie button to the function that handles clicking it\n"
+"        this._cookieButton.connect ('clicked', Lang.bind (this, this._getACookie));\n"
+"\n"
+"        // Create the switch that controls whether or not you can win\n"
+"        this._cookieSwitch = new Gtk.Switch ();\n"
+"\n"
+"        // Create the label to go with the switch\n"
+"        this._switchLabel = new Gtk.Label ({\n"
+"            label: \"Cookie dispenser\" });\n"
+"\n"
+"        // Create a grid for the switch and its label\n"
+"        this._switchGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Put the switch and its label inside that grid\n"
+"        this._switchGrid.attach (this._switchLabel, 0, 0, 1, 1);\n"
+"        this._switchGrid.attach (this._cookieSwitch, 1, 0, 1, 1);\n"
+"\n"
+"        // Create a grid to arrange everything else inside\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            row_spacing: 20 });\n"
+"\n"
+"        // Put everything inside the grid\n"
+"        this._grid.attach (this._cookieButton, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._switchGrid, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._cookieLabel, 0, 2, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Is the cookie dispenser turned on?\n"
+"        if (this._cookieSwitch.get_active()) {\n"
+"\n"
+"            // Increase the number of cookies by 1 and update the label\n"
+"            cookies++;\n"
+"            this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"        }\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new GettingTheSignal ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Prema co botón dereito sobre a barra de ferramentas na parte superior "
-"dereita e seleccione <gui>Editar</gui>. A xanela <gui>Editor da barra de "
-"ferramentas</gui> aparecerá."
 
-#: C/toolbar_builder.vala.page:56(media) C/toolbar_builder.py.page:72(media)
-msgid "Screenshot of where to right click to edit toolbar."
-msgstr ""
-"Captura de pantalla onde facer clic dereito para editar a barra de "
-"ferramentas."
+#: C/03_getting_the_signal.js.page:363(section/title)
+msgid "Code sample with RadioButton"
+msgstr "Exemplo de código con RadioButton"
 
-#: C/toolbar_builder.vala.page:61(p) C/toolbar_builder.py.page:77(p)
+#: C/03_getting_the_signal.js.page:365(section/code)
+#, no-wrap
 msgid ""
-"We want to add 5 ToolButtons: New, Open, Undo, Fullscreen and Leave "
-"Fullscreen. First, we will add the New ToolButton."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"const GettingTheSignal = new Lang.Class({\n"
+"    Name: 'Getting the Signal',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            border_width: 20,\n"
+"            title: \"Choose the one that says 'cookie'!\"});\n"
+"\n"
+"        // Create the radio buttons\n"
+"        this._cookieButton = new Gtk.RadioButton ({ label: \"Cookie\" });\n"
+"        this._notCookieOne = new Gtk.RadioButton ({ label: \"Not cookie\",\n"
+"            group: this._cookieButton });\n"
+"        this._notCookieTwo = new Gtk.RadioButton ({ label: \"Not cookie\",\n"
+"            group: this._cookieButton });\n"
+"\n"
+"        // Arrange the radio buttons in their own grid\n"
+"        this._radioGrid = new Gtk.Grid ();\n"
+"        this._radioGrid.attach (this._notCookieOne, 0, 0, 1, 1);\n"
+"        this._radioGrid.attach (this._cookieButton, 0, 1, 1, 1);\n"
+"        this._radioGrid.attach (this._notCookieTwo, 0, 2, 1, 1);\n"
+"\n"
+"        // Set the button that will be at the top to be active by default\n"
+"        this._notCookieOne.set_active (true);\n"
+"\n"
+"        // Create the cookie button\n"
+"        this._cookieButton = new Gtk.Button ({\n"
+"            label: \"Get a cookie\" });\n"
+"\n"
+"        // Connect the cookie button to the function that handles clicking it\n"
+"        this._cookieButton.connect ('clicked', Lang.bind (this, this._getACookie));\n"
+"\n"
+"        // Create the label\n"
+"        this._cookieLabel = new Gtk.Label ({\n"
+"            label: \"Number of cookies: \" + cookies });\n"
+"\n"
+"        // Create a grid to arrange everything inside\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            row_spacing: 20 });\n"
+"\n"
+"        // Put everything inside the grid\n"
+"        this._grid.attach (this._radioGrid, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._cookieButton, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._cookieLabel, 0, 2, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Did you select \"cookie\" instead of \"not cookie\"?\n"
+"        if (this._cookieButton.get_active()) {\n"
+"\n"
+"            // Increase the number of cookies by 1 and update the label\n"
+"            cookies++;\n"
+"            this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"        }\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new GettingTheSignal ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Queremos engadir 5 ToolButtons: Novo, Abrir, Desfacer, Pantalla completa e "
-"Saír da pantalla completa. Primeiro, precisamos engadir o ToolButton Novo."
-
-#: C/toolbar_builder.vala.page:64(p) C/toolbar_builder.py.page:80(p)
-msgid "Under <gui>Hierarchy</gui> tab, click <gui>Add</gui>."
-msgstr "Baixo a lapela <gui>Xerarquía</gui>, prema <gui>Engadir</gui>."
 
-#: C/toolbar_builder.vala.page:65(p) C/toolbar_builder.py.page:81(p)
-msgid "Change the name of the ToolItem to <input>new_button</input>."
-msgstr "Cambie o nome do TollItem a <input>new_button</input>."
+#: C/03_getting_the_signal.js.page:369(section/title)
+msgid "Code sample with Entry"
+msgstr "Exemplo de código con Entry"
 
-#: C/toolbar_builder.vala.page:66(p) C/toolbar_builder.py.page:82(p)
+#: C/03_getting_the_signal.js.page:371(section/code)
+#, no-wrap
 msgid ""
-"Scroll down and set <gui>Is important</gui> to <gui>Yes</gui>. This will "
-"cause the label of the ToolButton to be shown, when you view the toolbar."
-msgstr ""
-
-#: C/toolbar_builder.vala.page:67(p) C/toolbar_builder.py.page:83(p)
-msgid "Enter the <gui>action name</gui>: <input>app.new</input>."
-msgstr "Escriba o <gui>nome da acción</gui>: <input>app.new</input>."
-
-#: C/toolbar_builder.vala.page:68(p) C/toolbar_builder.py.page:84(p)
-msgid "Change the <gui>Label</gui> to <input>New</input>."
-msgstr "Cambie a <gui>Etiqueta</gui> a <input>Nova</input>."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"const GettingTheSignal = new Lang.Class({\n"
+"    Name: 'Getting the Signal',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            border_width: 20,\n"
+"            title: \"Spell 'cookie' to get a cookie!\"});\n"
+"\n"
+"        // Create the text entry field\n"
+"        this._spellCookie = new Gtk.Entry ();\n"
+"\n"
+"        // Create the cookie button\n"
+"        this._cookieButton = new Gtk.Button ({\n"
+"            label: \"Get a cookie\" });\n"
+"\n"
+"        // Connect the cookie button to the function that handles clicking it\n"
+"        this._cookieButton.connect ('clicked', Lang.bind (this, this._getACookie));\n"
+"\n"
+"        // Create the label\n"
+"        this._cookieLabel = new Gtk.Label ({\n"
+"            label: \"Number of cookies: \" + cookies });\n"
+"\n"
+"        // Create a grid to arrange everything inside\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            row_spacing: 20 });\n"
+"\n"
+"        // Put everything inside the grid\n"
+"        this._grid.attach (this._spellCookie, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._cookieButton, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._cookieLabel, 0, 2, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Did you spell \"cookie\" correctly?\n"
+"        if ((this._spellCookie.get_text()).toLowerCase() == \"cookie\") {\n"
+"\n"
+"            // Increase the number of cookies by 1 and update the label\n"
+"            cookies++;\n"
+"            this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"        }\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new GettingTheSignal ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/aboutdialog.c.page:24(media) C/aboutdialog.js.page:20(media)
+#: C/aboutdialog.py.page:22(media) C/aboutdialog.vala.page:29(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/aboutdialog_GMenu.png'; "
+#| "md5=a36117a559fa98e25e2f6b3db593639f"
+msgctxt "_"
+msgid ""
+"external ref='media/aboutdialog_GMenu.png' "
+"md5='a36117a559fa98e25e2f6b3db593639f'"
+msgstr ""
+"@@image: 'media/aboutdialog_GMenu.png'; md5=a36117a559fa98e25e2f6b3db593639f"
+
+#: C/aboutdialog.c.page:7(info/title)
+#, fuzzy
+#| msgid "AboutDialog (C)"
+msgctxt "text"
+msgid "AboutDialog (C)"
+msgstr "AboutDialog (C)"
+
+#: C/aboutdialog.c.page:14(credit/name) C/button.c.page:14(credit/name)
+#: C/dialog.c.page:14(credit/name) C/entry.c.page:12(credit/name)
+#: C/grid.c.page:12(credit/name) C/image.c.page:12(credit/name)
+#: C/label.c.page:13(credit/name) C/linkbutton.c.page:12(credit/name)
+#: C/messagedialog.c.page:13(credit/name) C/progressbar.c.page:13(credit/name)
+#: C/radiobutton.c.page:14(credit/name) C/scale.c.page:14(credit/name)
+#: C/spinbutton.c.page:15(credit/name) C/spinner.c.page:13(credit/name)
+#: C/statusbar.c.page:16(credit/name) C/switch.c.page:12(credit/name)
+#: C/textview.c.page:12(credit/name) C/togglebutton.c.page:16(credit/name)
+msgid "Monica Kochofar"
+msgstr "Monica Kochofar"
+
+#: C/aboutdialog.c.page:19(info/desc) C/aboutdialog.js.page:16(info/desc)
+#: C/aboutdialog.vala.page:25(info/desc)
+msgid "Display information about an application"
+msgstr "Mostrar información sobre un aplicativo"
+
+#: C/aboutdialog.c.page:22(page/title) C/aboutdialog.js.page:19(page/title)
+#: C/aboutdialog.py.page:21(page/title) C/aboutdialog.vala.page:28(page/title)
+msgid "AboutDialog"
+msgstr "AboutDialog"
+
+#: C/aboutdialog.c.page:25(page/p) C/aboutdialog.vala.page:30(page/p)
+msgid "An AboutDialog example using Gtk.ApplicationWindow and Menu"
+msgstr "Un exemplo de AboutDialog usando Gtk.ApplicationWindow e Menu"
+
+#: C/aboutdialog.c.page:26(note/p) C/aboutdialog.vala.page:31(note/p)
+#: C/gmenu.c.page:23(note/p) C/gmenu.py.page:29(note/p)
+msgid ""
+"<em style=\"bold\">You need to be running Gtk3.4 or later for this to work</"
+"em>"
+msgstr ""
+
+#: C/aboutdialog.c.page:28(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function in which reacts to the \"response\" signal from the user in\n"
+" * the message dialog window.\n"
+" * This function is used to destroy the dialog window.\n"
+" */\n"
+"static void\n"
+"on_close (GtkDialog *dialog,\n"
+"          gint       response_id,\n"
+"          gpointer   user_data)\n"
+"{\n"
+"  /*This will cause the dialog to be destroyed*/\n"
+"  gtk_widget_destroy (GTK_WIDGET (dialog));\n"
+"\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the response signal \"activate\" related to the SimpleAction\n"
+" * \"about_action\".\n"
+" * This function is used to cause the about dialog window to popup.\n"
+" */\n"
+"static void\n"
+"about_cb (GSimpleAction *simple,\n"
+"          GVariant      *parameter,\n"
+"          gpointer       user_data)\n"
+"{\n"
+"   GtkWidget *about_dialog;\n"
+"\n"
+"   about_dialog = gtk_about_dialog_new ();\n"
+"\n"
+"   /* Lists of authors/ documentators to be used later, they must be initialized\n"
+"    * in a null terminated array of strings.\n"
+"    */\n"
+"   const gchar *authors[] = {\"GNOME Documentation Team\", NULL};\n"
+"   const gchar *documenters[] = {\"GNOME Documentation Team\", NULL};\n"
+"\n"
+"   /* We fill in the information for the about dialog */\n"
+"   gtk_about_dialog_set_program_name (GTK_ABOUT_DIALOG (about_dialog), \"AboutDialog Example\");\n"
+"   gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG (about_dialog), \"Copyright \\xc2\\xa9 2012 GNOME 
Documentation Team\");\n"
+"   gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG (about_dialog), authors);\n"
+"   gtk_about_dialog_set_documenters (GTK_ABOUT_DIALOG (about_dialog), documenters);\n"
+"   gtk_about_dialog_set_website_label (GTK_ABOUT_DIALOG (about_dialog), \"GNOME Developer Website\");\n"
+"   gtk_about_dialog_set_website (GTK_ABOUT_DIALOG (about_dialog), \"http://developer.gnome.org\";);\n"
+"\n"
+"  /* We do not wish to show the title, which in this case would be \n"
+"   * \"AboutDialog Example\". We have to reset the title of the messagedialog \n"
+"   * window after setting the program name.\n"
+"   */\n"
+"  gtk_window_set_title (GTK_WINDOW (about_dialog), \"\");\n"
+"\n"
+"  /* To close the aboutdialog when \"close\" is clicked we connect the response \n"
+"   * signal to on_close\n"
+"   */\n"
+"  g_signal_connect (GTK_DIALOG (about_dialog), \"response\", \n"
+"                    G_CALLBACK (on_close), NULL);\n"
+"\n"
+"  /* Show the about dialog */\n"
+"  gtk_widget_show (about_dialog); \n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"\n"
+"  GSimpleAction *about_action;\n"
+"\n"
+"  /* Create a window with a title and a default size */\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"AboutDialog Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);\n"
+"\n"
+"  /* Create a new simple action, giving it a NULL parameter type. It will \n"
+"   * always be NULL for actions invoked from a menu. (e.g clicking on an \"ok\" \n"
+"   * or \"cancel\" button)\n"
+"   */\n"
+"  about_action = g_simple_action_new (\"about\", NULL); \n"
+"\n"
+"  /* Connect the \"activate\" signal to the appropriate callback function. \n"
+"   * It will indicate that the action was just activated.\n"
+"   */\n"
+"  g_signal_connect (about_action, \"activate\", G_CALLBACK (about_cb), \n"
+"                    GTK_WINDOW (window));\n"
+"\n"
+"  /* Adds the about_action to the overall action map. An Action map is an \n"
+"   * interface that contains a number of named GAction instances \n"
+"   * (such as about_action) \n"
+"   */\n"
+"  g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (about_action));\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the response signal \"activate\" from the \"quit\" action \n"
+" * found in the function directly below.\n"
+" */ \n"
+"static void\n"
+"quit_cb (GSimpleAction *simple,\n"
+"         GVariant      *parameter,\n"
+"         gpointer       user_data)\n"
+"{\n"
+"  GApplication *application = user_data;\n"
+"\n"
+"  g_application_quit (application);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Startup function for the menu we are creating in this sample */\n"
+"static void\n"
+"startup (GApplication *app,\n"
+"         gpointer      user_data)\n"
+"{\n"
+"  GMenu *menu;\n"
+"  GSimpleAction *quit_action;\n"
+"\n"
+"  /* Initialize the GMenu, and add a menu item with label \"About\" and action \n"
+"   * \"win.about\". Also add another menu item with label \"Quit\" and action \n"
+"   * \"app.quit\" \n"
+"   */\n"
+"  menu = g_menu_new ();\n"
+"  g_menu_append (menu, \"About\", \"win.about\");\n"
+"  g_menu_append (menu, \"Quit\", \"app.quit\");\n"
+"\n"
+"  /* Create a new simple action for the application. (In this case it is the \n"
+"   * \"quit\" action.\n"
+"   */\n"
+"  quit_action = g_simple_action_new (\"quit\", NULL);\n"
+"\n"
+"  /* Ensure that the menu we have just created is set for the overall application */\n"
+"  gtk_application_set_app_menu (GTK_APPLICATION (app), G_MENU_MODEL (menu));\n"
+"\n"
+"  g_signal_connect (quit_action, \n"
+"                    \"activate\", \n"
+"                    G_CALLBACK (quit_cb), \n"
+"                    app);\n"
+"\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (quit_action));\n"
+"\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Startup function for the application */\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  g_signal_connect (app, \"startup\", G_CALLBACK (startup), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
+msgstr ""
+
+#: C/aboutdialog.c.page:30(page/p) C/aboutdialog.js.page:24(page/p)
+#: C/aboutdialog.py.page:41(section/p) C/aboutdialog.vala.page:34(page/p)
+#: C/button.c.page:29(page/p) C/button.js.page:26(page/p)
+#: C/button.py.page:50(section/p) C/buttonbox.py.page:45(section/p)
+#: C/checkbutton.c.page:25(page/p) C/checkbutton.py.page:44(section/p)
+#: C/checkbutton.vala.page:25(page/p) C/colorbutton.py.page:38(section/p)
+#: C/colorbutton.vala.page:27(page/p) C/comboboxtext.js.page:176(section/p)
+#: C/combobox.js.page:233(section/p) C/combobox.py.page:38(section/p)
+#: C/combobox.vala.page:25(page/p)
+#: C/combobox_multicolumn.py.page:41(section/p) C/dialog.c.page:29(page/p)
+#: C/dialog.js.page:25(page/p) C/dialog.py.page:45(section/p)
+#: C/dialog.vala.page:27(page/p) C/entry.c.page:27(page/p)
+#: C/entry.js.page:25(page/p) C/entry.py.page:59(section/p)
+#: C/entry.vala.page:25(page/p) C/filechooserdialog.py.page:69(section/p)
+#: C/filechooserdialog.vala.page:35(section/p)
+#: C/fontchooserwidget.py.page:43(section/p) C/gmenu.c.page:27(page/p)
+#: C/gmenu.js.page:25(page/p) C/gmenu.py.page:74(section/p)
+#: C/gmenu.vala.page:37(page/p) C/grid.c.page:27(page/p)
+#: C/grid.js.page:29(page/p) C/grid.py.page:53(section/p)
+#: C/grid.vala.page:27(page/p) C/GtkApplicationWindow.c.page:25(page/p)
+#: C/GtkApplicationWindow.js.page:26(page/p)
+#: C/GtkApplicationWindow.py.page:48(section/p)
+#: C/GtkApplicationWindow.vala.page:26(page/p) C/image.c.page:28(page/p)
+#: C/image.js.page:27(page/p) C/image.py.page:98(section/p)
+#: C/image.vala.page:27(page/p) C/label.c.page:32(page/p)
+#: C/label.js.page:25(page/p) C/label.py.page:86(section/p)
+#: C/label.vala.page:26(page/p) C/linkbutton.c.page:27(page/p)
+#: C/linkbutton.js.page:25(page/p) C/linkbutton.py.page:44(section/p)
+#: C/linkbutton.vala.page:25(page/p) C/menubar.py.page:181(section/p)
+#: C/menubar.vala.page:187(section/p) C/menubutton.js.page:28(page/p)
+#: C/menubutton.py.page:50(section/p) C/menubutton.vala.page:28(page/p)
+#: C/messagedialog.c.page:31(page/p) C/messagedialog.js.page:189(section/p)
+#: C/messagedialog.py.page:54(section/p) C/messagedialog.vala.page:26(page/p)
+#: C/paned.py.page:38(section/p) C/progressbar.c.page:28(page/p)
+#: C/progressbar.js.page:34(page/p) C/progressbar.py.page:53(section/p)
+#: C/progressbar.vala.page:25(page/p) C/radiobutton.c.page:29(page/p)
+#: C/radiobutton.py.page:49(section/p) C/radiobutton.vala.page:28(page/p)
+#: C/scale.c.page:29(page/p) C/scale.py.page:53(section/p)
+#: C/scale.vala.page:27(page/p) C/scrolledwindow.py.page:41(section/p)
+#: C/scrolledwindow.vala.page:26(page/p) C/separator.py.page:35(section/p)
+#: C/spinbutton.c.page:30(page/p) C/spinbutton.py.page:45(section/p)
+#: C/spinbutton.vala.page:27(page/p) C/spinner.c.page:28(page/p)
+#: C/spinner.js.page:25(page/p) C/spinner.py.page:38(section/p)
+#: C/spinner.vala.page:25(page/p) C/statusbar.c.page:31(page/p)
+#: C/statusbar.py.page:50(section/p) C/statusbar.vala.page:28(page/p)
+#: C/switch.c.page:28(page/p) C/switch.py.page:46(section/p)
+#: C/switch.vala.page:31(page/p) C/textview.c.page:31(page/p)
+#: C/textview.py.page:93(section/p) C/textview.vala.page:30(page/p)
+#: C/togglebutton.c.page:31(page/p) C/togglebutton.py.page:43(section/p)
+#: C/togglebutton.vala.page:28(page/p) C/toolbar.js.page:26(page/p)
+#: C/toolbar.py.page:50(section/p) C/toolbar.vala.page:29(page/p)
+#: C/toolbar_builder.py.page:189(section/p)
+#: C/toolbar_builder.vala.page:146(page/p) C/tooltip.py.page:53(section/p)
+#: C/treeview_advanced_liststore.py.page:43(section/p)
+#: C/treeview_cellrenderertoggle.py.page:39(section/p)
+#: C/treeview_simple_liststore.js.page:272(section/p)
+#: C/treeview_simple_liststore.py.page:41(section/p)
+#: C/treeview_simple_liststore.vala.page:27(page/p)
+#: C/treeview_treestore.py.page:39(section/p) C/window.c.page:29(page/p)
+#: C/window.py.page:60(section/p) C/window.vala.page:33(page/p)
+msgid "In this sample we used the following:"
+msgstr "Neste exemplo empregaremos o seguinte:"
+
+#: C/aboutdialog.c.page:34(item/p) C/button.c.page:33(item/p)
+#: C/dialog.c.page:33(item/p) C/entry.c.page:31(item/p)
+#: C/grid.c.page:31(item/p) C/GtkApplicationWindow.c.page:29(item/p)
+#: C/image.c.page:32(item/p) C/label.c.page:36(item/p)
+#: C/linkbutton.c.page:31(item/p) C/messagedialog.c.page:35(item/p)
+#: C/progressbar.c.page:32(item/p) C/radiobutton.c.page:33(item/p)
+#: C/scale.c.page:33(item/p) C/spinbutton.c.page:34(item/p)
+#: C/spinner.c.page:32(item/p) C/statusbar.c.page:35(item/p)
+#: C/switch.c.page:32(item/p) C/textview.c.page:35(item/p)
+#: C/togglebutton.c.page:35(item/p) C/window.c.page:33(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/3.4/GtkApplication.html";
+"\">GtkApplication</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/aboutdialog.c.page:35(item/p) C/button.c.page:34(item/p)
+#: C/dialog.c.page:34(item/p) C/entry.c.page:32(item/p)
+#: C/grid.c.page:32(item/p) C/linkbutton.c.page:32(item/p)
+#: C/messagedialog.c.page:37(item/p) C/progressbar.c.page:33(item/p)
+#: C/radiobutton.c.page:34(item/p) C/scale.c.page:34(item/p)
+#: C/spinbutton.c.page:35(item/p) C/spinner.c.page:33(item/p)
+#: C/statusbar.c.page:36(item/p) C/switch.c.page:33(item/p)
+#: C/textview.c.page:36(item/p) C/togglebutton.c.page:36(item/p)
+#: C/window.c.page:34(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/3.4/GtkWindow.html\";>GtkWindow</"
+"link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/aboutdialog.c.page:36(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkAboutDialog.html";
+"\">GtkAboutDialog</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/aboutdialog.c.page:37(item/p) C/aboutdialog.py.page:47(item/p)
+#: C/messagedialog.c.page:41(item/p) C/messagedialog.py.page:63(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gio/stable/GMenu.html\";>GMenu</link>"
+msgstr ""
+
+#: C/aboutdialog.c.page:38(item/p) C/messagedialog.c.page:40(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gio/stable/GActionMap.html";
+"\">GActionMap</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/aboutdialog.js.page:6(info/title)
+#, fuzzy
+#| msgid "AboutDialog (JavaScript)"
+msgctxt "text"
+msgid "AboutDialog (JavaScript)"
+msgstr "AboutDialog (JavaScript)"
+
+#: C/aboutdialog.js.page:21(page/p)
+msgid ""
+"A modal dialog window which shows information about an application and its "
+"creators. This one is triggered by clicking \"About\" in the application's "
+"menu, which is normally a good place to put it."
+msgstr ""
+
+#: C/aboutdialog.js.page:23(page/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const AboutDialogExample = new Lang.Class({\n"
+"    Name: 'AboutDialog Example',\n"
+"\n"
+"    // Create the application itself\n"
+"        _init: function() {\n"
+"            this.application = new Gtk.Application({\n"
+"                application_id: 'org.example.jsaboutdialog',\n"
+"                flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"            });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal creates the menu and builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._initMenus();\n"
+"        this._buildUI();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function(){\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"AboutDialog Example\",\n"
+"                                                   default_height: 250,\n"
+"                                                   default_width: 350 });\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"    // Create the application menu\n"
+"    _initMenus: function() {\n"
+"        let menu = new Gio.Menu();\n"
+"        menu.append(\"About\", 'app.about');\n"
+"        menu.append(\"Quit\",'app.quit');\n"
+"        this.application.set_app_menu(menu);\n"
+"\n"
+"        // Create the \"About\" menu option and have it call the _showAbout() function\n"
+"        let aboutAction = new Gio.SimpleAction({ name: 'about' });\n"
+"        aboutAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showAbout();\n"
+"            }));\n"
+"        this.application.add_action(aboutAction);\n"
+"\n"
+"        // Create the \"Quit\" menu option and have it close the window\n"
+"        let quitAction = new Gio.SimpleAction ({ name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"        this.application.add_action(quitAction);\n"
+"    },\n"
+"\n"
+"    _showAbout: function() {\n"
+"\n"
+"        // String arrays of the names of the people involved in the project\n"
+"        var authors = [\"GNOME Documentation Team\"];\n"
+"        var documenters = [\"GNOME Documentation Team\"];\n"
+"\n"
+"        // Create the About dialog\n"
+"        let aboutDialog = new Gtk.AboutDialog({ title: \"AboutDialog Example\",\n"
+"                                                program_name: \"GtkApplication Example\",\n"
+"                                                copyright: \"Copyright \\xa9 2012 GNOME Documentation 
Team\",\n"
+"                                                authors: authors,\n"
+"                                                documenters: documenters,\n"
+"                                                website: \"http://developer.gnome.org\",\n";
+"                                                website_label: \"GNOME Developer Website\" });\n"
+"\n"
+"        // Attach the About dialog to the window\n"
+"        aboutDialog.modal = true;\n"
+"        aboutDialog.transient_for = this._window;\n"
+"\n"
+"        // Show the About dialog\n"
+"        aboutDialog.show();\n"
+"\n"
+"        // Connect the Close button to the destroy signal for the dialog\n"
+"        aboutDialog.connect('response', function() {\n"
+"            aboutDialog.destroy();\n"
+"        });\n"
+"    }\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new AboutDialogExample();\n"
+"app.application.run(ARGV);\n"
+msgstr ""
+
+#: C/aboutdialog.js.page:28(item/p) C/gmenu.c.page:31(item/p)
+#: C/gmenu.js.page:29(item/p) C/gmenu.py.page:76(item/p)
+#: C/messagedialog.js.page:193(item/p) C/switch.js.page:265(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gio/unstable/GMenu.html\";>GMenu</"
+"link>"
+msgstr ""
+
+#: C/aboutdialog.js.page:29(item/p) C/filechooserdialog.py.page:78(item/p)
+#: C/gmenu.c.page:32(item/p) C/gmenu.js.page:30(item/p)
+#: C/gmenu.py.page:77(item/p) C/messagedialog.js.page:194(item/p)
+#: C/messagedialog.py.page:61(item/p) C/switch.js.page:266(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gio/stable/GSimpleAction.html";
+"\">GSimpleAction</link>"
+msgstr ""
+
+#: C/aboutdialog.js.page:30(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.AboutDialog.";
+"html\">Gtk.AboutDialog</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/aboutdialog.js.page:31(item/p) C/button.js.page:30(item/p)
+#: C/checkbutton.js.page:137(item/p) C/comboboxtext.js.page:180(item/p)
+#: C/combobox.js.page:237(item/p) C/dialog.js.page:29(item/p)
+#: C/entry.js.page:29(item/p) C/grid.js.page:33(item/p)
+#: C/GtkApplicationWindow.js.page:30(item/p) C/image.js.page:31(item/p)
+#: C/label.js.page:29(item/p) C/linkbutton.js.page:29(item/p)
+#: C/messagedialog.js.page:195(item/p) C/progressbar.js.page:39(item/p)
+#: C/radiobutton.js.page:275(item/p) C/scale.js.page:210(item/p)
+#: C/spinbutton.js.page:201(item/p) C/spinner.js.page:30(item/p)
+#: C/statusbar.js.page:222(item/p) C/switch.js.page:267(item/p)
+#: C/textview.js.page:249(item/p) C/togglebutton.js.page:154(item/p)
+#: C/treeview_simple_liststore.js.page:276(item/p) C/window.js.page:38(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Application.";
+"html\">Gtk.Application</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/aboutdialog.js.page:32(item/p) C/button.js.page:31(item/p)
+#: C/checkbutton.js.page:138(item/p) C/comboboxtext.js.page:181(item/p)
+#: C/combobox.js.page:238(item/p) C/dialog.js.page:30(item/p)
+#: C/entry.js.page:30(item/p) C/grid.js.page:34(item/p)
+#: C/GtkApplicationWindow.js.page:31(item/p) C/image.js.page:32(item/p)
+#: C/label.js.page:30(item/p) C/linkbutton.js.page:30(item/p)
+#: C/messagedialog.js.page:196(item/p) C/progressbar.js.page:40(item/p)
+#: C/radiobutton.js.page:276(item/p) C/scale.js.page:211(item/p)
+#: C/spinbutton.js.page:202(item/p) C/spinner.js.page:31(item/p)
+#: C/statusbar.js.page:223(item/p) C/switch.js.page:268(item/p)
+#: C/textview.js.page:250(item/p) C/togglebutton.js.page:155(item/p)
+#: C/treeview_simple_liststore.js.page:277(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkApplicationWindow.html";
+"\">Gtk.ApplicationWindow</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/aboutdialog.py.page:7(info/title)
+#, fuzzy
+#| msgid "AboutDialog (Python)"
+msgctxt "text"
+msgid "AboutDialog (Python)"
+msgstr "AboutDialog (Python)"
+
+#: C/aboutdialog.py.page:13(credit/name) C/button.py.page:13(credit/name)
+#: C/buttonbox.py.page:13(credit/name) C/checkbutton.py.page:13(credit/name)
+#: C/colorbutton.py.page:12(credit/name) C/combobox.py.page:12(credit/name)
+#: C/combobox_multicolumn.py.page:13(credit/name)
+#: C/dialog.py.page:13(credit/name) C/entry.py.page:12(credit/name)
+#: C/filechooserdialog.py.page:15(credit/name)
+#: C/fontchooserwidget.py.page:13(credit/name) C/gmenu.py.page:18(credit/name)
+#: C/grid.py.page:19(credit/name)
+#: C/GtkApplicationWindow.py.page:17(credit/name)
+#: C/image.py.page:12(credit/name) C/label.py.page:13(credit/name)
+#: C/linkbutton.py.page:13(credit/name) C/menubar.py.page:19(credit/name)
+#: C/menubutton.py.page:18(credit/name)
+#: C/messagedialog.py.page:13(credit/name)
+#: C/model-view-controller.py.page:19(credit/name)
+#: C/paned.py.page:12(credit/name) C/progressbar.py.page:12(credit/name)
+#: C/properties.py.page:19(credit/name) C/radiobutton.py.page:16(credit/name)
+#: C/scale.py.page:13(credit/name) C/scrolledwindow.py.page:12(credit/name)
+#: C/separator.py.page:13(credit/name)
+#: C/signals-callbacks.py.page:19(credit/name)
+#: C/spinbutton.py.page:13(credit/name) C/spinner.py.page:12(credit/name)
+#: C/statusbar.py.page:15(credit/name) C/strings.py.page:19(credit/name)
+#: C/switch.py.page:17(credit/name) C/textview.py.page:20(credit/name)
+#: C/togglebutton.py.page:15(credit/name) C/toolbar.py.page:13(credit/name)
+#: C/toolbar_builder.py.page:20(credit/name) C/tooltip.py.page:13(credit/name)
+#: C/treeview_advanced_liststore.py.page:15(credit/name)
+#: C/treeview_cellrenderertoggle.py.page:12(credit/name)
+#: C/treeview_simple_liststore.py.page:14(credit/name)
+#: C/treeview_treestore.py.page:12(credit/name)
+#: C/tutorial.py.page:19(credit/name) C/window.py.page:17(credit/name)
+msgid "Marta Maria Casetti"
+msgstr "Marta Maria Casetti"
+
+#: C/aboutdialog.py.page:18(info/desc)
+msgid "A window that displays information about an application"
+msgstr "Unha xanela que mostra información sobre un aplicativo"
+
+#: C/aboutdialog.py.page:23(page/p)
+msgid ""
+"An AboutDialog example using Gtk.ApplicationWindow and Menu (the \"about\" "
+"is displayed if \"About\" in the menu is selected)."
+msgstr ""
+
+#: C/aboutdialog.py.page:28(section/title) C/button.py.page:29(section/title)
+#: C/buttonbox.py.page:29(section/title)
+#: C/checkbutton.py.page:28(section/title)
+#: C/colorbutton.py.page:27(section/title)
+#: C/combobox.py.page:27(section/title)
+#: C/combobox_multicolumn.py.page:28(section/title)
+#: C/dialog.py.page:28(section/title) C/entry.py.page:32(section/title)
+#: C/filechooserdialog.py.page:51(section/title)
+#: C/fontchooserwidget.py.page:29(section/title)
+#: C/gmenu.py.page:34(section/title) C/grid.py.page:35(section/title)
+#: C/GtkApplicationWindow.py.page:32(section/title)
+#: C/image.py.page:31(section/title) C/label.py.page:33(section/title)
+#: C/linkbutton.py.page:29(section/title)
+#: C/menubutton.py.page:35(section/title)
+#: C/messagedialog.py.page:28(section/title) C/paned.py.page:27(section/title)
+#: C/progressbar.py.page:37(section/title)
+#: C/radiobutton.py.page:31(section/title) C/scale.py.page:28(section/title)
+#: C/scrolledwindow.py.page:27(section/title)
+#: C/separator.py.page:29(section/title)
+#: C/spinbutton.py.page:28(section/title) C/spinner.py.page:27(section/title)
+#: C/statusbar.py.page:30(section/title) C/switch.py.page:34(section/title)
+#: C/textview.py.page:42(section/title)
+#: C/togglebutton.py.page:30(section/title)
+#: C/toolbar.py.page:29(section/title)
+#: C/toolbar_builder.py.page:162(section/title)
+#: C/tooltip.py.page:28(section/title)
+#: C/treeview_advanced_liststore.py.page:30(section/title)
+#: C/treeview_cellrenderertoggle.py.page:27(section/title)
+#: C/treeview_simple_liststore.py.page:29(section/title)
+#: C/treeview_treestore.py.page:27(section/title)
+#: C/window.py.page:42(section/title)
+msgid "Code used to generate this example"
+msgstr "Código usado para xerar este exemplo"
+
+#: C/aboutdialog.py.page:30(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import Gio\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\n"
+"     # constructor for a window (the parent window)\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"AboutDialog Example\", application=app)\n"
+"        self.set_default_size(200, 200)\n"
+"\n"
+"        # create the about_action (a Gio.SimpleAction)\n"
+"        about_action = Gio.SimpleAction.new(\"about\", None)\n"
+"        # connect the signal from the action to the function about_cb()\n"
+"        about_action.connect(\"activate\", self.about_cb)\n"
+"        # add the action to the application\n"
+"        app.add_action(about_action)\n"
+"\n"
+"    # callback function for the about_action's \"activate\" signal\n"
+"    def about_cb(self, action, parameter):\n"
+"        # a  Gtk.AboutDialog\n"
+"        aboutdialog = Gtk.AboutDialog()\n"
+"\n"
+"        # lists of authors and documenters (will be used later)\n"
+"        authors = [\"GNOME Documentation Team\"]\n"
+"        documenters = [\"GNOME Documentation Team\"]\n"
+"\n"
+"        # we fill in the aboutdialog\n"
+"        aboutdialog.set_program_name(\"AboutDialog Example\")\n"
+"        aboutdialog.set_copyright(\"Copyright \\xc2\\xa9 2012 GNOME Documentation Team\")\n"
+"        aboutdialog.set_authors(authors)\n"
+"        aboutdialog.set_documenters(documenters)\n"
+"        aboutdialog.set_website(\"http://developer.gnome.org\";)\n"
+"        aboutdialog.set_website_label(\"GNOME Developer Website\")\n"
+"\n"
+"        # we do not want to show the title, which by default would be \"About AboutDialog Example\"\n"
+"        # we have to reset the title of the messagedialog window after setting the program name\n"
+"        aboutdialog.set_title(\"\")\n"
+"\n"
+"        # to close the aboutdialog when \"close\" is clicked we connect the\n"
+"        # \"response\" signal to on_close\n"
+"        aboutdialog.connect(\"response\", self.on_close)\n"
+"        # show the aboutdialog\n"
+"        aboutdialog.show()\n"
+"\n"
+"    # destroy the aboutdialog\n"
+"    def on_close(self, action, parameter):\n"
+"        action.destroy()\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def quit_cb(self, action, parameter):\n"
+"        self.quit()\n"
+"\n"
+"    def do_startup (self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"        # create a menu (a Gio.Menu)\n"
+"        menu = Gio.Menu()\n"
+"        # append a menu item with label \"About\" and action \"app.about\"\n"
+"        menu.append (\"About\", \"app.about\")\n"
+"        # append a menu item with label \"Quit\" and action \"app.quit\"\n"
+"        menu.append(\"Quit\", \"app.quit\")\n"
+"        # set menu as the menu for the application\n"
+"        self.set_app_menu (menu)\n"
+"\n"
+"        # a new simpleaction - for the application\n"
+"        quit_action = Gio.SimpleAction.new(\"quit\", None)\n"
+"        quit_action.connect(\"activate\", self.quit_cb)\n"
+"        self.add_action(quit_action)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/aboutdialog.py.page:35(section/title)
+msgid "Useful methods for an AboutDialog widget"
+msgstr "Métodos útiles para o widget AboutDialog"
+
+#: C/aboutdialog.py.page:36(section/p) C/button.py.page:34(section/p)
+#: C/dialog.py.page:36(section/p) C/fontchooserwidget.py.page:34(section/p)
+#: C/messagedialog.py.page:36(section/p) C/radiobutton.py.page:37(section/p)
+#: C/togglebutton.py.page:38(section/p)
+msgid ""
+"For an explanation of signals and callback functions, see <link xref="
+"\"signals-callbacks.py\">this page</link>."
+msgstr ""
+
+#: C/aboutdialog.py.page:40(section/title) C/button.py.page:49(section/title)
+#: C/buttonbox.py.page:44(section/title)
+#: C/checkbutton.py.page:43(section/title)
+#: C/colorbutton.py.page:37(section/title)
+#: C/combobox.py.page:37(section/title)
+#: C/combobox_multicolumn.py.page:40(section/title)
+#: C/dialog.py.page:44(section/title) C/entry.py.page:58(section/title)
+#: C/filechooserdialog.py.page:68(section/title)
+#: C/fontchooserwidget.py.page:42(section/title)
+#: C/gmenu.py.page:73(section/title) C/grid.py.page:52(section/title)
+#: C/GtkApplicationWindow.py.page:47(section/title)
+#: C/image.py.page:97(section/title) C/label.py.page:85(section/title)
+#: C/linkbutton.py.page:43(section/title) C/menubar.py.page:180(section/title)
+#: C/menubutton.py.page:49(section/title)
+#: C/messagedialog.py.page:53(section/title) C/paned.py.page:37(section/title)
+#: C/progressbar.py.page:52(section/title)
+#: C/radiobutton.py.page:48(section/title) C/scale.py.page:52(section/title)
+#: C/scrolledwindow.py.page:40(section/title)
+#: C/spinbutton.py.page:44(section/title) C/spinner.py.page:37(section/title)
+#: C/statusbar.py.page:49(section/title) C/switch.py.page:45(section/title)
+#: C/textview.py.page:92(section/title)
+#: C/togglebutton.py.page:42(section/title)
+#: C/toolbar.py.page:49(section/title)
+#: C/toolbar_builder.py.page:188(section/title)
+#: C/tooltip.py.page:52(section/title)
+#: C/treeview_advanced_liststore.py.page:42(section/title)
+#: C/treeview_cellrenderertoggle.py.page:38(section/title)
+#: C/treeview_simple_liststore.py.page:40(section/title)
+#: C/treeview_treestore.py.page:38(section/title)
+#: C/window.py.page:58(section/title)
+msgid "API References"
+msgstr ""
+
+#: C/aboutdialog.py.page:45(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkAboutDialog.html";
+"\">GtkAboutDialog</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/aboutdialog.py.page:46(item/p) C/checkbutton.py.page:47(item/p)
+#: C/grid.py.page:56(item/p) C/GtkApplicationWindow.py.page:53(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkApplicationWindow.";
+"html\">GtkApplicationWindow</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/aboutdialog.py.page:48(item/p) C/checkbutton.py.page:46(item/p)
+#: C/grid.py.page:55(item/p) C/GtkApplicationWindow.py.page:52(item/p)
+#: C/messagedialog.py.page:64(item/p) C/window.py.page:62(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkApplication.html";
+"\">GtkApplication</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/aboutdialog.vala.page:7(info/title)
+#, fuzzy
+#| msgid "AboutDialog (Vala)"
+msgctxt "text"
+msgid "AboutDialog (Vala)"
+msgstr "AboutDialog (Vala)"
+
+#: C/aboutdialog.vala.page:14(credit/name) C/gmenu.vala.page:13(credit/name)
+msgid "Ryan Lortie"
+msgstr ""
+
+#: C/aboutdialog.vala.page:33(page/code)
+#, no-wrap
+msgid ""
+"/* A window in the application */\n"
+"public class Window : Gtk.ApplicationWindow {\n"
+"\n"
+"\t/* The constructor */\n"
+"\tpublic Window (Application app) {\n"
+"\t\tObject (application: app, title: \"AboutDialog Example\");\n"
+"\n"
+"\t\tvar about_action = new SimpleAction (\"about\", null);\n"
+"\n"
+"\t\tabout_action.activate.connect (this.about_cb);\n"
+"\t\tthis.add_action (about_action);\n"
+"\t\tthis.show_all ();\n"
+"\t}\n"
+"\n"
+"\t/* This is the callback function connected to the 'activate' signal\n"
+"\t * of the SimpleAction about_action.\n"
+"\t */\n"
+"\tvoid about_cb (SimpleAction simple, Variant? parameter) {\n"
+"\t\tstring[] authors = { \"GNOME Documentation Team\", null };\n"
+"\t\tstring[] documenters = { \"GNOME Documentation Team\", null };\n"
+"\n"
+"\t\tGtk.show_about_dialog (this,\n"
+"                               \"program-name\", (\"GtkApplication Example\"),\n"
+"                               \"copyright\", (\"Copyright \\xc2\\xa9 2012 GNOME Documentation Team\"),\n"
+"                               \"authors\", authors,\n"
+"                               \"documenters\", documenters,\n"
+"                               \"website\", \"http://developer.gnome.org\",\n";
+"                               \"website-label\", (\"GNOME Developer Website\"),\n"
+"                               null);\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* This is the Application */\n"
+"public class Application : Gtk.Application {\n"
+"\n"
+"\t/* Here we override the activate signal of GLib.Application */\n"
+"\tprotected override void activate () {\n"
+"\t\tnew Window (this);\n"
+"\t}\n"
+"\n"
+"\t/* Here we override the startup signal of GLib.Application */\n"
+"\tprotected override void startup () {\n"
+"\n"
+"\t\tbase.startup ();\n"
+"\n"
+"\t\tvar menu = new Menu ();\n"
+"\t\tmenu.append (\"About\", \"win.about\");\n"
+"\t\tmenu.append (\"Quit\", \"app.quit\");\n"
+"\t\tthis.app_menu = menu;\n"
+"\n"
+"\t\tvar quit_action = new SimpleAction (\"quit\", null);\n"
+"\t\t//quit_action.activate.connect (this.quit);\n"
+"\t\tthis.add_action (quit_action);\n"
+"\t}\n"
+"\n"
+"\t/* The constructor */\n"
+"\tpublic Application () {\n"
+"\t\tObject (application_id: \"org.example.application\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main function creates Application and runs it */\n"
+"int main (string[] args) {\n"
+"\treturn new Application ().run (args);\n"
+"}\n"
+msgstr ""
+
+#: C/aboutdialog.vala.page:38(item/p) C/gmenu.vala.page:41(item/p)
+#: C/window.vala.page:37(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Application.html\";>Gtk."
+"Application</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/aboutdialog.vala.page:39(item/p) C/gmenu.vala.page:42(item/p)
+#: C/GtkApplicationWindow.vala.page:31(item/p) C/label.vala.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ApplicationWindow.html";
+"\">Gtk.ApplicationWindow</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/aboutdialog.vala.page:40(item/p)
+#, fuzzy
+#| msgid ""
+#| "The method <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+#| "set_default_size.html\">set_default_size</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.set_default_size.html";
+"\">set_default_size</link>"
+msgstr ""
+"O método <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"set_default_size.html\">set_default_size</link>"
+
+#: C/audio-player.vala.page:9(info/desc)
+msgid "Coming soon..."
+msgstr "Proximamente..."
+
+#: C/audio-player.vala.page:13(credit/name)
+#: C/getting-ready.page:11(credit/name) C/guitar-tuner.c.page:14(credit/name)
+#: C/guitar-tuner.cpp.page:12(credit/name)
+#: C/guitar-tuner.py.page:14(credit/name)
+#: C/guitar-tuner.vala.page:13(credit/name)
+#: C/image-viewer.c.page:14(credit/name)
+#: C/image-viewer.cpp.page:12(credit/name)
+#: C/image-viewer.vala.page:14(credit/name)
+#: C/record-collection.js.page:14(credit/name)
+msgid "GNOME Documentation Project"
+msgstr "Proxecto de documentación de GNOME"
+
+#: C/audio-player.vala.page:18(page/title)
+msgid "3 Audio Player"
+msgstr "3 Reprodutor de son"
+
+#: C/beginner.c.page:8(info/title)
+#, fuzzy
+#| msgid "Beginner's Tutorials (C)"
+msgctxt "text"
+msgid "Beginner's Tutorials (C)"
+msgstr "Titoriais para principiantes (C)"
+
+#: C/beginner.c.page:12(info/desc) C/beginner.vala.page:12(info/desc)
+msgid ""
+"A beginner's guide to GUI programming using GTK+, including code samples and "
+"practice exercises."
+msgstr ""
+"Unha guía para principiantes á programación de IGU usando GTK+, incluíndo "
+"exemplos de código e exercicios de práctica."
+
+#: C/beginner.c.page:20(page/title) C/beginner.vala.page:19(page/title)
+msgid "0 Beginner's Tutorials"
+msgstr "0. Titoriais para principiantes"
+
+#: C/beginner.c.page:22(synopsis/p) C/beginner.vala.page:21(synopsis/p)
+msgid ""
+"Although these tutorials are designed for beginners, we can't cover all the "
+"basics. Before attempting to follow these tutorials, you are expected to be "
+"familiar with the following concepts:"
+msgstr ""
+
+#: C/beginner.c.page:24(item/p) C/beginner.vala.page:23(item/p)
+msgid "Object oriented programming"
+msgstr "Programación orientada a obxectos"
+
+#: C/beginner.c.page:25(item/p)
+msgid "The C programming language"
+msgstr "O linguaxe de programación C"
+
+#: C/beginner.c.page:29(synopsis/p) C/beginner.vala.page:32(synopsis/p)
+#: C/tutorial.py.page:28(synopsis/p)
+msgid ""
+"By following these tutorials you will learn the basics of GUI programming "
+"using Gtk+."
+msgstr ""
+"Seguindo estes titoriais aprenderá as bases para programar interfaces de "
+"usuario empregando Gtk+."
+
+#: C/beginner.c.page:33(section/title) C/beginner.js.page:36(section/title)
+#: C/beginner.vala.page:36(section/title)
+msgid "Tutorials"
+msgstr "Titoriais"
+
+#: C/beginner.c.page:37(section/title) C/beginner.js.page:40(section/title)
+#: C/beginner.py.page:27(section/title) C/beginner.vala.page:40(section/title)
+msgid "Code samples"
+msgstr "Exemplos de código"
+
+#: C/beginner.c.page:38(section/p) C/beginner.js.page:42(section/p)
+#: C/beginner.vala.page:41(section/p) C/tutorial.py.page:38(section/p)
+msgid "To run the code samples:"
+msgstr "Para executar os exemplos de código"
+
+#: C/beginner.c.page:42(item/p)
+msgid "Copy and paste the code into <var>filename</var>.c"
+msgstr "Copie e pegue o código en <var>nomedeficheiro</var>.c"
+
+#: C/beginner.c.page:43(item/p) C/beginner.c.page:56(item/p)
+#: C/beginner.vala.page:46(item/p) C/tutorial.py.page:41(item/p)
+msgid "In the terminal type:"
+msgstr "Escriba no terminal"
+
+#: C/beginner.c.page:44(item/screen)
+#, no-wrap
+msgid "gcc <var>filename</var>.c `pkg-config --cflags --libs gtk+-3.0` -o <var>filename</var>\n"
+msgstr "gcc <var>nomedeficheiro</var>.c `pkg-config --cflags --libs gtk+-3.0` -o <var>nomedeficheiro</var>\n"
+
+#: C/beginner.c.page:46(item/screen) C/beginner.c.page:60(item/screen)
+#: C/beginner.vala.page:48(item/screen)
+#, no-wrap
+msgid "./<var>filename</var>"
+msgstr "./<var>nome_ficheiro</var>"
+
+#: C/beginner.c.page:50(note/p)
+msgid ""
+"For more information about compiling Gtk+ programs see <link href=\"http://";
+"developer.gnome.org/gtk3/3.4/gtk-compiling.html\">Compiling Gtk+ "
+"Applications on UNIX</link>."
+msgstr ""
+
+#: C/beginner.c.page:54(section/p)
+msgid "You can also use the Vala compiler to compile these samples:"
+msgstr "Tamén pode empregar o compilador de Vala para compilar estes exemplos:"
+
+#: C/beginner.c.page:57(item/screen)
+#, no-wrap
+msgid "valac --pkg gtk+-3.0 <var>filename</var>.c"
+msgstr "valac --pkg gtk+-3.0 <var>nomedeficheiro</var>.c"
+
+#: C/beginner.c.page:59(item/p)
+msgid "To run:"
+msgstr "Para executalo:"
+
+#: C/beginner.c.page:63(section/title) C/beginner.js.page:49(section/title)
+#: C/beginner.py.page:29(section/title) C/beginner.vala.page:52(section/title)
+msgid "Windows"
+msgstr "Xanelas"
+
+#: C/beginner.c.page:66(section/title) C/beginner.js.page:51(section/title)
+#: C/beginner.py.page:32(section/title) C/beginner.vala.page:55(section/title)
+msgid "Display widgets"
+msgstr "Widgets de visualización"
+
+#: C/beginner.c.page:68(section/title) C/beginner.js.page:53(section/title)
+#: C/beginner.py.page:34(section/title) C/beginner.vala.page:57(section/title)
+msgid "Buttons and toggles"
+msgstr "Botóns e casillas"
+
+#: C/beginner.c.page:70(section/title) C/beginner.js.page:55(section/title)
+#: C/beginner.py.page:36(section/title) C/beginner.vala.page:59(section/title)
+msgid "Numeric and text data entry"
+msgstr "Entrada de datos numérica e de texto"
+
+#: C/beginner.c.page:72(section/title) C/beginner.js.page:57(section/title)
+#: C/beginner.py.page:38(section/title) C/beginner.vala.page:61(section/title)
+msgid "Multiline text editor"
+msgstr "Editor de texto multiliña"
+
+#: C/beginner.c.page:74(section/title) C/beginner.js.page:59(section/title)
+#: C/beginner.py.page:40(section/title) C/beginner.vala.page:63(section/title)
+msgid "Menu, combo box and toolbar widgets"
+msgstr "Widgets de menú, caixa combinada e barra de ferramentas"
+
+#: C/beginner.c.page:76(section/title) C/beginner.js.page:61(section/title)
+#: C/beginner.py.page:42(section/title) C/beginner.vala.page:65(section/title)
+msgid "TreeView widget"
+msgstr "Widget TreeView"
+
+#: C/beginner.c.page:78(section/title) C/beginner.js.page:63(section/title)
+#: C/beginner.py.page:44(section/title) C/beginner.vala.page:67(section/title)
+msgid "Selectors"
+msgstr "Selectores"
+
+#: C/beginner.c.page:79(section/title) C/beginner.js.page:64(section/title)
+#: C/beginner.py.page:45(section/title) C/beginner.vala.page:68(section/title)
+msgid "File selectors"
+msgstr "Selectores de ficheiros"
+
+#: C/beginner.c.page:81(section/title) C/beginner.js.page:66(section/title)
+#: C/beginner.py.page:47(section/title) C/beginner.vala.page:70(section/title)
+msgid "Font selectors"
+msgstr "Selectores de tipos de letra"
+
+#: C/beginner.c.page:83(section/title) C/beginner.js.page:68(section/title)
+#: C/beginner.py.page:49(section/title) C/beginner.vala.page:72(section/title)
+msgid "Color Selectors"
+msgstr "Selectores de color"
+
+#: C/beginner.c.page:86(section/title) C/beginner.js.page:71(section/title)
+#: C/beginner.py.page:52(section/title) C/beginner.vala.page:75(section/title)
+msgid "Layout containers"
+msgstr "Contedores da distribución"
+
+#: C/beginner.c.page:88(section/title) C/beginner.js.page:73(section/title)
+#: C/beginner.py.page:54(section/title) C/beginner.vala.page:77(section/title)
+#: C/tutorial.py.page:66(steps/title)
+msgid "Ornaments"
+msgstr "Adornos"
+
+#: C/beginner.c.page:90(section/title) C/beginner.js.page:75(section/title)
+#: C/beginner.py.page:56(section/title) C/beginner.vala.page:79(section/title)
+msgid "Scrolling"
+msgstr "Desprazamento"
+
+#: C/beginner.c.page:92(section/title) C/beginner.js.page:77(section/title)
+#: C/beginner.py.page:58(section/title) C/beginner.vala.page:81(section/title)
+msgid "Miscellaneous"
+msgstr "Varios"
+
+#: C/beginner.c.page:97(section/title) C/beginner.js.page:82(section/title)
+#: C/beginner.vala.page:86(section/title)
+#: C/menubar.vala.page:197(section/title)
+#: C/tutorial.py.page:147(section/title)
+msgid "Exercises"
+msgstr "Exercicios"
+
+#: C/beginner.js.page:10(credit/name) C/grid.js.page:12(credit/name)
+#: C/guitar-tuner.js.page:11(credit/name) C/helloWorld.js.page:14(credit/name)
+#: C/weatherApp.js.page:11(credit/name)
+#: C/weatherAppMain.js.page:10(credit/name)
+#: C/weatherAutotools.js.page:10(credit/name)
+#: C/weatherGeonames.js.page:10(credit/name)
+msgid "Susanna Huhtanen"
+msgstr "Susanna Huhtanen"
+
+#: C/beginner.js.page:15(info/desc)
+msgid ""
+"A beginner's guide to writing GNOME applications in JavaScript, including "
+"code samples and practice exercises."
+msgstr ""
+
+#: C/beginner.js.page:18(page/title)
+msgid "0 Beginner's tutorials and samples"
+msgstr "0. Titoriais e exemplos para principiantes"
+
+#: C/beginner.js.page:20(synopsis/p)
+msgid ""
+"JavaScript is one of the most popular programming languages on the web. It's "
+"not just for the web, though. If you have even a basic understanding of "
+"JavaScript, you can write full-fledged applications for GNOME. <link href="
+"\"https://live.gnome.org/GnomeDocuments\";>GNOME Documents</link> is written "
+"in JavaScript, and so is <link href=\"https://live.gnome.org/GnomeShell/Tour";
+"\">GNOME Shell</link>, the most basic part of GNOME."
+msgstr ""
+
+#: C/beginner.js.page:21(note/p)
+msgid ""
+"GNOME Shell is what you see when you click on \"Activities\" in the top-left "
+"corner of your screen. It also controls the clock and the rest of the top "
+"panel. Besides showing how you to write GNOME applications, these tutorials "
+"will also show you how to use JavaScript to write GNOME Shell extensions, "
+"which give it new features or change the way it does things."
+msgstr ""
+
+#: C/beginner.js.page:25(section/title)
+msgid "Getting Started"
+msgstr "Comezar"
+
+#: C/beginner.js.page:26(section/p)
+msgid ""
+"These tutorials are designed for people who already know how to write in "
+"JavaScript, and who have GNOME installed on their computers already, but who "
+"are new to developing GNOME applications. If you don't already know "
+"JavaScript, or if you need help getting GNOME set up, take a look at these "
+"resources first:"
+msgstr ""
+
+#: C/beginner.js.page:28(item/p)
+msgid ""
+"<link href=\"http://eloquentjavascript.net/contents.html\";>Eloquent "
+"JavaScript</link> is a free, Creative Commons-licensed book, which explains "
+"the basics of JavaScript programming. Since you won't be writing JavaScript "
+"for the web, you only need to read up to chapter 10 or so."
+msgstr ""
+
+#: C/beginner.js.page:29(item/p)
+msgid ""
+"<link href=\"http://www.gnome.org/getting-gnome/\";>Download GNOME</link> as "
+"part of a distribution, like Fedora, openSUSE, or Ubuntu. Each distribution "
+"has its own instructions for how to get GNOME."
+msgstr ""
+
+#: C/beginner.js.page:30(item/p)
+msgid ""
+"<link xref=\"set-up-gedit.js\">Set up gedit</link> for writing applications. "
+"GNOME's text editor, gedit, is sometimes just called \"text editor\"."
+msgstr ""
+
+#: C/beginner.js.page:41(section/p)
+msgid ""
+"These samples show how to use widgets in your GNOME applications. Each one "
+"demonstrates a complete application which showcases the featured widget. At "
+"the end of each sample, you will find links to more detailed reference "
+"material."
+msgstr ""
+
+#: C/beginner.js.page:44(item/p)
+msgid "Copy and paste the code into <var>filename</var>.js"
+msgstr ""
+
+#: C/beginner.js.page:45(item/p)
+msgid "In the terminal, type:"
+msgstr "Escriba no terminal, escriba:"
+
+#: C/beginner.js.page:46(item/screen)
+#, no-wrap
+msgid "gjs <var>filename</var>.js"
+msgstr "gjs <var>nomeficheiro</var>.js"
+
+#: C/beginner.py.page:8(info/title)
+#, fuzzy
+#| msgid "Gtk Widget Sample Code and Tutorials (Python)"
+msgctxt "text"
+msgid "Gtk Widget Sample Code and Tutorials (Python)"
+msgstr "Exemplo de código e titoriais de widgets Gtk (Python)"
+
+#: C/beginner.py.page:12(info/desc)
+msgid ""
+"A guide to GUI programming using GTK+, including code samples and practice "
+"exercises."
+msgstr ""
+"Unha guía á programación de IGU usando GTK+, incluíndo exemplos de código e "
+"exercicios de práctica."
+
+#: C/beginner.py.page:19(page/title)
+msgid "Gtk Widget Sample Code and Tutorials"
+msgstr "Exemplo de código e titoriais de widgets Gtk"
+
+#: C/beginner.py.page:21(synopsis/p)
+msgid ""
+"If you are a beginner and you would like a tutorial to guide you step by "
+"step in an exploration of what you can do with GTK+ 3, you should go to the "
+"<link xref=\"tutorial.py\"/> page. If you are looking for a specific widget, "
+"you can find it in the sections below."
+msgstr ""
+
+#: C/beginner.vala.page:8(info/title)
+#, fuzzy
+#| msgid "Beginner Tutorials (Vala)"
+msgctxt "text"
+msgid "Beginner Tutorials (Vala)"
+msgstr "Titoriais para principiantes (Vala)"
+
+#: C/beginner.vala.page:24(item/p)
+msgid "The Vala programming language:"
+msgstr "O linguaxe de programación Vala:"
+
+#: C/beginner.vala.page:26(item/p)
+#, fuzzy
+#| msgid "Basic knowledge of the Vala programming language"
+msgid ""
+"<link href=\"https://live.gnome.org/Vala/Tutorial\";>The Vala Tutorial</link>"
+msgstr "Coñecemento básico da linguaxe de programación Vala"
+
+#: C/beginner.vala.page:27(item/p)
+msgid ""
+"<link href=\"https://live.gnome.org/Vala/Documentation#Sample_Code\";>Sample "
+"Vala code</link>"
+msgstr ""
+
+#: C/beginner.vala.page:45(item/p)
+msgid "Copy and paste the code into <var>filename</var>.vala"
+msgstr "Copie e pegue o código en <var>nomedeficheiro</var>vala"
+
+#: C/beginner.vala.page:47(item/screen)
+#, no-wrap
+msgid "valac --pkg gtk+-3.0 <var>filename</var>.vala"
+msgstr "valac --pkg gtk+-3.0 <var>nome_ficheiro</var>.vala"
+
+#: C/bug-filing.page:14(license/p) C/documentation.page:15(license/p)
+#: C/translate.page:19(license/p)
+msgid "Creative Commons Share Alike 3.0"
+msgstr "Creative Commons Compartir Igual 3.0"
+
+#: C/bug-filing.page:18(page/title)
+msgid "Help make <app>GNOME Developer Tutorials</app> better"
+msgstr ""
+
+#: C/bug-filing.page:21(section/title)
+msgid "Report a bug or suggest an improvement"
+msgstr ""
+
+#: C/bug-filing.page:22(section/p)
+msgid ""
+"<app>GNOME Developer Tutorials</app> are maintained by a volunteer "
+"community. You are welcome to participate. If you notice a problem you can "
+"file a <em>bug report</em>. To file a bug, go to <link href=\"https://";
+"bugzilla.gnome.org/\"/>."
+msgstr ""
+
+#: C/bug-filing.page:25(section/p)
+msgid ""
+"This is a bug tracking system where users and developers can file details "
+"about bugs, crashes and request enhancements."
+msgstr ""
+
+#: C/bug-filing.page:28(section/p)
+msgid ""
+"To participate you need an account which will give you the ability to gain "
+"access, file bugs, and make comments. Also, you need to register so you can "
+"receive updates by e-mail about the status of your bug. If you don't already "
+"have an account, just click on the <gui>New Account</gui> link to create one."
+msgstr ""
+
+#: C/bug-filing.page:31(section/p)
+msgid ""
+"Once you have an account, log in, click on <guiseq><gui>File a Bug</"
+"gui><gui>All</gui><gui>gnome-devel-docs</gui></guiseq>. Before reporting a "
+"bug, please read the <link href=\"https://bugzilla.gnome.org/page.cgi?id=bug-";
+"writing.html\">bug writing guidelines</link>, and please <link href="
+"\"https://bugzilla.gnome.org/browse.cgi?product=gnome-games\";>browse</link> "
+"for the bug to see if it already exists."
+msgstr ""
+
+#: C/bug-filing.page:35(section/p)
+msgid ""
+"To file your bug, choose the component <gui>platform-demos</gui> in the "
+"<gui>Component</gui> menu."
+msgstr ""
+
+#: C/bug-filing.page:38(section/p)
+msgid ""
+"If you are requesting a new feature, choose <gui>enhancement</gui> in the "
+"<gui>Severity</gui> menu. Fill in the Summary and Description sections and "
+"click <gui>Commit</gui>."
+msgstr ""
+
+#: C/bug-filing.page:42(section/p)
+msgid ""
+"Your report will be given an ID number, and its status will be updated as it "
+"is being dealt with. Thanks for helping make <app>GNOME Developer Tutorials</"
+"app> better!"
+msgstr ""
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/button.c.page:24(media) C/button.js.page:21(media)
+#: C/button.py.page:23(media) C/button.vala.page:23(media)
+#, fuzzy
+#| msgid "@@image: 'media/button.png'; md5=8d69efbb3a0d3e043af6139b6492171c"
+msgctxt "_"
+msgid "external ref='media/button.png' md5='8d69efbb3a0d3e043af6139b6492171c'"
+msgstr "@@image: 'media/button.png'; md5=8d69efbb3a0d3e043af6139b6492171c"
+
+#: C/button.c.page:7(info/title)
+#, fuzzy
+#| msgid "Button (C)"
+msgctxt "text"
+msgid "Button (C)"
+msgstr "Botón (C)"
+
+#: C/button.c.page:19(info/desc) C/button.py.page:18(info/desc)
+#: C/button.vala.page:18(info/desc)
+msgid "A button widget which emits a signal when clicked"
+msgstr ""
+
+#: C/button.c.page:22(page/title) C/button.js.page:20(page/title)
+#: C/button.py.page:21(page/title)
+msgid "Button"
+msgstr "Botón"
+
+#: C/button.c.page:25(page/p)
+msgid ""
+"A button widget connected to a callback function that reverses its label "
+"when clicked."
+msgstr ""
+
+#: C/button.c.page:27(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/*This is the callback function. It is a handler function which \n"
+"reacts to the signal. In this case, it will cause the button label's \n"
+"string to reverse.*/\n"
+"static void\n"
+"button_clicked (GtkButton *button,\n"
+"                gpointer   user_data)\n"
+"{\n"
+"  const char *old_label;\n"
+"  char *new_label;\n"
+"\n"
+"  old_label = gtk_button_get_label (button);\n"
+"  new_label = g_utf8_strreverse (old_label, -1);\n"
+"\n"
+"  gtk_button_set_label (button, new_label);\n"
+"  g_free (new_label);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *button;\n"
+"\n"
+"  /*Create a window with a title and a default size*/\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"GNOME Button\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 250, 50);\n"
+"\n"
+"  /*Create a button with a label, and add it to the window*/\n"
+"  button = gtk_button_new_with_label (\"Click Me\");\n"
+"  gtk_container_add (GTK_CONTAINER (window), button);\n"
+"\n"
+"  /*Connecting the clicked signal to the callback function*/\n"
+"  g_signal_connect (GTK_Button (button), \n"
+"                    \"clicked\", \n"
+"                    G_CALLBACK (button_clicked), \n"
+"                    G_OBJECT (window));\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
+msgstr ""
+
+#: C/button.c.page:35(item/p) C/buttonbox.py.page:49(item/p)
+#: C/grid.c.page:34(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkButton.html";
+"\">GtkButton</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/button.c.page:36(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/glib/stable/glib-Unicode-";
+"Manipulation.html#g-utf8-strreverse\">Unicode Manipulation</link>"
+msgstr ""
+
+#: C/button.js.page:7(info/title)
+#, fuzzy
+#| msgid "Button (JavaScript)"
+msgctxt "text"
+msgid "Button (JavaScript)"
+msgstr "Botón (JavaScript)"
+
+#: C/button.js.page:17(info/desc)
+msgid "A button which can be connected to other widgets"
+msgstr "Un botón que pode conectarse a outros widgets"
+
+#: C/button.js.page:22(page/p)
+msgid "A button widget that changes its label when you click it."
+msgstr ""
+
+#: C/button.js.page:24(page/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ButtonExample = new Lang.Class ({\n"
+"    Name: 'Button Example',\n"
+"\n"
+"    /* Create the application itself\n"
+"       This boilerplate code is needed to build any GTK+ application. */\n"
+"        _init: function () {\n"
+"            this.application = new Gtk.Application ({\n"
+"                application_id: 'org.example.jsbutton',\n"
+"                flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"            });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"            this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                              window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                              title: \"GNOME Button\",\n"
+"                                                              default_height: 50,\n"
+"                                                              default_width: 250 });\n"
+"\n"
+"        // Create the button\n"
+"        this.Button = new Gtk.Button ({label: \"Click Me\"});\n"
+"        this._window.add (this.Button);\n"
+"\n"
+"        // Bind it to a function that says what to do when the button is clicked\n"
+"        this.Button.connect (\"clicked\", Lang.bind(this, this._clickHandler));\n"
+"\n"
+"                // Show the window and all child widgets\n"
+"                this._window.show_all();\n"
+"    },\n"
+"\n"
+"    // Here's the function that says what happens when the button is clicked\n"
+"    _clickHandler: function () {\n"
+"        this.Button.set_label (\"Clicked!\");\n"
+"    }\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ButtonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/button.js.page:32(item/p) C/grid.js.page:35(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Button.html";
+"\">Gtk.Button</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/button.py.page:7(info/title)
+#, fuzzy
+#| msgid "Button (Python)"
+msgctxt "text"
+msgid "Button (Python)"
+msgstr "Botón (Python)"
+
+#: C/button.py.page:24(page/p) C/button.vala.page:24(page/p)
+msgid "A button widget connected to a simple callback function."
+msgstr ""
+
+#: C/button.py.page:30(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"GNOME Button\", application=app)\n"
+"        self.set_default_size(250, 50)\n"
+"\n"
+"        # a button\n"
+"        button = Gtk.Button()\n"
+"        # with a label\n"
+"        button.set_label(\"Click me\")\n"
+"        # connect the signal \"clicked\" emitted by the button\n"
+"        # to the callback function do_clicked\n"
+"        button.connect(\"clicked\", self.do_clicked)\n"
+"        # add the button to the window\n"
+"        self.add(button)\n"
+"\n"
+"    # callback function connected to the signal \"clicked\" of the button\n"
+"    def do_clicked(self, button):\n"
+"        print \"You clicked me!\"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup (self):\n"
+"        Gtk.Application.do_startup (self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/button.py.page:33(section/title)
+msgid "Useful methods for a Button widget"
+msgstr "Métodos útiles para o widget Button"
+
+#: C/button.py.page:35(section/p)
+msgid ""
+"<code>button = Gtk.Button(label=\"Click me\")</code> could also be used to "
+"create a button and set the text directly. For a general discussion of this, "
+"see <link xref=\"properties.py\">here</link>."
+msgstr ""
+
+#: C/button.py.page:37(item/p)
+msgid ""
+"<code>set_relief(Gtk.ReliefStyle.NONE)</code> sets to none the relief style "
+"of the edges of the Gtk.Button - as opposed to <code>Gtk.ReliefStyle.NORMAL</"
+"code>."
+msgstr ""
+
+#: C/button.py.page:38(item/p)
+msgid ""
+"If the label of the button is a <link href=\"http://developer.gnome.org/gtk3/";
+"unstable/gtk3-Stock-Items.html\">stock icon</link>, <code>set_use_stock(True)"
+"</code> sets the label as the name of the corresponding stock icon."
+msgstr ""
+
+#: C/button.py.page:39(item/p)
+msgid ""
+"To set an image (e.g. a stock image) for the button <code>button</code>:"
+msgstr ""
+
+#: C/button.py.page:40(item/code)
+#, no-wrap
+msgid ""
+"\n"
+"image = Gtk.Image()\n"
+"image.set_from_stock(Gtk.STOCK_ABOUT, Gtk.IconSize.BUTTON)\n"
+"button.set_image(image)"
+msgstr ""
+"\n"
+"image = Gtk.Image()\n"
+"image.set_from_stock(Gtk.STOCK_ABOUT, Gtk.IconSize.BUTTON)\n"
+"button.set_image(image)"
+
+#: C/button.py.page:44(item/p)
+msgid ""
+"You should not set a label for the button after this, otherwise it will show "
+"the label and not the image."
+msgstr ""
+
+#: C/button.py.page:45(item/p)
+msgid ""
+"If we use <code>set_focus_on_click(False)</code> the button will not grab "
+"focus when it is clicked by the mouse. This could be useful in places like "
+"toolbars, so that the keyboard focus is not removed from the main area of "
+"the application."
+msgstr ""
+
+#: C/button.py.page:52(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkButton.html";
+"\">GtkButton</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/button.py.page:53(item/p) C/dialog.py.page:50(item/p)
+#: C/image.py.page:101(item/p) C/label.py.page:89(item/p)
+#: C/linkbutton.py.page:46(item/p) C/messagedialog.py.page:60(item/p)
+#: C/radiobutton.py.page:51(item/p) C/separator.py.page:37(item/p)
+#: C/window.py.page:63(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkWindow.html";
+"\">GtkWindow</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/button.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Button (Vala)"
+msgctxt "text"
+msgid "Button (Vala)"
+msgstr "Botón (Vala)"
+
+#: C/button.vala.page:21(page/title)
+msgid "Button widget"
+msgstr "Widget de botón"
+
+#: C/button.vala.page:26(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"/* A window in the application */\n"
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\t/* The constructor of the window */\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"GNOME Button\");\n"
+"\n"
+"\t\tvar button = new Gtk.Button.with_label (\"Click Me\");\n"
+"\t\tbutton.clicked.connect (this.reverse_label);\n"
+"\t\tbutton.show ();\n"
+"\n"
+"\t\tthis.window_position = Gtk.WindowPosition.CENTER;\n"
+"\t\tthis.set_default_size (250,50);\n"
+"\t\tthis.add (button);\n"
+"\t}\n"
+"\n"
+"\t/* The callback function connected to the\n"
+"\t * 'clicked' signal of the button.\n"
+"\t */\n"
+"\tvoid reverse_label (Gtk.Button button) {\n"
+"\t\tbutton.label = button.label.reverse ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* This is the application. */\n"
+"public class MyApplication : Gtk.Application {\n"
+"\n"
+"\t/* This is the constructor */\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.MyApplication\");\n"
+"\t}\n"
+"\n"
+"\t/* Override the activate signal of GLib.Application */\n"
+"\tprotected override void activate () {\n"
+"\t\tnew MyWindow (this).show ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main creates and runs the application */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
+
+#: C/button.vala.page:28(page/p)
+msgid ""
+"In this sample we used the following: <link href=\"http://www.valadoc.org/gtk";
+"+-3.0/Gtk.Button.html\">Gtk.Button</link>"
+msgstr ""
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/buttonbox.py.page:23(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/buttonbox_calculator.png'; "
+#| "md5=ce0de08b7ac66f517290e33e6d33d508"
+msgctxt "_"
+msgid ""
+"external ref='media/buttonbox_calculator.png' "
+"md5='ce0de08b7ac66f517290e33e6d33d508'"
+msgstr ""
+"@@image: 'media/buttonbox_calculator.png'; "
+"md5=ce0de08b7ac66f517290e33e6d33d508"
+
+#: C/buttonbox.py.page:7(info/title)
+#, fuzzy
+#| msgid "ButtonBox (Python)"
+msgctxt "text"
+msgid "ButtonBox (Python)"
+msgstr "ButtonBox (Python)"
+
+#: C/buttonbox.py.page:18(info/desc)
+msgid "A container for arranging buttons"
+msgstr ""
+
+#: C/buttonbox.py.page:21(page/title)
+msgid "ButtonBox"
+msgstr "ButtonBox"
+
+#: C/buttonbox.py.page:24(page/p)
+msgid "A calculator - the buttons are enclosed in horizontal ButtonBoxes."
+msgstr ""
+"Unha calculadora - os botóns están dispostos en ButtonBoxes horizontais."
+
+#: C/buttonbox.py.page:30(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Calculator\", application=app)\n"
+"        self.set_default_size(350, 200)\n"
+"        self.set_border_width(10)\n"
+"\n"
+"        # an entry\n"
+"        self.entry = Gtk.Entry()\n"
+"        # with an initial text\n"
+"        self.entry.set_text('0')\n"
+"        # text aligned on the right\n"
+"        self.entry.set_alignment(1)\n"
+"        # the text in the entry cannot be modified writing in it\n"
+"        self.entry.set_can_focus(False)\n"
+"\n"
+"        # a grid\n"
+"        grid = Gtk.Grid()\n"
+"        grid.set_row_spacing(5)\n"
+"        \n"
+"        # to attach the entry\n"
+"        grid.attach(self.entry, 0, 0, 1, 1)\n"
+"        \n"
+"        # the labels for the buttons\n"
+"        buttons = [ 7, 8, 9, '/',\n"
+"                    4, 5, 6, '*',\n"
+"                    1, 2, 3, '-',\n"
+"                    'C', 0, '=', '+' ]\n"
+"        \n"
+"        # each row is a ButtonBox, attached to the grid            \n"
+"        for i in range(4):\n"
+"            hbox = Gtk.ButtonBox.new(Gtk.Orientation.HORIZONTAL)\n"
+"            hbox.set_spacing(5)\n"
+"            grid.attach(hbox, 0, i + 1, 1, 1)\n"
+"            # each ButtonBox has 4 buttons, connected to the callback function\n"
+"            for j in range(4):\n"
+"                button = Gtk.Button(label=buttons[i * 4 + j])\n"
+"                button.set_can_focus(False)\n"
+"                button.connect(\"clicked\", self.button_clicked)\n"
+"                hbox.add(button)\n"
+"            \n"
+"        # some variables for the calculations\n"
+"        self.first_number = 0\n"
+"        self.second_number = 0\n"
+"        self.counter = 0\n"
+"        self.operation = \"\"\n"
+"\n"
+"        # add the grid to the window\n"
+"        self.add(grid)\n"
+"\n"
+"    # callback function for all the buttons\n"
+"    def button_clicked(self, button):\n"
+"        # for the operations\n"
+"        if button.get_label() == '+':\n"
+"            self.counter += 1 \n"
+"            if self.counter &gt; 1:\n"
+"                self.do_operation()\n"
+"            self.entry.set_text('0')\n"
+"            self.operation = \"plus\"\n"
+"        elif button.get_label() == '-':\n"
+"            self.counter += 1 \n"
+"            if self.counter &gt; 1:\n"
+"                self.do_operation()\n"
+"            self.entry.set_text('0')\n"
+"            self.operation = \"minus\"\n"
+"        elif button.get_label() == '*':\n"
+"            self.counter += 1 \n"
+"            if self.counter &gt; 1:\n"
+"                self.do_operation()\n"
+"            self.entry.set_text('0')\n"
+"            self.operation = \"multiplication\"\n"
+"        elif button.get_label() == '/':\n"
+"            self.counter += 1 \n"
+"            if self.counter &gt; 1:\n"
+"                self.do_operation()\n"
+"            self.entry.set_text('0')\n"
+"            self.operation = \"division\"\n"
+"        # for =\n"
+"        elif button.get_label() == '=':\n"
+"            self.do_operation()\n"
+"            self.entry.set_text(str(self.first_number))\n"
+"            self.counter = 1\n"
+"        # for Cancel\n"
+"        elif button.get_label() == 'C':\n"
+"            self.first_number = 0\n"
+"            self.second_number = 0\n"
+"            self.counter = 0\n"
+"            self.entry.set_text('')\n"
+"            self.operation = \"\"\n"
+"        # for a digit button\n"
+"        else:\n"
+"            new_digit = int(button.get_label())\n"
+"            if self.entry.get_text() == 'error':\n"
+"                number = 0\n"
+"            else:\n"
+"                number = int(self.entry.get_text())\n"
+"            number = number * 10 + new_digit            \n"
+"            if self.counter == 0:\n"
+"                self.first_number = number\n"
+"            else:\n"
+"                self.second_number = number\n"
+"            self.entry.set_text(str(number))\n"
+"\n"
+"    def do_operation(self):\n"
+"        if self.operation == \"plus\":\n"
+"            self.first_number += self.second_number\n"
+"        elif self.operation == \"minus\":\n"
+"            self.first_number -= self.second_number\n"
+"        elif self.operation == \"multiplication\":\n"
+"            self.first_number *= self.second_number\n"
+"        elif self.operation == \"division\":\n"
+"            try:\n"
+"                self.first_number /= self.second_number\n"
+"            except ZeroDivisionError:\n"
+"                self.first_number = 0\n"
+"                self.second_number = 0\n"
+"                self.counter = 0\n"
+"                self.entry.set_text('error')\n"
+"                self.operation = \"\"\n"
+"                return\n"
+"        else:\n"
+"            self.first_number = 0\n"
+"            self.second_number = 0\n"
+"            self.counter = 0\n"
+"            self.entry.set_text('error')\n"
+"            \n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/buttonbox.py.page:34(section/title)
+msgid "Uselful methods for a ButtonBox widget"
+msgstr "Métodos útiles para o widget ButtonBox"
+
+#: C/buttonbox.py.page:36(item/p)
+msgid ""
+"The layout of the ButtonBox are set with <code>set_layout(layout)</code>, "
+"where <code>layout</code> can be <code>Gtk.ButtonBoxStyle.SPREAD</code> "
+"(buttons are evenly spread across the box), <code>Gtk.ButtonBoxStyle.EDGE</"
+"code> (buttons are placed at the edges of the box), <code>Gtk.ButtonBoxStyle."
+"START</code> (buttons are grouped towards the start of the box), <code>Gtk."
+"ButtonBoxStyle.END</code> (buttons are grouped towards the end of the box), "
+"<code>Gtk.ButtonBoxStyle.CENTER</code> (buttons are centered in the box)."
+msgstr ""
+
+#: C/buttonbox.py.page:37(item/p)
+msgid ""
+"<code>set_child_secondary(button, is_secondary)</code> sets whether "
+"<code>button</code> should appear in a secondary group of children. A "
+"typical use of a secondary child is the help button in a dialog. This group "
+"appears after the other children if the style is <code>START</code>, "
+"<code>SPREAD</code> or <code>EDGE</code>, and before the other children if "
+"the style is <code>END</code>. If the style is <code>START</code> or "
+"<code>END</code>, then the secondary children are aligned at the other end "
+"of the button box from the main children. For the other styles, they appear "
+"immediately next to the main children."
+msgstr ""
+
+#: C/buttonbox.py.page:38(item/p)
+msgid ""
+"<code>set_child_non_homogeneous(button, is_non_homogeneous)</code> sets "
+"whether the child is exempted from homogeous sizing. Default value is "
+"<code>False</code>."
+msgstr ""
+
+#: C/buttonbox.py.page:39(item/p)
+msgid ""
+"<code>set_spacing(spacing)</code> sets the spacing, in pixels, between the "
+"buttons of the box."
+msgstr ""
+
+#: C/buttonbox.py.page:47(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkButtonBox.html";
+"\">GtkButtonBox</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/buttonbox.py.page:48(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkBox.html\";>GtkBox</"
+"link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/buttonbox.py.page:50(item/p) C/entry.c.page:33(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkEntry.html";
+"\">GtkEntry</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/buttonbox.py.page:51(item/p) C/grid.c.page:35(item/p)
+#: C/radiobutton.c.page:36(item/p) C/spinbutton.c.page:39(item/p)
+#: C/statusbar.c.page:39(item/p) C/switch.c.page:36(item/p)
+#: C/togglebutton.c.page:39(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkGrid.html\";>GtkGrid</"
+"link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/c.page:6(info/title)
+#, fuzzy
+#| msgid "C"
+msgctxt "link"
+msgid "C"
+msgstr "C"
+
+#: C/c.page:15(page/title)
+msgid "Tutorials, code samples, and plaform demos in C"
+msgstr "Titoriais, exemplos de código e demostracións da plataforma en C"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/checkbutton.c.page:21(media) C/checkbutton.js.page:21(media)
+#: C/checkbutton.py.page:22(media) C/checkbutton.vala.page:21(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/checkbutton.png'; md5=7921a6812c87dd2b3781f4fad241e858"
+msgctxt "_"
+msgid ""
+"external ref='media/checkbutton.png' md5='7921a6812c87dd2b3781f4fad241e858'"
+msgstr "@@image: 'media/checkbutton.png'; md5=7921a6812c87dd2b3781f4fad241e858"
+
+#: C/checkbutton.c.page:7(info/title)
+#, fuzzy
+msgctxt "text"
+msgid "CheckButton (C)"
+msgstr "CheckButton (Vala)"
+
+#: C/checkbutton.c.page:17(info/desc)
+msgid "Create widgets with a discrete ToggleButton"
+msgstr ""
+
+#: C/checkbutton.c.page:20(page/title) C/checkbutton.js.page:20(page/title)
+#: C/checkbutton.py.page:21(page/title) C/checkbutton.vala.page:20(page/title)
+msgid "CheckButton"
+msgstr "CheckButton"
+
+#: C/checkbutton.c.page:22(page/p) C/checkbutton.py.page:23(page/p)
+#: C/checkbutton.vala.page:22(page/p)
+msgid "This CheckButton toggles the title."
+msgstr "Este CheckButton troca o título."
+
+#: C/checkbutton.c.page:24(page/code)
+#, no-wrap
+msgid ""
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"/* signal handler for \"toggled\" signal of the CheckButton */\n"
+"static void\n"
+"toggled_cb (GtkToggleButton *toggle_button,\n"
+"            gpointer         user_data)\n"
+"{\n"
+"  GtkWindow *window = user_data;\n"
+"\n"
+"  if (gtk_toggle_button_get_active (toggle_button))\n"
+"      gtk_window_set_title (window, \"CheckButton Example\");\n"
+"  else\n"
+"      gtk_window_set_title (window, \"\");\n"
+"}\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *checkbutton;\n"
+"\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"CheckButton Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 300, 100);\n"
+"\n"
+"  checkbutton = gtk_check_button_new_with_label (\"Show Title\");\n"
+"  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton), TRUE);\n"
+"  g_signal_connect (GTK_TOGGLE_BUTTON (checkbutton), \"toggled\", G_CALLBACK (toggled_cb), window);\n"
+"  gtk_container_add (GTK_CONTAINER (window), checkbutton);\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.example.checkbutton\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
+msgstr ""
+
+#: C/checkbutton.c.page:29(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/3.2/GtkCheckButton.html";
+"\">GtkCheckButton</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/checkbutton.js.page:7(info/title)
+#, fuzzy
+#| msgid "CheckButton (JavaScript)"
+msgctxt "text"
+msgid "CheckButton (JavaScript)"
+msgstr "CheckButton (JavaScript)"
+
+#: C/checkbutton.js.page:17(info/desc)
+msgid "A box which can be checked or unchecked"
+msgstr "Unha caixa que pode estar marcada ou desmarcada"
+
+#: C/checkbutton.js.page:22(page/p)
+msgid ""
+"This application has a CheckButton. Whether the box is checked dictates "
+"whether the window's title bar shows anything."
+msgstr ""
+
+#: C/checkbutton.js.page:23(page/p)
+msgid ""
+"A CheckButton sends the \"toggled\" signal when it's checked or unchecked. "
+"While it's checked, the \"active\" property is true. While it's not, \"active"
+"\" tests as false."
+msgstr ""
+
+#: C/checkbutton.js.page:27(section/title)
+#: C/comboboxtext.js.page:29(section/title)
+#: C/combobox.js.page:32(section/title)
+#: C/guitar-tuner.js.page:54(section/title)
+#: C/helloWorld.js.page:52(section/title)
+#: C/messagedialog.js.page:30(section/title)
+#: C/radiobutton.js.page:27(section/title) C/scale.js.page:27(section/title)
+#: C/spinbutton.js.page:30(section/title)
+#: C/statusbar.js.page:27(section/title) C/switch.js.page:34(section/title)
+#: C/textview.js.page:37(section/title)
+#: C/togglebutton.js.page:27(section/title)
+#: C/treeview_simple_liststore.js.page:36(section/title)
+#: C/weatherAppMain.js.page:40(section/title)
+msgid "Libraries to import"
+msgstr "Bibliotecas a importar"
+
+#: C/checkbutton.js.page:28(section/code)
+#: C/messagedialog.js.page:31(section/code)
+#: C/radiobutton.js.page:28(section/code) C/scale.js.page:28(section/code)
+#: C/spinbutton.js.page:31(section/code) C/statusbar.js.page:28(section/code)
+#: C/switch.js.page:35(section/code) C/togglebutton.js.page:28(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+msgstr ""
+
+#: C/checkbutton.js.page:35(section/p) C/comboboxtext.js.page:36(section/p)
+#: C/combobox.js.page:40(section/p) C/messagedialog.js.page:38(section/p)
+#: C/radiobutton.js.page:35(section/p) C/scale.js.page:35(section/p)
+#: C/spinbutton.js.page:38(section/p) C/statusbar.js.page:35(section/p)
+#: C/switch.js.page:42(section/p) C/textview.js.page:44(section/p)
+#: C/togglebutton.js.page:35(section/p)
+#: C/treeview_simple_liststore.js.page:45(section/p)
+msgid ""
+"These are the libraries we need to import for this application to run. "
+"Remember that the line which tells GNOME that we're using Gjs always needs "
+"to go at the start."
+msgstr ""
+
+#: C/checkbutton.js.page:39(section/title)
+#: C/comboboxtext.js.page:40(section/title)
+#: C/combobox.js.page:44(section/title)
+#: C/messagedialog.js.page:42(section/title)
+#: C/radiobutton.js.page:39(section/title) C/scale.js.page:39(section/title)
+#: C/spinbutton.js.page:42(section/title)
+#: C/statusbar.js.page:39(section/title) C/switch.js.page:46(section/title)
+#: C/textview.js.page:48(section/title)
+#: C/togglebutton.js.page:39(section/title)
+#: C/treeview_simple_liststore.js.page:49(section/title)
+msgid "Creating the application window"
+msgstr "Deseñar unha xanela de aplicativo"
+
+#: C/checkbutton.js.page:40(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"const CheckButtonExample = new Lang.Class({\n"
+"    Name: 'CheckButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jscheckbutton',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+msgstr ""
+
+#: C/checkbutton.js.page:66(section/p)
+msgid ""
+"All the code for this sample goes in the CheckButtonExample class. The above "
+"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
+"go in."
+msgstr ""
+
+#: C/checkbutton.js.page:67(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 100,\n"
+"            default_width: 300,\n"
+"            border_width: 10,\n"
+"            title: \"CheckButton Example\"});\n"
+msgstr ""
+
+#: C/checkbutton.js.page:80(section/p)
+msgid ""
+"The _buildUI function is where we put all the code to create the "
+"application's user interface. The first step is creating a new <link href="
+"\"GtkApplicationWindow.js.page\">Gtk.ApplicationWindow</link> to put all our "
+"widgets into."
+msgstr ""
+
+#: C/checkbutton.js.page:84(section/title)
+msgid "Creating the checkbutton"
+msgstr "Crear un checkbutton"
+
+#: C/checkbutton.js.page:85(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the check button\n"
+"        this._button = new Gtk.CheckButton ({label: \"Show Title\"});\n"
+"        this._window.add (this._button);\n"
+"\n"
+"        // Have the check button be checked by default\n"
+"        this._button.set_active (true);\n"
+"\n"
+"        // Connect the button to a function that does something when it's toggled\n"
+"        this._button.connect (\"toggled\", Lang.bind (this, this._toggledCB));\n"
+msgstr ""
+
+#: C/checkbutton.js.page:96(section/p)
+msgid ""
+"This code creates the checkbutton itself. The label next to the checkbutton "
+"is created by giving the checkbutton the \"label\" property and assigning a "
+"string value to it. Since this checkbutton toggles whether the window title "
+"is on or off, and the window title will be on to start with, we want the box "
+"to be checked by default. Whenever the user checks or unchecks the box, we "
+"call the _toggledCB function."
+msgstr ""
+
+#: C/checkbutton.js.page:97(section/code)
+#: C/radiobutton.js.page:169(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+msgstr ""
+
+#: C/checkbutton.js.page:102(section/p)
+msgid ""
+"This code finishes up creating the UI, by telling the window to show itself "
+"and all child widgets (which is just the checkbutton in this case)."
+msgstr ""
+
+#: C/checkbutton.js.page:106(section/title)
+msgid "Function which handles the checkbutton's toggling"
+msgstr ""
+
+#: C/checkbutton.js.page:107(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    _toggledCB: function () {\n"
+"\n"
+"        // Make the window title appear or disappear when the checkbox is toggled\n"
+"        if (this._button.get_active() == true)\n"
+"            this._window.set_title (\"CheckButton Example\");\n"
+"        else\n"
+"            this._window.set_title (\"\");\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+msgstr ""
+
+#: C/checkbutton.js.page:120(section/p)
+msgid ""
+"If the checkbutton is toggled from on to off, we want the window title to "
+"disappear. If it's toggled from off to on, we want it to reappear. We can "
+"tell which way it was toggled by testing to see whether it's active "
+"(checked) or not afterwards. A simple if / else statement which calls the "
+"checkbutton's get_active() method will work for this."
+msgstr ""
+
+#: C/checkbutton.js.page:121(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new CheckButtonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/checkbutton.js.page:126(section/p)
+msgid ""
+"Finally, we create a new instance of the finished CheckButtonExample class, "
+"and set the application running."
+msgstr ""
+
+#: C/checkbutton.js.page:131(section/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const CheckButtonExample = new Lang.Class({\n"
+"    Name: 'CheckButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jscheckbutton',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 100,\n"
+"            default_width: 300,\n"
+"            border_width: 10,\n"
+"            title: \"CheckButton Example\"});\n"
+"\n"
+"        // Create the check button\n"
+"        this._button = new Gtk.CheckButton ({label: \"Show Title\"});\n"
+"        this._window.add (this._button);\n"
+"\n"
+"        // Have the check button be checked by default\n"
+"        this._button.set_active (true);\n"
+"\n"
+"        // Connect the button to a function that does something when it's toggled\n"
+"        this._button.connect (\"toggled\", Lang.bind (this, this._toggledCB));\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _toggledCB: function () {\n"
+"\n"
+"        // Make the window title appear or disappear when the checkbox is toggled\n"
+"        if (this._button.get_active() == true)\n"
+"            this._window.set_title (\"CheckButton Example\");\n"
+"        else\n"
+"            this._window.set_title (\"\");\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new CheckButtonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/checkbutton.js.page:135(section/title)
+#: C/comboboxtext.js.page:175(section/title)
+#: C/combobox.js.page:232(section/title)
+#: C/messagedialog.js.page:188(section/title)
+#: C/radiobutton.js.page:273(section/title) C/scale.js.page:207(section/title)
+#: C/spinbutton.js.page:198(section/title)
+#: C/statusbar.js.page:220(section/title) C/switch.js.page:263(section/title)
+#: C/textview.js.page:247(section/title)
+#: C/togglebutton.js.page:152(section/title)
+#: C/treeview_simple_liststore.js.page:271(section/title)
+msgid "In-depth documentation"
+msgstr "Documentación en profundo"
+
+#: C/checkbutton.js.page:139(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.CheckButton.";
+"html\">Gtk.CheckButton</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/checkbutton.py.page:7(info/title)
+#, fuzzy
+#| msgid "CheckButton (Python)"
+msgctxt "text"
+msgid "CheckButton (Python)"
+msgstr "CheckButton (Python)"
+
+#: C/checkbutton.py.page:18(info/desc)
+msgid "A toggle button in a window"
+msgstr ""
+
+#: C/checkbutton.py.page:30(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"CheckButton Example\", application=app)\n"
+"        self.set_default_size(300, 100)\n"
+"        self.set_border_width(10)\n"
+"\n"
+"        # a new checkbutton\n"
+"        button = Gtk.CheckButton()\n"
+"        #  with a label\n"
+"        button.set_label(\"Show Title\")\n"
+"        # connect the signal \"toggled\" emitted by the checkbutton\n"
+"        # with the callback function toggled_cb\n"
+"        button.connect(\"toggled\", self.toggled_cb)\n"
+"        # by default, the checkbutton is active\n"
+"        button.set_active(True)\n"
+"\n"
+"        # add the checkbutton to the window\n"
+"        self.add(button)\n"
+"\n"
+"    # callback function\n"
+"    def toggled_cb(self, button):\n"
+"        # if the togglebutton is active, set the title of the window\n"
+"        # as \"Checkbutton Example\"\n"
+"        if button.get_active():\n"
+"            self.set_title(\"CheckButton Example\")\n"
+"        # else, set it as \"\" (empty string)\n"
+"        else:\n"
+"            self.set_title(\"\")\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/checkbutton.py.page:32(section/p)
+msgid ""
+"We could also create the CheckButton with <code>button = Gtk.CheckButton."
+"new_with_label(\"Show Title\")</code>."
+msgstr ""
+
+#: C/checkbutton.py.page:37(section/title)
+msgid "Useful methods for a CheckButton widget"
+msgstr "Métodos útiles para o widget CheckButton"
+
+#: C/checkbutton.py.page:38(section/p) C/switch.py.page:41(section/p)
+msgid ""
+"For a discussion on signals and callback functions, see <link xref=\"signals-"
+"callbacks.py\">this page</link>."
+msgstr ""
+
+#: C/checkbutton.py.page:48(item/p) C/togglebutton.py.page:45(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToggleButton.html";
+"\">GtkToggleButton</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/checkbutton.py.page:49(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCheckButton.html";
+"\">GtkCheckButton</link>"
+msgstr ""
+
+#: C/checkbutton.vala.page:7(info/title)
+#, fuzzy
+msgctxt "text"
+msgid "CheckButton (Vala)"
+msgstr "CheckButton (Vala)"
+
+#: C/checkbutton.vala.page:17(info/desc)
+msgid "Create widgets with a disrete toggle button"
+msgstr ""
+
+#: C/checkbutton.vala.page:24(page/code)
+#, no-wrap
+msgid ""
+"/* A window in the application */\n"
+"class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\t/* The constructor */\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"CheckButton Example\");\n"
+"\n"
+"\t\tthis.set_default_size (300, 100);\n"
+"\t\tthis.border_width = 10;\n"
+"\n"
+"\t\tvar checkbutton = new Gtk.CheckButton.with_label (\"Show Title\");\n"
+"\n"
+"\t\t/* Connect the checkbutton to the\n"
+"\t\t * callback function (aka. signal handler).\n"
+"\t\t */\n"
+"\t\tcheckbutton.toggled.connect (this.toggled_cb);\n"
+"\n"
+"\t\t/* Add the button to the this window */\n"
+"\t\tthis.add (checkbutton);\n"
+"\n"
+"\t\tcheckbutton.set_active (true);\n"
+"\t\tcheckbutton.show ();\n"
+"\t}\n"
+"\n"
+"\t/* The signal handler for the 'toggled' signal of the checkbutton. */\n"
+"\tvoid toggled_cb (Gtk.ToggleButton checkbutton) {\n"
+"\t\tif (checkbutton.get_active())\n"
+"\t\t\tthis.set_title (\"CheckButton Example\");\n"
+"\t\telse\n"
+"\t\t\tthis.set_title (\"\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* This is the application */\n"
+"class MyApplication : Gtk.Application {\n"
+"\n"
+"\t/* The constructor */\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.checkbutton\");\n"
+"\t}\n"
+"\n"
+"\t/* Override the activate signal of GLib.Application */\n"
+"\tprotected override void activate () {\n"
+"\t\tnew MyWindow (this).show ();\n"
+"\t}\n"
+"\n"
+"}\n"
+"\n"
+"/* main creates and runs the application */\n"
+"int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
+
+#: C/checkbutton.vala.page:29(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CheckButton.html\";>Gtk."
+"CheckButton</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/colorbutton.py.page:21(media) C/colorbutton.vala.page:23(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/colorbutton.png'; md5=904539d26fe367bf99f9a0961cfc9a03"
+msgctxt "_"
+msgid ""
+"external ref='media/colorbutton.png' md5='904539d26fe367bf99f9a0961cfc9a03'"
+msgstr "@@image: 'media/colorbutton.png'; md5=904539d26fe367bf99f9a0961cfc9a03"
+
+#: C/colorbutton.py.page:7(info/title)
+#, fuzzy
+#| msgid "ColorButton (Python)"
+msgctxt "text"
+msgid "ColorButton (Python)"
+msgstr "ColorButton (Python)"
+
+#: C/colorbutton.py.page:17(info/desc) C/colorbutton.vala.page:19(info/desc)
+msgid "A button to launch a color selection dialog"
+msgstr "Un botón para iniciar un diálogo de selección de cor"
+
+#: C/colorbutton.py.page:20(page/title) C/colorbutton.vala.page:22(page/title)
+msgid "ColorButton"
+msgstr "ColorButton"
+
+#: C/colorbutton.py.page:22(page/p)
+msgid ""
+"This ColorButton launches a color selection dialog and prints in the "
+"terminal the RGB values of the color selected."
+msgstr ""
+
+#: C/colorbutton.py.page:28(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import Gdk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"ColorButton\", application=app)\n"
+"        self.set_default_size(150, 50)\n"
+"        self.set_border_width(10)\n"
+"\n"
+"        # a colorbutton (which opens a dialogue window in\n"
+"        # which we choose a color)\n"
+"        self.button = Gtk.ColorButton()\n"
+"        # with a default color (blue, in this instance)\n"
+"        color = Gdk.RGBA()\n"
+"        color.red = 0.0\n"
+"        color.green = 0.0\n"
+"        color.blue = 1.0\n"
+"        color.alpha = 0.5\n"
+"        self.button.set_rgba(color)\n"
+"\n"
+"        # choosing a color in the dialogue window emits a signal\n"
+"        self.button.connect(\"color-set\", self.on_color_chosen)\n"
+"\n"
+"        # a label\n"
+"        label = Gtk.Label()\n"
+"        label.set_text(\"Click to choose a color\")\n"
+"\n"
+"        # a grid to attach button and label\n"
+"        grid = Gtk.Grid()\n"
+"        grid.attach(self.button, 0, 0, 2, 1)\n"
+"        grid.attach(label, 0, 1, 2, 1)\n"
+"        self.add(grid)\n"
+"\n"
+"    # if a new color is chosen, we print it as rgb(r,g,b) in the terminal\n"
+"    def on_color_chosen(self, user_data):\n"
+"        print \"You chose the color: \" + self.button.get_rgba().to_string()\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup (self):\n"
+"        Gtk.Application.do_startup (self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/colorbutton.py.page:32(section/title)
+msgid "Useful methods for a ColorButton widget"
+msgstr ""
+
+#: C/colorbutton.py.page:33(section/p)
+msgid ""
+"<code>set_color(color)</code>, where the <code>color</code> is defined as in "
+"the example, sets the color of the ColorButton, which by default is black. "
+"<code>get_color()</code> returns the color."
+msgstr ""
+
+#: C/colorbutton.py.page:40(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkColorButton.html";
+"\">GtkColorButton</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/colorbutton.py.page:41(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkColorChooser.html";
+"\">GtkColorChooser</link>"
+msgstr ""
+
+#: C/colorbutton.py.page:42(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gdk3/stable/gdk3-RGBA-Colors.html";
+"\">RGBA Colors</link>"
+msgstr ""
+
+#: C/colorbutton.vala.page:7(info/title)
+#, fuzzy
+#| msgid "ColorButton (Vala)"
+msgctxt "text"
+msgid "ColorButton (Vala)"
+msgstr "ColorButton (Vala)"
+
+#: C/colorbutton.vala.page:24(page/p)
+msgid "RGB values of the selected color are shown in the label."
+msgstr "Os valores RGB da cor seleccionada mostraranse na etiqueta."
+
+#: C/colorbutton.vala.page:26(page/code)
+#, no-wrap
+msgid ""
+"/* This is the application. */\n"
+"public class MyApplication : Gtk.Application {\n"
+"\tGtk.Label label;\n"
+"\n"
+"\t/* Override the 'activate' signal of GLib.Application. */\n"
+"\tprotected override void activate () {\n"
+"\t\t/* Create the window of this application and show it. */\n"
+"\t\tvar window = new Gtk.ApplicationWindow (this);\n"
+"\t\twindow.title = \"ColorButton\";\n"
+"\t\twindow.set_default_size (150, 50);\n"
+"\t\twindow.set_border_width (10);\n"
+"\n"
+"\t\t/* Create a new ColorButton with default blue. */\n"
+"\t\tvar blue = Gdk.RGBA ();\n"
+"\t\tblue.parse (\"blue\");\n"
+"\t\tvar colorbutton = new Gtk.ColorButton.with_rgba (blue);\n"
+"\n"
+"\t\tlabel = new Gtk.Label (\"Click to choose a color\");\n"
+"\n"
+"\t\tvar grid = new Gtk.Grid ();\n"
+"\t\tgrid.attach (colorbutton, 0, 0, 1, 1);\n"
+"\t\tgrid.attach_next_to (label, colorbutton, Gtk.PositionType.BOTTOM, 1, 1);\n"
+"\n"
+"\t\tcolorbutton.color_set.connect (this.on_color_set);\n"
+"\n"
+"\t\twindow.add (grid);\n"
+"\t\twindow.show_all ();\n"
+"\t}\n"
+"\n"
+"\tvoid on_color_set (Gtk.ColorButton button) {\n"
+"\t\tvar color =  button.get_rgba ();\n"
+"\t\tlabel.set_text (\"RGBA: \" + color.to_string());\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main creates and runs the application. */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
+
+#: C/colorbutton.vala.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://valadoc.org/gtk+-3.0/Gtk.ColorButton.html\";>Gtk."
+"ColorButton</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/colorbutton.vala.page:32(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid "<link href=\"http://valadoc.org/gdk-3.0/Gdk.RGBA.html\";>Gdk.RGBA</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/comboboxtext.js.page:23(media) C/combobox.py.page:21(media)
+#: C/combobox.vala.page:21(media)
+#, fuzzy
+#| msgid "@@image: 'media/toolbar.png'; md5=fca40afb940764d58f69b3a2add9a927"
+msgctxt "_"
+msgid ""
+"external ref='media/combobox.png' md5='ab9e91bc1a58fe866cb00dd52159251d'"
+msgstr "@@image: 'media/toolbar.png'; md5=fca40afb940764d58f69b3a2add9a927"
+
+#: C/comboboxtext.js.page:7(info/title)
+#, fuzzy
+#| msgid "ComboBoxText (JavaScript)"
+msgctxt "text"
+msgid "ComboBoxText (JavaScript)"
+msgstr "ComboBoxText (JavaScript)"
+
+#: C/comboboxtext.js.page:19(info/desc)
+msgid "A text-only drop-down menu"
+msgstr "Un menú despregábel con só texto"
+
+#: C/comboboxtext.js.page:22(page/title)
+msgid "ComboBoxText"
+msgstr "ComboBoxText"
+
+#: C/comboboxtext.js.page:24(page/p)
+msgid ""
+"A ComboBox is a drop-down menu. The difference between a <link xref="
+"\"combobox.js\">ComboBox</link> and a ComboBoxText is that a ComboBoxText "
+"just has basic text options, while a full ComboBox uses a ListStore or "
+"TreeStore (which are basically spreadsheets) to show things like branching "
+"options, or pictures to go alongside each choice."
+msgstr ""
+
+#: C/comboboxtext.js.page:25(note/p)
+msgid ""
+"Unless you need the added features of a full ComboBox, or are comfortable "
+"working with ListStores and TreeStores, you may find it a lot simpler to use "
+"a ComboBoxText whenever possible."
+msgstr ""
+
+#: C/comboboxtext.js.page:41(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"const ComboBoxTextExample = new Lang.Class ({\n"
+"    Name: 'ComboBoxText Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jscomboboxtext'});\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+msgstr ""
+
+#: C/comboboxtext.js.page:65(section/p) C/messagedialog.js.page:69(section/p)
+msgid ""
+"All the code for this sample goes in the MessageDialogExample class. The "
+"above code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/";
+"gjs/Gtk.Application.html\">Gtk.Application</link> for our widgets and window "
+"to go in."
+msgstr ""
+
+#: C/comboboxtext.js.page:66(section/code) C/combobox.js.page:70(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Welcome to GNOME\",\n"
+"            default_width: 200,\n"
+"            border_width: 10 });\n"
+msgstr ""
+
+#: C/comboboxtext.js.page:78(section/p) C/combobox.js.page:82(section/p)
+#: C/messagedialog.js.page:83(section/p) C/radiobutton.js.page:78(section/p)
+#: C/scale.js.page:77(section/p) C/spinbutton.js.page:80(section/p)
+#: C/switch.js.page:87(section/p) C/textview.js.page:87(section/p)
+#: C/togglebutton.js.page:80(section/p)
+#: C/treeview_simple_liststore.js.page:89(section/p)
+msgid ""
+"The _buildUI function is where we put all the code to create the "
+"application's user interface. The first step is creating a new <link xref="
+"\"GtkApplicationWindow.js\">Gtk.ApplicationWindow</link> to put all our "
+"widgets into."
+msgstr ""
+
+#: C/comboboxtext.js.page:82(section/title)
+msgid "Creating the ComboBoxText"
+msgstr "Crear un ComboBoxText"
+
+#: C/comboboxtext.js.page:83(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the combobox\n"
+"        this._comboBoxText = new Gtk.ComboBoxText();\n"
+"\n"
+"        // Populate the combobox\n"
+"        let distros = [\"Select distribution\", \"Fedora\", \"Mint\", \"Suse\"];\n"
+"        for (let i = 0; i &lt; distros.length; i++)\n"
+"            this._comboBoxText.append_text (distros[i]);\n"
+"        this._comboBoxText.set_active (0);\n"
+"\n"
+"        // Connect the combobox's 'changed' signal to our callback function\n"
+"        this._comboBoxText.connect ('changed', Lang.bind (this, this._onComboChanged));\n"
+msgstr ""
+
+#: C/comboboxtext.js.page:96(section/p)
+msgid ""
+"After we create the ComboBoxText, we use its <file>append_text</file> method "
+"to add text strings to it. Like the entries in an array, they each have a "
+"number for an ID, starting with 0. To make things simpler, you can actually "
+"create an array for your ComboBoxText entries, then use a for loop to append "
+"them in order, like we did here."
+msgstr ""
+
+#: C/comboboxtext.js.page:97(section/p)
+msgid ""
+"After we populate the ComboBoxText, we set its first entry to be active, so "
+"that we'll see the \"Select distribution\" line before we click on it. Then "
+"we connect its <file>changed</file> signal to the _onComboChanged function, "
+"so that it's called whenever you make a new selection from the drop-down "
+"menu."
+msgstr ""
+
+#: C/comboboxtext.js.page:98(note/p)
+msgid ""
+"If you'd like to add an entry to a ComboBoxText, you can use the "
+"<file>insert_text</file> method. And if you'd rather use a text string as an "
+"ID for each entry than rely on numbers alone, you can use the <file>append</"
+"file> and <file>insert</file> methods. See the links at the bottom of this "
+"tutorial for the details of how to use them."
+msgstr ""
+
+#: C/comboboxtext.js.page:100(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Add the combobox to the window\n"
+"        this._window.add (this._comboBoxText);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+msgstr ""
+
+#: C/comboboxtext.js.page:108(section/p)
+msgid ""
+"Finally, we add the ComboBoxText to the window, and tell the window to show "
+"itself and the widget inside it."
+msgstr ""
+
+#: C/comboboxtext.js.page:112(section/title)
+#: C/combobox.js.page:169(section/title)
+#: C/radiobutton.js.page:180(section/title)
+msgid "Function which handles your selection"
+msgstr ""
+
+#: C/comboboxtext.js.page:113(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    _onComboChanged: function () {\n"
+"\n"
+"        // The responses we'll use for our messagedialog\n"
+"        let responses = [\"\",\n"
+"            \"Fedora is a community distro sponsored by Red Hat.\",\n"
+"            \"Mint is a popular distro based on Ubuntu.\",\n"
+"            \"SUSE is a name shared by two separate distros.\"];\n"
+msgstr ""
+
+#: C/comboboxtext.js.page:122(section/p)
+msgid ""
+"We're going to create a pop-up <link xref=\"messagedialog.js"
+"\">MessageDialog</link>, which shows you a message based on which distro you "
+"select. First, we create the array of responses to use. Since the first "
+"string in our ComboBoxText is just the \"Select distribution\" message, we "
+"make the first string in our array blank."
+msgstr ""
+
+#: C/comboboxtext.js.page:124(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Which combobox item is active?\n"
+"        let activeItem = this._comboBoxText.get_active();\n"
+"\n"
+"        // No messagedialog if you chose \"Select distribution\"\n"
+"        if (activeItem != 0) {\n"
+"            this._popUp = new Gtk.MessageDialog ({\n"
+"                transient_for: this._window,\n"
+"                modal: true,\n"
+"                buttons: Gtk.ButtonsType.OK,\n"
+"                message_type: Gtk.MessageType.INFO,\n"
+"                text: responses[activeItem]});\n"
+"\n"
+"            // Connect the OK button to a handler function\n"
+"            this._popUp.connect ('response', Lang.bind (this, this._onDialogResponse));\n"
+"\n"
+"            // Show the messagedialog\n"
+"            this._popUp.show();\n"
+"        }\n"
+"\n"
+"    },\n"
+msgstr ""
+
+#: C/comboboxtext.js.page:146(section/p)
+msgid ""
+"Before showing a MessageDialog, we first test to make sure you didn't choose "
+"the \"Select distribution\" message. After that, we set its text to be the "
+"entry in the array that corresponds to the active entry in our ComboBoxText. "
+"We do that using the <file>get_active</file> method, which returns the "
+"number ID of your selection."
+msgstr ""
+
+#: C/comboboxtext.js.page:147(note/p)
+msgid ""
+"Other methods you can use include <file>get_active_id,</file> which returns "
+"the text ID assigned by <file>append,</file> and <file>get_active_text,</"
+"file> which returns the full text of the string you selected."
+msgstr ""
+
+#: C/comboboxtext.js.page:148(section/p) C/combobox.js.page:205(section/p)
+msgid ""
+"After we create the MessageDialog, we connect its response signal to the "
+"_onDialogResponse function, then tell it to show itself."
+msgstr ""
+
+#: C/comboboxtext.js.page:150(section/code)
+#: C/combobox.js.page:207(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    _onDialogResponse: function () {\n"
+"\n"
+"        this._popUp.destroy ();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+msgstr ""
+
+#: C/comboboxtext.js.page:159(section/p) C/combobox.js.page:216(section/p)
+msgid ""
+"Since the only button the MessageDialog has is an OK button, we don't need "
+"to test its response_id to see which button was clicked. All we do here is "
+"destroy the popup."
+msgstr ""
+
+#: C/comboboxtext.js.page:161(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new ComboBoxTextExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/comboboxtext.js.page:166(section/p)
+msgid ""
+"Finally, we create a new instance of the finished ComboBoxTextExample class, "
+"and set the application running."
+msgstr ""
+
+#: C/comboboxtext.js.page:171(section/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ComboBoxTextExample = new Lang.Class ({\n"
+"    Name: 'ComboBoxText Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jscomboboxtext'});\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Welcome to GNOME\",\n"
+"            default_width: 200,\n"
+"            border_width: 10 });\n"
+"\n"
+"        // Create the combobox\n"
+"        this._comboBoxText = new Gtk.ComboBoxText();\n"
+"\n"
+"        // Populate the combobox\n"
+"        let distros = [\"Select distribution\", \"Fedora\", \"Mint\", \"Suse\"];\n"
+"        for (let i = 0; i &lt; distros.length; i++)\n"
+"            this._comboBoxText.append_text (distros[i]);\n"
+"        this._comboBoxText.set_active (0);\n"
+"\n"
+"        // Connect the combobox's 'changed' signal to our callback function\n"
+"        this._comboBoxText.connect ('changed', Lang.bind (this, this._onComboChanged));\n"
+"\n"
+"        // Add the combobox to the window\n"
+"        this._window.add (this._comboBoxText);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onComboChanged: function () {\n"
+"\n"
+"        // The responses we'll use for our messagedialog\n"
+"        let responses = [\"\",\n"
+"            \"Fedora is a community distro sponsored by Red Hat.\",\n"
+"            \"Mint is a popular distro based on Ubuntu.\",\n"
+"            \"SUSE is a name shared by two separate distros.\"];\n"
+"\n"
+"        // Which combobox item is active?\n"
+"        let activeItem = this._comboBoxText.get_active();\n"
+"\n"
+"        // No messagedialog if you chose \"Select distribution\"\n"
+"        if (activeItem != 0) {\n"
+"            this._popUp = new Gtk.MessageDialog ({\n"
+"                transient_for: this._window,\n"
+"                modal: true,\n"
+"                buttons: Gtk.ButtonsType.OK,\n"
+"                message_type: Gtk.MessageType.INFO,\n"
+"                text: responses[activeItem]});\n"
+"\n"
+"            // Connect the OK button to a handler function\n"
+"            this._popUp.connect ('response', Lang.bind (this, this._onDialogResponse));\n"
+"\n"
+"            // Show the messagedialog\n"
+"            this._popUp.show();\n"
+"        }\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onDialogResponse: function () {\n"
+"\n"
+"        this._popUp.destroy ();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ComboBoxTextExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/comboboxtext.js.page:182(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ComboBoxText.";
+"html\">Gtk.ComboBoxText</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/comboboxtext.js.page:183(item/p) C/combobox.js.page:243(item/p)
+#: C/entry.js.page:32(item/p) C/messagedialog.js.page:197(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.MessageDialog.";
+"html\">Gtk.MessageDialog</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/combobox.js.page:25(media) C/combobox_multicolumn.py.page:22(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/aboutdialog.png'; md5=a36117a559fa98e25e2f6b3db593639f"
+msgctxt "_"
+msgid ""
+"external ref='media/combobox_multicolumn.png' "
+"md5='43f16648fb11ebc7d2f70825ed0f63b3'"
+msgstr "@@image: 'media/aboutdialog.png'; md5=a36117a559fa98e25e2f6b3db593639f"
+
+#: C/combobox.js.page:7(info/title)
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "ComboBox (JavaScript)"
+msgstr "JavaScript"
+
+#: C/combobox.js.page:21(info/desc)
+msgid "A customizable drop-down menu"
+msgstr ""
+
+#: C/combobox.js.page:24(page/title) C/combobox.py.page:20(page/title)
+#: C/combobox.vala.page:20(page/title)
+#: C/combobox_multicolumn.py.page:21(page/title)
+msgid "ComboBox"
+msgstr ""
+
+#: C/combobox.js.page:26(page/p)
+msgid ""
+"A ComboBox is an extremely customizable drop-down menu. It holds the "
+"equivalent of a <link xref=\"treeview_simple_liststore.js\">TreeView</link> "
+"widget that appears when you click on it, complete with a ListStore "
+"(basically a spreadsheet) that says what's in the rows and columns. In this "
+"example, our ListStore has the name of each option in one column, and the "
+"name of a stock icon in the other, which the ComboBox then turns into an "
+"icon for each option."
+msgstr ""
+
+#: C/combobox.js.page:27(page/p)
+msgid ""
+"You select a whole horizontal row at a time, so the icons aren't treated as "
+"separate options. They and the text beside them make up each option you can "
+"click on."
+msgstr ""
+
+#: C/combobox.js.page:28(note/p)
+msgid ""
+"Working with a ListStore can be time-consuming. If you just want a simple "
+"text-only drop-down menu, take a look at the <link xref=\"comboboxtext.js"
+"\">ComboBoxText</link>. It doesn't take as much time to set up, and is "
+"easier to work with."
+msgstr ""
+
+#: C/combobox.js.page:33(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+msgstr ""
+
+#: C/combobox.js.page:45(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"const ComboBoxExample = new Lang.Class ({\n"
+"    Name: 'ComboBox Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jscombobox'});\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+msgstr ""
+
+#: C/combobox.js.page:69(section/p)
+msgid ""
+"All the code for this sample goes in the ComboBoxExample class. The above "
+"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
+"go in."
+msgstr ""
+
+#: C/combobox.js.page:86(section/title)
+#: C/treeview_simple_liststore.js.page:93(section/title)
+msgid "Creating the ListStore"
+msgstr "Crear un ListStore"
+
+#: C/combobox.js.page:87(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the liststore to put our options in\n"
+"        this._listStore = new Gtk.ListStore();\n"
+"        this._listStore.set_column_types ([\n"
+"            GObject.TYPE_STRING,\n"
+"            GObject.TYPE_STRING]);\n"
+msgstr ""
+
+#: C/combobox.js.page:94(section/p)
+msgid ""
+"This ListStore works like the one used in the <link xref="
+"\"treeview_simple_liststore.js\">TreeView</link> example. We're giving it "
+"two columns, both strings, because one of them will contain the names of "
+"<link href=\"http://developer.gnome.org/gtk/2.24/gtk-Stock-Items.html#GTK-";
+"STOCK-ABOUT:CAPS\">stock Gtk icons</link>."
+msgstr ""
+
+#: C/combobox.js.page:95(section/p)
+msgid ""
+"If we'd wanted to use our own icons that weren't already built in to GNOME, "
+"we'd have needed to use the <file>gtk.gdk.Pixbuf</file> type instead. Here "
+"are a few other types you can use:"
+msgstr ""
+
+#: C/combobox.js.page:97(item/p)
+#: C/treeview_simple_liststore.js.page:106(item/p)
+msgid "<file>GObject.TYPE_BOOLEAN</file> -- True or false"
+msgstr "<file>GObject.TYPE_BOOLEAN</file> -- Verdadeiro ou falso"
+
+#: C/combobox.js.page:98(item/p)
+#: C/treeview_simple_liststore.js.page:107(item/p)
+msgid ""
+"<file>GObject.TYPE_FLOAT</file> -- A floating point number (one with a "
+"decimal point)"
+msgstr ""
+"<file>GObject.TYPE_FLOAT</file> -- Un número en punto flotante (un con un "
+"punto decimal)"
+
+#: C/combobox.js.page:99(item/p)
+#: C/treeview_simple_liststore.js.page:108(item/p)
+msgid "<file>GObject.TYPE_STRING</file> -- A string of letters and numbers"
+msgstr "<file>GObject.TYPE_STRING</file> -- Unha cadea de números e letras"
+
+#: C/combobox.js.page:101(note/p)
+#: C/treeview_simple_liststore.js.page:112(note/p)
+msgid ""
+"You need to put the line <file>const GObject = imports.gi.GObject;</file> at "
+"the start of your application's code, like we did in this example, if you "
+"want to be able to use GObject types."
+msgstr ""
+
+#: C/combobox.js.page:103(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // This array holds our list of options and their icons\n"
+"        let options = [{ name: \"Select\" },\n"
+"            { name: \"New\", icon: Gtk.STOCK_NEW },\n"
+"            { name: \"Open\", icon: Gtk.STOCK_OPEN },\n"
+"            { name: \"Save\", icon: Gtk.STOCK_SAVE }];\n"
+"\n"
+"        // Put the options in the liststore\n"
+"        for (let i = 0; i &lt; options.length; i++ ) {\n"
+"            let option = options[i];\n"
+"            let iter = this._listStore.append();\n"
+"            this._listStore.set (iter, [0], [option.name]);\n"
+"            if ('icon' in option)\n"
+"                this._listStore.set (iter, [1], [option.icon]);\n"
+"        }\n"
+msgstr ""
+
+#: C/combobox.js.page:119(section/p)
+msgid ""
+"Here we create an array of the text options and their corresponding icons, "
+"then put them into the ListStore in much the same way we would for a <link "
+"xref=\"treeview_simple_liststore.js\">TreeView's</link> ListStore. We only "
+"want to put an icon in if there's actually an icon in the options array, so "
+"we make sure to check for that first."
+msgstr ""
+
+#: C/combobox.js.page:120(note/p)
+msgid ""
+"\"Select\" isn't really an option so much as an invitation to click on our "
+"ComboBox, so it doesn't need an icon."
+msgstr ""
+
+#: C/combobox.js.page:124(section/title)
+msgid "Creating the ComboBox"
+msgstr "Crear un ComboBox"
+
+#: C/combobox.js.page:125(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the combobox\n"
+"        this._comboBox = new Gtk.ComboBox({\n"
+"            model: this._listStore});\n"
+msgstr ""
+
+#: C/combobox.js.page:130(section/p)
+msgid ""
+"Each ComboBox has an underlying \"model\" it takes all its options from. You "
+"can use a TreeStore if you want to have a ComboBox with branching options. "
+"In this case, we're just using the ListStore we already created."
+msgstr ""
+
+#: C/combobox.js.page:131(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create some cellrenderers for the items in each column\n"
+"        let rendererPixbuf = new Gtk.CellRendererPixbuf();\n"
+"        let rendererText = new Gtk.CellRendererText();\n"
+"\n"
+"        // Pack the renderers into the combobox in the order we want to see\n"
+"        this._comboBox.pack_start (rendererPixbuf, false);\n"
+"        this._comboBox.pack_start (rendererText, false);\n"
+"\n"
+"        // Set the renderers to use the information from our liststore\n"
+"        this._comboBox.add_attribute (rendererText, \"text\", 0);\n"
+"        this._comboBox.add_attribute (rendererPixbuf, \"stock_id\", 1);\n"
+msgstr ""
+
+#: C/combobox.js.page:144(section/p)
+msgid ""
+"This part, again, works much like creating CellRenderers and packing them "
+"into the columns of a <link xref=\"treeview_simple_liststore.js\">TreeView</"
+"link>. The biggest difference is that we don't need to create the ComboBox's "
+"columns as separate objects. We just pack the CellRenderers into it in the "
+"order we want them to show up, then tell them to pull information from the "
+"ListStore (and what type of information we want them to expect)."
+msgstr ""
+
+#: C/combobox.js.page:145(section/p)
+msgid ""
+"We use a CellRendererText to show the text, and a CellRendererPixbuf to show "
+"the icons. We can store the names of the icons' stock types as strings, but "
+"when we display them we need a CellRenderer that's designed for pictures."
+msgstr ""
+
+#: C/combobox.js.page:146(note/p)
+msgid ""
+"Just like with a TreeView, the \"model\" (in this case a ListStore) and the "
+"\"view\" (in this case our ComboBox) are separate. Because of that, we can "
+"do things like have the columns in one order in the ListStore, and then pack "
+"the CellRenderers that correspond to those columns into the ComboBox in a "
+"different order. We can even create a TreeView or other widget that shows "
+"the information in the ListStore in a different way, without it affecting "
+"our ComboBox."
+msgstr ""
+
+#: C/combobox.js.page:148(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Set the first row in the combobox to be active on startup\n"
+"        this._comboBox.set_active (0);\n"
+"\n"
+"        // Connect the combobox's 'changed' signal to our callback function\n"
+"        this._comboBox.connect ('changed', Lang.bind (this, this._onComboChanged));\n"
+msgstr ""
+
+#: C/combobox.js.page:155(section/p)
+msgid ""
+"We want the \"Select\" text to be the part people see at first, that gets "
+"them to click on the ComboBox. So we set it to be the active entry. We also "
+"connect the ComboBox's <file>changed</file> signal to a callback function, "
+"so that any time someone clicks on a new option something happens. In this "
+"case, we're just going to show a popup with a little haiku."
+msgstr ""
+
+#: C/combobox.js.page:157(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Add the combobox to the window\n"
+"        this._window.add (this._comboBox);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+msgstr ""
+
+#: C/combobox.js.page:165(section/p)
+msgid ""
+"Finally, we add the ComboBox to the window, and tell the window to show "
+"itself and everything inside it."
+msgstr ""
+
+#: C/combobox.js.page:170(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    _selected: function () {\n"
+"\n"
+"        // The silly pseudohaiku that we'll use for our messagedialog\n"
+"        let haiku = [\"\",\n"
+"            \"You ask for the new\\nwith no thought for the aged\\nlike fallen leaves trod.\",\n"
+"            \"Like a simple clam\\nrevealing a lustrous pearl\\nit opens for you.\",\n"
+"            \"A moment in time\\na memory on the breeze\\nthese things can't be saved.\"];\n"
+msgstr ""
+
+#: C/combobox.js.page:179(section/p)
+msgid ""
+"We're going to create a pop-up <link xref=\"messagedialog.js"
+"\">MessageDialog</link>, which shows you a silly haiku based on which distro "
+"you select. First, we create the array of haiku to use. Since the first "
+"string in our ComboBox is just the \"Select\" message, we make the first "
+"string in our array blank."
+msgstr ""
+
+#: C/combobox.js.page:181(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Which combobox item is active?\n"
+"        let activeItem = this._comboBox.get_active();\n"
+"\n"
+"        // No messagedialog if you choose \"Select\"\n"
+"        if (activeItem != 0) {\n"
+"            this._popUp = new Gtk.MessageDialog ({\n"
+"                transient_for: this._window,\n"
+"                modal: true,\n"
+"                buttons: Gtk.ButtonsType.OK,\n"
+"                message_type: Gtk.MessageType.INFO,\n"
+"                text: haiku[activeItem]});\n"
+"\n"
+"            // Connect the OK button to a handler function\n"
+"            this._popUp.connect ('response', Lang.bind (this, this._onDialogResponse));\n"
+"\n"
+"            // Show the messagedialog\n"
+"            this._popUp.show();\n"
+"        }\n"
+"\n"
+"    },\n"
+msgstr ""
+
+#: C/combobox.js.page:203(section/p)
+msgid ""
+"Before showing a MessageDialog, we first test to make sure you didn't choose "
+"the \"Select\" message. After that, we set its text to be the haiku in the "
+"array that corresponds to the active entry in our ComboBoxText. We do that "
+"using the <file>get_active</file> method, which returns the number ID of "
+"your selection."
+msgstr ""
+
+#: C/combobox.js.page:204(note/p)
+msgid ""
+"Other methods you can use include <file>get_active_id</file>, which returns "
+"the text ID assigned by <file>append</file>, and <file>get_active_text</"
+"file>, which returns the full text of the string you selected."
+msgstr ""
+
+#: C/combobox.js.page:218(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new ComboBoxExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/combobox.js.page:223(section/p)
+msgid ""
+"Finally, we create a new instance of the finished ComboBoxExample class, and "
+"set the application running."
+msgstr ""
+
+#: C/combobox.js.page:228(section/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ComboBoxExample = new Lang.Class ({\n"
+"    Name: 'ComboBox Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jscombobox'});\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Welcome to GNOME\",\n"
+"            default_width: 200,\n"
+"            border_width: 10 });\n"
+"\n"
+"        // Create the liststore to put our options in\n"
+"        this._listStore = new Gtk.ListStore();\n"
+"        this._listStore.set_column_types ([\n"
+"            GObject.TYPE_STRING,\n"
+"            GObject.TYPE_STRING]);\n"
+"\n"
+"        // This array holds our list of options and their icons\n"
+"        let options = [{ name: \"Select\" },\n"
+"            { name: \"New\", icon: Gtk.STOCK_NEW },\n"
+"            { name: \"Open\", icon: Gtk.STOCK_OPEN },\n"
+"            { name: \"Save\", icon: Gtk.STOCK_SAVE }];\n"
+"\n"
+"        // Put the options in the liststore\n"
+"        for (let i = 0; i &lt; options.length; i++ ) {\n"
+"            let option = options[i];\n"
+"            let iter = this._listStore.append();\n"
+"            this._listStore.set (iter, [0], [option.name]);\n"
+"            if ('icon' in option)\n"
+"                this._listStore.set (iter, [1], [option.icon]);\n"
+"        }\n"
+"\n"
+"        // Create the combobox\n"
+"        this._comboBox = new Gtk.ComboBox({\n"
+"            model: this._listStore});\n"
+"\n"
+"        // Create some cellrenderers for the items in each column\n"
+"        let rendererPixbuf = new Gtk.CellRendererPixbuf();\n"
+"        let rendererText = new Gtk.CellRendererText();\n"
+"\n"
+"        // Pack the renderers into the combobox in the order we want to see\n"
+"        this._comboBox.pack_start (rendererPixbuf, false);\n"
+"        this._comboBox.pack_start (rendererText, false);\n"
+"\n"
+"        // Set the renderers to use the information from our liststore\n"
+"        this._comboBox.add_attribute (rendererText, \"text\", 0);\n"
+"        this._comboBox.add_attribute (rendererPixbuf, \"stock_id\", 1);\n"
+"\n"
+"        // Set the first row in the combobox to be active on startup\n"
+"        this._comboBox.set_active (0);\n"
+"\n"
+"        // Connect the combobox's 'changed' signal to our callback function\n"
+"        this._comboBox.connect ('changed', Lang.bind (this, this._onComboChanged));\n"
+"\n"
+"        // Add the combobox to the window\n"
+"        this._window.add (this._comboBox);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onComboChanged: function () {\n"
+"\n"
+"        // The silly pseudohaiku that we'll use for our messagedialog\n"
+"        let haiku = [\"\",\n"
+"            \"You ask for the new\\nwith no thought for the aged\\nlike fallen leaves trod.\",\n"
+"            \"Like a simple clam\\nrevealing a lustrous pearl\\nit opens for you.\",\n"
+"            \"A moment in time\\na memory on the breeze\\nthese things can't be saved.\"];\n"
+"\n"
+"        // Which combobox item is active?\n"
+"        let activeItem = this._comboBox.get_active();\n"
+"\n"
+"        // No messagedialog if you choose \"Select\"\n"
+"        if (activeItem != 0) {\n"
+"            this._popUp = new Gtk.MessageDialog ({\n"
+"                transient_for: this._window,\n"
+"                modal: true,\n"
+"                buttons: Gtk.ButtonsType.OK,\n"
+"                message_type: Gtk.MessageType.INFO,\n"
+"                text: haiku[activeItem]});\n"
+"\n"
+"            // Connect the OK button to a handler function\n"
+"            this._popUp.connect ('response', Lang.bind (this, this._onDialogResponse));\n"
+"\n"
+"            // Show the messagedialog\n"
+"            this._popUp.show();\n"
+"        }\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onDialogResponse: function () {\n"
+"\n"
+"        this._popUp.destroy ();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ComboBoxExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/combobox.js.page:239(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.";
+"CellRendererPixbuf.html\">Gtk.CellRendererPixbuf</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/combobox.js.page:240(item/p)
+#: C/treeview_simple_liststore.js.page:278(item/p)
+msgid ""
+"<link href=\"www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.CellRendererText.html"
+"\">Gtk.CellRendererText</link>"
+msgstr ""
+
+#: C/combobox.js.page:241(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ComboBox.html";
+"\">Gtk.ComboBox</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/combobox.js.page:242(item/p)
+#: C/treeview_simple_liststore.js.page:279(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ListStore.html";
+"\">Gtk.ListStore</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/combobox.js.page:244(item/p)
+#: C/treeview_simple_liststore.js.page:280(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeIter.html";
+"\">Gtk.TreeIter</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/combobox.py.page:7(info/title)
+#: C/combobox_multicolumn.py.page:7(info/title)
+#, fuzzy
+#| msgid "ColorButton (Python)"
+msgctxt "text"
+msgid "ComboBox (Python)"
+msgstr "ColorButton (Python)"
+
+#: C/combobox.py.page:17(info/desc) C/combobox.vala.page:17(info/desc)
+#: C/combobox_multicolumn.py.page:18(info/desc)
+msgid "A widget used to choose from a list of items"
+msgstr ""
+
+#: C/combobox.py.page:22(page/p) C/combobox_multicolumn.py.page:23(page/p)
+msgid "This ComboBox prints to the terminal your selection when you change it."
+msgstr ""
+
+#: C/combobox.py.page:28(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"distros = [[\"Select distribution\"], [\"Fedora\"], [\"Mint\"], [\"Suse\"]]\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
+"        self.set_default_size(200, -1)\n"
+"        self.set_border_width(10)\n"
+"\n"
+"        # the data in the model, of type string\n"
+"        listmodel = Gtk.ListStore(str)\n"
+"        # append the data in the model\n"
+"        for i in range(len(distros)):\n"
+"            listmodel.append(distros[i])\n"
+"\n"
+"        # a combobox to see the data stored in the model\n"
+"        combobox = Gtk.ComboBox(model=listmodel)\n"
+"\n"
+"        # a cellrenderer to render the text\n"
+"        cell = Gtk.CellRendererText()\n"
+"\n"
+"        # pack the cell into the beginning of the combobox, allocating\n"
+"        # no more space than needed\n"
+"        combobox.pack_start(cell, False)\n"
+"        # associate a property (\"text\") of the cellrenderer (cell) to a column (column 0)\n"
+"        # in the model used by the combobox\n"
+"        combobox.add_attribute(cell, \"text\", 0)\n"
+"\n"
+"        # the first row is the active one by default at the beginning\n"
+"        combobox.set_active(0)\n"
+"\n"
+"        # connect the signal emitted when a row is selected to the callback function\n"
+"        combobox.connect(\"changed\", self.on_changed)\n"
+"\n"
+"        # add the combobox to the window\n"
+"        self.add(combobox)\n"
+"\n"
+"    def on_changed(self, combo):\n"
+"        # if the row selected is not the first one, write its value on the terminal\n"
+"        if combo.get_active() != 0:\n"
+"            print \"You chose \" + str(distros[combo.get_active()][0]) +\".\"\n"
+"        return True\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/combobox.py.page:32(section/title)
+#: C/combobox_multicolumn.py.page:34(section/title)
+msgid "Useful methods for a ComboBox widget"
+msgstr ""
+
+#: C/combobox.py.page:33(section/p)
+#: C/combobox_multicolumn.py.page:35(section/p)
+msgid ""
+"The ComboBox widget is designed around a <em>Model/View/Controller</em> "
+"design. For more information, and for a list of useful methods for ComboBox "
+"and TreeModel, see <link xref=\"model-view-controller.py\">here</link>."
+msgstr ""
+
+#: C/combobox.py.page:40(item/p) C/combobox_multicolumn.py.page:43(item/p)
+#: C/model-view-controller.py.page:188(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkComboBox.html";
+"\">GtkComboBox</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/combobox.py.page:41(item/p) C/combobox_multicolumn.py.page:44(item/p)
+#: C/treeview_advanced_liststore.py.page:47(item/p)
+#: C/treeview_simple_liststore.py.page:45(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkListStore.html";
+"\">GtkListStore</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/combobox.py.page:42(item/p) C/combobox_multicolumn.py.page:45(item/p)
+#: C/treeview_advanced_liststore.py.page:48(item/p)
+#: C/treeview_cellrenderertoggle.py.page:44(item/p)
+#: C/treeview_simple_liststore.py.page:46(item/p)
+#: C/treeview_treestore.py.page:44(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRendererText.";
+"html\">GtkCellRendererText</link>"
+msgstr ""
+
+#: C/combobox.py.page:43(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellLayout.html";
+"\">GtkCellLayout</link>"
+msgstr ""
+
+#: C/combobox.py.page:44(item/p) C/combobox_multicolumn.py.page:48(item/p)
+#: C/treeview_advanced_liststore.py.page:50(item/p)
+#: C/treeview_simple_liststore.py.page:48(item/p)
+msgid ""
+"<link href=\"http://git.gnome.org/browse/pygobject/tree/gi/overrides/Gtk.py";
+"\">pygobject - Python bindings for GObject Introspection</link>"
+msgstr ""
+
+#: C/combobox.vala.page:7(info/title)
+#, fuzzy
+#| msgid "ColorButton (Vala)"
+msgctxt "text"
+msgid "ComboBox (Vala)"
+msgstr "ColorButton (Vala)"
+
+#: C/combobox.vala.page:22(page/p)
+msgid "This ComboBox prints to the terminal when you change your selection."
+msgstr ""
+
+#: C/combobox.vala.page:24(page/code)
+#, no-wrap
+msgid ""
+"/* A window in the application */\n"
+"class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\t/* An instance array of linux distributions belonging to this window. */\n"
+"\tstring[] distros = {\"Select distribution\", \"Fedora\", \"Mint\", \"Suse\"};\n"
+"\n"
+"\t/* This enum makes the code more readable when we refer to\n"
+"\t * the column as Column.DISTRO, instead of just 0.\n"
+"\t */\n"
+"\tenum Column {\n"
+"\t\tDISTRO\n"
+"\t}\n"
+"\n"
+"\t/* Constructor */\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"Welcome to GNOME\");\n"
+"\n"
+"\t\tthis.set_default_size (200, -1);\n"
+"\t\tthis.border_width = 10;\n"
+"\n"
+"\t\tGtk.ListStore liststore = new Gtk.ListStore (1, typeof (string));\n"
+"\n"
+"\t\tfor (int i = 0; i &lt; distros.length; i++){\n"
+"\t\t\tGtk.TreeIter iter;\n"
+"\t\t\tliststore.append (out iter);\n"
+"\t\t\tliststore.set (iter, Column.DISTRO, distros[i]);\n"
+"\t\t}\n"
+"\n"
+"\t\tGtk.ComboBox combobox = new Gtk.ComboBox.with_model (liststore);\n"
+"\t\tGtk.CellRendererText cell = new Gtk.CellRendererText ();\n"
+"\t\tcombobox.pack_start (cell, false);\n"
+"\n"
+"\t\tcombobox.set_attributes (cell, \"text\", Column.DISTRO);\n"
+"\n"
+"\t\t/* Set the first item in the list to be selected (active). */\n"
+"\t\tcombobox.set_active (0);\n"
+"\n"
+"\t\t/* Connect the 'changed' signal of the combobox\n"
+"\t\t * to the signal handler (aka. callback function.\n"
+"\t\t */\n"
+"\t\tcombobox.changed.connect (this.item_changed);\n"
+"\n"
+"\t\t/* Add the combobox to this window */\n"
+"\t\tthis.add (combobox);\n"
+"\t\tcombobox.show ();\n"
+"\t}\n"
+"\n"
+"\t/* Signal handler for the 'changed' signal of the combobox. */\n"
+"\tvoid item_changed (Gtk.ComboBox combo) {\n"
+"\t\tif (combo.get_active () !=0) {\n"
+"\t\t\tprint (\"You chose \" + distros [combo.get_active ()] +\"\\n\");\n"
+"\t\t}\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* This is the application */\n"
+"class MyApplication : Gtk.Application {\n"
+"\n"
+"\t/* Constructor */\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.MyApplication\");\n"
+"\t}\n"
+"\n"
+"\t/* Override the activate signal of GLib.Application,\n"
+"\t * which is inherited by Gtk.Application.\n"
+"\t */\n"
+"\tprotected override void activate () {\n"
+"\n"
+"\t\t/* Create the window of this application\n"
+"\t\t * and show it.\n"
+"\t\t */\n"
+"\t\tnew MyWindow (this).show ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main creates and runs the application */\n"
+"int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
+
+#: C/combobox.vala.page:29(item/p)
+#: C/treeview_simple_liststore.vala.page:32(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ListStore.html\";>Gtk."
+"ListStore</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/combobox.vala.page:30(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ComboBox.html\";>Gtk."
+"ComboBox</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/combobox.vala.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellRendererText.html\";>Gtk."
+"CellRendererText</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/combobox.vala.page:32(item/p)
+#, fuzzy
+#| msgid ""
+#| "The method <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+#| "set_default_size.html\">set_default_size</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellLayout.set_attributes.";
+"html\">set_attributes</link>"
+msgstr ""
+"O método <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"set_default_size.html\">set_default_size</link>"
+
+#: C/combobox_multicolumn.py.page:29(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"actions = [[\"Select\", None],\n"
+"           [\"New\", Gtk.STOCK_NEW],\n"
+"           [\"Open\", Gtk.STOCK_OPEN],\n"
+"           [\"Save\", Gtk.STOCK_SAVE]]\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
+"        self.set_default_size(200, -1)\n"
+"        self.set_border_width(10)\n"
+"\n"
+"        # the data in the model, of type string on two columns\n"
+"        listmodel = Gtk.ListStore(str, str)\n"
+"        # append the data\n"
+"        for i in range(len(actions)):\n"
+"            listmodel.append(actions[i])\n"
+"\n"
+"        # a combobox to see the data stored in the model\n"
+"        combobox = Gtk.ComboBox(model=listmodel)\n"
+"\n"
+"        # cellrenderers to render the data\n"
+"        renderer_pixbuf = Gtk.CellRendererPixbuf()\n"
+"        renderer_text = Gtk.CellRendererText()\n"
+"\n"
+"        # we pack the cell into the beginning of the combobox, allocating\n"
+"        # no more space than needed;\n"
+"        # first the image, then the text;\n"
+"        # note that it does not matter in which order they are in the model,\n"
+"        # the visualization is decided by the order of the cellrenderers\n"
+"        combobox.pack_start(renderer_pixbuf, False)\n"
+"        combobox.pack_start(renderer_text, False)\n"
+"\n"
+"        # associate a property of the cellrenderer to a column in the model\n"
+"        # used by the combobox\n"
+"        combobox.add_attribute(renderer_text, \"text\", 0)\n"
+"        combobox.add_attribute(renderer_pixbuf, \"stock_id\", 1)\n"
+"\n"
+"        # the first row is the active one at the beginning\n"
+"        combobox.set_active(0)\n"
+"\n"
+"        # connect the signal emitted when a row is selected to the callback function\n"
+"        combobox.connect(\"changed\", self.on_changed)\n"
+"\n"
+"        # add the combobox to the window\n"
+"        self.add(combobox)\n"
+"\n"
+"    def on_changed(self, combo):\n"
+"        # if the row selected is not the first one, write on the terminal\n"
+"        # the value of the first column in the model\n"
+"        if combo.get_active() != 0:\n"
+"\t\t\tprint \"You chose \" + str(actions[combo.get_active()][0]) +\"\\n\"\n"
+"        return True\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/combobox_multicolumn.py.page:46(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRendererPixbuf.";
+"html\">GtkCellRendererPixbuf</link>"
+msgstr ""
+
+#: C/combobox_multicolumn.py.page:47(item/p) C/toolbar.py.page:55(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/gtk3-Stock-Items.html";
+"\">Stock Items</link>"
+msgstr ""
+
+#: C/cpp.page:6(info/title)
+#, fuzzy
+#| msgid "C++"
+msgctxt "link"
+msgid "C++"
+msgstr "C+"
+
+#: C/cpp.page:15(page/title)
+msgid "Platform demos in C++"
+msgstr ""
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/dialog.c.page:24(media) C/dialog.js.page:21(media)
+#: C/dialog.py.page:22(media) C/dialog.vala.page:21(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/aboutdialog.png'; md5=a36117a559fa98e25e2f6b3db593639f"
+msgctxt "_"
+msgid "external ref='media/dialog.png' md5='c90a33386a600e892fe623d4072c8c38'"
+msgstr "@@image: 'media/aboutdialog.png'; md5=a36117a559fa98e25e2f6b3db593639f"
+
+#: C/dialog.c.page:7(info/title)
+#, fuzzy
+#| msgid "AboutDialog (C)"
+msgctxt "text"
+msgid "Dialog (C)"
+msgstr "AboutDialog (C)"
+
+#: C/dialog.c.page:19(info/desc) C/dialog.js.page:17(info/desc)
+#: C/dialog.py.page:18(info/desc) C/dialog.vala.page:17(info/desc)
+msgid "A popup window"
+msgstr ""
+
+#: C/dialog.c.page:22(page/title) C/dialog.js.page:20(page/title)
+#: C/dialog.py.page:21(page/title) C/dialog.vala.page:20(page/title)
+msgid "Dialog"
+msgstr ""
+
+#: C/dialog.c.page:25(page/p)
+msgid "A dialog window that pops up when a button is pressed."
+msgstr ""
+
+#: C/dialog.c.page:27(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+" \n"
+"\n"
+"/*Callback function in which reacts to the \"response\" signal. Be sure to place \n"
+"it before the function it is called in*/\n"
+"static void\n"
+"on_response (GtkDialog *dialog,\n"
+"             gint       response_id,\n"
+"             gpointer   user_data)\n"
+"{\n"
+"  /*For demonstration purposes, this will show the int value \n"
+"  of the response type*/\n"
+"  g_print (\"response is %d\\n\", response_id);\n"
+"  \n"
+"  /*This will cause the dialog to be destroyed*/\n"
+"  gtk_widget_destroy (GTK_WIDGET (dialog));\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/*Callback function in which reacts to the \"clicked\" signal*/\n"
+"static void\n"
+"show_dialog (GtkButton *button,\n"
+"             gpointer   user_data)\n"
+"{\n"
+"  GtkWindow *window = user_data;\n"
+"  GtkWidget *dialog;\n"
+"  GtkWidget *content_area;\n"
+"  GtkWidget *label;\n"
+"\n"
+"  gint response_id;\n"
+"\n"
+"  /*Create the dialog window. Modal windows prevent interaction with other \n"
+"  windows in the same application*/\n"
+"  dialog = gtk_dialog_new_with_buttons (\"A Gtk+ Dialog\", \n"
+"                                        window, \n"
+"                                        GTK_DIALOG_MODAL, \n"
+"                                        GTK_STOCK_OK, \n"
+"                                        GTK_RESPONSE_OK, \n"
+"                                        NULL);\n"
+"\n"
+"  /*Create a label and attach it to the content area of the dialog*/\n"
+"  content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));\n"
+"  label = gtk_label_new (\"This demonstrates a dialog with a label\");\n"
+"  gtk_container_add (GTK_CONTAINER (content_area), label);\n"
+"\n"
+"  /*The main purpose of this is to show dialog's child widget, label*/\n"
+"  gtk_widget_show_all (dialog);\n"
+"  \n"
+"  /*Connecting the \"response\" signal from the user to the associated\n"
+"  callback function*/\n"
+"  g_signal_connect (GTK_DIALOG (dialog), \n"
+"                    \"response\", \n"
+"                    G_CALLBACK (on_response), \n"
+"                    NULL);\n"
+"\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *button;\n"
+" \n"
+"  /*Create a window with a title and a default size*/\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"GNOME Button\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 250, 50);\n"
+"\n"
+"  /*Create a button with a label, and add it to the window*/\n"
+"  button = gtk_button_new_with_label (\"Click Me\");\n"
+"  gtk_container_add (GTK_CONTAINER (window), button);\n"
+" \n"
+"  /*Connecting the clicked signal to the callback*/\n"
+"  g_signal_connect (GTK_BUTTON (button), \n"
+"                    \"clicked\", \n"
+"                    G_CALLBACK (show_dialog), \n"
+"                    GTK_WINDOW (window));\n"
+" \n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+" \n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+" \n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+" \n"
+"  return status;\n"
+"}\n"
+msgstr ""
+
+#: C/dialog.c.page:35(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkDialog.html";
+"\">GtkDialog</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/dialog.c.page:36(item/p) C/radiobutton.c.page:35(item/p)
+#: C/spinbutton.c.page:37(item/p) C/switch.c.page:34(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkLabel.html";
+"\">GtkLabel</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/dialog.js.page:7(info/title)
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Dialog (JavaScript)"
+msgstr "JavaScript"
+
+#: C/dialog.js.page:22(page/p)
+msgid ""
+"A customizable popup window, which has a content area and an action area. "
+"This example dialog's content area contains a short message, and its action "
+"area contains a button which dismisses the dialog."
+msgstr ""
+
+#: C/dialog.js.page:24(page/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const DialogExample = new Lang.Class ({\n"
+"    Name: 'Dialog Example',\n"
+"\n"
+"    // Create the application itself\n"
+"        _init: function () {\n"
+"            this.application = new Gtk.Application ({\n"
+"                application_id: 'org.example.jsdialog',\n"
+"                flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"            });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"            this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                         window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                         title: \"Gtk.Dialog Example\",\n"
+"                                                         default_height: 50,\n"
+"                                                         default_width: 250 });\n"
+"\n"
+"        // Create a button\n"
+"        this._button = new Gtk.Button ({label: \"Click Me\"});\n"
+"        this._window.add (this._button);\n"
+"\n"
+"        // Bind it to the function that creates the dialog\n"
+"        this._button.connect (\"clicked\", Lang.bind(this, this._createDialog));\n"
+"\n"
+"                // Show the window and all child widgets\n"
+"                this._window.show_all();\n"
+"    },\n"
+"\n"
+"    _createDialog: function () {\n"
+"\n"
+"        // Create the dialog\n"
+"        this._dialog = new Gtk.Dialog ({ transient_for: this._window,\n"
+"                         modal: true,\n"
+"                         title: \"A Gtk+ dialog\" });\n"
+"\n"
+"        // Create the dialog's content area, which contains a message\n"
+"        this._contentArea = this._dialog.get_content_area();\n"
+"        this._message = new Gtk.Label ({label: \"This demonstrates a dialog with a label\"});\n"
+"        this._contentArea.add (this._message);\n"
+"\n"
+"        // Create the dialog's action area, which contains a stock OK button\n"
+"        this._actionArea = this._dialog.get_action_area();\n"
+"        this._OKButton = new Gtk.Button.new_from_stock (Gtk.STOCK_OK);\n"
+"        this._actionArea.add (this._OKButton);\n"
+"\n"
+"        // Connect the button to the function that handles what it does\n"
+"        this._OKButton.connect (\"clicked\", Lang.bind (this, this._OKHandler));\n"
+"\n"
+"        this._dialog.show_all();\n"
+"    },\n"
+"\n"
+"    _OKHandler: function (dialog, response_id) {\n"
+"\n"
+"        // Destroy the dialog\n"
+"        this._dialog.destroy();\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new DialogExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/dialog.js.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Dialog.html";
+"\">Gtk.Dialog</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/dialog.py.page:7(info/title)
+#, fuzzy
+#| msgid "AboutDialog (Python)"
+msgctxt "text"
+msgid "Dialog (Python)"
+msgstr "AboutDialog (Python)"
+
+#: C/dialog.py.page:23(page/p)
+msgid "A dialog with the response signal connected to a callback function."
+msgstr ""
+
+#: C/dialog.py.page:30(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # construct a window (the parent window)\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"GNOME Button\", application=app)\n"
+"        self.set_default_size(250, 50)\n"
+"\n"
+"        # a button on the parent window\n"
+"        button = Gtk.Button(\"Click me\")\n"
+"        # connect the signal \"clicked\" of the button with the function on_button_click()\n"
+"        button.connect(\"clicked\", self.on_button_click)\n"
+"        # add the button to the window\n"
+"        self.add(button)\n"
+"\n"
+"    # callback function for the signal \"clicked\" of the button in the parent window\n"
+"    def on_button_click(self, widget):\n"
+"        # create a Gtk.Dialog\n"
+"        dialog = Gtk.Dialog()\n"
+"        dialog.set_title(\"A Gtk+ Dialog\")\n"
+"        # The window defined in the constructor (self) is the parent of the dialog.\n"
+"        # Furthermore, the dialog is on top of the parent window\n"
+"        dialog.set_transient_for(self)\n"
+"        # set modal true: no interaction with other windows of the application\n"
+"        dialog.set_modal(True)\n"
+"        # add a button to the dialog window\n"
+"        dialog.add_button(button_text=\"OK\", response_id=Gtk.ResponseType.OK)\n"
+"        # connect the \"response\" signal (the button has been clicked) to the function on_response()\n"
+"        dialog.connect(\"response\", self.on_response)\n"
+"\n"
+"        # get the content area of the dialog, add a label to it\n"
+"        content_area = dialog.get_content_area()\n"
+"        label = Gtk.Label(\"This demonstrates a dialog with a label\")\n"
+"        content_area.add(label)\n"
+"        # show the dialog\n"
+"        dialog.show_all()\n"
+"\n"
+"    def on_response(self, widget, response_id):\n"
+"        print \"response_id is\", response_id\n"
+"        # destroy the widget (the dialog) when the function on_response() is called\n"
+"        # (that is, when the button of the dialog has been clicked)\n"
+"        widget.destroy()\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup (self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/dialog.py.page:35(section/title)
+msgid "Useful methods for a Dialog widget"
+msgstr ""
+
+#: C/dialog.py.page:38(item/p)
+msgid ""
+"Instead of <code>set_modal(True)</code> we could have <code>set_modal(False)"
+"</code> followed by <code>set_destroy_with_parent(True)</code> that would "
+"destroy the dialog window if the main window is closed."
+msgstr ""
+
+#: C/dialog.py.page:39(item/p)
+msgid ""
+"<code>add_button(button_text=\"The Answer\", response_id=42)</code>, where "
+"<code>42</code> is any integer, is an alternative to <code>add_button"
+"(button_text=\"text\", response_id=Gtk.ResponseType.RESPONSE)</code>, where "
+"<code>RESPONSE</code> could be one of <code>OK, CANCEL, CLOSE, YES, NO, "
+"APPLY, HELP</code>, which in turn correspond to the integers <code>-5, "
+"-6,..., -11</code>."
+msgstr ""
+
+#: C/dialog.py.page:49(item/p) C/messagedialog.py.page:59(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkDialog.html";
+"\">GtkDialog</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/dialog.vala.page:7(info/title)
+#, fuzzy
+#| msgid "AboutDialog (Vala)"
+msgctxt "text"
+msgid "Dialog (Vala)"
+msgstr "AboutDialog (Vala)"
+
+#: C/dialog.vala.page:22(page/p)
+msgid "A dialog with the response signal hooked up to a callback function."
+msgstr ""
+
+#: C/dialog.vala.page:24(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"/* A window in the application. */\n"
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\t/* Constructor */\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"GNOME Button\");\n"
+"\n"
+"\t\tthis.window_position = Gtk.WindowPosition.CENTER;\n"
+"\t\tthis.set_default_size (250,50);\n"
+"\n"
+"\t\tvar button = new Gtk.Button.with_label (\"Click Me\");\n"
+"\n"
+"\t\t/* Connect the button's \"clicked\" signal to\n"
+"\t\t * the signal handler (aka. this.callback function).\n"
+"\t\t */\n"
+"\t\tbutton.clicked.connect (this.on_button_click);\n"
+"\n"
+"\t\t/* Add the button to this window and show it. */\n"
+"\t\tthis.add (button);\n"
+"\t\tbutton.show ();\n"
+"\t}\n"
+"\n"
+"\t/* The signal handler for the buttons 'clicked' signal. */\n"
+"\tvoid on_button_click (Gtk.Button button) {\n"
+"\t\tvar dialog = new Gtk.Dialog.with_buttons (\"A Gtk+ Dialog\", this,\n"
+"                                                          Gtk.DialogFlags.MODAL,\n"
+"                                                          Gtk.Stock.OK,\n"
+"                                                          Gtk.ResponseType.OK, null);\n"
+"\n"
+"\t\tvar content_area = dialog.get_content_area ();\n"
+"\t\tvar label = new Gtk.Label (\"This demonstrates a dialog with a label\");\n"
+"\n"
+"\t\tcontent_area.add (label);\n"
+"\n"
+"\t\t/* Connect the 'response' signal of the dialog\n"
+"\t\t * the signal handler.  It is emitted when the dialog's\n"
+"\t\t * OK button is clicked.\n"
+"\t\t */\n"
+"\t\tdialog.response.connect (on_response);\n"
+"\n"
+"\t\t/* Show the dialog and all the widgets. */\n"
+"\t\tdialog.show_all ();\n"
+"\t}\n"
+"\n"
+"\t/* Signal handler for the 'response' signal of the dialog. */\n"
+"        void on_response (Gtk.Dialog dialog, int response_id) {\n"
+"\n"
+"                /* To see the int value of the ResponseType. This is only\n"
+"\t\t * for demonstration purposes.*/\n"
+"                print (\"response is %d\\n\", response_id);\n"
+"\n"
+"\t\t/* This causes the dialog to be destroyed. */\n"
+"                dialog.destroy ();\n"
+"        }\n"
+"\n"
+"}\n"
+"\n"
+"/* This is the application. */\n"
+"public class MyApplication : Gtk.Application {\n"
+"\n"
+"\t/* The constructore of the application. */\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.MyApplication\");\n"
+"\t}\n"
+"\n"
+"\t/* Override the 'activate' signal of GLib.Application. */\n"
+"\tprotected override void activate () {\n"
+"\n"
+"\t\t/* Create a window for the this application and show it. */\n"
+"\t\tnew MyWindow (this).show ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* The main function creates and runs the application. */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
+
+#: C/dialog.vala.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.html\";>Gtk.Dialog</"
+"link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/dialog.vala.page:32(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.Dialog.with_buttons.";
+"html\">Gtk.Dialog.with_buttons</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/dialog.vala.page:33(item/p) C/label.vala.page:32(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Label.html\";>Gtk.Label</"
+"link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/dialog.vala.page:34(item/p)
+#, fuzzy
+#| msgid ""
+#| "The method <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+#| "set_default_size.html\">set_default_size</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.get_content_area.html";
+"\">get_content_area</link>"
+msgstr ""
+"O método <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"set_default_size.html\">set_default_size</link>"
+
+#: C/documentation.page:19(page/title)
+msgid "Help develop"
+msgstr ""
+
+#: C/documentation.page:20(page/p)
+msgid ""
+"The <app>GNOME Developer Tutorials</app> are developed and maintained by a "
+"volunteer community. You are welcome to participate."
+msgstr ""
+
+#: C/documentation.page:23(page/p)
+msgid ""
+"If you would like to <link href=\"https://live.gnome.org/";
+"DocumentationProject/Tasks/DeveloperDocs\">help develop <app>GNOME Developer "
+"Tutorials</app></link>, you can get in touch with the developers using <link "
+"href=\"https://cbe005.chat.mibbit.com/?url=irc%3A%2F%2Firc.gnome.org%2Fdocs";
+"\">irc</link>, or via our <link href=\"http://mail.gnome.org/mailman/";
+"listinfo/gnome-doc-devel-list\">mailing list</link>."
+msgstr ""
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/entry.c.page:22(media) C/entry.js.page:21(media)
+#: C/entry.py.page:26(media) C/entry.vala.page:21(media)
+#, fuzzy
+#| msgid "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
+msgctxt "_"
+msgid "external ref='media/entry.png' md5='8a828cffdcbaa4bad83342e109f28cc8'"
+msgstr "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
+
+#: C/entry.c.page:7(info/title)
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "Entry (C)"
+msgstr "Python"
+
+#: C/entry.c.page:17(info/desc) C/entry.py.page:22(info/desc)
+#: C/entry.vala.page:17(info/desc)
+msgid "A single line text entry field"
+msgstr ""
+
+#: C/entry.c.page:20(page/title) C/entry.js.page:20(page/title)
+#: C/entry.py.page:25(page/title) C/entry.vala.page:20(page/title)
+msgid "Entry"
+msgstr ""
+
+#: C/entry.c.page:23(page/p) C/entry.vala.page:22(page/p)
+msgid "This application greets you in the terminal."
+msgstr ""
+
+#: C/entry.c.page:25(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/*This is the callback function. It is a handler function \n"
+"which reacts to the signal. In this case, it will grab the \n"
+"text input from the entry box and print out a line to the user.*/\n"
+"static void\n"
+"on_activate (GtkEntry *entry,\n"
+"             gpointer  user_data)\n"
+"{\n"
+"  const char *name;\n"
+"  name = gtk_entry_get_text (entry);\n"
+"\n"
+"  g_print (\"\\nHello %s!\\n\\n\", name);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *entry_box;\n"
+"\n"
+"  /*Create a window with a title, a default size, \n"
+"  and a set border width*/\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"What is your name?\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 300, 100);\n"
+"  gtk_container_set_border_width (GTK_CONTAINER (window), 10);\n"
+"\n"
+"  /*Create a new entry box, and add it to the window*/\n"
+"  entry_box = gtk_entry_new ();\n"
+"  gtk_container_add (GTK_CONTAINER (window), entry_box);\n"
+"\n"
+"  /*Connecting the activate signal to the callback*/\n"
+"  g_signal_connect (GTK_ENTRY (entry_box), \"activate\", \n"
+"                    G_CALLBACK (on_activate), NULL);\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
+msgstr ""
+
+#: C/entry.js.page:7(info/title)
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Entry (JavaScript)"
+msgstr "JavaScript"
+
+#: C/entry.js.page:17(info/desc)
+msgid "A single-line text entry field"
+msgstr ""
+
+#: C/entry.js.page:22(page/p)
+msgid "This application greets you by name through a pop-up window."
+msgstr ""
+
+#: C/entry.js.page:24(page/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const EntryExample = new Lang.Class({\n"
+"    Name: 'Entry Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsentry',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 100,\n"
+"            default_width: 300,\n"
+"            border_width: 10,\n"
+"            title: \"What is your name?\"});\n"
+"\n"
+"        // Create the text entry box\n"
+"        this.entry = new Gtk.Entry ();\n"
+"        this._window.add(this.entry);\n"
+"\n"
+"        // Connect the text entry box to a function that responds to what you type in\n"
+"        this.entry.connect(\"activate\", Lang.bind (this, this._hello));\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _hello: function() {\n"
+"\n"
+"        // Create a popup dialog to greet the person who types in their name\n"
+"        this._greeter = new Gtk.MessageDialog ({\n"
+"            transient_for: this._window,\n"
+"            modal: true,\n"
+"            text: \"Hello, \" + this.entry.get_text() + \"!\",\n"
+"            message_type: Gtk.MessageType.OTHER,\n"
+"            buttons: Gtk.ButtonsType.OK,\n"
+"        });\n"
+"\n"
+"        // Show the popup dialog\n"
+"        this._greeter.show();\n"
+"\n"
+"        // Bind the OK button to the function that closes the popup\n"
+"        this._greeter.connect (\"response\", Lang.bind(this, this._okClicked));\n"
+"    },\n"
+"\n"
+"    _okClicked: function () {\n"
+"        this._greeter.destroy();\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new EntryExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/entry.js.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Entry.html";
+"\">Gtk.Entry</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/entry.py.page:7(info/title)
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "Entry (Python)"
+msgstr "Python"
+
+#: C/entry.py.page:18(credit/name) C/label.py.page:18(credit/name)
+#: C/model-view-controller.py.page:14(credit/name)
+#: C/properties.py.page:14(credit/name)
+#: C/signals-callbacks.py.page:14(credit/name)
+#: C/strings.py.page:14(credit/name) C/textview.py.page:14(credit/name)
+#: C/toolbar_builder.py.page:26(credit/name)
+msgid "Sebastian Pölsterl"
+msgstr "Sebastian Pölsterl"
+
+#: C/entry.py.page:27(page/p)
+msgid "This application greets you in the terminal with the name you provide."
+msgstr ""
+
+#: C/entry.py.page:33(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"What is your name?\", application=app)\n"
+"        self.set_default_size(300, 100)\n"
+"        self.set_border_width(10)\n"
+"\n"
+"        # a single line entry\n"
+"        name_box = Gtk.Entry()\n"
+"        # emits a signal when the Enter key is pressed, connected to the\n"
+"        # callback function cb_activate\n"
+"        name_box.connect(\"activate\", self.cb_activate)\n"
+"\n"
+"        # add the Gtk.Entry to the window\n"
+"        self.add(name_box)\n"
+"\n"
+"    # the content of the entry is used to write in the terminal\n"
+"    def cb_activate(self, entry):\n"
+"        # retrieve the content of the widget\n"
+"\t\tname = entry.get_text()\n"
+"\t\t# print it in a nice form in the terminal\n"
+"\t\tprint \"Hello \" + name + \"!\"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/entry.py.page:37(section/title)
+msgid "Useful methods for an Entry widget"
+msgstr ""
+
+#: C/entry.py.page:38(section/p)
+msgid ""
+"For an explanation of signals and callback functions, see <link xref="
+"\"signals-callbacks.py\">this page</link>. Some of the signals that a Gtk."
+"Entry widget can emit are: <code>\"activate\"</code> (emitted when the user "
+"activates the Entry key); <code>\"backspace\"</code> (emitted when the user "
+"activates the Backspace or Shift-Backspace keys); <code>\"copy-clipboard\"</"
+"code> (Ctrl-c and Ctrl-Insert); <code>\"paste-clipboard\"</code> (Ctrl-v and "
+"Shift-Insert); <code>\"delete-from-cursor\"</code> (Delete, for deleting a "
+"character; Ctrl-Delete, for deleting a word); <code>\"icon-press\"</code> "
+"(emitted when the user clicks an activable icon); <code>\"icon-release\"</"
+"code> (emitted on the button release from a mouse click over an activable "
+"icon); <code>\"insert-at-cursor\"</code> (emitted when the user initiates "
+"the insertion of a fixed string at the cursor); <code>\"move-cursor\"</code> "
+"(emitted when the user initiates a cursor movement); <code>\"populate-popup"
+"\"</code> (emitted before showing the context menu of the entry; it can be "
+"used to add items to it)."
+msgstr ""
+
+#: C/entry.py.page:40(item/p)
+msgid ""
+"<code>get_buffer()</code> and <code>set_buffer(buffer)</code>, where "
+"<code>buffer</code> is a Gtk.EntryBuffer object, can be used to get and set "
+"the buffer for the entry."
+msgstr ""
+
+#: C/entry.py.page:41(item/p)
+msgid ""
+"<code>get_text()</code> and <code>set_text(\"some text\")</code> can be used "
+"to get and set the content for the entry."
+msgstr ""
+
+#: C/entry.py.page:42(item/p)
+msgid "<code>get_text_length()</code> is self-explanatory."
+msgstr ""
+
+#: C/entry.py.page:43(item/p)
+msgid ""
+"<code>get_text_area()</code> gets the area where the entry's text is drawn."
+msgstr ""
+
+#: C/entry.py.page:44(item/p)
+msgid ""
+"If we set <code>set_visibility(False)</code> the characters in the entry are "
+"displayed as the invisible char. This is the best available in the current "
+"font, but it can be changed with <code>set_invisible_char(ch)</code>, where "
+"<code>ch</code> is a Unicode charcater. The latter method is reversed by "
+"<code>unset_invisbile_char()</code>."
+msgstr ""
+
+#: C/entry.py.page:45(item/p)
+msgid ""
+"<code>set_max_length(int)</code>, where <code>int</code> is an integer, "
+"truncates every entry longer than <code>int</code> to have the desired "
+"maximum length."
+msgstr ""
+
+#: C/entry.py.page:46(item/p)
+msgid ""
+"By default, if you press the Entry key the Gtk.Entry emits the signal <code>"
+"\"activate\"</code>. If you would like to activate the default widget for "
+"the window (set using <code>set_default(widget)</code> on the window), then "
+"use <code>set_activates_default(True)</code>."
+msgstr ""
+
+#: C/entry.py.page:47(item/p)
+msgid "To set a frame around the entry: <code>set_has_frame(True)</code>."
+msgstr ""
+
+#: C/entry.py.page:48(item/p)
+msgid ""
+"<code>set_placeholder_text(\"some text\")</code> sets the text to be "
+"displayed in the entry when it is empty and unfocused."
+msgstr ""
+
+#: C/entry.py.page:49(item/p)
+msgid ""
+"<code>set_overwrite_mode(True)</code> and <code>set_overwrite_mode(False)</"
+"code> are self-explanatory."
+msgstr ""
+
+#: C/entry.py.page:50(item/p)
+msgid ""
+"If we have <code>set_editable(False)</code> the user cannot edit the text in "
+"the widget."
+msgstr ""
+
+#: C/entry.py.page:51(item/p)
+msgid ""
+"<code>set_completion(completion)</code>, where <code>completion</code> is a "
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkEntryCompletion.html";
+"\"><code>Gtk.EntryCompletion</code></link>, sets completion - or disables it "
+"if <code>completion</code> is <code>None</code>."
+msgstr ""
+
+#: C/entry.py.page:52(item/p)
+msgid ""
+"An Entry widget can display progress or activity information behind the "
+"text. We use <code>set_progress_fraction(fraction)</code>, where "
+"<code>fraction</code> is a <code>float</code> between <code>0.0</code> and "
+"<code>1.0</code> inclusive, to fill in the given fraction of the bar. We use "
+"<code>set_progress_pulse_step()</code> to set the fraction of total entry "
+"width to move the progress bouncing block for each call to "
+"<code>progress_pulse()</code>. The latter method indicates that some "
+"progress is made, and causes the progress indicator of the entry to enter "
+"\"activity mode\", where a block bounces back and forth. Each call to "
+"<code>progress_pulse()</code> causes the block to move by a little bit (the "
+"amount of movement per pulse is determined, as said before, by "
+"<code>set_progress_pulse_step()</code>)."
+msgstr ""
+
+#: C/entry.py.page:53(item/p)
+msgid ""
+"An Entry widget can also show icons. These icons can be activatable by "
+"clicking, can be set up as drag source and can have tooltips. To add an "
+"icon, use <code>set_icon_from_stock(icon_position, stock_id)</code>, or one "
+"of <code>set_icon_from_pixbuf(icon_position, pixbuf)</code>, "
+"<code>set_icon_from_icon_name(icon_position, icon_name)</code>, where "
+"<code>icon_position</code> is one of <code>Gtk.EntryIconPosition.PRIMARY</"
+"code> (to set the icon at the beginning of the entry) <code>Gtk."
+"EntryIconPosition.SECONDARY</code> (to set the icon at the end of the "
+"entry). To set a tooltip on an icon, use <code>set_icon_tooltip_text"
+"(\"tooltip text\")</code> or <code>set_icon_tooltip_markup(\"tooltip text in "
+"Pango markup language\")</code>."
+msgstr ""
+
+#: C/entry.py.page:61(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkEntry.html";
+"\">GtkEntry</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/entry.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Spinner (Vala)"
+msgctxt "text"
+msgid "Entry (Vala)"
+msgstr "Spinner (Vala)"
+
+#: C/entry.vala.page:24(page/code)
+#, no-wrap
+msgid ""
+"/* A window in the application. */\n"
+"class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\t/* Constructor */\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"What is your name?\");\n"
+"\n"
+"\t\tvar name_box = new Gtk.Entry ();\n"
+"\n"
+"\t\t/* Connect to the signal handler. */\n"
+"\t\tname_box.activate.connect (this.on_activate);\n"
+"\t\tname_box.show ();\n"
+"\n"
+"\t\tthis.set_default_size (300, 100);\n"
+"\t\tthis.border_width = 10;\n"
+"\n"
+"\t\t/* Add the name_box to this window. */\n"
+"\t\tthis.add (name_box);\n"
+"\t}\n"
+"\n"
+"\t/* Signal handler (aka. callback function) for the 'activate'\n"
+"\t * signal of a Gtk.Entry.\n"
+"\t */\n"
+"\tvoid on_activate (Gtk.Entry entry) {\n"
+"\t\tname = entry.get_text ();\n"
+"\t\tprint (\"\\nHello \" + name + \"!\\n\\n\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* This is the application. */\n"
+"class MyApplication : Gtk.Application {\n"
+"\n"
+"\t/* Constructor for the application. */\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.MyApplication\");\n"
+"\t}\n"
+"\n"
+"\t/* Override the 'activate' signal of GLib.Application. */\n"
+"\tprotected override void activate () {\n"
+"\n"
+"\t\t/* Create a new window for this application\n"
+"\t\t * and show it. */\n"
+"\t\tnew MyWindow (this).show ();\n"
+"\t}\n"
+"\n"
+"}\n"
+"\n"
+"/* The main function creats and runs the application. */\n"
+"int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
+
+#: C/entry.vala.page:29(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Entry.html\";>Gtk.Entry</"
+"link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/filechooserdialog.py.page:24(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/messagedialog.png'; md5=7cca8bbffdce01233e13624bbfb7e294"
+msgctxt "_"
+msgid ""
+"external ref='media/filechooserdialog_save.png' "
+"md5='3a7a3b71b9d3a36066857843b68ff27f'"
+msgstr ""
+"@@image: 'media/messagedialog.png'; md5=7cca8bbffdce01233e13624bbfb7e294"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/filechooserdialog.py.page:26(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/messagedialog.png'; md5=7cca8bbffdce01233e13624bbfb7e294"
+msgctxt "_"
+msgid ""
+"external ref='media/filechooserdialog_menu.png' "
+"md5='8a75f04127a70eba0ed68a9eb1d3bbca'"
+msgstr ""
+"@@image: 'media/messagedialog.png'; md5=7cca8bbffdce01233e13624bbfb7e294"
+
+#: C/filechooserdialog.py.page:7(info/title)
+#, fuzzy
+#| msgid "MessageDialog"
+msgctxt "text"
+msgid "FileChooserDialog (Python)"
+msgstr "MessageDialog"
+
+#: C/filechooserdialog.py.page:20(info/desc)
+msgid "A dialog suitable for \"Open\" and \"Save\" commands"
+msgstr ""
+
+#: C/filechooserdialog.py.page:23(page/title)
+#: C/filechooserdialog.vala.page:23(page/title)
+#, fuzzy
+#| msgid "MessageDialog"
+msgid "FileChooserDialog"
+msgstr "MessageDialog"
+
+#: C/filechooserdialog.py.page:25(page/p)
+msgid ""
+"This FileChooserDialog saves a text document, which can be opened or written "
+"from scratch in a TextView (see below)."
+msgstr ""
+
+#: C/filechooserdialog.py.page:27(page/p)
+msgid "It is also possible to call a FileChooserDialog to open a new document."
+msgstr ""
+
+#: C/filechooserdialog.py.page:32(section/title)
+msgid "Steps to recreate the example"
+msgstr ""
+
+#: C/filechooserdialog.py.page:34(item/p)
+msgid ""
+"Create a file .ui to describe an app-menu with items \"New\", \"Open\", "
+"\"Save\", \"Save as\", and \"Quit\". This can be done with Glade or in a "
+"text editor. See <link xref=\"#xml\"/>"
+msgstr ""
+
+#: C/filechooserdialog.py.page:35(item/p)
+msgid ""
+"Create a Python program for a Gtk.TextView with a Gtk.Buffer <code>self."
+"buffer</code>, and a <code>self.file</code> which will be a Gio.File and we "
+"set initially as <code>None</code>."
+msgstr ""
+
+#: C/filechooserdialog.py.page:36(item/p)
+msgid ""
+"In this program, create also the actions corresponding to the items in the "
+"app-menu, connect them to callback functions, and import the menu in the "
+"<code>do_startup()</code> method with a Gtk.Builder."
+msgstr ""
+
+#: C/filechooserdialog.py.page:37(item/p)
+msgid ""
+"\"New\" and \"Quit\" actions and callback functions are quite "
+"straightforward, see <link xref=\"#code\"/>."
+msgstr ""
+
+#: C/filechooserdialog.py.page:38(item/p)
+msgid ""
+"\"Open\" callback should create and open a Gtk.FileChooserDialog for \"Open"
+"\", connected with another callback function for each of the two \"Open\" "
+"and \"Cancel\" buttons of the FileChooserDialog."
+msgstr ""
+
+#: C/filechooserdialog.py.page:39(item/p)
+msgid ""
+"\"Save as\" works basically as \"Open\", but the callback function of the "
+"\"Save\" button depends on a more complex method <code>save_to_file()</code>."
+msgstr ""
+
+#: C/filechooserdialog.py.page:40(item/p)
+msgid ""
+"\"Save\" can be reduced to the case where the file is <code>None</code>, "
+"that is the case where <code>self.file</code> is a new file, which in turn "
+"is the case \"Save as\"; and to the case where the file is not <code>None</"
+"code>, which in turn is reduced to <code>save_to_file()</code>."
+msgstr ""
+
+#: C/filechooserdialog.py.page:41(item/p)
+msgid ""
+"Finally, the method <code>save_to_file()</code>: see <link xref=\"#code\"/>, "
+"lines 146 - 175."
+msgstr ""
+
+#: C/filechooserdialog.py.page:46(section/title)
+msgid "XML file which creates the app-menu"
+msgstr ""
+
+#: C/filechooserdialog.py.page:47(section/code)
+#: C/filechooserdialog.vala.page:29(section/code)
+#, no-wrap
+msgid ""
+"&lt;?xml version=\"1.0\"?&gt;\n"
+"&lt;interface&gt;\n"
+"  &lt;menu id=\"appmenu\"&gt;\n"
+"    &lt;section&gt;\n"
+"      &lt;item&gt;\n"
+"        &lt;attribute name=\"label\"&gt;New&lt;/attribute&gt;\n"
+"        &lt;attribute name=\"action\"&gt;win.new&lt;/attribute&gt;\n"
+"      &lt;/item&gt;\n"
+"      &lt;item&gt;\n"
+"        &lt;attribute name=\"label\"&gt;Open&lt;/attribute&gt;\n"
+"        &lt;attribute name=\"action\"&gt;win.open&lt;/attribute&gt;\n"
+"      &lt;/item&gt;\n"
+"    &lt;/section&gt;\n"
+"    &lt;section&gt;\n"
+"      &lt;item&gt;\n"
+"        &lt;attribute name=\"label\"&gt;Save&lt;/attribute&gt;\n"
+"        &lt;attribute name=\"action\"&gt;win.save&lt;/attribute&gt;\n"
+"      &lt;/item&gt;\n"
+"      &lt;item&gt;\n"
+"        &lt;attribute name=\"label\"&gt;Save As...&lt;/attribute&gt;\n"
+"        &lt;attribute name=\"action\"&gt;win.save-as&lt;/attribute&gt;\n"
+"      &lt;/item&gt;\n"
+"    &lt;/section&gt;\n"
+"    &lt;section&gt;\n"
+"      &lt;item&gt;\n"
+"        &lt;attribute name=\"label\"&gt;Quit&lt;/attribute&gt;\n"
+"        &lt;attribute name=\"action\"&gt;app.quit&lt;/attribute&gt;\n"
+"      &lt;/item&gt;\n"
+"    &lt;/section&gt;\n"
+"  &lt;/menu&gt;\n"
+"&lt;/interface&gt;\n"
+msgstr ""
+
+#: C/filechooserdialog.py.page:52(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import Gdk\n"
+"from gi.repository import Gio\n"
+"from gi.repository import GObject\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"FileChooserDialog Example\", application=app)\n"
+"        self.set_default_size(400, 400)\n"
+"\n"
+"        # the actions for the window menu, connected to the callback functions\n"
+"        new_action = Gio.SimpleAction.new(\"new\", None)\n"
+"        new_action.connect(\"activate\", self.new_callback)\n"
+"        self.add_action(new_action)\n"
+"        \n"
+"        open_action = Gio.SimpleAction.new(\"open\", None)\n"
+"        open_action.connect(\"activate\", self.open_callback)\n"
+"        self.add_action(open_action)\n"
+"        \n"
+"        save_action = Gio.SimpleAction.new(\"save\", None)\n"
+"        save_action.connect(\"activate\", self.save_callback)\n"
+"        self.add_action(save_action)\n"
+"        \n"
+"        save_as_action = Gio.SimpleAction.new(\"save-as\", None)\n"
+"        save_as_action.connect(\"activate\", self.save_as_callback)\n"
+"        self.add_action(save_as_action)\n"
+"        \n"
+"        # the file\n"
+"        self.file = None\n"
+"        \n"
+"        # the textview with the buffer\n"
+"        self.buffer = Gtk.TextBuffer()\n"
+"        textview = Gtk.TextView(buffer=self.buffer)\n"
+"        textview.set_wrap_mode(Gtk.WrapMode.WORD)\n"
+"        \n"
+"        # a scrolled window for the textview\n"
+"        self.scrolled_window = Gtk.ScrolledWindow()\n"
+"        self.scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)\n"
+"        self.scrolled_window.add(textview)\n"
+"        self.scrolled_window.set_border_width(5)\n"
+"        \n"
+"        # add the scrolled window to the window\n"
+"        self.add(self.scrolled_window)\n"
+"\n"
+"    # callback for new\n"
+"    def new_callback(self, action, parameter):\n"
+"        self.buffer.set_text(\"\")\n"
+"        print \"New file created\"\n"
+"        \n"
+"    # callback for open\n"
+"    def open_callback(self, action, parameter):\n"
+"        # create a filechooserdialog to open: \n"
+"        # the arguments are: title of the window, parent_window, action, (buttons, response)\n"
+"        open_dialog = Gtk.FileChooserDialog (\"Pick a file\", self,\n"
+"                                             Gtk.FileChooserAction.OPEN, \n"
+"                                             (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, \n"
+"                                             Gtk.STOCK_OPEN, Gtk.ResponseType.ACCEPT))\n"
+"        \n"
+"        # not only local files can be selected in the file selector\n"
+"        open_dialog.set_local_only(False)\n"
+"        # dialog always on top of the textview window\n"
+"        open_dialog.set_modal(True)\n"
+"        # connect the dialog with the callback function open_response_cb()\n"
+"        open_dialog.connect(\"response\", self.open_response_cb)\n"
+"        # show the dialog\n"
+"        open_dialog.show()\n"
+"\n"
+"    # callback function for the dialog open_dialog\n"
+"    def open_response_cb(self, dialog, response_id):\n"
+"        open_dialog = dialog\n"
+"        # if response is \"ACCEPT\" (the button \"Open\" has been clicked)\n"
+"        if response_id == Gtk.ResponseType.ACCEPT:\n"
+"            # self.file is the file that we get from the FileChooserDialog\n"
+"            self.file = open_dialog.get_file()\n"
+"            # an empty string (provisionally)\n"
+"            content = \"\"\n"
+"            try:\n"
+"                # load the content of the file into memory:\n"
+"                # success is a boolean depending on the success of the operation\n"
+"                # content is self-explanatory\n"
+"                # etags is an entity tag (can be used to quickly determine if the\n"
+"                # file has been modified from the version on the file system)\n"
+"                [success, content, etags] = self.file.load_contents(None)\n"
+"            except GObject.GError as e:\n"
+"                print \"Error: \" + e.message\n"
+"            # set the content as the text into the buffer\n"
+"            self.buffer.set_text(content, len(content))\n"
+"            print \"opened: \" + open_dialog.get_filename()\n"
+"        # if response is \"CANCEL\" (the button \"Cancel\" has been clicked)\n"
+"        elif response_id == Gtk.ResponseType.CANCEL:\n"
+"            print \"cancelled: FileChooserAction.OPEN\"\n"
+"        # destroy the FileChooserDialog\n"
+"        dialog.destroy()\n"
+"\n"
+"    # callback function for save_as\n"
+"    def save_as_callback(self, action, parameter):\n"
+"        # create a filechooserdialog to save: \n"
+"        # the arguments are: title of the window, parent_window, action, (buttons, response)\n"
+"        save_dialog = Gtk.FileChooserDialog (\"Pick a file\", self,\n"
+"                                             Gtk.FileChooserAction.SAVE, \n"
+"                                             (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, \n"
+"                                             Gtk.STOCK_SAVE, Gtk.ResponseType.ACCEPT))\n"
+"        # the dialog will present a confirmation dialog if the user types a file name that\n"
+"        # already exists\n"
+"        save_dialog.set_do_overwrite_confirmation(True)\n"
+"        # dialog always on top of the textview window\n"
+"        save_dialog.set_modal(True)\n"
+"        # if self.file has already been saved\n"
+"        if self.file is not None:\n"
+"            try:\n"
+"                # set self.file as the current filename for the file chooser\n"
+"                save_dialog.set_file(self.file)\n"
+"            except GObject.GError as e:\n"
+"                print \"Error: \" + e.message\n"
+"        # connect the dialog to the callback function save_response_cb()\n"
+"        save_dialog.connect(\"response\", self.save_response_cb)\n"
+"        # show the dialog\n"
+"        save_dialog.show()\n"
+"        \n"
+"    # callback function for the dialog save_dialog\n"
+"    def save_response_cb(self, dialog, response_id):\n"
+"        save_dialog = dialog\n"
+"        # if response is \"ACCEPT\" (the button \"Save\" has been clicked)\n"
+"        if response_id == Gtk.ResponseType.ACCEPT:\n"
+"            # self.file is the currently selected file\n"
+"            self.file = save_dialog.get_file()\n"
+"            # save to file (see below)\n"
+"            self.save_to_file()\n"
+"        # if response is \"CANCEL\" (the button \"Cancel\" has been clicked)\n"
+"        elif response_id == Gtk.ResponseType.CANCEL:\n"
+"            print \"cancelled: FileChooserAction.SAVE\"\n"
+"        # destroy the FileChooserDialog\n"
+"        dialog.destroy()\n"
+"        \n"
+"    # callback function for save    \n"
+"    def save_callback(self, action, parameter):\n"
+"        # if self.file is not already there\n"
+"        if self.file is not None:\n"
+"            self.save_to_file()\n"
+"        # self.file is a new file\n"
+"        else:\n"
+"            # use save_as\n"
+"            self.save_as_callback(action, parameter)\n"
+"\n"
+"    # save_to_file\n"
+"    def save_to_file(self):\n"
+"        # get the content of the buffer, without hidden characters\n"
+"        [start, end] = self.buffer.get_bounds()\n"
+"        current_contents = self.buffer.get_text(start, end, False)\n"
+"        # if there is some content\n"
+"        if current_contents != \"\":\n"
+"            # set the content as content of self.file.\n"
+"            # arguments: contents, etags, make_backup, flags, GError\n"
+"            try:\n"
+"                self.file.replace_contents(current_contents,\n"
+"                                           None,\n"
+"                                           False,\n"
+"                                           Gio.FileCreateFlags.NONE,\n"
+"                                           None)\n"
+"                print \"saved: \" + self.file.get_path()\n"
+"            except GObject.GError as e:\n"
+"                print \"Error: \" + e.message\n"
+"        # if the contents are empty\n"
+"        else:\n"
+"            # create (if the file does not exist) or overwrite the file in readwrite mode.\n"
+"            # arguments: etags, make_backup, flags, GError \n"
+"            try:\n"
+"                self.file.replace_readwrite(None,\n"
+"                                            False,\n"
+"                                            Gio.FileCreateFlags.NONE, \n"
+"                                            None)\n"
+"                print \"saved: \" + self.file.get_path()\n"
+"            except GObject.GError as e:\n"
+"                print \"Error: \" + e.message\n"
+"        \n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"        # app action quit, connected to the callback function\n"
+"        quit_action = Gio.SimpleAction.new(\"quit\", None)\n"
+"        quit_action.connect(\"activate\", self.quit_callback)\n"
+"        self.add_action(quit_action)\n"
+"\n"
+"        # get the menu from the ui file with a builder\n"
+"        builder = Gtk.Builder()\n"
+"        try:\n"
+"            builder.add_from_file(\"filechooserdialog.ui\")\n"
+"        except:\n"
+"            print \"file not found\"\n"
+"            sys.exit()\n"
+"        menu = builder.get_object(\"appmenu\")\n"
+"        self.set_app_menu(menu)\n"
+"        \n"
+"    # callback function for quit\n"
+"    def quit_callback(self, action, parameter):\n"
+"        self.quit()\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/filechooserdialog.py.page:56(section/title)
+msgid "Useful methods for a FileChooserDialog"
+msgstr ""
+
+#: C/filechooserdialog.py.page:57(section/p)
+msgid ""
+"Note that the action of the FileChooserDialog can be one of the following: "
+"<code>Gtk.FileChooserAction.OPEN</code> (the file chooser will only let the "
+"user pick an existing file) <code>Gtk.FileChooserAction.SAVE</code> (the "
+"file chooser will let the user pick an existing file, or type in a new "
+"filename), <code>Gtk.FileChooserAction.SELECT_FOLDER</code> (the file "
+"chooser will let the user pick an existing folder), <code>Gtk."
+"FileChooserAction.CREATE_FOLDER</code> (the file chooser will let the user "
+"name an existing or new folder)."
+msgstr ""
+
+#: C/filechooserdialog.py.page:58(section/p)
+msgid "Besides the methods used in the <link xref=\"#code\"/>, we have:"
+msgstr ""
+
+#: C/filechooserdialog.py.page:60(item/p)
+msgid ""
+"<code>set_show_hidden(True)</code> is used to display hidden files and "
+"folders."
+msgstr ""
+
+#: C/filechooserdialog.py.page:61(item/p)
+msgid ""
+"<code>set_select_multiple(True)</code> sets that multiple files can be "
+"selected. This is only relevant if the mode is <code>Gtk.FileChooserAction."
+"OPEN</code> or <code>Gtk.FileChooserAction.SELECT_FOLDER</code>."
+msgstr ""
+
+#: C/filechooserdialog.py.page:62(item/p)
+msgid ""
+"In a \"Save as\" dialog, <code>set_current_name(current_name)</code> sets "
+"<code>current_name</code> in the file selector, as if entered by the user; "
+"<code>current_name</code> can be something like <em>Untitled.txt</em>. This "
+"method should not be used except in a \"Save as\" dialog."
+msgstr ""
+
+#: C/filechooserdialog.py.page:63(item/p)
+msgid ""
+"The default current folder is \"recent items\". To set another folder use "
+"<code>set_current_folder_uri(uri)</code>; but note you should use this "
+"method and cause the file chooser to show a specific folder only when you "
+"are doing a \"Save as\" command and you already have a file saved somewhere."
+msgstr ""
+
+#: C/filechooserdialog.py.page:71(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkFileChooserDialog.html";
+"\">GtkFileChooserDialog</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/filechooserdialog.py.page:72(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkFileChooser.html";
+"\">GtkFileChooser</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/filechooserdialog.py.page:73(item/p) C/image.c.page:33(item/p)
+#: C/label.c.page:37(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkWindow.html";
+"\">GtkWindow</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/filechooserdialog.py.page:74(item/p) C/textview.c.page:38(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkTextView.html";
+"\">GtkTextView</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/filechooserdialog.py.page:75(item/p) C/textview.c.page:37(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkTextBuffer.html";
+"\">GtkTextBuffer</link>"
+msgstr ""
+
+#: C/filechooserdialog.py.page:76(item/p) C/textview.c.page:39(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkScrolledWindow.html";
+"\">GtkScrolledWindow</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/filechooserdialog.py.page:77(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gio/stable/GFile.html\";>GFile</link>"
+msgstr ""
+
+#: C/filechooserdialog.py.page:79(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkBuilder.html";
+"\">GtkBuilder</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/filechooserdialog.vala.page:7(info/title)
+#, fuzzy
+#| msgid "MessageDialog"
+msgctxt "text"
+msgid "FileChooserDialog (Vala)"
+msgstr "MessageDialog"
+
+#: C/filechooserdialog.vala.page:20(info/desc)
+msgid "A dialog suitable for \"Open\" and \"Save\" commands."
+msgstr ""
+
+#: C/filechooserdialog.vala.page:25(section/title)
+msgid "Overview of the example"
+msgstr ""
+
+#: C/filechooserdialog.vala.page:26(section/p)
+msgid ""
+"This example demonstrates how the FileChooserDialog can be used. It is "
+"incorporated into a very simple text editor application. All the <link xref="
+"\"menubar.vala#win-app\">actions</link>, including the \"open\", \"save\" "
+"and \"save-as\" commands can be found in the <link xref=\"gmenu.vala\">app-"
+"menu</link>. Here, the app-menu is created using an XML UI file, which is "
+"then imported into the application using Gtk.Builder."
+msgstr ""
+
+#: C/filechooserdialog.vala.page:28(section/title)
+msgid "XML UI file which creates the app-menu"
+msgstr ""
+
+#: C/filechooserdialog.vala.page:31(section/title)
+#, fuzzy
+#| msgid "Sample Vala code"
+msgid "Vala Code"
+msgstr "Exemplo de código en Vala"
+
+#: C/filechooserdialog.vala.page:32(section/code)
+#, no-wrap
+msgid ""
+"class MyWindow: Gtk.ApplicationWindow {\n"
+"\n"
+"\t/* MyWindow instance variables. */\n"
+"\tGLib.File? file;\n"
+"\tGtk.TextBuffer buffer;\n"
+"\tGtk.TextView textview;\n"
+"\tGtk.ScrolledWindow scrolled_window;\n"
+"\n"
+"\t/* Create ActionEntries. */\n"
+"\tconst ActionEntry[] actions = {\n"
+"\t\t{ \"new\", new_cb },\n"
+"\t\t{ \"open\", open_cb },\n"
+"\t\t{ \"save\", save_cb },\n"
+"\t\t{ \"save-as\", save_as_cb }\n"
+"\t};\n"
+"\n"
+"\t/* Constructor creates MyWindow, and add the scrolled_window. */\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"FileChooserDialog Example\");\n"
+"\t\tthis.set_default_size (400, 400);\n"
+"\n"
+"\t\t/* Add the ActionEntries to MyWindow. */\n"
+"\t\tthis.add_action_entries (actions, this);\n"
+"\n"
+"\t\tbuffer = new Gtk.TextBuffer (null); //stores text to be displayed\n"
+"\t\ttextview = new Gtk.TextView.with_buffer (buffer); //displays TextBuffer\n"
+"\t\ttextview.set_wrap_mode (Gtk.WrapMode.WORD); //sets line wrapping\n"
+"\n"
+"\t\tscrolled_window = new Gtk.ScrolledWindow (null, null);\n"
+"\t\tscrolled_window.set_policy (Gtk.PolicyType.AUTOMATIC,\n"
+"\t\t                            Gtk.PolicyType.AUTOMATIC);\n"
+"\n"
+"\t\tscrolled_window.add (textview);\n"
+"\t\tscrolled_window.set_border_width (5);\n"
+"\n"
+"        this.add (scrolled_window);\n"
+"\t\tthis.show_all ();\n"
+"\t}\n"
+"\n"
+"\tvoid new_cb (SimpleAction action, Variant? parameter) {\n"
+"\t\tfile = null;\n"
+"\t\tbuffer.set_text (\"\");\n"
+"\t\tprint (\"New file created\\n\");\n"
+"\t}\n"
+"\n"
+"\t/* Create FileChooserDialog in OPEN mode. */\n"
+"\tvoid open_cb (SimpleAction action, Variant? parameter) {\n"
+"\n"
+"\t\tvar open_dialog = new Gtk.FileChooserDialog (\"Pick a file\",\n"
+"\t\t                                             this as Gtk.Window,\n"
+"\t\t                                             Gtk.FileChooserAction.OPEN,\n"
+"\t\t                                             Gtk.Stock.CANCEL,\n"
+"\t\t                                             Gtk.ResponseType.CANCEL,\n"
+"\t\t                                             Gtk.Stock.OPEN,\n"
+"\t\t                                             Gtk.ResponseType.ACCEPT);\n"
+"\n"
+"\t\topen_dialog.local_only = false; //allow for uri\n"
+"\t\topen_dialog.set_modal (true);\n"
+"\t\topen_dialog.response.connect (open_response_cb);\n"
+"\t\topen_dialog.show ();\n"
+"\t}\n"
+"\n"
+"\t/* Either open the file and load the file contents or cancel. */\n"
+"\tvoid open_response_cb (Gtk.Dialog dialog, int response_id) {\n"
+"\t\tvar open_dialog = dialog as Gtk.FileChooserDialog;\n"
+"\n"
+"\t\tswitch (response_id) {\n"
+"\t\t\tcase Gtk.ResponseType.ACCEPT: //open the file\n"
+"\t\t\t\tfile = open_dialog.get_file();\n"
+"\n"
+"\t\t\t\tuint8[] file_contents;\n"
+"\n"
+"\t\t\t\ttry {\n"
+"\t\t\t\t\tfile.load_contents (null, out file_contents, null);\n"
+"\t\t\t\t}\n"
+"\t\t\t\tcatch (GLib.Error err) { //handle the exception\n"
+"\t\t\t\t\terror (\"%s\\n\", err.message);\n"
+"\t\t\t\t}\n"
+"\t\t\t\t/* Set the buffer text to be the contents of the file. */\n"
+"\t\t\t\tbuffer.set_text ((string) file_contents,\n"
+"\t\t\t\t                 file_contents.length);\n"
+"\n"
+"\t\t\t\tprint (\"opened: %s\\n\", (open_dialog.get_filename ()));\n"
+"\t\t\t\tbreak;\n"
+"\n"
+"\t\t\tcase Gtk.ResponseType.CANCEL:\n"
+"\t\t\t\tprint (\"cancelled: FileChooserAction.OPEN\\n\");\n"
+"\t\t\t\tbreak;\n"
+"\t\t}\n"
+"\t\tdialog.destroy ();\n"
+"\t}\n"
+"\n"
+"\n"
+"\t/* Create FileChooserDialog in SAVE mode. */\n"
+"\tvoid save_as_cb (SimpleAction action, Variant? parameter) {\n"
+"\t\tvar save_dialog = new Gtk.FileChooserDialog (\"Pick a file\",\n"
+"\t\t                                             this as Gtk.Window,\n"
+"\t\t                                             Gtk.FileChooserAction.SAVE,\n"
+"\t\t                                             Gtk.Stock.CANCEL,\n"
+"\t\t                                             Gtk.ResponseType.CANCEL,\n"
+"\t\t                                             Gtk.Stock.SAVE,\n"
+"\t\t                                             Gtk.ResponseType.ACCEPT);\n"
+"\n"
+"\t\tsave_dialog.set_do_overwrite_confirmation (true);\n"
+"\t\tsave_dialog.set_modal (true);\n"
+"\t\tif (file != null) {\n"
+"\t\t\ttry {\n"
+"\t\t\t\t(save_dialog as Gtk.FileChooser).set_file (file);\n"
+"\t\t\t}\n"
+"\t\t\tcatch (GLib.Error error) {\n"
+"\t\t\t\tprint (\"%s\\n\", error.message);\n"
+"\t\t\t}\n"
+"\t\t}\n"
+"\t\tsave_dialog.response.connect (save_as_response_cb);\n"
+"\t\tsave_dialog.show ();\n"
+"\t}\n"
+"\n"
+"\tvoid save_as_response_cb (Gtk.Dialog dialog, int response_id) {\n"
+"\t\tvar save_dialog = dialog as Gtk.FileChooserDialog;\n"
+"\n"
+"\t\tswitch (response_id) {\n"
+"\t\t\tcase Gtk.ResponseType.ACCEPT:\n"
+"\t\t\t\tfile = save_dialog.get_file();\n"
+"\t\t\t\tthis.save_to_file ();\n"
+"\t\t\t\tbreak;\n"
+"\t\t\tdefault:\n"
+"\t\t\t\tbreak;\n"
+"\t\t}\n"
+"\t\t\tdialog.destroy ();\n"
+"\t}\n"
+"\n"
+"\t/* Save the existing contents to the file.\n"
+"\t * If file does not exist, call save_as_cb.\n"
+"\t */\n"
+"\tvoid save_cb (SimpleAction action, Variant? parameter) {\n"
+"\t\tif (file != null) {\n"
+"\t\t\tthis.save_to_file ();\n"
+"\t\t}\n"
+"\t\telse {\n"
+"\t\t\tsave_as_cb (action, parameter);\n"
+"\t\t}\n"
+"\t}\n"
+"\n"
+"\tvoid save_to_file (){\n"
+"\t\tGtk.TextIter start;\n"
+"\t\tGtk.TextIter end;\n"
+"\n"
+"\t\tbuffer.get_bounds (out start, out end);\n"
+"\t\tstring current_contents = buffer.get_text (start, end, false);\n"
+"\t\ttry {\n"
+"\t\t\t\tfile.replace_contents (current_contents.data, null, false,\n"
+"\t\t\t\t                       GLib.FileCreateFlags.NONE, null, null);\n"
+"\n"
+"\t\t\t\tprint (\"saved: %s\\n\", file.get_path ());\n"
+"\t\t}\n"
+"\t\tcatch (GLib.Error err) {\n"
+"\t\t\terror (\"%s\\n\", err.message);\n"
+"\t\t}\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* This is the application */\n"
+"class MyApplication: Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\t\tnew MyWindow (this).show_all;\n"
+"\t}\n"
+"\n"
+"\tconst ActionEntry[] actions = {\n"
+"\t\t{ \"quit\", quit_cb }\n"
+"\t};\n"
+"\n"
+"\tvoid quit_cb (SimpleAction action, Variant? parameter) {\n"
+"\t\tthis.quit ();\n"
+"\t}\n"
+"\n"
+"\tprotected override void startup () {\n"
+"\t\tbase.startup ();\n"
+"\n"
+"\t\t/* Setup actions */\n"
+"\t\tthis.add_action_entries (actions, this);\n"
+"\n"
+"\t\t/* Setup menus */\n"
+"\t\tvar builder = new Gtk.Builder ();\n"
+"\t\ttry {\n"
+"\t\t\tbuilder.add_from_file (\"filechooserdialog.ui\");\n"
+"\t\t} catch (GLib.Error err) {\n"
+"\t\t\terror (\"Unable to load file: %s\\n\", err.message);\n"
+"\t\t}\n"
+"\t\tthis.app_menu = builder.get_object (\"appmenu\") as MenuModel;\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main creates and runs the application. */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
+
+#: C/filechooserdialog.vala.page:34(section/title)
+#: C/menubar.vala.page:186(section/title)
+#, fuzzy
+#| msgid "Reference Implementation"
+msgid "Relevant API documentation"
+msgstr "Implementación de referencia"
+
+#: C/filechooserdialog.vala.page:39(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://valadoc.org/gtk+-3.0/Gtk.FileChooser.html\";>FileChooser</"
+"link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/filechooserdialog.vala.page:40(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://valadoc.org/gtk+-3.0/Gtk.FileChooserDialog.html";
+"\">FileChooserDialog</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/filechooserdialog.vala.page:41(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://valadoc.org/gtk+-3.0/Gtk.Builder.html\";>Gtk.Builder</"
+"link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/filechooserdialog.vala.page:42(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://valadoc.org/gio-2.0/GLib.ActionEntry.html\";>GLib."
+"ActionEntry</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/fontchooserwidget.py.page:23(media)
+#, fuzzy
+#| msgid "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
+msgctxt "_"
+msgid ""
+"external ref='media/fontchooserwidget.png' "
+"md5='9161245e307b432ae1313e9a9941edae'"
+msgstr "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
+
+#: C/fontchooserwidget.py.page:7(info/title)
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "FontChooserWidget (Python)"
+msgstr "Python"
+
+#: C/fontchooserwidget.py.page:18(info/desc)
+msgid "A widget to choose a font"
+msgstr ""
+
+#: C/fontchooserwidget.py.page:21(page/title)
+msgid "FontChooserWidget"
+msgstr ""
+
+#: C/fontchooserwidget.py.page:24(page/p)
+msgid "A FontChooserWidget with a callback function."
+msgstr ""
+
+#: C/fontchooserwidget.py.page:30(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"FontChooserWidget\", application=app)\n"
+"\n"
+"        # a font chooser\n"
+"        self.font_chooser = Gtk.FontChooserWidget()\n"
+"        # a default font\n"
+"        self.font_chooser.set_font(\"Sans\")\n"
+"        # a text to preview the font\n"
+"        self.font_chooser.set_preview_text(\"This is an example of preview text!\")\n"
+"\n"
+"        # connect signal from the font chooser to the callback function\n"
+"        self.font_chooser.connect(\"notify::font\", self.font_cb)\n"
+"\n"
+"        # add the font chooser to the window\n"
+"        self.add(self.font_chooser)\n"
+"\n"
+"    # callback function:\n"
+"    def font_cb(self, event, user_data):\n"
+"        # print in the terminal\n"
+"        print \"You chose the font \" + self.font_chooser.get_font()\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/fontchooserwidget.py.page:33(section/title)
+msgid "Useful methods for a FontChooserWidget"
+msgstr ""
+
+#: C/fontchooserwidget.py.page:36(item/p)
+msgid ""
+"To set the font which is initially selected, use <code>set_font(font)</code> "
+"(where <code>font</code> is the font name) or <code>set_font_desc(font)</"
+"code> (where <code>font</code> is the PangoFontDescription)."
+msgstr ""
+
+#: C/fontchooserwidget.py.page:37(item/p)
+msgid ""
+"To get the selected font use <code>get_font()</code> or <code>get_font_desc()"
+"</code>."
+msgstr ""
+
+#: C/fontchooserwidget.py.page:38(item/p)
+msgid ""
+"To change the text which is shown in the preview area, use "
+"<code>set_preview_text()</code>."
+msgstr ""
+
+#: C/fontchooserwidget.py.page:45(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkFontChooserWidget.";
+"html\">GtkFontChooserWidget</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/getting-ready.page:39(media)
+#, fuzzy
+#| msgid "@@image: 'media/ubuntu.png'; md5=40845e4a40b335b1958da1403f01c13f"
+msgctxt "_"
+msgid "external ref='media/ubuntu.png' md5='40845e4a40b335b1958da1403f01c13f'"
+msgstr "@@image: 'media/ubuntu.png'; md5=40845e4a40b335b1958da1403f01c13f"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/getting-ready.page:44(media)
+#, fuzzy
+#| msgid "@@image: 'media/fedora.png'; md5=19add55f4349fd9e90f3a50b344ba626"
+msgctxt "_"
+msgid "external ref='media/fedora.png' md5='19add55f4349fd9e90f3a50b344ba626'"
+msgstr "@@image: 'media/fedora.png'; md5=19add55f4349fd9e90f3a50b344ba626"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/getting-ready.page:49(media)
+#, fuzzy
+#| msgid "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
+msgctxt "_"
+msgid ""
+"external ref='media/opensuse.png' md5='a852a94199328e2f978c7f6a55bf8b54'"
+msgstr "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
+
+#: C/getting-ready.page:6(info/title)
+#, fuzzy
+#| msgid "Install GNOME development tools"
+msgctxt "link"
+msgid "Install GNOME development tools"
+msgstr "Instalar as ferramentas de desenvolvemento de GNOME"
+
+#: C/getting-ready.page:16(page/title)
+msgid "Getting ready for GNOME development"
+msgstr "Prepárese para desenvolver en GNOME"
+
+#: C/getting-ready.page:19(section/title)
+msgid "Install the required tools"
+msgstr "Instalar as ferramentas necesarias"
+
+#: C/getting-ready.page:20(section/p)
+msgid ""
+"Before you can start coding you will have to install the required tools for "
+"GNOME development on your computer. This shouldn't take you more than ten "
+"minutes."
+msgstr ""
+"Antes de comezar a escribir código debe instalar as ferramentas requiridas "
+"para o desenvolvemento de GNOME no seu computador. Isto non debería levar "
+"máis de 10 minutos."
+
+#: C/getting-ready.page:25(section/title)
+msgid "Automatic installation"
+msgstr "Instalación automática"
+
+#: C/getting-ready.page:26(section/p)
+#, fuzzy
+#| msgid ""
+#| "On an up-to-date distribution you should be able to simply install the "
+#| "required packages by clicking on <link href=\"gnome-devtools.catalog"
+#| "\">Install now</link>."
+msgid ""
+"On an up-to-date distribution you should be able to simply install the "
+"required packages by clicking on <link href=\"media/gnome-devtools.catalog"
+"\">Install now</link>."
+msgstr ""
+"Nunha distribución anovada debería poder instalar de forma sinxela os "
+"paquetes requiridos premendo en <link href=\"gnome-devtools.catalog"
+"\">Instalar agora</link>."
+
+#: C/getting-ready.page:31(section/title)
+msgid "Manual installation"
+msgstr "Instalación manual"
+
+#: C/getting-ready.page:32(section/p)
+msgid ""
+"If you prefer manual installation you can find the instructions for the "
+"various distributions in the <link href=\"http://live.gnome.org/";
+"DeveloperTools/Installation\">GNOME wiki</link>. Click on the image to go "
+"directly to the installation page for your distribution:"
+msgstr ""
+"Se prefire a instalación manual pode atopar as instrucións para varias "
+"distribucións no <link href=\"http://live.gnome.org/DeveloperTools/";
+"Installation\">wiki de GNOME</link>. Prema sobre a imaxe para ir diretamente "
+"á páxina de instalación da súa distribución:"
+
+#: C/getting-ready.page:37(item/p)
+msgid ""
+"<link href=\"http://live.gnome.org/DeveloperTools/Installation/Ubuntu\";> "
+"<media type=\"image\" mime=\"image/png\" src=\"media/ubuntu.png\">Ubuntu</"
+"media> </link>"
+msgstr ""
+
+#: C/getting-ready.page:42(item/p)
+msgid ""
+"<link href=\"http://live.gnome.org/DeveloperTools/Installation/Fedora\";> "
+"<media type=\"image\" mime=\"image/png\" src=\"media/fedora.png\">Fedora</"
+"media> </link>"
+msgstr ""
+
+#: C/getting-ready.page:47(item/p)
+msgid ""
+"<link href=\"http://live.gnome.org/DeveloperTools/Installation/OpenSuSE\";> "
+"<media type=\"image\" mime=\"image/png\" src=\"media/opensuse.png"
+"\">OpenSuSE</media> </link>"
+msgstr ""
+
+#: C/getting-ready.page:52(item/p)
+msgid ""
+"<link href=\"http://live.gnome.org/DeveloperTools/Installation\";>Others</"
+"link>"
+msgstr ""
+
+#: C/getting-ready.page:59(section/title)
+msgid "Required versions"
+msgstr "Versiones necesarias"
+
+#: C/getting-ready.page:60(section/p)
+msgid ""
+"The guides assume that you have at least the following versions of the tools "
+"installed:"
+msgstr ""
+"As guías asumen que ten instaladas, cando menos, as seguintes versións das "
+"ferramentas."
+
+#: C/getting-ready.page:63(item/p)
+msgid "Anjuta - 3.0"
+msgstr "Anjuta - 3.0"
+
+#: C/getting-ready.page:64(item/p)
+msgid "Devhelp - 3.0"
+msgstr "Devhelp - 3.0"
+
+#: C/getting-ready.page:65(item/p)
+msgid "Glade - 3.10"
+msgstr "Glade - 3.10"
+
+#: C/getting-ready.page:67(section/p)
+msgid ""
+"Of course, any newer version will also work. Now, we wish you a lot of fun "
+"with the <link xref=\"index\">Demos</link>."
+msgstr ""
+"Por suposto, calquera versión máis moderna tamén funcionará. Agora desexamos "
+"que goce coas <link xref=\"index\">demostracións</link>."
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/gmenu.c.page:21(media)
+#, fuzzy
+#| msgid "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
+msgctxt "_"
+msgid "external ref='media/gmenu.c.png' md5='f305fc3cae8d16d72b734ee53b559e33'"
+msgstr "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
+
+#: C/gmenu.c.page:7(info/title)
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "GMenu (C)"
+msgstr "Python"
+
+#: C/gmenu.c.page:17(info/desc) C/gmenu.js.page:17(info/desc)
+#: C/gmenu.vala.page:23(info/desc)
+msgid "A simple implementation of GMenuModel"
+msgstr ""
+
+#: C/gmenu.c.page:20(page/title) C/gmenu.js.page:20(page/title)
+#: C/gmenu.py.page:26(page/title) C/gmenu.vala.page:26(page/title)
+msgid "GMenu"
+msgstr ""
+
+#: C/gmenu.c.page:22(page/p) C/gmenu.js.page:22(page/p)
+#: C/gmenu.py.page:28(page/p) C/gmenu.vala.page:34(page/p)
+msgid "A GtkApplication with a simple GMenu and SimpleActions"
+msgstr ""
+
+#: C/gmenu.c.page:25(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"static void\n"
+"new_window (GSimpleAction *action,\n"
+"            GVariant      *parameter,\n"
+"            gpointer       user_data)\n"
+"{\n"
+"  g_print (\"This does nothing. It is only a demonstration.\\n\");\n"
+"}\n"
+"\n"
+"static void\n"
+"quit (GSimpleAction *action,\n"
+"      GVariant      *parameter,\n"
+"      gpointer       user_data)\n"
+"{\n"
+"  GApplication *application = user_data;\n"
+"\n"
+"  g_application_quit (application);\n"
+"}\n"
+"\n"
+"static void\n"
+"startup (GtkApplication *application,\n"
+"         gpointer        user_data)\n"
+"{\n"
+"  static const GActionEntry actions[] = {\n"
+"    { \"new\", new_window },\n"
+"    { \"quit\", quit }\n"
+"  };\n"
+"\n"
+"  GMenu *menu;\n"
+"\n"
+"  g_action_map_add_action_entries (G_ACTION_MAP (application), actions, G_N_ELEMENTS (actions), 
application);\n"
+"\n"
+"  menu = g_menu_new ();\n"
+"  g_menu_append (menu, \"New\", \"app.new\");\n"
+"  g_menu_append (menu, \"Quit\", \"app.quit\");\n"
+"  gtk_application_set_app_menu (application, G_MENU_MODEL (menu));\n"
+"  g_object_unref (menu);\n"
+"}\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"\n"
+"  window = gtk_application_window_new (app);\n"
+"\n"
+"  gtk_window_set_application (GTK_WINDOW (window), GTK_APPLICATION (app));\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Hello GNOME\");\n"
+"\n"
+"  gtk_widget_show_all (GTK_WIDGET (window));\n"
+"}\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\",G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"startup\", G_CALLBACK (startup), NULL);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"  return status;\n"
+"}\n"
+msgstr ""
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/gmenu.js.page:21(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
+msgctxt "_"
+msgid ""
+"external ref='media/gmenu.js.png' md5='16b8bee122197771ec8498dac42f196b'"
+msgstr ""
+"@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
+
+#: C/gmenu.js.page:7(info/title)
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "GMenu (JavaScript)"
+msgstr "JavaScript"
+
+#: C/gmenu.js.page:24(page/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const Application = new Lang.Class ({\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.myapp',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"       //connect to 'activate' and 'startup' signals to the callback functions\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"       this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    //create the UI (in this case it's just the ApplicationWindow\n"
+"    _buildUI: function() {\n"
+"        this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"Welcome to GNOME\" });\n"
+"\n"
+"        //uncommenting the line below will change the window size\n"
+"        //this._window.set_default_size(600, 400);\n"
+"\n"
+"        //show the window and all child widgets (none in this case)\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"    _showNew: function() {\n"
+"    print (\"This doesn't do anything. It is only a demonstration.\");\n"
+"    },\n"
+"\n"
+"    _showAbout: function() {\n"
+"        print (\"No AboutDialog here.  This is only a demonstration.\");\n"
+"    },\n"
+"\n"
+"    //create the menu items and connect the signals to the callback functions.\n"
+"    _initMenus: function() {\n"
+"        let menu = new Gio.Menu();\n"
+"        menu.append(\"New\",'app.new');\n"
+"        menu.append(\"About\", 'app.about');\n"
+"        menu.append(\"Quit\",'app.quit');\n"
+"        this.application.set_app_menu(menu);\n"
+"\n"
+"        let newAction = new Gio.SimpleAction ({ name: 'new' });\n"
+"        newAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showNew();\n"
+"            }));\n"
+"        this.application.add_action(newAction);\n"
+"\n"
+"        let aboutAction = new Gio.SimpleAction ({ name: 'about' });\n"
+"        aboutAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showAbout();\n"
+"            }));\n"
+"        this.application.add_action(aboutAction);\n"
+"\n"
+"        let quitAction = new Gio.SimpleAction ({ name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"         this.application.add_action(quitAction);\n"
+"    },\n"
+"\n"
+"    //callback function for 'activate' signal\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    //callback function for 'startup' signal\n"
+"    _onStartup: function() {\n"
+"        //You must call _initMenus() before calling _buildUI().\n"
+"        this._initMenus();\n"
+"        this._buildUI();\n"
+"    }\n"
+"});\n"
+"\n"
+"//run the application\n"
+"let app = new Application ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/gmenu.py.page:27(media)
+#, fuzzy
+#| msgid "@@image: 'media/fedora.png'; md5=19add55f4349fd9e90f3a50b344ba626"
+msgctxt "_"
+msgid ""
+"external ref='media/gmenu.py.png' md5='52c68b34d5d566f37e9f803dedb6353a'"
+msgstr "@@image: 'media/fedora.png'; md5=19add55f4349fd9e90f3a50b344ba626"
+
+#: C/gmenu.py.page:7(info/title)
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "GMenu (Python)"
+msgstr "Python"
+
+#: C/gmenu.py.page:23(info/desc)
+msgid "A simple implementation of GMenu"
+msgstr ""
+
+#: C/gmenu.py.page:35(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    from gi.repository import Gtk\n"
+"from gi.repository import Gio\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"GMenu Example\", application=app)\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup (self):\n"
+"        # start the application\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"        # create a menu\n"
+"        menu = Gio.Menu()\n"
+"        # append to the menu three options\n"
+"        menu.append(\"New\", \"app.new\")\n"
+"        menu.append(\"About\", \"app.about\")\n"
+"        menu.append(\"Quit\", \"app.quit\")\n"
+"        # set the menu as menu of the application\n"
+"        self.set_app_menu(menu)\n"
+"\n"
+"        # create an action for the option \"new\" of the menu\n"
+"        new_action = Gio.SimpleAction.new(\"new\", None)\n"
+"        # connect it to the callback function new_cb\n"
+"        new_action.connect(\"activate\", self.new_cb)\n"
+"        # add the action to the application\n"
+"        self.add_action(new_action)\n"
+"\n"
+"        # option \"about\"\n"
+"        about_action = Gio.SimpleAction.new(\"about\", None)\n"
+"        about_action.connect(\"activate\", self.about_cb)\n"
+"        self.add_action(about_action)\n"
+"\n"
+"        # option \"quit\"\n"
+"        quit_action = Gio.SimpleAction.new(\"quit\", None)\n"
+"        quit_action.connect(\"activate\", self.quit_cb)\n"
+"        self.add_action(quit_action)\n"
+"\n"
+"    # callback function for \"new\"\n"
+"    def new_cb(self, action, parameter):\n"
+"        print \"This does nothing. It is only a demonstration.\"\n"
+"\n"
+"    # callback function for \"about\"\n"
+"    def about_cb(self, action, parameter):\n"
+"        print \"No AboutDialog for you. This is only a demonstration.\"\n"
+"\n"
+"    # callback function for \"quit\"\n"
+"    def quit_cb(self, action, parameter):\n"
+"        print \"You have quit.\"\n"
+"        self.quit()\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/gmenu.py.page:40(section/title)
+msgid "Useful methods for a GSimpleAction and a GMenu"
+msgstr ""
+
+#: C/gmenu.py.page:42(section/p)
+msgid "Useful methods for a GSimpleAction:"
+msgstr ""
+
+#: C/gmenu.py.page:44(item/p)
+msgid ""
+"To create a new action that is <em>stateless</em>, that is, an action that "
+"do not retain or depend on a state given by the action itself, use"
+msgstr ""
+
+#: C/gmenu.py.page:45(item/code)
+#, no-wrap
+msgid ""
+"\n"
+"action = Gio.SimpleAction.new(\"name\", parameter_type)"
+msgstr ""
+
+#: C/gmenu.py.page:47(item/p)
+msgid ""
+"where <code>\"name\"</code> is the name of the action and "
+"<code>parameter_type</code> is the type of the parameters that the action "
+"receives when being activated. This can be <code>None</code>, or <code>GLib."
+"VariantType.new('s')</code> if the parameter is of type <code>str</code>, or "
+"instead of <code>'s'</code> a character as described <link href=\"http://";
+"developer.gnome.org/glib/unstable/glib-GVariantType.html\">here</link>. To "
+"create a new <em>stateful</em> (i.e. not stateless) action, use"
+msgstr ""
+
+#: C/gmenu.py.page:48(item/code)
+#, no-wrap
+msgid ""
+"\n"
+"action = Gio.SimpleAction.new_stateful(\"name\", parameter_type, initial_state)"
+msgstr ""
+
+#: C/gmenu.py.page:50(item/p)
+msgid ""
+"where <code>initial_state</code> is defined as a GVariant - for instance "
+"<code>Glib.Variant.new_string('start')</code>; for a list of possiblities "
+"see <link href=\"http://developer.gnome.org/glib/unstable/glib-GVariant.html";
+"\">here</link>."
+msgstr ""
+
+#: C/gmenu.py.page:51(item/p)
+msgid ""
+"<code>set_enabled(True)</code> sets the action as enabled; an action must be "
+"enabled in order to be activated or in order to have its state changed from "
+"outside callers. This should only be called by the implementor of the "
+"action. Users of the action should not attempt to modify its enabled flag."
+msgstr ""
+
+#: C/gmenu.py.page:52(item/p)
+msgid ""
+"<code>set_state(state)</code>, where <code>state</code> is a GVariant, sets "
+"the state of the action, updating the 'state' property to the given value. "
+"This should only be called by the implementor of the action; users of the "
+"action should instead call <code>change_state(state)</code> (where "
+"<code>state</code> is as above) to request the change."
+msgstr ""
+
+#: C/gmenu.py.page:55(section/p)
+msgid "Useful methods for a GMenu:"
+msgstr ""
+
+#: C/gmenu.py.page:57(item/p)
+msgid ""
+"To insert an item in the menu in position <code>position</code>, use "
+"<code>insert(position, label, detailed_action)</code>, where <code>label</"
+"code> is the label that will appear in the menu and <code>detailed_action</"
+"code> is a string composed of the name of the action to which we prepend the "
+"prefix <code>app.</code>. A more detailed discussion of this can be found in "
+"<link xref=\"menubar.py#win-app\"/>."
+msgstr ""
+
+#: C/gmenu.py.page:58(item/p)
+msgid ""
+"To append or prepend an item in the menu use respectively <code>append"
+"(label, detailed_action)</code> and <code>prepend(label, detailed_action)</"
+"code>."
+msgstr ""
+
+#: C/gmenu.py.page:59(item/p)
+msgid ""
+"Another way of adding items to the menu is to create them as "
+"<code>GMenuItem</code>s and use <code>insert_item(position, item)</code>, "
+"<code>append_item(item)</code>, or <code>prepend_item(item)</code>; so for "
+"instance we might have:"
+msgstr ""
+
+#: C/gmenu.py.page:60(item/code)
+#, no-wrap
+msgid ""
+"\n"
+"about = Gio.MenuItem.new(\"About\", \"app.about\")\n"
+"menu.append_item(about)"
+msgstr ""
+
+#: C/gmenu.py.page:64(item/p)
+msgid ""
+"We can also add a whole subsection in a menu using <code>insert_section"
+"(position, label, section)</code>, <code>append_section(label, section)</"
+"code>, or <code>prepend_section(label, section)</code>, where <code>label</"
+"code> is the title of the subsection."
+msgstr ""
+
+#: C/gmenu.py.page:65(item/p)
+msgid ""
+"To add a submenu that will expand and collapse, use <code>insert_submenu"
+"(position, label, section)</code>, <code>append_submenu(label, section)</"
+"code>, or <code>prepend_submenu(label, section)</code>, where <code>label</"
+"code> is the title of the subsection."
+msgstr ""
+
+#: C/gmenu.py.page:66(item/p)
+msgid "To remove an item from the menu, use <code>remove(postion)</code>."
+msgstr ""
+
+#: C/gmenu.py.page:67(item/p)
+msgid "To set a label for the menu, use <code>set_label(label)</code>."
+msgstr ""
+
+#: C/gmenu.py.page:78(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/glib/unstable/glib-GVariantType.html";
+"\">GVariantType</link>"
+msgstr ""
+
+#: C/gmenu.py.page:79(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/glib/unstable/glib-GVariant.html";
+"\">GVariant</link>"
+msgstr ""
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/gmenu.vala.page:27(media)
+#, fuzzy
+#| msgid "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
+msgctxt "_"
+msgid ""
+"external ref='media/gmenu.vala.png' md5='7a9f381fc3ed5bf8d1c50d2acb095400'"
+msgstr "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
+
+#: C/gmenu.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Scale (Vala)"
+msgctxt "text"
+msgid "GMenu (Vala)"
+msgstr "Scale (Vala)"
+
+#: C/gmenu.vala.page:29(note/p)
+msgid ""
+"<em style=\"strong\">You need to be running Gtk+-3.4 or later for this to "
+"work</em>"
+msgstr ""
+
+#: C/gmenu.vala.page:32(note/p)
+msgid ""
+"This program will not compile with the quit action connected until <link "
+"href=\"https://bugzilla.gnome.org/show_bug.cgi?id=674090\";>Bug #674090</"
+"link> is fixed. Therefore, the problematic line has been commented out."
+msgstr ""
+
+#: C/gmenu.vala.page:36(page/code)
+#, no-wrap
+msgid ""
+"/* A window in the application. */\n"
+"public class Window : Gtk.ApplicationWindow {\n"
+"\n"
+"\t/* Constructor */\n"
+"\tpublic Window (Application app) {\n"
+"\t\tObject (application: app, title: \"Gmenu Example\");\n"
+"\n"
+"\t\tvar about_action = new SimpleAction (\"about\", null);\n"
+"\n"
+"\t\t/* Connect the 'activate' signal to the\n"
+"\t\t * signal handler (aka. callback).\n"
+"\t\t */\n"
+"\t\tabout_action.activate.connect (this.about_cb);\n"
+"\n"
+"\t\t/* Add the action to this window. */\n"
+"\t\tthis.add_action (about_action);\n"
+"\n"
+"\t\tthis.show ();\n"
+"\t}\n"
+"\n"
+"\t/* Signal handler for 'activate' signal of the SimpleAction. */\n"
+"\tvoid about_cb (SimpleAction simple, Variant? parameter) {\n"
+"\t\tprint (\"This does nothing.  It is only a demonstration.\\n\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* This is the Application. */\n"
+"public class Application : Gtk.Application {\n"
+"\n"
+"\t/* Constructor */\n"
+"\tpublic Application () {\n"
+"\t\tObject (application_id: \"org.example.application\");\n"
+"\t}\n"
+"\n"
+"\t/* Override the 'activate' signal of GLib.Application. */\n"
+"\tprotected override void activate () {\n"
+"\n"
+"\t\t/* Create a new window for this application. */\n"
+"\t\tnew Window (this);\n"
+"\t}\n"
+"\n"
+"\t/* Override the 'startup' signal of GLib.Application. */\n"
+"\tprotected override void startup () {\n"
+"\t\tbase.startup ();\n"
+"\n"
+"\t\tvar menu = new Menu ();\n"
+"\t\tmenu.append (\"About\", \"win.about\");\n"
+"\t\tmenu.append (\"Quit\", \"app.quit\");\n"
+"\t\tthis.app_menu = menu;\n"
+"\n"
+"\t\tvar quit_action = new SimpleAction (\"quit\", null);\n"
+"\t\t//quit_action.activate.connect (this.quit);\n"
+"\t\tthis.add_action (quit_action);\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main function creates Application and runs it. */\n"
+"int main (string[] args) {\n"
+"\treturn new Application ().run (args);\n"
+"}\n"
+msgstr ""
+
+#: C/gmenu.vala.page:43(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gio-2.0/GLib.Menu.Menu.html\";>Menu</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/gmenu.vala.page:44(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gio-2.0/GLib.Menu.append.html\";>append</"
+"link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/gmenu.vala.page:45(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gio-2.0/GLib.SimpleAction.html";
+"\">SimpleAction</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/gmenu.vala.page:46(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gio-2.0/GLib.ActionMap.add_action.html";
+"\">add_action</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/grid.c.page:22(media) C/grid.js.page:25(media) C/grid.vala.page:23(media)
+#, fuzzy
+#| msgid "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
+msgctxt "_"
+msgid "external ref='media/grid.png' md5='27d45da115401127456a3b854dcfc5be'"
+msgstr "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
+
+#: C/grid.c.page:7(info/title)
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "Grid (C)"
+msgstr "Python"
+
+#: C/grid.c.page:17(info/desc) C/grid.js.page:21(info/desc)
+#: C/grid.py.page:24(info/desc) C/grid.vala.page:19(info/desc)
+msgid "Pack widgets in rows and columns"
+msgstr ""
+
+#: C/grid.c.page:20(page/title) C/grid.js.page:24(page/title)
+#: C/grid.py.page:27(page/title) C/tutorial.py.page:62(steps/title)
+msgid "Grid"
+msgstr "Grade"
+
+#: C/grid.c.page:23(page/p) C/grid.vala.page:24(page/p)
+msgid "A button widget connected to a progress bar."
+msgstr ""
+
+#: C/grid.c.page:25(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/*Signal handler for the \"clicked\" signal of the Button. Each\n"
+"click generates a progress bar pulse*/\n"
+"static void\n"
+"on_button_click (GtkButton *button,\n"
+"                 gpointer   user_data)\n"
+"{\n"
+"  GtkProgressBar *progress_bar = user_data;\n"
+"  gtk_progress_bar_pulse (progress_bar);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *grid;\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *button;\n"
+"  GtkWidget *progress_bar;\n"
+"\n"
+"  /*Create the window and set a title*/\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Grid Example\");\n"
+"\n"
+"  /*Create a button with a label*/\n"
+"  button = gtk_button_new_with_label (\"Button\");\n"
+"\n"
+"  /*Create the progress bar*/\n"
+"  progress_bar = gtk_progress_bar_new ();\n"
+"\n"
+"  /*Create a grid and attach the button and progress bar\n"
+"  accordingly*/\n"
+"  grid = gtk_grid_new ();\n"
+"  gtk_grid_attach (GTK_GRID (grid), button, 1, 1, 1, 1);\n"
+"  gtk_grid_attach_next_to (GTK_GRID (grid), \n"
+"                           progress_bar, \n"
+"                           button, \n"
+"                           GTK_POS_BOTTOM, 1, 1);\n"
+"\n"
+"  /*Connecting the clicked signal to the callback function*/\n"
+"  g_signal_connect (GTK_BUTTON (button), \"clicked\", \n"
+"                    G_CALLBACK (on_button_click), progress_bar);\n"
+"\n"
+"  gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (grid));\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
+msgstr ""
+
+#: C/grid.c.page:33(item/p) C/progressbar.c.page:34(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkProgressBar.html";
+"\">GtkProgressBar</link>"
+msgstr ""
+
+#: C/grid.js.page:7(info/title)
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Grid (JavaScript)"
+msgstr "JavaScript"
+
+#: C/grid.js.page:26(page/p)
+msgid ""
+"A button widget connected to a progress bar, inside of a grid which handles "
+"the layout."
+msgstr ""
+
+#: C/grid.js.page:28(page/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const GridExample = new Lang.Class ({\n"
+"    Name: 'Grid Example',\n"
+"\n"
+"    /* Create the application itself\n"
+"       This boilerplate code is needed to build any GTK+ application. */\n"
+"        _init: function () {\n"
+"            this.application = new Gtk.Application ({\n"
+"                application_id: 'org.example.jsgrid',\n"
+"                flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"            });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"            this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                         window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                         title: \"Grid Example\"});\n"
+"\n"
+"        // Create the grid\n"
+"        this.Grid = new Gtk.Grid ();\n"
+"\n"
+"        // Create the widgets inside the grid\n"
+"        this.progressBar = new Gtk.ProgressBar ();\n"
+"        this.Button = new Gtk.Button ({ label: \"Button\" });\n"
+"        this.Button.connect (\"clicked\", Lang.bind(this, this._clickHandler));\n"
+"\n"
+"        // Assemble the grid\n"
+"        this._window.add (this.Grid);\n"
+"        this.Grid.attach (this.Button, 1, 1, 1, 1);\n"
+"        this.Grid.attach_next_to (this.progressBar, this.Button, Gtk.PositionType.BOTTOM, 1, 1);\n"
+"\n"
+"                // Show the window and all child widgets\n"
+"                this._window.show_all();\n"
+"    },\n"
+"\n"
+"    // Here's the function that says what happens when the button is clicked\n"
+"    _clickHandler: function () {\n"
+"        this.progressBar.pulse ();\n"
+"    }\n"
+"\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new GridExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/grid.js.page:36(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html";
+"\">Gtk.Grid</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/grid.js.page:37(item/p) C/progressbar.js.page:41(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.ProgressBar.";
+"html\">Gtk.ProgressBar</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/grid.py.page:29(media)
+#, fuzzy
+#| msgid "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
+msgctxt "_"
+msgid ""
+"external ref='media/grid_simple.png' md5='c806f2e69b30373d4d2e08b41d6cc1f6'"
+msgstr "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
+
+#: C/grid.py.page:7(info/title)
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "Grid (Python)"
+msgstr "Python"
+
+#: C/grid.py.page:30(page/p)
+msgid "Some labels in a grid."
+msgstr ""
+
+#: C/grid.py.page:36(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Grid Example\", application=app)\n"
+"\n"
+"        # three labels\n"
+"        label_top_left = Gtk.Label(label=\"This is Top Left\")\n"
+"        label_top_right = Gtk.Label(label=\"This is Top Right\")\n"
+"        label_bottom = Gtk.Label(label=\"This is Bottom\")\n"
+"\n"
+"        # a grid\n"
+"        grid = Gtk.Grid()\n"
+"\n"
+"        # some space between the columns of the grid\n"
+"        grid.set_column_spacing(20)\n"
+"\n"
+"        # in the grid:\n"
+"        # attach the first label in the top left corner\n"
+"        grid.attach(label_top_left, 0, 0, 1, 1)\n"
+"        # attach the second label\n"
+"        grid.attach(label_top_right, 1, 0, 1, 1)\n"
+"        # attach the third label below the first label\n"
+"        grid.attach_next_to(label_bottom, label_top_left, Gtk.PositionType.BOTTOM, 2, 1)\n"
+"\n"
+"        # add the grid to the window\n"
+"        self.add(grid)\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/grid.py.page:40(section/title)
+msgid "Useful methods for a Grid widget"
+msgstr ""
+
+#: C/grid.py.page:43(item/p)
+msgid ""
+"To attach a widget <code>child</code> in position <code>left, top</code> in "
+"a slot of given <code>width, height</code> use <code>attach(child, top, "
+"left, width, height)</code>. If a widget <code>sibling</code> is already in "
+"place, we can also use <code>attach_next_to(child, sibling, side, width, "
+"height)</code>, where <code>side</code> is one of <code>Gtk.PositionType."
+"LEFT, Gtk.PositionType.RIGHT, Gtk.PositionType.TOP, Gtk.PositionType.BOTTOM</"
+"code>."
+msgstr ""
+
+#: C/grid.py.page:44(item/p)
+msgid ""
+"<code>insert_row(position)</code> and <code>insert_column(position)</code> "
+"do exactly what they say; children which are attached at or below this "
+"position are moved one row down, and children which span across this "
+"position are grown to span the new row. <code>insert_next_to(sibling, side)</"
+"code> inserts a row or column at the specified position. The new row or "
+"column is placed next to <code>sibling</code>, on the side determined by "
+"<code>side</code>; if side is <code>Gtk.PositionType.TOP</code> or <code>Gtk."
+"PositionType.BOTTOM</code>, a row is inserted, if side is <code>Gtk."
+"PositionType.LEFT</code> or <code>Gtk.PositionType.RIGHT</code>, a column is "
+"inserted."
+msgstr ""
+
+#: C/grid.py.page:45(item/p)
+msgid ""
+"<code>set_row_homogeneous(True)</code> and <code>set_column_homogeneous(True)"
+"</code> ensure that (respectively) every row or every column has the same "
+"width or height."
+msgstr ""
+
+#: C/grid.py.page:46(item/p)
+msgid ""
+"<code>set_row_spacing(spacing)</code> and <code>set_column_spacing(spacing)</"
+"code> force a spacing between (respectively) rows or columns. The value of "
+"<code>spacing</code> can be between <code>0</code>, which is the default "
+"value, and <code>32767</code>"
+msgstr ""
+
+#: C/grid.py.page:42(section/list)
+msgid "<_:item-1/> <_:item-2/> <_:item-3/> <_:item-4/>."
+msgstr ""
+
+#: C/grid.py.page:57(item/p) C/label.py.page:88(item/p)
+#: C/separator.py.page:40(item/p) C/switch.py.page:49(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkLabel.html";
+"\">GtkLabel</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/grid.py.page:58(item/p) C/image.py.page:100(item/p)
+#: C/paned.py.page:42(item/p) C/scrolledwindow.py.page:45(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkImage.html";
+"\">GtkImage</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/grid.py.page:59(item/p) C/radiobutton.py.page:52(item/p)
+#: C/separator.py.page:39(item/p) C/switch.py.page:50(item/p)
+#: C/toolbar_builder.py.page:193(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkGrid.html";
+"\">GtkGrid</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/grid.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Window (Vala)"
+msgctxt "text"
+msgid "Grid (Vala)"
+msgstr "Xanela (Vala)"
+
+#: C/grid.vala.page:22(page/title)
+msgid "Grid widget"
+msgstr ""
+
+#: C/grid.vala.page:26(page/code)
+#, no-wrap
+msgid ""
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\tGtk.Widget progress_bar;\n"
+"\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"Grid Example\");\n"
+"\t\tvar grid = new Gtk.Grid();\n"
+"\t\tprogress_bar = new Gtk.ProgressBar ();\n"
+"\t\tprogress_bar.show ();\n"
+"\n"
+"\t\tvar button = new Gtk.Button.with_label (\"Button\");\n"
+"\t\tbutton.clicked.connect (on_button_click);\n"
+"\t\tbutton.show ();\n"
+"\n"
+"\t\tthis.add(grid);\n"
+"\t\tgrid.attach(button, 0, 1, 1, 1);\n"
+"\t\tgrid.attach_next_to (progress_bar, button, Gtk.PositionType.BOTTOM, 1, 1);\n"
+"\t\tgrid.show ();\n"
+"\t}\n"
+"\n"
+"\tvoid on_button_click (Gtk.Button button) {\n"
+"\t\t(progress_bar as Gtk.ProgressBar).pulse ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"public class MyApplication : Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\n"
+"\t\tnew MyWindow (this).show ();\n"
+"\t}\n"
+"\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.MyApplication\");\n"
+"\n"
+"\t}\n"
+"}\n"
+"\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
+
+#: C/grid.vala.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Grid.html\";>Gtk.Grid</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/GtkApplicationWindow.c.page:21(media)
+#: C/GtkApplicationWindow.js.page:21(media)
+#: C/GtkApplicationWindow.py.page:26(media)
+#: C/GtkApplicationWindow.vala.page:21(media) C/window.c.page:21(media)
+#: C/window.js.page:24(media) C/window.py.page:30(media)
+#: C/window.vala.page:24(media)
+#, fuzzy
+#| msgid "@@image: 'media/window.png'; md5=eb0cde3530978619c25bddfaeb453345"
+msgctxt "_"
+msgid "external ref='media/window.png' md5='eb0cde3530978619c25bddfaeb453345'"
+msgstr "@@image: 'media/window.png'; md5=eb0cde3530978619c25bddfaeb453345"
+
+#: C/GtkApplicationWindow.c.page:7(info/title)
+#, fuzzy
+#| msgid "A first Gtk application"
+msgctxt "text"
+msgid "ApplicationWindow (C)"
+msgstr "Un primeiro aplicativo en GTK"
+
+#: C/GtkApplicationWindow.c.page:17(info/desc)
+msgid "A toplevel window which can contain other widgets, and support GMenu"
+msgstr ""
+
+#: C/GtkApplicationWindow.c.page:20(page/title)
+#: C/GtkApplicationWindow.js.page:20(page/title)
+#: C/GtkApplicationWindow.py.page:25(page/title)
+#: C/GtkApplicationWindow.vala.page:20(page/title)
+msgid "ApplicationWindow"
+msgstr ""
+
+#: C/GtkApplicationWindow.c.page:22(page/p)
+msgid "A minimal GtkApplication with a GtkApplicationWindow"
+msgstr ""
+
+#: C/GtkApplicationWindow.c.page:24(page/code)
+#, no-wrap
+msgid ""
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Hello GNOME\");\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"  return status;\n"
+"}\n"
+msgstr ""
+
+#: C/GtkApplicationWindow.c.page:30(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/3.4/GtkApplicationWindow.html";
+"\">GtkApplicationWindow</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/GtkApplicationWindow.js.page:7(info/title)
+#, fuzzy
+#| msgid "A first Gtk application"
+msgctxt "text"
+msgid "ApplicationWindow (JavaScript)"
+msgstr "Un primeiro aplicativo en GTK"
+
+#: C/GtkApplicationWindow.js.page:17(info/desc)
+#: C/GtkApplicationWindow.py.page:22(info/desc)
+#: C/GtkApplicationWindow.vala.page:17(info/desc)
+msgid "GtkWindow subclass with GtkApplication support"
+msgstr ""
+
+#: C/GtkApplicationWindow.js.page:22(page/p)
+msgid "A simple GtkApplicationWindow which can support Menus."
+msgstr ""
+
+#: C/GtkApplicationWindow.js.page:24(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const Application = new Lang.Class ({\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.myapp',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"       //connect to 'activate' and 'startup' signals to the callback functions\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"       this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    //create the UI (in this case it's just the ApplicationWindow\n"
+"    _buildUI: function () {\n"
+"        this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"Welcome to GNOME\" });\n"
+"\n"
+"        //uncommenting the line below will change the window size\n"
+"        //this._window.set_default_size(600, 400);\n"
+"\n"
+"        //show the window and all child widgets (none in this case)\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"    //callback function for 'activate' signal\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    //callback function for 'startup' signal\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    }\n"
+"});\n"
+"\n"
+"//run the application\n"
+"let app = new Application ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/GtkApplicationWindow.py.page:7(info/title)
+#, fuzzy
+#| msgid "A first Gtk application"
+msgctxt "text"
+msgid "ApplicationWindow (Python)"
+msgstr "Un primeiro aplicativo en GTK"
+
+#: C/GtkApplicationWindow.py.page:27(page/p)
+#: C/GtkApplicationWindow.vala.page:22(page/p)
+msgid "The simplest GtkApplication Window which can support Menus."
+msgstr ""
+
+#: C/GtkApplicationWindow.py.page:34(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"# a Gtk ApplicationWindow\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # constructor: the title is \"Welcome to GNOME\" and the window belongs\n"
+"    # to the application app\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    # constructor of the Gtk Application\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    # create and activate a MyWindow, with self (the MyApplication) as\n"
+"    # application the window belongs to.\n"
+"    # Note that the function in C activate() becomes do_activate() in Python\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        # show the window and all its content\n"
+"        # this line could go in the constructor of MyWindow as well\n"
+"        win.show_all()\n"
+"\n"
+"    # start up the application\n"
+"    # Note that the function in C startup() becomes do_startup() in Python\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"# create and run the application, exit with the value returned by\n"
+"# running the program\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/GtkApplicationWindow.py.page:38(section/title)
+#, fuzzy
+#| msgid "A first Gtk application"
+msgid "Useful methods for a Gtk.ApplicationWindow widget"
+msgstr "Un primeiro aplicativo en GTK"
+
+#: C/GtkApplicationWindow.py.page:41(item/p) C/window.py.page:52(item/p)
+msgid ""
+"<code>set_default_size(200, 100)</code> sets the default size of the window "
+"to a width of <code>200</code> and a height of <code>100</code>; if instead "
+"of a positive number we pass <code>-1</code> we have the default size."
+msgstr ""
+
+#: C/GtkApplicationWindow.py.page:42(item/p) C/window.py.page:53(item/p)
+msgid ""
+"<code>set_position(Gtk.WindowPosition.CENTER)</code> centers the window. "
+"Other options are <code>Gtk.WindowPosition.NONE, Gtk.WindowPosition.MOUSE, "
+"Gtk.WindowPosition.CENTER_ALWAYS, Gtk.WindowPosition.CENTER_ON_PARENT</code>."
+msgstr ""
+
+#: C/GtkApplicationWindow.vala.page:7(info/title)
+#, fuzzy
+#| msgid "A first Gtk application"
+msgctxt "text"
+msgid "ApplicationWindow (Vala)"
+msgstr "Un primeiro aplicativo en GTK"
+
+#: C/GtkApplicationWindow.vala.page:24(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"/* This is the application. */\n"
+"public class MyApplication : Gtk.Application {\n"
+"\t/* Override the 'activate' signal of GLib.Application. */\n"
+"\tprotected override void activate () {\n"
+"\t\t/* Create the window of this application and show it. */\n"
+"\t\tvar window = new Gtk.ApplicationWindow (this);\n"
+"\t\twindow.title = \"Welcome to GNOME\";\n"
+"\t\twindow.show ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main creates and runs the application. */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
+
+#: C/GtkApplicationWindow.vala.page:30(item/p) C/label.vala.page:30(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Application.html.content.tpl";
+"\">Gtk.Application</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/guitar-tuner.c.page:39(media) C/guitar-tuner.cpp.page:37(media)
+#: C/guitar-tuner.js.page:36(media) C/guitar-tuner.py.page:39(media)
+#: C/guitar-tuner.vala.page:42(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
+msgctxt "_"
+msgid ""
+"external ref='media/guitar-tuner.png' md5='35e615e0f5e293671d00c5c414ac2f6b'"
+msgstr ""
+"@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/guitar-tuner.c.page:94(media) C/guitar-tuner.cpp.page:88(media)
+#: C/guitar-tuner.py.page:90(media) C/guitar-tuner.vala.page:95(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/guitar-tuner-glade.png'; "
+#| "md5=f6606525443ab2160f53a87a454364d0"
+msgctxt "_"
+msgid ""
+"external ref='media/guitar-tuner-glade.png' "
+"md5='f6606525443ab2160f53a87a454364d0'"
+msgstr ""
+"@@image: 'media/guitar-tuner-glade.png'; md5=f6606525443ab2160f53a87a454364d0"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/guitar-tuner.c.page:139(media) C/guitar-tuner.cpp.page:117(media)
+#: C/guitar-tuner.js.page:42(media) C/guitar-tuner.py.page:133(media)
+#: C/guitar-tuner.vala.page:129(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/guitar-tuner-pipeline.png'; "
+#| "md5=5adc952909d92af5dae6954781b4ad5f"
+msgctxt "_"
+msgid ""
+"external ref='media/guitar-tuner-pipeline.png' "
+"md5='5adc952909d92af5dae6954781b4ad5f'"
+msgstr ""
+"@@image: 'media/guitar-tuner-pipeline.png'; "
+"md5=5adc952909d92af5dae6954781b4ad5f"
+
+#: C/guitar-tuner.c.page:7(info/title)
+#, fuzzy
+#| msgid "Guitar Tuner"
+msgctxt "text"
+msgid "Guitar Tuner (C)"
+msgstr "Afinador de guitarra"
+
+#: C/guitar-tuner.c.page:10(info/desc) C/guitar-tuner.py.page:10(info/desc)
+msgid ""
+"Use Gtk+ and GStreamer to build a simple guitar tuner application for GNOME. "
+"Shows off how to use the interface designer."
+msgstr ""
+"Usar GTK+ y GStreamer para construír un sinxelo afinador de guitarra para "
+"GNOME. Mostra como usar o deseñador de interfaces."
+
+#: C/guitar-tuner.c.page:23(page/title) C/guitar-tuner.cpp.page:21(page/title)
+msgid "Guitar Tuner"
+msgstr "Afinador de guitarra"
+
+#: C/guitar-tuner.c.page:26(synopsis/p) C/guitar-tuner.cpp.page:24(synopsis/p)
+#: C/guitar-tuner.py.page:26(synopsis/p)
+msgid ""
+"In this tutorial, we're going to make a program which plays tones that you "
+"can use to tune a guitar. You will learn how to:"
+msgstr ""
+"Neste titorial faremos un programa que reproduce tonos que pode usar para "
+"afinar unha guitarra. Aprenderá como:"
+
+#: C/guitar-tuner.c.page:28(item/p) C/guitar-tuner.cpp.page:26(item/p)
+#: C/guitar-tuner.py.page:28(item/p)
+msgid "Set up a basic project in Anjuta"
+msgstr "Configurar un proxecto básico en Anjuta"
+
+#: C/guitar-tuner.c.page:29(item/p) C/guitar-tuner.cpp.page:27(item/p)
+#: C/guitar-tuner.py.page:29(item/p)
+msgid "Create a simple GUI with Anjuta's UI designer"
+msgstr "Crear unha GUI sinxela co deseñador de UI de Anjuta"
+
+#: C/guitar-tuner.c.page:30(item/p) C/guitar-tuner.cpp.page:28(item/p)
+#: C/guitar-tuner.py.page:30(item/p)
+msgid "Use GStreamer to play sounds"
+msgstr "Usar GStreamer para reproducir sons."
+
+#: C/guitar-tuner.c.page:32(synopsis/p) C/guitar-tuner.cpp.page:30(synopsis/p)
+#: C/guitar-tuner.py.page:32(synopsis/p)
+#: C/guitar-tuner.vala.page:35(synopsis/p)
+#: C/image-viewer.js.page:34(synopsis/p) C/image-viewer.py.page:34(synopsis/p)
+#: C/image-viewer.vala.page:40(synopsis/p)
+#: C/magic-mirror.vala.page:33(synopsis/p)
+msgid "You'll need the following to be able to follow this tutorial:"
+msgstr ""
+
+#: C/guitar-tuner.c.page:34(item/p) C/guitar-tuner.cpp.page:32(item/p)
+#: C/guitar-tuner.py.page:34(item/p) C/image-viewer.js.page:36(item/p)
+#: C/image-viewer.py.page:36(item/p) C/magic-mirror.vala.page:35(item/p)
+msgid "An installed copy of the <link xref=\"getting-ready\">Anjuta IDE</link>"
+msgstr ""
+
+#: C/guitar-tuner.c.page:35(item/p)
+msgid "Basic knowledge of the C programming language"
+msgstr "Coñecemento básico da linguaxe de programación C"
+
+#: C/guitar-tuner.c.page:42(section/title)
+#: C/guitar-tuner.cpp.page:40(section/title)
+#: C/guitar-tuner.py.page:42(section/title)
+#: C/image-viewer.c.page:36(section/title)
+#: C/image-viewer.cpp.page:34(section/title)
+#: C/image-viewer.js.page:45(section/title)
+#: C/image-viewer.py.page:44(section/title)
+#: C/image-viewer.vala.page:51(section/title)
+#: C/magic-mirror.vala.page:44(section/title)
+#: C/message-board.c.page:41(section/title)
+#: C/photo-wall.c.page:46(section/title)
+#: C/record-collection.js.page:47(section/title)
+msgid "Create a project in Anjuta"
+msgstr "Cree un proxecto de Anjuta"
+
+#: C/guitar-tuner.c.page:43(section/p) C/guitar-tuner.cpp.page:41(section/p)
+#: C/guitar-tuner.py.page:43(section/p) C/guitar-tuner.vala.page:46(section/p)
+#: C/image-viewer.c.page:37(section/p) C/image-viewer.cpp.page:35(section/p)
+#: C/image-viewer.js.page:46(section/p) C/image-viewer.py.page:45(section/p)
+#: C/image-viewer.vala.page:52(section/p)
+#: C/magic-mirror.vala.page:45(section/p) C/photo-wall.c.page:47(section/p)
+#: C/record-collection.js.page:48(section/p)
+msgid ""
+"Before you start coding, you'll need to set up a new project in Anjuta. This "
+"will create all of the files you need to build and run the code later on. "
+"It's also useful for keeping everything together."
+msgstr ""
+"Antes de comezar a programar, deberá configurar un proxecto novo en Anjuta. "
+"Isto creará todos os ficheiros que precise para construír e executar o "
+"código máis adiante. Tamén é útil para manter todo ordenado."
+
+#: C/guitar-tuner.c.page:46(item/p) C/guitar-tuner.cpp.page:44(item/p)
+#: C/guitar-tuner.py.page:46(item/p) C/image-viewer.c.page:40(item/p)
+#: C/image-viewer.cpp.page:38(item/p) C/image-viewer.js.page:49(item/p)
+#: C/image-viewer.py.page:48(item/p) C/magic-mirror.vala.page:48(item/p)
+#: C/photo-wall.c.page:50(item/p) C/record-collection.js.page:51(item/p)
+msgid ""
+"Start Anjuta and click <guiseq><gui>File</gui><gui>New</gui><gui>Project</"
+"gui></guiseq> to open the project wizard."
+msgstr ""
+"Inicie Anjuta e prema <guiseq><gui>Ficheiro</gui><gui>Novo</"
+"gui><gui>Proxecto</gui></guiseq> para abrir o asistente de proxectos."
+
+#: C/guitar-tuner.c.page:49(item/p)
+#, fuzzy
+#| msgid ""
+#| "Choose <gui>Gtk+ (Simple)</gui> from the <gui>C</gui> tab, click "
+#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
+#| "<file>guitar-tuner</file> as project name and directory."
+msgid ""
+"Choose <gui>Gtk+ (Simple)</gui> from the <gui>C</gui> tab, click "
+"<gui>Continue</gui>, and fill out your details on the next few pages. Use "
+"<file>guitar-tuner</file> as project name and directory."
+msgstr ""
+"Seleccione <gui>GTK+ (Simple)</gui> desde a lapela <gui>C</gui>, prema "
+"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
+"<file>guitar-tunner</file> como nome do proxecto e cartafol."
+
+#: C/guitar-tuner.c.page:52(item/p)
+#, fuzzy
+#| msgid ""
+#| "Make sure that <gui>Configure external packages</gui> is selected. On the "
+#| "next page, select <em>gstreamer-0.10</em> from the list to include the "
+#| "GStreamer library in your project."
+msgid ""
+"Make sure that <gui>Configure external packages</gui> is switched <gui>ON</"
+"gui>. On the next page, select <em>gstreamer-0.10</em> from the list to "
+"include the GStreamer library in your project."
+msgstr ""
+"Asegúrese que <gui>Configurar paquetes externos</gui> está seleccionada. Na "
+"seguinte páxina, seleccione <em>gstreamermm-0.10</em> da lista para incluír "
+"a biblioteca GStreamer no seu proxecto."
+
+#: C/guitar-tuner.c.page:56(item/p) C/image-viewer.c.page:51(item/p)
+#: C/photo-wall.c.page:65(item/p)
+msgid ""
+"Click <gui>Apply</gui> and the project will be created for you. Open "
+"<file>src/main.c</file> from the <gui>Project</gui> or <gui>File</gui> tabs. "
+"You should see some code which starts with the lines:"
+msgstr ""
+"Prema <gui>Aplicar</gui> para crear o proxecto. Abra <file>src/main.c</file> "
+"desde as lapelas <gui>Proxecto</gui> ou <gui>Ficheiro</gui>. Debería ver "
+"algún código que comeza coas liñas:"
+
+#: C/guitar-tuner.c.page:57(item/code) C/image-viewer.c.page:52(item/code)
+#: C/photo-wall.c.page:66(item/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;config.h&gt;\n"
+"#include &lt;gtk/gtk.h&gt;"
+msgstr ""
+
+#: C/guitar-tuner.c.page:65(section/title)
+#: C/guitar-tuner.cpp.page:63(section/title)
+#: C/guitar-tuner.vala.page:68(section/title)
+#: C/image-viewer.c.page:60(section/title)
+#: C/image-viewer.cpp.page:60(section/title)
+#: C/image-viewer.vala.page:107(section/title)
+#: C/magic-mirror.vala.page:72(section/title)
+msgid "Build the code for the first time"
+msgstr "Construír o código por primeira vez"
+
+#: C/guitar-tuner.c.page:66(section/p)
+msgid ""
+"C is a rather verbose language, so don't be surprised that the file contains "
+"quite a lot of code. Most of it is template code. It loads an (empty) window "
+"from the user interface description file and shows it. More details are "
+"given below; skip this list if you understand the basics:"
+msgstr ""
+
+#: C/guitar-tuner.c.page:70(item/p) C/image-viewer.c.page:65(item/p)
+msgid ""
+"The three <code>#include</code> lines at the top include the <code>config</"
+"code> (useful autoconf build defines), <code>gtk</code> (user interface) and "
+"<code>gi18n</code> (internationalization) libraries. Functions from these "
+"libraries are used in the rest of the code."
+msgstr ""
+
+#: C/guitar-tuner.c.page:73(item/p)
+msgid ""
+"The <code>create_window</code> function creates a new window by opening a "
+"GtkBuilder file (<file>src/guitar-tuner.ui</file>, defined a few lines "
+"above), connecting its signals and then displaying it in a window. The "
+"GtkBuilder file contains a description of a user interface and all of its "
+"elements. You can use Anjuta's editor to design GtkBuilder user interfaces."
+msgstr ""
+
+#: C/guitar-tuner.c.page:74(item/p) C/image-viewer.c.page:69(item/p)
+#: C/image-viewer.vala.page:117(item/p)
+msgid ""
+"Connecting signals is how you define what happens when you push a button, or "
+"when some other event happens. Here, the <code>destroy</code> function is "
+"called (and quits the app) when you close the window."
+msgstr ""
+
+#: C/guitar-tuner.c.page:77(item/p) C/image-viewer.c.page:72(item/p)
+msgid ""
+"The <code>main</code> function is run by default when you start a C "
+"application. It calls a few functions which set up and then run the "
+"application. The <code>gtk_main</code> function starts the GTK main loop, "
+"which runs the user interface and starts listening for events (like clicks "
+"and key presses)."
+msgstr ""
+
+#: C/guitar-tuner.c.page:80(item/p) C/image-viewer.c.page:75(item/p)
+msgid ""
+"The <code>ENABLE_NLS</code> conditional definition sets up <code>gettext</"
+"code>, which is a framework for translating applications. These functions "
+"specify how translation tools should handle your app when you run them."
+msgstr ""
+
+#: C/guitar-tuner.c.page:84(section/p) C/guitar-tuner.cpp.page:78(section/p)
+#: C/image-viewer.c.page:79(section/p) C/image-viewer.cpp.page:76(section/p)
+#: C/image-viewer.vala.page:127(section/p)
+#: C/magic-mirror.vala.page:87(section/p)
+msgid ""
+"This code is ready to be used, so you can compile it by clicking "
+"<guiseq><gui>Build</gui><gui>Build Project</gui></guiseq> (or press "
+"<keyseq><key>Shift</key><key>F7</key></keyseq>)."
+msgstr ""
+
+#: C/guitar-tuner.c.page:85(section/p) C/guitar-tuner.cpp.page:79(section/p)
+#: C/image-viewer.c.page:80(section/p) C/image-viewer.cpp.page:77(section/p)
+msgid ""
+"Press <gui>Execute</gui> on the next window that appears to configure a "
+"debug build. You only need to do this once, for the first build."
+msgstr ""
+"Prema <gui>Executar</gui> na seguinte xanela que aparece para configurar a "
+"compilación de depuración. Só precisa facer isto unha vez para a primeira "
+"compilación."
+
+#: C/guitar-tuner.c.page:89(section/title)
+#: C/guitar-tuner.cpp.page:83(section/title)
+#: C/guitar-tuner.py.page:85(section/title)
+#: C/guitar-tuner.vala.page:90(section/title)
+msgid "Create the user interface"
+msgstr "Crear a interface de usuario"
+
+#: C/guitar-tuner.c.page:90(section/p) C/guitar-tuner.cpp.page:84(section/p)
+msgid ""
+"A description of the user interface (UI) is contained in the GtkBuilder "
+"file. To edit the user interface, open <file>src/guitar_tuner.ui</file>. "
+"This will switch to the interface designer. The design window is in the "
+"center; widgets and widgets' properties are on the left, and the palette of "
+"available widgets is on the right."
+msgstr ""
+
+#: C/guitar-tuner.c.page:92(section/p) C/guitar-tuner.cpp.page:86(section/p)
+#: C/guitar-tuner.py.page:88(section/p)
+msgid ""
+"The layout of every UI in GTK+ is organized using boxes and tables. Let's "
+"use a vertical <gui>GtkButtonBox</gui> here to assign six <gui>GtkButtons</"
+"gui>, one for each of the six guitar strings."
+msgstr ""
+
+#: C/guitar-tuner.c.page:98(item/p) C/guitar-tuner.cpp.page:92(item/p)
+#: C/guitar-tuner.py.page:94(item/p)
+msgid ""
+"Select a <gui>GtkButtonBox</gui> from the <gui>Container</gui> section of "
+"the <gui>Palette</gui> on the right and put it into the window. In the "
+"<gui>Properties</gui> pane, set the number of elements to 6 (for the six "
+"strings) and the orientation to vertical."
+msgstr ""
+
+#: C/guitar-tuner.c.page:102(item/p) C/guitar-tuner.cpp.page:96(item/p)
+#: C/guitar-tuner.py.page:98(item/p)
+msgid ""
+"Now, choose a <gui>GtkButton</gui> from the palette and put it into the "
+"first part of the box."
+msgstr ""
+
+#: C/guitar-tuner.c.page:105(item/p) C/guitar-tuner.py.page:101(item/p)
+msgid ""
+"While the button is still selected, change the <gui>Label</gui> property in "
+"the <gui>Widgets</gui> tab to <gui>E</gui>. This will be the low E string."
+msgstr ""
+
+#: C/guitar-tuner.c.page:108(item/p) C/guitar-tuner.py.page:104(item/p)
+msgid ""
+"Switch to the <gui>Signals</gui> tab (inside the <gui>Widgets</gui> tab) and "
+"look for the <code>clicked</code> signal of the button. You can use this to "
+"connect a signal handler that will be called when the button is clicked by "
+"the user. To do this, click on the signal and type <code>on_button_clicked</"
+"code> in the <gui>Handler</gui> column and press <key>Return</key>."
+msgstr ""
+
+#: C/guitar-tuner.c.page:111(item/p) C/guitar-tuner.py.page:107(item/p)
+#: C/guitar-tuner.vala.page:116(item/p)
+msgid ""
+"Repeat the above steps for the other buttons, adding the next 5 strings with "
+"the names <em>A</em>, <em>D</em>, <em>G</em>, <em>B</em>, and <em>e</em>."
+msgstr ""
+"Repita os pasos anteriores para o resto dos botóns, engadindo as 5 cordas "
+"restantes cos nomes <em>A</em>, <em>D</em>, <em>G</em>, <em>B</em> e <em>e</"
+"em>."
+
+#: C/guitar-tuner.c.page:114(item/p) C/guitar-tuner.py.page:110(item/p)
+#: C/guitar-tuner.vala.page:119(item/p)
+msgid ""
+"Save the UI design (by clicking <guiseq><gui>File</gui><gui>Save</gui></"
+"guiseq>) and keep it open."
+msgstr ""
+"Garde o deseño da IU (premendo <guiseq><gui>Ficheiro</gui><gui>Gardar</gui></"
+"guiseq>) e déixeo aberto."
+
+#: C/guitar-tuner.c.page:120(section/title)
+#: C/guitar-tuner.vala.page:197(section/title)
+msgid "Creating the signal handler"
+msgstr "Crear o manexador de sinais"
+
+#: C/guitar-tuner.c.page:121(section/p) C/guitar-tuner.py.page:117(section/p)
+msgid ""
+"In the UI designer, you made it so that all of the buttons will call the "
+"same function, <gui>on_button_clicked</gui>, when they are clicked. We need "
+"to add that function in the source file."
+msgstr ""
+
+#: C/guitar-tuner.c.page:122(section/p)
+msgid ""
+"To do this, open <file>main.c</file> while the user interface file is still "
+"open. Switch to the <gui>Signals</gui> tab, which you already used to set "
+"the signal name. Now take the row where you set the <gui>clicked</gui> "
+"signal and drag it into to the source file at a position that is outside any "
+"function. The following code will be added to your source file:"
+msgstr ""
+
+#: C/guitar-tuner.c.page:125(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"void on_button_clicked (GtkWidget* button, gpointer user_data)\n"
+"{\n"
+"\n"
+"}"
+msgstr ""
+
+#: C/guitar-tuner.c.page:130(section/p)
+msgid ""
+"This signal handler has two arguments: a pointer to the <code>GtkWidget</"
+"code> that called the function (in our case, always a <code>GtkButton</"
+"code>), and a pointer to some \"user data\" that you can define, but which "
+"we won't be using here. (You can set the user data by calling "
+"<code>gtk_builder_connect_signals</code>; it is normally used to pass a "
+"pointer to a data structure that you might need to access inside the signal "
+"handler.)"
+msgstr ""
+
+#: C/guitar-tuner.c.page:131(section/p) C/guitar-tuner.py.page:125(section/p)
+msgid ""
+"For now, we'll leave the signal handler empty while we work on writing the "
+"code to produce sounds."
+msgstr ""
+
+#: C/guitar-tuner.c.page:135(section/title)
+#: C/guitar-tuner.cpp.page:112(section/title)
+#: C/guitar-tuner.js.page:38(section/title)
+#: C/guitar-tuner.py.page:129(section/title)
+#: C/guitar-tuner.vala.page:125(section/title)
+msgid "GStreamer pipelines"
+msgstr "Tuberías de GStreamer"
+
+#: C/guitar-tuner.c.page:136(section/p) C/guitar-tuner.js.page:39(section/p)
+#: C/guitar-tuner.py.page:130(section/p)
+msgid ""
+"GStreamer is GNOME's multimedia framework — you can use it for playing, "
+"recording, and processing video, audio, webcam streams and the like. Here, "
+"we'll be using it to produce single-frequency tones."
+msgstr ""
+"GStreamer é un marco de traballo multimedia de GNOME — vostede pode usalo "
+"para reproducir, gravar e procesar vídeo, son, fluxos de cámara web e "
+"semellantes. Aquí, usarémolo para producir tonos dunha única frecuencia."
+
+#: C/guitar-tuner.c.page:137(section/p) C/guitar-tuner.cpp.page:115(section/p)
+#: C/guitar-tuner.js.page:40(section/p) C/guitar-tuner.py.page:131(section/p)
+msgid ""
+"Conceptually, GStreamer works as follows: You create a <em>pipeline</em> "
+"containing several processing elements going from the <em>source</em> to the "
+"<em>sink</em> (output). The source can be an image file, a video, or a music "
+"file, for example, and the output could be a widget or the soundcard."
+msgstr ""
+
+#: C/guitar-tuner.c.page:138(section/p) C/guitar-tuner.cpp.page:116(section/p)
+#: C/guitar-tuner.js.page:41(section/p) C/guitar-tuner.py.page:132(section/p)
+#: C/guitar-tuner.vala.page:128(section/p)
+msgid ""
+"Between source and sink, you can apply various filters and converters to "
+"handle effects, format conversions and so on. Each element of the pipeline "
+"has properties which can be used to change its behaviour."
+msgstr ""
+
+#: C/guitar-tuner.c.page:140(media/p) C/guitar-tuner.cpp.page:118(media/p)
+#: C/guitar-tuner.js.page:43(media/p) C/guitar-tuner.py.page:134(media/p)
+#: C/guitar-tuner.vala.page:130(media/p)
+msgid "An example GStreamer pipeline."
+msgstr "Un exemplo de tubería de GStreamer."
+
+#: C/guitar-tuner.c.page:145(section/title)
+#: C/guitar-tuner.py.page:139(section/title)
+#: C/guitar-tuner.vala.page:135(section/title)
+msgid "Set up the pipeline"
+msgstr "Configurar a tubería"
+
+#: C/guitar-tuner.c.page:146(section/p) C/guitar-tuner.cpp.page:129(section/p)
+#: C/guitar-tuner.py.page:140(section/p)
+msgid ""
+"In this simple example we will use a tone generator source called "
+"<code>audiotestsrc</code> and send the output to the default system sound "
+"device, <code>autoaudiosink</code>. We only need to configure the frequency "
+"of the tone generator; this is accessible through the <code>freq</code> "
+"property of <code>audiotestsrc</code>."
+msgstr ""
+
+#: C/guitar-tuner.c.page:148(section/p)
+#, fuzzy
+#| msgid ""
+#| "Insert the following line into <file>main.c</file>, just below the "
+#| "<code><![CDATA[#include <gtk/gtk.h>]]></code> line:"
+msgid ""
+"Insert the following line into <file>main.c</file>, just below the "
+"<code>#include &lt;gtk/gtk.h&gt;</code> line:"
+msgstr ""
+"Inserte a seguinte lia en <file>main.c</file>, xusto a continuación da liña "
+"<code><![CDATA[#include <gtk/gtk.h>]]></code>:"
+
+#: C/guitar-tuner.c.page:149(section/code)
+#, fuzzy, no-wrap
+#| msgid "#include &lt;webkit/webkit.h&gt;"
+msgid "#include &lt;gst/gst.h&gt;"
+msgstr "#include &lt;webkit/webkit.h&gt;"
+
+#: C/guitar-tuner.c.page:150(section/p)
+msgid ""
+"This includes the GStreamer library. You also need to add a line to "
+"initialize GStreamer; put the following code on the line above the "
+"<code>gtk_init</code> call in the <code>main</code> function:"
+msgstr ""
+"Isto inclúe a biblioteca GSTreamer. Tamén precisa unha liña para inicializar "
+"GStreamer; poña a seguinte liña de código antes da chamada <code>gtk_init</"
+"code> na función <code>main</code>:"
+
+#: C/guitar-tuner.c.page:151(section/code)
+#, fuzzy, no-wrap
+#| msgid "\tGst::init (argc, argv);"
+msgid "gst_init (&amp;argc, &amp;argv);"
+msgstr "\tGst::init (argc, argv);"
+
+#: C/guitar-tuner.c.page:152(section/p)
+msgid ""
+"Then, copy the following function into <file>main.c</file> above the empty "
+"<code>on_button_clicked</code> function:"
+msgstr ""
+"Despois, copie a seguinte función en <file>main.c</file> enriba da función "
+"<code>on_button_clicked</code> baleira:"
+
+#: C/guitar-tuner.c.page:153(section/code)
+#, no-wrap
+msgid ""
+"static void\n"
+"play_sound (gdouble frequency)\n"
+"{\n"
+"\tGstElement *source, *sink;\n"
+"\tGstElement *pipeline;\n"
+"\n"
+"\tpipeline = gst_pipeline_new (\"note\");\n"
+"\tsource   = gst_element_factory_make (\"audiotestsrc\",\n"
+"\t                                     \"source\");\n"
+"\tsink     = gst_element_factory_make (\"autoaudiosink\",\n"
+"\t                                     \"output\");\n"
+"\n"
+"\t/* set frequency */\n"
+"\tg_object_set (source, \"freq\", frequency, NULL);\n"
+"\n"
+"\tgst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);\n"
+"\tgst_element_link (source, sink);\n"
+"\n"
+"\tgst_element_set_state (pipeline, GST_STATE_PLAYING);\n"
+"\n"
+"\t/* stop it after 500ms */\n"
+"\tg_timeout_add (LENGTH, (GSourceFunc) pipeline_stop, pipeline);\n"
+"}"
+msgstr ""
+
+#: C/guitar-tuner.c.page:179(item/p)
+msgid ""
+"The first five lines create source and sink GStreamer elements "
+"(<code>GstElement</code>), and a pipeline element (which will be used as a "
+"container for the other two elements). The pipeline is given the name \"note"
+"\"; the source is named \"source\" and is set to the <code>audiotestsrc</"
+"code> source; and the sink is named \"output\" and set to the "
+"<code>autoaudiosink</code> sink (default sound card output)."
+msgstr ""
+
+#: C/guitar-tuner.c.page:182(item/p)
+msgid ""
+"The call to <code>g_object_set</code> sets the <code>freq</code> property of "
+"the source element to <code>frequency</code>, which is passed as an argument "
+"to the <code>play_sound</code> function. This is just the frequency of the "
+"note in Hertz; some useful frequencies will be defined later on."
+msgstr ""
+"A chamada a <code>g_object_set</code> estabelecer a propiedade <code>freq</"
+"code> do elemento orixe a <code>frequency</code>, a cal se pasa como un "
+"argumento á función <code>play_sound</code>. Isto só é a frecuencia da nota "
+"en Hertz, algunhas das frecuencias máis útiles definiranse máis tarde."
+
+#: C/guitar-tuner.c.page:185(item/p)
+msgid ""
+"<code>gst_bin_add_many</code> puts the source and sink into the pipeline. "
+"The pipeline is a <code>GstBin</code>, which is just an element that can "
+"contain multiple other GStreamer elements. In general, you can add as many "
+"elements as you like to the pipeline by adding more arguments to "
+"<code>gst_bin_add_many</code>."
+msgstr ""
+
+#: C/guitar-tuner.c.page:188(item/p)
+msgid ""
+"Next, <code>gst_element_link</code> is used to connect the elements "
+"together, so the output of <code>source</code> (a tone) goes into the input "
+"of <code>sink</code> (which is then output to the sound card). "
+"<code>gst_element_set_state</code> is then used to start playback, by "
+"setting the state of the pipeline to playing (<code>GST_STATE_PLAYING</"
+"code>)."
+msgstr ""
+
+#: C/guitar-tuner.c.page:195(section/title)
+#: C/guitar-tuner.py.page:180(section/title)
+msgid "Stopping playback"
+msgstr "Deter a reprodución"
+
+#: C/guitar-tuner.c.page:196(section/p)
+msgid ""
+"We don't want to play an annoying tone forever, so the last thing "
+"<code>play_sound</code> does is to call <code>g_timeout_add</code>. This "
+"sets a timeout for stopping the sound; it waits for <code>LENGTH</code> "
+"milliseconds before calling the function <code>pipeline_stop</code>, and "
+"will keep calling it until <code>pipeline_stop</code> returns <code>FALSE</"
+"code>."
+msgstr ""
+
+#: C/guitar-tuner.c.page:197(section/p)
+msgid ""
+"Now, we'll write the <code>pipeline_stop</code> function which is called by "
+"<code>g_timeout_add</code>. Insert the following code <em>above</em> the "
+"<code>play_sound</code> function:"
+msgstr ""
+"Agora, escríbese o código da función <code>pipeline_stop</code>, chamada por "
+"<code>g_timeout_add</code>. Inserte o código seguinte <em>enriba</em> da "
+"función <code>play_sound</code>:"
+
+#: C/guitar-tuner.c.page:198(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"#define LENGTH 500 /* Length of playing in ms */\n"
+"\n"
+"static gboolean\n"
+"pipeline_stop (GstElement* pipeline)\n"
+"{\n"
+"\tgst_element_set_state (pipeline, GST_STATE_PAUSED);\n"
+"\tg_object_unref (pipeline);\n"
+"\n"
+"\treturn FALSE;\n"
+"}"
+msgstr ""
+
+#: C/guitar-tuner.c.page:209(section/p)
+msgid ""
+"The call to <code>gst_element_set_state</code> pauses the playback of the "
+"pipeline and <code>g_object_unref</code> unreferences the pipeline, "
+"destroying it and freeing its memory."
+msgstr ""
+"A chamada <code>gst_element_set_state</code> pausa a reprodución da tubería "
+"e <code>g_object_unref</code> desreferencia a tubería, destrúea e libera a "
+"súa memoria."
+
+#: C/guitar-tuner.c.page:213(section/title)
+#: C/guitar-tuner.py.page:197(section/title)
+msgid "Define the tones"
+msgstr "Definir os tonos"
+
+#: C/guitar-tuner.c.page:214(section/p)
+msgid ""
+"We want to play the correct sound when the user clicks a button. First of "
+"all, we need to know the frequencies for the six guitar strings, which are "
+"defined (at the top of <file>main.c</file>) as follows:"
+msgstr ""
+"Quérese reproducir o son correcto cando un usuario preme un botón. En "
+"primeiro lugar, precísase coñecer as frecuencias das seis cordas da "
+"guitarra, que están definidas (ao principio de <file>main.c</file>) da "
+"seguinte maneira:"
+
+#: C/guitar-tuner.c.page:215(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"/* Frequencies of the strings */\n"
+"#define NOTE_E 369.23\n"
+"#define NOTE_A 440\n"
+"#define NOTE_D 587.33\n"
+"#define NOTE_G 783.99\n"
+"#define NOTE_B 987.77\n"
+"#define NOTE_e 1318.5"
+msgstr ""
+
+#: C/guitar-tuner.c.page:223(section/p) C/guitar-tuner.py.page:211(section/p)
+msgid ""
+"Now to flesh out the signal handler that we defined earlier, "
+"<code>on_button_clicked</code>. We could have connected every button to a "
+"different signal handler, but that would lead to a lot of code duplication. "
+"Instead, we can use the label of the button to figure out which button was "
+"clicked:"
+msgstr ""
+
+#: C/guitar-tuner.c.page:224(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"/* Callback for the buttons */\n"
+"void on_button_clicked (GtkButton* button,\n"
+"                        gpointer user_data)\n"
+"{\n"
+"\tGtkWidget* label = gtk_bin_get_child (GTK_BIN (button));\n"
+"\tconst gchar* text = gtk_label_get_label (GTK_LABEL (label));\n"
+"\n"
+"\tif (g_str_equal (text, _(\"E\")))\n"
+"\t    play_sound (NOTE_E);\n"
+"\telse if (g_str_equal (text, _(\"A\")))\n"
+"\t    play_sound (NOTE_A);\n"
+"\telse if (g_str_equal (text, _(\"G\")))\n"
+"\t    play_sound (NOTE_G);\n"
+"\telse if (g_str_equal (text, _(\"D\")))\n"
+"\t    play_sound (NOTE_D);\n"
+"\telse if (g_str_equal (text, _(\"B\")))\n"
+"\t    play_sound (NOTE_B);\n"
+"\telse if (g_str_equal (text, _(\"e\")))\n"
+"\t    play_sound (NOTE_e);\n"
+"}\n"
+msgstr ""
+
+#: C/guitar-tuner.c.page:246(section/p)
+msgid ""
+"A pointer to the <code>GtkButton</code> that was clicked is passed as an "
+"argument (<code>button</code>) to <code>on_button_clicked</code>. We can get "
+"the label of that button by using <code>gtk_bin_get_child</code>, and then "
+"get the text from that label using <code>gtk_label_get_label</code>."
+msgstr ""
+
+#: C/guitar-tuner.c.page:247(section/p)
+msgid ""
+"The label text is then compared to the notes that we have using "
+"<code>g_str_equal</code>, and <code>play_sound</code> is called with the "
+"frequency appropriate for that note. This plays the tone; we have a working "
+"guitar tuner!"
+msgstr ""
+
+#: C/guitar-tuner.c.page:251(section/title)
+#: C/guitar-tuner.cpp.page:249(section/title)
+#: C/guitar-tuner.vala.page:247(section/title)
+#: C/image-viewer.c.page:216(section/title)
+#: C/image-viewer.cpp.page:204(section/title)
+#: C/image-viewer.vala.page:274(section/title)
+#: C/photo-wall.c.page:371(section/title)
+msgid "Build and run the application"
+msgstr "Construír e executar o aplicativo"
+
+#: C/guitar-tuner.c.page:252(section/p)
+#: C/guitar-tuner.vala.page:248(section/p)
+#: C/image-viewer.c.page:217(section/p) C/image-viewer.cpp.page:205(section/p)
+#: C/image-viewer.vala.page:275(section/p)
+msgid ""
+"All of the code should now be ready to go. Click <guiseq><gui>Build</"
+"gui><gui>Build Project</gui></guiseq> to build everything again, and then "
+"<guiseq><gui>Run</gui><gui>Execute</gui></guiseq> to start the application."
+msgstr ""
+
+#: C/guitar-tuner.c.page:253(section/p) C/guitar-tuner.cpp.page:251(section/p)
+#: C/guitar-tuner.vala.page:249(section/p)
+msgid ""
+"If you haven't already done so, choose the <file>Debug/src/guitar-tuner</"
+"file> application in the dialog that appears. Finally, hit <gui>Run</gui> "
+"and enjoy!"
+msgstr ""
+
+#: C/guitar-tuner.c.page:257(section/title)
+#: C/guitar-tuner.cpp.page:255(section/title)
+#: C/guitar-tuner.js.page:234(section/title)
+#: C/guitar-tuner.py.page:229(section/title)
+#: C/guitar-tuner.vala.page:253(section/title)
+#: C/image-viewer.c.page:222(section/title)
+#: C/image-viewer.cpp.page:210(section/title)
+#: C/image-viewer.js.page:311(section/title)
+#: C/image-viewer.py.page:225(section/title)
+#: C/image-viewer.vala.page:282(section/title)
+#: C/magic-mirror.vala.page:144(section/title)
+#: C/photo-wall.c.page:379(section/title)
+#: C/record-collection.js.page:291(section/title)
+msgid "Reference Implementation"
+msgstr "Implementación de referencia"
+
+#: C/guitar-tuner.c.page:258(section/p)
+msgid ""
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"guitar-tuner/guitar-tuner.c\">reference code</link>."
+msgstr ""
+"Se ten problemas ao executar este titorial compare o seu código con este "
+"<link href=\"guitar-tuner/guitar-tuner.c\">código de referencia</link>."
+
+#: C/guitar-tuner.c.page:262(section/title)
+#: C/guitar-tuner.cpp.page:268(section/title)
+#: C/guitar-tuner.py.page:234(section/title)
+#: C/guitar-tuner.vala.page:264(section/title)
+#: C/image-viewer.c.page:227(section/title)
+#: C/image-viewer.cpp.page:215(section/title)
+#: C/image-viewer.js.page:316(section/title)
+#: C/image-viewer.py.page:230(section/title)
+#: C/image-viewer.vala.page:287(section/title)
+msgid "Next steps"
+msgstr "Seguintes pasos"
+
+#: C/guitar-tuner.c.page:263(section/p) C/guitar-tuner.cpp.page:269(section/p)
+#: C/guitar-tuner.py.page:235(section/p)
+#: C/guitar-tuner.vala.page:265(section/p)
+#: C/image-viewer.c.page:228(section/p) C/image-viewer.cpp.page:216(section/p)
+#: C/image-viewer.js.page:317(section/p) C/image-viewer.py.page:231(section/p)
+#: C/image-viewer.vala.page:288(section/p)
+msgid "Here are some ideas for how you can extend this simple demonstration:"
+msgstr ""
+"Aquí hai algunhas ideas sobre como pode estender esta sinxela demostración:"
+
+#: C/guitar-tuner.c.page:266(item/p) C/guitar-tuner.cpp.page:272(item/p)
+#: C/guitar-tuner.py.page:238(item/p) C/guitar-tuner.vala.page:268(item/p)
+msgid "Have the program automatically cycle through the notes."
+msgstr "Facer que o programa reproduza de forma cíclica as notas."
+
+#: C/guitar-tuner.c.page:269(item/p) C/guitar-tuner.cpp.page:275(item/p)
+#: C/guitar-tuner.py.page:241(item/p) C/guitar-tuner.vala.page:271(item/p)
+msgid "Make the program play recordings of real guitar strings being plucked."
+msgstr ""
+"Facer que o programa reproduza gravacións de cordas de guitarras que se "
+"están afinando."
+
+#: C/guitar-tuner.c.page:270(item/p) C/guitar-tuner.cpp.page:276(item/p)
+#: C/guitar-tuner.py.page:242(item/p) C/guitar-tuner.vala.page:272(item/p)
+msgid ""
+"To do this, you would need to set up a more complicated GStreamer pipeline "
+"which allows you to load and play back music files. You'll have to choose "
+"<link href=\"http://gstreamer.freedesktop.org/documentation/plugins.html";
+"\">decoder and demuxer</link> GStreamer elements based on the file format of "
+"your recorded sounds — MP3s use different elements to Ogg Vorbis files, for "
+"example."
+msgstr ""
+
+#: C/guitar-tuner.c.page:271(item/p) C/guitar-tuner.cpp.page:277(item/p)
+#: C/guitar-tuner.py.page:243(item/p) C/guitar-tuner.vala.page:273(item/p)
+msgid ""
+"You might need to connect the elements in more complicated ways too. This "
+"could involve using <link href=\"http://gstreamer.freedesktop.org/data/doc/";
+"gstreamer/head/manual/html/chapter-intro-basics.html\">GStreamer concepts</"
+"link> that we didn't cover in this tutorial, such as <link href=\"http://";
+"gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-intro-"
+"basics-pads.html\">pads</link>. You may also find the <cmd>gst-inspect</cmd> "
+"command useful."
+msgstr ""
+
+#: C/guitar-tuner.c.page:274(item/p) C/guitar-tuner.cpp.page:280(item/p)
+#: C/guitar-tuner.py.page:246(item/p) C/guitar-tuner.vala.page:276(item/p)
+msgid "Automatically analyze notes that the user plays."
+msgstr "Analizar automaticamente as notas que toca o músico."
+
+#: C/guitar-tuner.c.page:275(item/p) C/guitar-tuner.cpp.page:281(item/p)
+#: C/guitar-tuner.py.page:247(item/p) C/guitar-tuner.vala.page:277(item/p)
+msgid ""
+"You could connect a microphone and record sounds from it using an <link href="
+"\"http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-";
+"plugins/html/gst-plugins-good-plugins-autoaudiosrc.html\">input source</"
+"link>. Perhaps some form of <link href=\"http://gstreamer.freedesktop.org/";
+"data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-"
+"plugins-plugin-spectrum.html\">spectrum analysis</link> would allow you to "
+"figure out what notes are being played?"
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:8(info/desc)
+#, fuzzy
+#| msgid ""
+#| "Use Gtkmm and GStreamermm to build a simple guitar tuner application for "
+#| "GNOME. Shows off how to use the interface designer."
+msgid ""
+"Use GTKmm and GStreamermm to build a simple guitar tuner application for "
+"GNOME. Shows off how to use the interface designer."
+msgstr ""
+"Usar GTKmm y GStreamer para construír un sinxelo afinador de guitarra para "
+"GNOME. Mostra como usar o deseñador de interfaces."
+
+#: C/guitar-tuner.cpp.page:33(item/p)
+msgid "Basic knowledge of the C++ programming language"
+msgstr "Coñecemento básico da linguaxe de programación C++"
+
+#: C/guitar-tuner.cpp.page:47(item/p)
+msgid ""
+"Choose <gui>GTKmm (Simple)</gui> from the <gui>C++</gui> tab, click "
+"<gui>Forward</gui>, and fill out your details on the next few pages. Use "
+"<file>guitar-tuner</file> as project name and directory."
+msgstr ""
+"Seleccione <gui>GTKmm (Simple)</gui> desde a lapela <gui>C++</gui>, prema "
+"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
+"<file>guitar-tunner</file> como nome do proxecto e cartafol."
+
+#: C/guitar-tuner.cpp.page:50(item/p)
+msgid ""
+"Make sure that <gui>Configure external packages</gui> is selected. On the "
+"next page, select <em>gstreamermm-0.10</em> from the list to include the "
+"GStreamermm library in your project."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:54(item/p)
+msgid ""
+"Click <gui>Finished</gui> and the project will be created for you. Open "
+"<file>src/main.cc</file> from the <gui>Project</gui> or <gui>File</gui> "
+"tabs. You should see some code which starts with the lines:"
+msgstr ""
+"Prema <gui>Rematar</gui> para crear o proxecto. Abra <file>src/main.cc</"
+"file> desde as lapelas <gui>Proxecto</gui> ou <gui>Ficheiro</gui>. Debería "
+"ver algún código que comeza coas liñas:"
+
+#: C/guitar-tuner.cpp.page:55(item/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtkmm.h&gt;\n"
+"#include &lt;iostream&gt;"
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:64(section/p) C/image-viewer.cpp.page:61(section/p)
+msgid ""
+"This is a very basic C++ code setting up GTKmm. More details are given "
+"below; skip this list if you understand the basics:"
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:68(item/p)
+msgid ""
+"The three <code>#include</code> lines at the top include the <code>config</"
+"code> (useful autoconf build defines), <code>gtkmm</code> (user interface) "
+"and <code>iostream</code> (STL). Functions from these libraries are used in "
+"the rest of the code."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:71(item/p)
+msgid ""
+"The <code>main</code> function creates a new window by opening a GtkBuilder "
+"file (<file>src/guitar-tuner.ui</file>, defined a few lines above) and then "
+"displaying it in a window. The GtkBuilder file contains a description of a "
+"user interface and all of its elements. You can use Anjuta's editor to "
+"design GtkBuilder user interfaces."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:74(item/p)
+msgid ""
+"Afterwards it calls a few functions which set up and then run the "
+"application. The <code>kit.run</code> function starts the GTKmm main loop, "
+"which runs the user interface and starts listening for events (like clicks "
+"and key presses)."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:99(item/p)
+msgid ""
+"While the button is still selected, change the <gui>Label</gui> property in "
+"the <gui>Widgets</gui> tab to <gui>E</gui>. This will be the low E string. "
+"Also change the <gui>Name</gui> property to <gui>button_E</gui>. This is the "
+"name we will refer to the widget later in code."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:103(item/p)
+msgid ""
+"Repeat the above steps for the other buttons, adding the next 5 strings with "
+"the labels <em>A</em>, <em>D</em>, <em>G</em>, <em>B</em>, and <em>e</em> "
+"and the names <em>button_A</em>, etc."
+msgstr ""
+"Repita os pasos anteriores para o resto de botóns, engadindo as 5 cordas "
+"restantes coas etiquetas <em>A</em>, <em>D</em>, <em>G</em>, <em>B</em> e "
+"<em>e</em> e os nomes <em>botón_A</em>, etc."
+
+#: C/guitar-tuner.cpp.page:106(item/p)
+msgid ""
+"Save the UI design (by clicking <guiseq><gui>File</gui><gui>Save</gui></"
+"guiseq>) and close the file."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:113(section/p)
+msgid ""
+"GStreamer is GNOME's multimedia framework — you can use it for playing, "
+"recording, and processing video, audio, webcam streams and the like. Here, "
+"we'll be using it to produce single-frequency tones. GStreamermm is the C++ "
+"binding to GStreamer which we will use here."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:123(section/title)
+msgid "Using GStreamermm"
+msgstr "Usar GStreamermm"
+
+#: C/guitar-tuner.cpp.page:124(section/p)
+msgid ""
+"To use GStreamermm, it has to be initialised. We do that by adding the "
+"following line of code next to the <code>Gtk::Main kit(argc, argv);</code> "
+"line in <file>main.cc</file>:"
+msgstr ""
+"Para usar GStreamermm, débese inicializar. Isto faise engadindo a seguinte "
+"liña de código xunto á liña <code>Gtk::Main kit(argc, argv);</code> en "
+"<file>main.cc</file>:"
+
+#: C/guitar-tuner.cpp.page:126(section/code)
+#, no-wrap
+msgid "\tGst::init (argc, argv);"
+msgstr "\tGst::init (argc, argv);"
+
+#: C/guitar-tuner.cpp.page:127(section/p)
+msgid ""
+"While we are on it, also make sure that the <file>gstreamermm.h</file> is "
+"included in <file>main.cc</file> properly."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:131(section/p)
+msgid ""
+"To simplify the handling of the pipeline we will define a helper class "
+"<code>Sound</code>. We do that in <file>main.cc</file> in order to keep this "
+"example simple, whereas you might usually want to use a separate file:"
+msgstr ""
+"Para simplificar a xestión da tubería definiremos unha clase axudante "
+"<code>Sound</code>. Farémolo no ficheiro <file>main.cc</file> para manter "
+"este exemplo o máis simple posíbel, aínda que normalmente debería facerse "
+"nun ficheiro separado:"
+
+#: C/guitar-tuner.cpp.page:134(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"class Sound\n"
+"{\n"
+"\tpublic:\n"
+"\t\tSound();\n"
+"\n"
+"\t\tvoid start_playing(double frequency);\n"
+"\t\tbool stop_playing();\n"
+"\n"
+"\tprivate:\n"
+"\t\tGlib::RefPtr&lt;Gst::Pipeline&gt; m_pipeline;\n"
+"\t\tGlib::RefPtr&lt;Gst::Element&gt; m_source;\n"
+"\t\tGlib::RefPtr&lt;Gst::Element&gt; m_sink;\n"
+"};\n"
+"\n"
+"Sound::Sound()\n"
+"{\n"
+"\tm_pipeline = Gst::Pipeline::create(\"note\");\n"
+"\tm_source = Gst::ElementFactory::create_element(\"audiotestsrc\",\n"
+"\t                                               \"source\");\n"
+"\tm_sink = Gst::ElementFactory::create_element(\"autoaudiosink\",\n"
+"\t                                             \"output\");\n"
+"\tm_pipeline-&gt;add(m_source);\n"
+"\tm_pipeline-&gt;add(m_sink);\n"
+"\tm_source-&gt;link(m_sink);\n"
+"}\n"
+"\n"
+"void Sound::start_playing (double frequency)\n"
+"{\n"
+"\tm_source-&gt;set_property(\"freq\", frequency);\n"
+"\tm_pipeline-&gt;set_state(Gst::STATE_PLAYING);\n"
+"\n"
+"\t/* stop it after 200ms */\n"
+"\tGlib::signal_timeout().connect(sigc::mem_fun(*this, &amp;Sound::stop_playing),\n"
+"\t                               200);\n"
+"}\n"
+"\n"
+"bool Sound::stop_playing()\n"
+"{\n"
+"\tm_pipeline-&gt;set_state(Gst::STATE_NULL);\n"
+"\treturn false;\n"
+"}\n"
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:178(section/p)
+msgid "The code has the following purpose:"
+msgstr "O código ten o seguinte propósito:"
+
+#: C/guitar-tuner.cpp.page:181(item/p)
+msgid ""
+"In the constructor, source and sink GStreamer elements (<code>Gst::Element</"
+"code>) are created, and a pipeline element (which will be used as a "
+"container for the other two elements). The pipeline is given the name \"note"
+"\"; the source is named \"source\" and is set to the <code>audiotestsrc</"
+"code> source; and the sink is named \"output\" and set to the "
+"<code>autoaudiosink</code> sink (default sound card output). After the "
+"elements have been added to the pipeline and linked together, the pipeline "
+"is ready to run."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:184(item/p)
+msgid ""
+"<code>start_playing</code> sets the source element to play a particular "
+"frequency and then starts the pipeline so the sound actually starts playing. "
+"As we don't want to have the annoying sound for ages, a timeout is set up to "
+"stop the pipeline after 200 ms by calling <code>stop_playing</code>."
+msgstr ""
+"<code>start_playing</code> estabelece o elemento orixe para reproducir unha "
+"frecuencia particular e logo iniciar unha tubería ao son que comece a "
+"reproducirse. Xa que non queremos un son estridente por anos estabeleceremos "
+"un temporizador de 200 ms para deter a reprodución chamando a "
+"<code>stop_playing</code>."
+
+#: C/guitar-tuner.cpp.page:189(item/p)
+msgid ""
+"In <code>stop_playing</code> which is called when the timeout has elapsed, "
+"the pipeline is stopped and as such there isn't any sound output anymore. As "
+"GStreamermm uses reference counting through the <code>Glib::RefPtr</code> "
+"object, the memory is automatically freed once the <code>Sound</code> class "
+"is destroyed."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:197(section/title)
+msgid "Connecting the signals"
+msgstr "Conectar os sinais"
+
+#: C/guitar-tuner.cpp.page:198(section/p)
+msgid ""
+"We want to play the correct sound when the user clicks a button. That means "
+"that we have to connect to the signal that is fired when the user clicks the "
+"button. We also want to provide information to the called function which "
+"tone to play. GTKmm makes that quite easy as we can easily bind information "
+"with the <em>sigc</em> library."
+msgstr ""
+"Queremos reproducir o son correcto cando o usuario prema un botón. Isto "
+"significa que temos que conectar o sinal que se dispara cando o usuario "
+"preme o botón. Tamén queremos fornecer información da función que se chamou "
+"a reprodución do tono. GTKmm fai isto moi doado a que podemos ligar de forma "
+"sinxela a información coa biblioteca <em>sigc</em>."
+
+#: C/guitar-tuner.cpp.page:203(section/p)
+msgid ""
+"The function that is called when the user clicks a button can be pretty "
+"simple, as all the interesting stuff is done in the helper class now:"
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:205(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"static void\n"
+"on_button_clicked(double frequency, Sound* sound)\n"
+"{\n"
+"\tsound-&gt;start_playing (frequency);\n"
+"}\n"
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:212(section/p)
+msgid ""
+"It only calls the helper class we defined before to play the correct "
+"frequencies. With some more clever code we would also have been able to "
+"directly connect to the class without using the function but we will leave "
+"that to use as an exercise."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:216(section/p)
+msgid ""
+"The code to set up the signals should be added to the <code>main()</code> "
+"function just after the <code>builder-&gt;get_widget(\"main_window\", "
+"main_win);</code> line:"
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:218(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"Sound sound;\n"
+"Gtk::Button* button;\n"
+"\n"
+"builder-&gt;get_widget(\"button_E\", button);\n"
+"button-&gt;signal_clicked().connect (sigc::bind&lt;double, 
Sound*&gt;(sigc::ptr_fun(&amp;on_button_clicked),\n"
+"                                              369.23, &amp;sound));\n"
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:228(item/p)
+msgid ""
+"At first we create an instance of our helper class that we want to use now "
+"and declare a variable for the button we want to connect to."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:232(item/p)
+msgid ""
+"Next, we receive the button object from the user interface that was created "
+"out of the user interface file. Remember that <em>button_E</em> is the name "
+"we gave to the first button."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:236(item/p)
+msgid ""
+"Finally we connect the <em>clicked</em> signal. This isn't fully "
+"straightforward because this is done in a fully type-safe way and we "
+"actually want to pass the frequency and our helper class to the signal "
+"handler. <code>sigc::ptr_fun(&amp;on_button_clicked)</code> creates a "
+"<em>slot</em> for the <code>on_button_clicked</code> method we defined "
+"above. With <code>sigc::bind</code> we are able to pass additional arguments "
+"to the slot and in this case we pass the frequency (as double) and our "
+"helper class."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:243(section/p)
+msgid ""
+"Now that we have set up the <em>E</em> button we also need to connect the "
+"other buttons according to their frequencies: 440 for A, 587.33 for D, "
+"783.99 for G, 987.77 for B and 1318.5 for the high E. This is done in the "
+"same way, just passing a different frequency to the handler."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:250(section/p)
+msgid ""
+"All of the code should now be ready to go. Click <guiseq><gui>Build</"
+"gui><gui>Build Project</gui></guiseq> to build everything again, and then "
+"<guiseq><gui>Run</gui><gui>Run</gui></guiseq> to start the application."
+msgstr ""
+
+#: C/guitar-tuner.cpp.page:256(section/p)
+msgid ""
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"guitar-tuner/guitar-tuner.cc\">reference code</link>."
+msgstr ""
+"Se ten problemas ao executar este titorial compare o seu código con este "
+"<link href=\"guitar-tuner/guitar-tuner.cc\">código de referencia</link>."
+
+#: C/guitar-tuner.cpp.page:260(section/title)
+msgid "Further Reading"
+msgstr "Lectura complementaria"
+
+#: C/guitar-tuner.cpp.page:261(section/p)
+msgid ""
+"Many of the things shown above are explained in detail in the <link href="
+"\"http://library.gnome.org/devel/gtkmm-tutorial/stable/\";>GTKmm book</link> "
+"which also covers a lot more key concept for using the full power of GTKmm. "
+"You might also be interested in the <link href=\"http://library.gnome.org/";
+"devel/gstreamermm/\">GStreamermm reference documentation</link>."
+msgstr ""
+
+#: C/guitar-tuner.js.page:6(info/title)
+#, fuzzy
+#| msgid "Guitar Tuner"
+msgctxt "text"
+msgid "Guitar Tuner (JavaScript)"
+msgstr "Afinador de guitarra"
+
+#: C/guitar-tuner.js.page:16(info/desc)
+#, fuzzy
+#| msgid ""
+#| "Use Gtk+ and GStreamer to build a simple guitar tuner application for "
+#| "GNOME. Shows off how to use the interface designer."
+msgid ""
+"Use Gtk+ and GStreamer to build a simple guitar tuner application for GNOME."
+msgstr ""
+"Usar GTK+ y GStreamer para construír un sinxelo afinador de guitarra para "
+"GNOME. Mostra como usar o deseñador de interfaces."
+
+#: C/guitar-tuner.js.page:19(page/title) C/guitar-tuner.py.page:23(page/title)
+#: C/guitar-tuner.vala.page:26(page/title)
+#, fuzzy
+#| msgid "Guitar Tuner"
+msgid "2 Guitar Tuner"
+msgstr "Afinador de guitarra"
+
+#: C/guitar-tuner.js.page:22(synopsis/p)
+msgid ""
+"In this tutorial we'll construct a small application, Guitar Tuner, using "
+"JavaScript and GTK+ and GStreamer. To do and run all the code examples "
+"yourself, you need an editor to write code in, terminal and GNOME 3. or "
+"higher installed into your computer."
+msgstr ""
+
+#: C/guitar-tuner.js.page:24(item/p)
+#, fuzzy
+#| msgid "An example GStreamer pipeline."
+msgid "<link xref=\"#gstreamer\">GStreamer pipelines</link>"
+msgstr "Un exemplo de tubería de GStreamer."
+
+#: C/guitar-tuner.js.page:25(item/p) C/weatherAppMain.js.page:22(item/p)
+#, fuzzy
+#| msgid "Script for running the application"
+msgid "<link xref=\"#script\">Script for running the application</link>"
+msgstr "Script para executar o aplicativo"
+
+#: C/guitar-tuner.js.page:26(item/p) C/weatherAppMain.js.page:23(item/p)
+msgid "<link xref=\"#imports\">Libraries to import</link>"
+msgstr ""
+
+#: C/guitar-tuner.js.page:27(item/p) C/weatherAppMain.js.page:24(item/p)
+#, fuzzy
+#| msgid "Creating the main window for the application"
+msgid ""
+"<link xref=\"#mainwindow\">Creating the main window for the application</"
+"link>"
+msgstr "Crear a xanela principal para o aplicativo"
+
+#: C/guitar-tuner.js.page:28(item/p)
+msgid "<link xref=\"#buttons\">Buttons for the tunes</link>"
+msgstr ""
+
+#: C/guitar-tuner.js.page:29(item/p)
+msgid "<link xref=\"#playSound\">Making the sounds with GStreamer</link>"
+msgstr ""
+
+#: C/guitar-tuner.js.page:30(item/p)
+msgid "<link xref=\"#connecting\">Connecting buttons to playSound</link>"
+msgstr ""
+
+#: C/guitar-tuner.js.page:31(item/p)
+msgid "<link xref=\"#guitarjs\">The whole program</link>"
+msgstr ""
+
+#: C/guitar-tuner.js.page:32(item/p)
+#, fuzzy
+#| msgid "Run the application"
+msgid "<link xref=\"#terminal\">Running the application form Terminal</link>"
+msgstr "Executar o aplicativo"
+
+#: C/guitar-tuner.js.page:35(page/p) C/weatherApp.js.page:34(page/p)
+msgid "After reading this tutorial, you should see this in your screen:"
+msgstr "Despois de ler este manual, debería ver isto na pantalla:"
+
+#: C/guitar-tuner.js.page:47(section/title)
+#: C/helloWorld.js.page:45(section/title)
+#: C/weatherAppMain.js.page:32(section/title)
+msgid "Script for running the application"
+msgstr "Script para executar o aplicativo"
+
+#: C/guitar-tuner.js.page:48(section/code)
+#: C/weatherAppMain.js.page:33(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"  #!/usr/bin/gjs"
+msgstr ""
+
+#: C/guitar-tuner.js.page:50(section/p)
+msgid ""
+"This line tells how to run the script. It needs to be the first line of the "
+"code and it needs to be executable. To get the execution rights go to "
+"terminal and run in right folder: chmod +x scriptname. Or you can use the "
+"graphical filemanager. Just go to the right folder where your code is, right "
+"click you code file, choose properties, click the permissions tab and check "
+"the box for allow executing file as a program"
+msgstr ""
+
+#: C/guitar-tuner.js.page:55(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"var Gtk = imports.gi.Gtk;\n"
+"var Gst = imports.gi.Gst;\n"
+"\n"
+"const Mainloop = imports.mainloop;"
+msgstr ""
+
+#: C/guitar-tuner.js.page:60(section/p)
+msgid ""
+"In order to have a working program we need to import a few GObject "
+"Introspection -libraries to our use. For working UI, we need Gtk and for "
+"Gstreamer to work we need Gst. These are imported in the beginning so we "
+"have them at use everywhere. Also in the beginning we import a construct "
+"Mainloop to handle the timeout to be used with the tuning sounds."
+msgstr ""
+
+#: C/guitar-tuner.js.page:63(section/title)
+#: C/helloWorld.js.page:58(section/title)
+#: C/weatherAppMain.js.page:48(section/title)
+msgid "Creating the main window for the application"
+msgstr "Crear a xanela principal para o aplicativo"
+
+#: C/guitar-tuner.js.page:64(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"Gtk.init(null, 0);\n"
+"Gst.init(null, 0);\n"
+"\n"
+"var guitarwindow = new Gtk.Window({type: Gtk.WindowType.TOPLEVEL, border_width: 100});\n"
+"guitarwindow.title = \"Guitar Tuner\";\n"
+"guitarwindow.connect(\"destroy\", function(){Gtk.main_quit()});\n"
+"\n"
+"guitarwindow.show();\n"
+"Gtk.main();"
+msgstr ""
+
+#: C/guitar-tuner.js.page:74(section/p)
+msgid ""
+"Importing Gtk and Gst is not enough, we need to initialize them in order to "
+"get them working. When Gtk and Gst are up and running we need to create the "
+"window for the application. Later we are going to put all the buttons for "
+"making sounds inside this window. In order to get the window showing, we "
+"need to tell it to show and we need also to run the code with the Gtk.main()"
+msgstr ""
+
+#: C/guitar-tuner.js.page:77(section/title)
+msgid "Buttons for the tunes"
+msgstr ""
+
+#: C/guitar-tuner.js.page:78(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"var guitar_box = new Gtk.ButtonBox ({orientation: Gtk.Orientation.VERTICAL, spacing: 10});\n"
+"\n"
+"var E = new Gtk.Button({label: \"E\"});\n"
+"var A = new Gtk.Button({label: \"A\"});\n"
+"var D = new Gtk.Button({label: \"D\"});\n"
+"var G = new Gtk.Button({label: \"G\"});\n"
+"var B = new Gtk.Button({label: \"B\"});\n"
+"var e = new Gtk.Button({label: \"e\"});\n"
+"\n"
+"guitar_box.add(E);\n"
+"guitar_box.add(A);\n"
+"guitar_box.add(D);\n"
+"guitar_box.add(G);\n"
+"guitar_box.add(B);\n"
+"guitar_box.add(e);\n"
+"\n"
+"guitarwindow.add(guitar_box);\n"
+"\n"
+"guitar_box.show_all();"
+msgstr ""
+
+#: C/guitar-tuner.js.page:98(section/p)
+msgid ""
+"Because Gtk.Window can only contain a single widget, we need to create "
+"something under it to be able to add all the necessary buttons inside it. In "
+"this example we use Buttonbox. After creating the Buttonbox we create "
+"buttons with necessary labels. After we have the buttons we need to add them "
+"to the Buttonbox and the Buttonbox must be added to the Gtk.Window and "
+"everything in the Buttonbox must be shown."
+msgstr ""
+
+#: C/guitar-tuner.js.page:99(section/p)
+msgid ""
+"After this stage you should have a window appearing to your screen showing 6 "
+"buttons. Right now the buttons don't do anything and we shall address that "
+"issue later. Before we can connect the button signals to something we need "
+"to code that something first."
+msgstr ""
+
+#: C/guitar-tuner.js.page:102(section/title)
+msgid "Making the sounds with GStreamer"
+msgstr ""
+
+#: C/guitar-tuner.js.page:103(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"var frequencies = {E: 369.23, A: 440,\tD: 587.33,\tG: 783.99,\tB: 987.77,\te: 1318.5}\n"
+"\n"
+"function playSound(frequency){\n"
+"  var pipeline = new Gst.Pipeline({name: \"note\"});\n"
+"  var source = new Gst.ElementFactory.make(\"audiotestsrc\",\"source\");\n"
+"  var sink = new Gst.ElementFactory.make(\"autoaudiosink\",\"output\");\n"
+"\n"
+"  source.set_property('freq', frequency);\n"
+"  pipeline.add(source);\n"
+"  pipeline.add(sink);\n"
+"  source.link(sink);\n"
+"  pipeline.set_state(Gst.State.PLAYING);\n"
+"\n"
+"  Mainloop.timeout_add(500, function () {\n"
+"    pipeline.set_state(Gst.State.PAUSED);\n"
+"\t  return false;\n"
+"  });\n"
+"}"
+msgstr ""
+
+#: C/guitar-tuner.js.page:122(section/p)
+msgid ""
+"The first thing we need to do is decide what tunes we want to make when we "
+"push a button. The frequencies list takes care of that. After that we get to "
+"actually making the sounds with the function playSound. For function "
+"playSound we give as an input a frequency (that we just defined in the "
+"frequencies variable). First thing we need to construct is a pipeline, a "
+"source and a sink. For the source we set the frequency. To the pipeline we "
+"add both the source and the sink and then we tell it to keep playing. As a "
+"last thing we use the const Mainloop to get the pipeline to pause after a "
+"500ms."
+msgstr ""
+
+#: C/guitar-tuner.js.page:123(section/p)
+msgid ""
+"Now we have the method of playing a tune when clicking a button. Next well "
+"make the conncetions between pushing a button and playing the correct sound "
+"from that button."
+msgstr ""
+
+#: C/guitar-tuner.js.page:126(section/title)
+msgid "Connecting buttons to playSound"
+msgstr ""
+
+#: C/guitar-tuner.js.page:127(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"E.connect(\"clicked\", function() {\n"
+"  playSound(frequencies.E);\n"
+"});\n"
+"A.connect(\"clicked\", function(){\n"
+"  playSound(frequencies.A);\n"
+"});\n"
+"D.connect(\"clicked\", function(){\n"
+"  playSound(frequencies.D);\n"
+"});\n"
+"G.connect(\"clicked\", function(){\n"
+"  playSound(frequencies.G);\n"
+"});\n"
+"B.connect(\"clicked\", function(){\n"
+"  playSound(frequencies.B);\n"
+"});\n"
+"e.connect(\"clicked\", function(){\n"
+"  playSound(frequencies.e);\n"
+"});"
+msgstr ""
+
+#: C/guitar-tuner.js.page:146(section/p)
+msgid ""
+"The method of connecting button clicks to playSound with the correct tune is "
+"by using the connect method of the button widget. So we choose a button to "
+"be connected and type E.connect(\"clicked\", function(){playSound"
+"(frequencies.E);}); The connect tells that when pushing E, something should "
+"happen. The \"clicked\" tells the type of something happening to E and then "
+"in the function(){}; we the playSound happen with the correct tune that "
+"should be associated to the button."
+msgstr ""
+
+#: C/guitar-tuner.js.page:149(section/title)
+msgid "The whole program"
+msgstr ""
+
+#: C/guitar-tuner.js.page:150(section/p)
+msgid ""
+"So this is what all the parts combined looks like. When running this code, "
+"you should be able to tune your guitar(if you have correctly calibrated "
+"speakers)."
+msgstr ""
+
+#: C/guitar-tuner.js.page:151(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"var Gtk = imports.gi.Gtk;\n"
+"var Gst = imports.gi.Gst;\n"
+"\n"
+"const Mainloop = imports.mainloop;\n"
+"\n"
+"Gtk.init(null, 0);\n"
+"Gst.init(null, 0);\n"
+"\n"
+"var guitarwindow = new Gtk.Window({type: Gtk.WindowType.TOPLEVEL, border_width: 100});\n"
+"guitarwindow.title = \"Guitar Tuner\";\n"
+"guitarwindow.connect(\"destroy\", function(){Gtk.main_quit()});\n"
+"\n"
+"var guitar_box = new Gtk.ButtonBox ({orientation: Gtk.Orientation.VERTICAL, spacing: 10});\n"
+"\n"
+"var E = new Gtk.Button({label: \"E\"});\n"
+"var A = new Gtk.Button({label: \"A\"});\n"
+"var D = new Gtk.Button({label: \"D\"});\n"
+"var G = new Gtk.Button({label: \"G\"});\n"
+"var B = new Gtk.Button({label: \"B\"});\n"
+"var e = new Gtk.Button({label: \"e\"});\n"
+"\n"
+"var frequencies = {E: 369.23, A: 440,\tD: 587.33,\tG: 783.99,\tB: 987.77,\te: 1318.5}\n"
+"\n"
+"\n"
+"function playSound(frequency){\n"
+"  var pipeline = new Gst.Pipeline({name: \"note\"});\n"
+"\n"
+"  var source = new Gst.ElementFactory.make(\"audiotestsrc\",\"source\");\n"
+"  var sink = new Gst.ElementFactory.make(\"autoaudiosink\",\"output\");\n"
+"\n"
+"  source.set_property('freq', frequency);\n"
+"  pipeline.add(source);\n"
+"  pipeline.add(sink);\n"
+"  source.link(sink);\n"
+"  pipeline.set_state(Gst.State.PLAYING);\n"
+"\n"
+"  Mainloop.timeout_add(500, function () {\n"
+"    pipeline.set_state(Gst.State.PAUSED);\n"
+"\t  return false;\n"
+"});\n"
+"}\n"
+"\n"
+"E.connect(\"clicked\", function() {\n"
+"  playSound(frequencies.E);\n"
+"});\n"
+"A.connect(\"clicked\", function(){\n"
+"  playSound(frequencies.A);\n"
+"});\n"
+"D.connect(\"clicked\", function(){\n"
+"  playSound(frequencies.D);\n"
+"});\n"
+"G.connect(\"clicked\", function(){\n"
+"  playSound(frequencies.G);\n"
+"});\n"
+"B.connect(\"clicked\", function(){\n"
+"  playSound(frequencies.B);\n"
+"});\n"
+"e.connect(\"clicked\", function(){\n"
+"  playSound(frequencies.e);\n"
+"});\n"
+"\n"
+"guitar_box.add(E);\n"
+"guitar_box.add(A);\n"
+"guitar_box.add(D);\n"
+"guitar_box.add(G);\n"
+"guitar_box.add(B);\n"
+"guitar_box.add(e);\n"
+"\n"
+"guitarwindow.add(guitar_box);\n"
+"\n"
+"guitar_box.show_all();\n"
+"guitarwindow.show();\n"
+"Gtk.main();"
+msgstr ""
+
+#: C/guitar-tuner.js.page:229(section/title)
+#, fuzzy
+#| msgid "Run the application"
+msgid "Running the application form Terminal"
+msgstr "Executar o aplicativo"
+
+#: C/guitar-tuner.js.page:230(section/p)
+msgid ""
+"To run this application open Terminal, go to the folder where your "
+"application is stored and then run"
+msgstr ""
+
+#: C/guitar-tuner.js.page:230(section/screen)
+#, no-wrap
+msgid " <output style=\"prompt\">$ </output><input> GJS_PATH=`pwd` gjs guitarTuner.js</input> "
+msgstr ""
+
+#: C/guitar-tuner.js.page:235(section/p)
+#, fuzzy
+#| msgid ""
+#| "If you run into problems with the tutorial, compare your code with this "
+#| "<link href=\"guitar-tuner/guitar-tuner.c\">reference code</link>."
+msgid ""
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"guitar-tuner/guitar-tuner.js\">reference code</link>."
+msgstr ""
+"Se ten problemas ao executar este titorial compare o seu código con este "
+"<link href=\"guitar-tuner/guitar-tuner.c\">código de referencia</link>."
+
+#: C/guitar-tuner.py.page:7(info/title)
+#, fuzzy
+#| msgid "Guitar Tuner"
+msgctxt "text"
+msgid "Guitar Tuner (Python)"
+msgstr "Afinador de guitarra"
+
+#: C/guitar-tuner.py.page:35(item/p)
+msgid "Basic knowledge of the Python programming language"
+msgstr "Coñecemento básico da linguaxe de programación Python"
+
+#: C/guitar-tuner.py.page:49(item/p)
+#, fuzzy
+#| msgid ""
+#| "Choose <gui>GTKmm (Simple)</gui> from the <gui>C++</gui> tab, click "
+#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
+#| "<file>guitar-tuner</file> as project name and directory."
+msgid ""
+"Choose <gui>PyGTK (automake)</gui> from the <gui>Python</gui> tab, click "
+"<gui>Continue</gui>, and fill out your details on the next few pages. Use "
+"<file>guitar-tuner</file> as project name and directory."
+msgstr ""
+"Seleccione <gui>GTKmm (Simple)</gui> desde a lapela <gui>C++</gui>, prema "
+"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
+"<file>guitar-tunner</file> como nome do proxecto e cartafol."
+
+#: C/guitar-tuner.py.page:52(item/p)
+msgid ""
+"Click <gui>Apply</gui> and the project will be created for you. Open "
+"<file>src/guitar_tuner.py</file> from the <gui>Project</gui> or <gui>File</"
+"gui> tabs. You should see some code which starts with the lines:"
+msgstr ""
+"Prema <gui>Aplicar</gui> e crearase o proxecto. Abra <file>src/guitar_tuner."
+"py</file> desde as lapelas <gui>Proxecto</gui> ou <gui>Ficheiro</gui>. "
+"Debería ver algo de código que comece coas liñas:"
+
+#: C/guitar-tuner.py.page:53(item/code)
+#, no-wrap
+msgid ""
+"\n"
+"from gi.repository import Gtk, GdkPixbuf, Gdk\n"
+"import os, sys"
+msgstr ""
+
+#: C/guitar-tuner.py.page:61(section/title)
+msgid "Run the code for the first time"
+msgstr "Executar o código por primeira vez"
+
+#: C/guitar-tuner.py.page:62(section/p)
+msgid ""
+"Most of the code in the file is template code. It loads an (empty) window "
+"from the user interface description file and shows it. More details are "
+"given below; skip this list if you understand the basics:"
+msgstr ""
+
+#: C/guitar-tuner.py.page:66(item/p)
+msgid ""
+"The <code>import</code> lines at the top include the tell Python to load the "
+"user interface and system libraries needed."
+msgstr ""
+
+#: C/guitar-tuner.py.page:70(item/p)
+msgid ""
+"A class is declared that will be the main class for our application. In the "
+"<code>__init__</code> method the main window is loaded from the GtkBuilder "
+"file (<file>src/guitar-tuner.ui</file>) and the signals are connected."
+msgstr ""
+
+#: C/guitar-tuner.py.page:73(item/p)
+msgid ""
+"Connecting signals is how you define what happens when you push a button, or "
+"when some other event happens. Here, the <code>destroy</code> method is "
+"called (and quits the app) when you close the window."
+msgstr ""
+
+#: C/guitar-tuner.py.page:76(item/p)
+msgid ""
+"The <code>main</code> function is run by default when you start a Python "
+"application. It just creates an instance of the main class and starts the "
+"main loop to bring up the window."
+msgstr ""
+
+#: C/guitar-tuner.py.page:81(section/p)
+msgid ""
+"This code is ready to be used, so you can run it by clicking "
+"<guiseq><gui>Run</gui><gui>Execute</gui></guiseq>."
+msgstr ""
+"Este código está listo para o seu uso, polo que pode executalo premendo "
+"<guiseq><gui>Executar</gui><gui>Executar</gui></guiseq>."
+
+#: C/guitar-tuner.py.page:86(section/p)
+msgid ""
+"A description of the user interface (UI) is contained in the GtkBuilder "
+"file. To edit the user interface, open <file>src/guitar_tuner.ui</file>. "
+"This will switch to the interface designer. The design window is in the "
+"center; widgets and widgets' properties are on the right, and the palette of "
+"available widgets is on the left."
+msgstr ""
+
+#: C/guitar-tuner.py.page:116(section/title)
+msgid "Write the signal handler"
+msgstr "Escribir o manexador de sinais"
+
+#: C/guitar-tuner.py.page:118(section/p)
+msgid ""
+"To do this, open <file>guitar_tuner.py</file> while the user interface file "
+"is still open. Switch to the <gui>Signals</gui> tab, which you already used "
+"to set the signal name. Now take the row where you set the <gui>clicked</"
+"gui> signal and drag it into to the source file inside the class. The "
+"following code will be added to your source file:"
+msgstr ""
+
+#: C/guitar-tuner.py.page:120(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"def on_button_clicked (self, button):\n"
+msgstr ""
+
+#: C/guitar-tuner.py.page:124(section/p)
+msgid ""
+"This signal handler has two arguments: the usual Python class pointer, and "
+"the <code>Gtk.Button</code> that called the function."
+msgstr ""
+
+#: C/guitar-tuner.py.page:142(section/p)
+msgid ""
+"Change the import line in <file>guitar_tuner.py</file>, just at the "
+"beginning to :"
+msgstr ""
+
+#: C/guitar-tuner.py.page:143(section/code)
+#, no-wrap
+msgid "from gi.repository import Gtk, Gst, GObject "
+msgstr ""
+
+#: C/guitar-tuner.py.page:144(section/p)
+msgid ""
+"The <code>Gst</code> includes the GStreamer library. You also need to "
+"initialise GStreamer properly which is done in the <code>main()</code> "
+"method with this call added above the <code>app = GUI()</code> line:"
+msgstr ""
+
+#: C/guitar-tuner.py.page:147(section/code)
+#, no-wrap
+msgid "Gst.init_check(sys.argv)"
+msgstr ""
+
+#: C/guitar-tuner.py.page:148(section/p)
+#, fuzzy
+#| msgid ""
+#| "Then, copy the following function into <file>main.c</file> above the "
+#| "empty <code>on_button_clicked</code> function:"
+msgid ""
+"Then, copy the following function into the class in <file>guitar_tuner.py</"
+"file> somewhere:"
+msgstr ""
+"Despois, copie a seguinte función en <file>main.c</file> enriba da función "
+"<code>on_button_clicked</code> baleira:"
+
+#: C/guitar-tuner.py.page:149(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"def play_sound(self, frequency):\n"
+"\tpipeline = Gst.Pipeline(name='note')\n"
+"\tsource = Gst.ElementFactory.make('audiotestsrc', 'src')\n"
+"\tsink = Gst.ElementFactory.make('autoaudiosink', 'output')\n"
+"\n"
+"\tsource.set_property('freq', frequency)\n"
+"\tpipeline.add(source)\n"
+"\tpipeline.add(sink)\n"
+"\tsource.link(sink)\n"
+"\tpipeline.set_state(Gst.State.PLAYING)\n"
+"\n"
+"\tGObject.timeout_add(self.LENGTH, self.pipeline_stop, pipeline)"
+msgstr ""
+
+#: C/guitar-tuner.py.page:164(item/p)
+msgid ""
+"The first three lines create source and sink GStreamer elements and a "
+"pipeline element (which will be used as a container for the other two "
+"elements). The pipeline is given the name \"note\"; the source is named "
+"\"source\" and is set to the <code>audiotestsrc</code> source; and the sink "
+"is named \"output\" and set to the <code>autoaudiosink</code> sink (default "
+"sound card output)."
+msgstr ""
+
+#: C/guitar-tuner.py.page:167(item/p)
+msgid ""
+"The call to <code>source.set_property</code> sets the <code>freq</code> "
+"property of the source element to <code>frequency</code>, which was passed "
+"as an argument to the <code>play_sound</code> function. This is just the "
+"frequency of the note in Hertz; some useful frequencies will be defined "
+"later on."
+msgstr ""
+
+#: C/guitar-tuner.py.page:170(item/p)
+msgid ""
+"The next two lines call <code>pipeline.add</code>, putting the source and "
+"sink into the pipeline. The pipeline can contain multiple other GStreamer "
+"elements. In general, you can add as many elements as you like to the "
+"pipeline by calling its <code>add</code> method repeatedly."
+msgstr ""
+
+#: C/guitar-tuner.py.page:173(item/p)
+msgid ""
+"Next <code>pipeline.set_state</code> is used to start playback, by setting "
+"the state of the pipeline to playing (<code>Gst.State.PLAYING</code>)."
+msgstr ""
+"A seguinte <code>pipeline.set_state</code> úsase para iniciar a reprodución, "
+"estabelecendo o estado da tubería a reprodución (<code>Gst.State.PLAYING</"
+"code>)."
+
+#: C/guitar-tuner.py.page:181(section/p)
+msgid ""
+"We don't want to play an annoying tone forever, so the last thing "
+"<code>play_sound</code> does is to call <code>GObject.timeout_add</code>. "
+"This sets a timeout for stopping the sound; it waits for <code>LENGTH</code> "
+"milliseconds before calling the function <code>pipeline_stop</code>, and "
+"will keep calling it until <code>pipeline_stop</code> returns <code>False</"
+"code>."
+msgstr ""
+
+#: C/guitar-tuner.py.page:182(section/p)
+msgid ""
+"Now, we'll write the <code>pipeline_stop</code> function which is called by "
+"<code>GObject.timeout_add</code>. Insert the following code <em>above</em> "
+"the <code>play_sound</code> function:"
+msgstr ""
+"Agora, escríbese o código da función <code>pipeline_stop</code>, chamada por "
+"<code>GObject.timeout_add</code>. Inserte o código seguinte <em>enriba</em> "
+"da función <code>play_sound</code>:"
+
+#: C/guitar-tuner.py.page:183(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"def pipeline_stop(self, pipeline):\n"
+"\tpipeline.set_state(Gst.State.PAUSED)\n"
+"\treturn False\n"
+msgstr ""
+
+#: C/guitar-tuner.py.page:188(section/p)
+msgid ""
+"You need to define the <code>LENGTH</code> constant inside the class, so add "
+"this code at the beginning of the main class:"
+msgstr ""
+
+#: C/guitar-tuner.py.page:190(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"LENGTH = 500\n"
+msgstr ""
+
+#: C/guitar-tuner.py.page:193(section/p)
+msgid ""
+"The call to <code>pipeline.set_state</code> pauses the playback of the "
+"pipeline."
+msgstr ""
+
+#: C/guitar-tuner.py.page:198(section/p)
+msgid ""
+"We want to play the correct sound when the user clicks a button. First of "
+"all, we need to know the frequencies for the six guitar strings, which are "
+"defined (at the beginning of the main class) inside a dictionary so we can "
+"easily map them to the names of the strings:"
+msgstr ""
+
+#: C/guitar-tuner.py.page:200(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"# Frequencies of the strings\n"
+"frequencies = {\n"
+"\t'E': 369.23,\n"
+"\t'A': 440,\n"
+"\t'D': 587.33,\n"
+"\t'G': 783.99,\n"
+"\t'B': 987.77,\n"
+"\t'e': 1318.5\n"
+"}\n"
+msgstr ""
+
+#: C/guitar-tuner.py.page:212(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"def on_button_clicked(self, button):\n"
+"\tlabel = button.get_child()\n"
+"\ttext = label.get_label()\n"
+"\n"
+"\tself.play_sound (self.frequencies[text])\n"
+msgstr ""
+
+#: C/guitar-tuner.py.page:219(section/p)
+msgid ""
+"The button that was clicked is passed as an argument (<code>button</code>) "
+"to <code>on_button_clicked</code>. We can get the label of that button by "
+"using <code>button.get_child</code>, and then get the text from that label "
+"using <code>label.get_label</code>."
+msgstr ""
+
+#: C/guitar-tuner.py.page:220(section/p)
+msgid ""
+"The label text is then used as a key for the dictionary and "
+"<code>play_sound</code> is called with the frequency appropriate for that "
+"note. This plays the tone; we have a working guitar tuner!"
+msgstr ""
+
+#: C/guitar-tuner.py.page:224(section/title)
+#: C/image-viewer.js.page:306(section/title)
+#: C/image-viewer.py.page:220(section/title)
+#: C/record-collection.js.page:286(section/title)
+msgid "Run the application"
+msgstr "Executar o aplicativo"
+
+#: C/guitar-tuner.py.page:225(section/p)
+msgid ""
+"All of the code should now be ready to go. Click <guiseq><gui>Run</"
+"gui><gui>Execute</gui></guiseq> to start the application. Enjoy!"
+msgstr ""
+"Todo o código debería estar listo. Prema <guiseq><gui>Executar</"
+"gui><gui>Executar</gui></guiseq> para iniciar o aplicativo. Góceo!"
+
+#: C/guitar-tuner.py.page:230(section/p)
+msgid ""
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"guitar-tuner/guitar-tuner.py\">reference code</link>."
+msgstr ""
+"Se ten problemas ao executar este titorial compare o seu código con este "
+"<link href=\"guitar-tuner/guitar-tuner.py\">código de referencia</link>."
+
+#: C/guitar-tuner.vala.page:9(info/desc)
+#, fuzzy
+#| msgid ""
+#| "Use Gtk+ and GStreamer to build a simple guitar tuner application for "
+#| "GNOME. Shows off how to use the interface designer."
+msgid ""
+"Use <link href=\"http://developer.gnome.org/platform-overview/stable/gtk";
+"\">Gtk+</link> and <link href=\"http://developer.gnome.org/platform-overview/";
+"stable/gstreamer\">GStreamer</link> to build a simple guitar tuner "
+"application for GNOME. Shows off how to use the interface designer."
+msgstr ""
+"Usar GTK+ y GStreamer para construír un sinxelo afinador de guitarra para "
+"GNOME. Mostra como usar o deseñador de interfaces."
+
+#: C/guitar-tuner.vala.page:29(synopsis/p)
+#, fuzzy
+#| msgid ""
+#| "In this tutorial, we're going to make a program which plays tones that "
+#| "you can use to tune a guitar. You will learn how to:"
+msgid ""
+"In this tutorial you will create an application which plays tones that you "
+"can use to tune a guitar. You will learn how to:"
+msgstr ""
+"Neste titorial faremos un programa que reproduce tonos que pode usar para "
+"afinar unha guitarra. Aprenderá como:"
+
+#: C/guitar-tuner.vala.page:31(item/p)
+msgid ""
+"Set up a basic project using the <link xref=\"getting-ready\">Anjuta IDE</"
+"link>."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:32(item/p)
+#, fuzzy
+#| msgid "Create a simple GUI with Anjuta's UI designer"
+msgid "Create a simple GUI with <app>Anjuta</app>'s UI designer."
+msgstr "Crear unha GUI sinxela co deseñador de UI de Anjuta"
+
+#: C/guitar-tuner.vala.page:33(item/p)
+msgid ""
+"Use the <link href=\"http://developer.gnome.org/platform-overview/stable/";
+"gstreamer\">GStreamer</link> library to play sounds."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:37(item/p) C/image-viewer.vala.page:42(item/p)
+#, fuzzy
+#| msgid "Basic knowledge of the Vala programming language"
+msgid ""
+"Basic knowledge of the <link href=\"https://live.gnome.org/Vala/Tutorial";
+"\">Vala</link> programming language."
+msgstr "Coñecemento básico da linguaxe de programación Vala"
+
+#: C/guitar-tuner.vala.page:38(item/p) C/image-viewer.vala.page:43(item/p)
+#, fuzzy
+#| msgid "An installed copy of the <em>gjs</em> interpreter"
+msgid "An installed copy of <app>Anjuta</app>."
+msgstr "Unha copia instalada do intérprete <em>gjs</em>"
+
+#: C/guitar-tuner.vala.page:45(section/title)
+#, fuzzy
+#| msgid "Create a project in Anjuta"
+msgid "Create a project in <app>Anjuta</app>"
+msgstr "Cree un proxecto de Anjuta"
+
+#: C/guitar-tuner.vala.page:49(item/p) C/image-viewer.vala.page:57(item/p)
+#, fuzzy
+#| msgid ""
+#| "Start Anjuta and click <guiseq><gui>File</gui><gui>New</gui><gui>Project</"
+#| "gui></guiseq> to open the project wizard."
+msgid ""
+"Start <app>Anjuta</app> and click <gui>Create a new project</gui> or "
+"<guiseq><gui>File</gui><gui>New</gui><gui>Project</gui></guiseq> to open the "
+"project wizard."
+msgstr ""
+"Inicie Anjuta e prema <guiseq><gui>Ficheiro</gui><gui>Novo</"
+"gui><gui>Proxecto</gui></guiseq> para abrir o asistente de proxectos."
+
+#: C/guitar-tuner.vala.page:52(item/p)
+#, fuzzy
+#| msgid ""
+#| "Choose <gui>Gtk+ (Simple)</gui> from the <gui>C</gui> tab, click "
+#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
+#| "<file>guitar-tuner</file> as project name and directory."
+msgid ""
+"Click on the <gui>Vala</gui> tab and select <gui>Gtk+ (Simple)</gui>. Click "
+"<gui>Continue</gui>, and fill out your details on the next few pages. Use "
+"<file>guitar-tuner</file> as project name and directory."
+msgstr ""
+"Seleccione <gui>GTK+ (Simple)</gui> desde a lapela <gui>C</gui>, prema "
+"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
+"<file>guitar-tunner</file> como nome do proxecto e cartafol."
+
+#: C/guitar-tuner.vala.page:55(item/p)
+#, fuzzy
+#| msgid ""
+#| "Make sure that <gui>Configure external packages</gui> is selected. On the "
+#| "next page, select <em>gstreamer-0.10</em> from the list to include the "
+#| "GStreamer library in your project."
+msgid ""
+"Make sure that <gui>Configure external packages</gui> is switched <gui>ON</"
+"gui>. On the next page, select <link href=\"http://valadoc.org/";
+"gstreamer-0.10/index.htm\"><em>gstreamer-0.10</em></link> from the list to "
+"include the GStreamer library in your project. Click <gui>Continue</gui>"
+msgstr ""
+"Asegúrese que <gui>Configurar paquetes externos</gui> está seleccionada. Na "
+"seguinte páxina, seleccione <em>gstreamermm-0.10</em> da lista para incluír "
+"a biblioteca GStreamer no seu proxecto."
+
+#: C/guitar-tuner.vala.page:59(item/p)
+#, fuzzy
+#| msgid ""
+#| "Click <gui>Apply</gui> and the project will be created for you. Open "
+#| "<file>src/main.c</file> from the <gui>Project</gui> or <gui>File</gui> "
+#| "tabs. You should see some code which starts with the lines:"
+msgid ""
+"Click <gui>Apply</gui> and the project will be created for you. From the "
+"<gui>Project</gui> or <gui>Files</gui> tab, open <file>src/guitar_tuner."
+"vala</file> by double-clicking on it. You should see some code which starts "
+"with the lines:"
+msgstr ""
+"Prema <gui>Aplicar</gui> para crear o proxecto. Abra <file>src/main.c</file> "
+"desde as lapelas <gui>Proxecto</gui> ou <gui>Ficheiro</gui>. Debería ver "
+"algún código que comeza coas liñas:"
+
+#: C/guitar-tuner.vala.page:60(item/code)
+#: C/magic-mirror.vala.page:64(item/code)
+#, no-wrap
+msgid ""
+"\n"
+"using GLib;\n"
+"using Gtk;"
+msgstr ""
+
+#: C/guitar-tuner.vala.page:69(section/p)
+msgid ""
+"The code loads an (empty) window from the user interface description file "
+"and displays it. More details are given below; you may choose to skip this "
+"list if you understand the basics:"
+msgstr ""
+
+#: C/guitar-tuner.vala.page:73(item/p) C/magic-mirror.vala.page:76(item/p)
+msgid ""
+"The two <code>using</code> lines import namespaces so we don't have to name "
+"them explicitly."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:76(item/p)
+msgid ""
+"The constructor of the <code>Main</code> class creates a new window by "
+"opening a GtkBuilder file (<file>src/guitar-tuner.ui</file>, defined a few "
+"lines above), connecting its signals and then displaying it in a window. "
+"This GtkBuilder file contains a description of a user interface and all of "
+"its elements. You can use Anjuta's editor to design GtkBuilder user "
+"interfaces."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:78(note/p)
+msgid ""
+"Connecting signals is how you define what happens when you push a button, or "
+"when some other event happens. Here, the <code>on_destroy</code> function is "
+"called (and quits the app) when you close the window."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:82(item/p)
+msgid ""
+"The static <code>main</code> function is run by default when you start a "
+"Vala application. It calls a few functions which create the Main class, set "
+"up and then run the application. The <code>Gtk.main</code> function starts "
+"the GTK main loop, which runs the user interface and starts listening for "
+"events (like clicks and key presses)."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:86(section/p)
+msgid ""
+"This code is ready to be used, so you can compile it by clicking "
+"<guiseq><gui>Build</gui><gui>Build Project</gui></guiseq> (or press "
+"<keyseq><key>Shift</key><key>F7</key></keyseq>). When you do this, a dialog "
+"will appear. Change the <gui>Configuration</gui> to <gui>Default</gui> and "
+"then click <gui>Execute</gui> to configure the build directory. You only "
+"need to do this once, for the first build."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:91(section/p)
+msgid ""
+"A description of the user interface (UI) is contained in the GtkBuilder file "
+"<file>src/guitar_tuner.ui</file> defined at the top of the class. To edit "
+"the user interface, open <file>src/guitar_tuner.ui</file> by double-clicking "
+"on it in the <gui>Project</gui> or <gui>Files</gui> section. This will "
+"switch to the interface designer. The design window is in the center; "
+"<gui>Widgets</gui> and the widget properties are on the right, and the "
+"<gui>Palette</gui> of available widgets is on the left."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:93(section/p)
+msgid ""
+"The layout of every UI in GTK+ is organized using boxes and tables. Let's "
+"use a vertical GtkButtonBox here to assign six GtkButtons, one for each of "
+"the six guitar strings."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:99(item/p)
+msgid ""
+"In the <gui>Palette</gui> tab, from the <gui>Containers</gui> section, "
+"select a <gui>Button Box</gui> (GtkButtonBox) by clicking on the icon. Then "
+"click on the design window in the center to place it into the window. A "
+"dialog will display where you can set the <gui>Number of items</gui> to "
+"<input>6</input>. Then click <gui>Create</gui>."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:100(note/p)
+msgid ""
+"You can also change the <gui>Number of elements</gui> and the "
+"<gui>Orientation</gui> in the <gui>General</gui> tab on the right."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:104(item/p)
+msgid ""
+"Now, from the <gui>Control and Display</gui> section of the <gui>Palette</"
+"gui> choose a <gui>Button</gui> (GtkButton) by clicking on it. Place it into "
+"the first section of the GtkButtonBox by clicking in the first section."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:107(item/p)
+msgid ""
+"While the button is still selected, scroll down in the <gui>General</gui> "
+"tab on the right to the <gui>Label</gui> property, and change it to <gui>E</"
+"gui>. This will be the low E guitar string."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:108(note/p)
+msgid ""
+"The <gui>General</gui> tab is located in the <gui>Widgets</gui> section on "
+"the right."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:113(item/p)
+msgid ""
+"Click on the <gui>Signals</gui> tab in the <gui>Widgets</gui> section on the "
+"right, and look for the <code>clicked</code> signal of the button. You can "
+"use this to connect a signal handler that will be called when the button is "
+"clicked by the user. To do this, click on the signal and type "
+"<code>main_on_button_clicked</code> in the <gui>Handler</gui> column and "
+"press the <key>Enter</key>."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:126(section/p)
+#, fuzzy
+#| msgid ""
+#| "GStreamer is GNOME's multimedia framework — you can use it for playing, "
+#| "recording, and processing video, audio, webcam streams and the like. "
+#| "Here, we'll be using it to produce single-frequency tones."
+msgid ""
+"This section will show you how to create the code to produce sounds. <link "
+"href=\"http://developer.gnome.org/platform-overview/stable/gstreamer";
+"\">GStreamer</link> is GNOME's multimedia framework — you can use it for "
+"playing, recording, and processing video, audio, webcam streams and the "
+"like. Here, we'll be using it to produce single-frequency tones."
+msgstr ""
+"GStreamer é un marco de traballo multimedia de GNOME — vostede pode usalo "
+"para reproducir, gravar e procesar vídeo, son, fluxos de cámara web e "
+"semellantes. Aquí, usarémolo para producir tonos dunha única frecuencia."
+
+#: C/guitar-tuner.vala.page:127(section/p)
+msgid ""
+"Conceptually, GStreamer works as follows: You create a <link href=\"http://";
+"gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-intro-"
+"basics-bins.html\"><em>pipeline</em></link> containing several processing "
+"elements going from the <em>source</em> to the <em>sink</em> (output). The "
+"source can be an image file, a video, or a music file, for example, and the "
+"output could be a widget or the soundcard."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:136(section/p)
+msgid ""
+"In this example we will use a tone generator source called "
+"<code>audiotestsrc</code> and send the output to the default system sound "
+"device, <code>autoaudiosink</code>. We only need to configure the frequency "
+"of the tone generator; this is accessible through the <code>freq</code> "
+"property of <code>audiotestsrc</code>."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:138(section/p)
+msgid ""
+"We need to add a line to initialize GStreamer; put the following code on the "
+"line above the <code>Gtk.init</code> call in the <code>main</code> function:"
+msgstr ""
+
+#: C/guitar-tuner.vala.page:139(section/code)
+#, fuzzy, no-wrap
+#| msgid "\tGst::init (argc, argv);"
+msgid "Gst.init (ref args);"
+msgstr "\tGst::init (argc, argv);"
+
+#: C/guitar-tuner.vala.page:140(section/p)
+msgid ""
+"Then, copy the following function into <file>guitar_tuner.vala</file> inside "
+"our <code>Main</code> class:"
+msgstr ""
+
+#: C/guitar-tuner.vala.page:141(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"Gst.Element sink;\n"
+"Gst.Element source;\n"
+"Gst.Pipeline pipeline;\n"
+"\n"
+"private void play_sound(double frequency)\n"
+"{\n"
+"\tpipeline = new Gst.Pipeline (\"note\");\n"
+"\tsource   = Gst.ElementFactory.make (\"audiotestsrc\",\n"
+"\t                                    \"source\");\n"
+"\tsink     = Gst.ElementFactory.make (\"autoaudiosink\",\n"
+"\t                                    \"output\");\n"
+"\n"
+"\t/* set frequency */\n"
+"\tsource.set (\"freq\", frequency);\n"
+"\n"
+"\tpipeline.add (source);\n"
+"\tpipeline.add (sink);\n"
+"\tsource.link (sink);\n"
+"\n"
+"\tpipeline.set_state (Gst.State.PLAYING);\n"
+"\n"
+"\t/* stop it after 200ms */\n"
+"\tvar time = new TimeoutSource(200);\n"
+"\n"
+"\ttime.set_callback(() =&gt; {\n"
+"\t\tpipeline.set_state (Gst.State.PAUSED);\n"
+"\t\treturn false;\n"
+"\t});\n"
+"\ttime.attach(null);\n"
+"}"
+msgstr ""
+
+#: C/guitar-tuner.vala.page:175(item/p)
+msgid ""
+"The first three lines create source and sink GStreamer elements (<link href="
+"\"http://valadoc.org/gstreamer-0.10/Gst.Element.html\";><code>Gst.Element</"
+"code></link>), and a <link href=\"http://valadoc.org/gstreamer-0.10/Gst.";
+"Pipeline.html\">pipeline element</link> (which will be used as a container "
+"for the other two elements). Those are class variables so they are defined "
+"outside the method. The pipeline is given the name \"note\"; the source is "
+"named \"source\" and is set to the <code>audiotestsrc</code> source; and the "
+"sink is named \"output\" and set to the <code>autoaudiosink</code> sink "
+"(default sound card output)."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:178(item/p)
+#, fuzzy
+#| msgid ""
+#| "The call to <code>g_object_set</code> sets the <code>freq</code> property "
+#| "of the source element to <code>frequency</code>, which is passed as an "
+#| "argument to the <code>play_sound</code> function. This is just the "
+#| "frequency of the note in Hertz; some useful frequencies will be defined "
+#| "later on."
+msgid ""
+"The call to <link href=\"http://valadoc.org/gobject-2.0/GLib.Object.set.html";
+"\"><code>source.set</code></link> sets the <code>freq</code> property of the "
+"source element to <code>frequency</code>, which is passed in as an argument "
+"to the <code>play_sound</code> function. This is just the frequency of the "
+"note in Hertz; some useful frequencies will be defined later on."
+msgstr ""
+"A chamada a <code>g_object_set</code> estabelecer a propiedade <code>freq</"
+"code> do elemento orixe a <code>frequency</code>, a cal se pasa como un "
+"argumento á función <code>play_sound</code>. Isto só é a frecuencia da nota "
+"en Hertz, algunhas das frecuencias máis útiles definiranse máis tarde."
+
+#: C/guitar-tuner.vala.page:181(item/p)
+msgid ""
+"<link href=\"http://valadoc.org/gstreamer-0.10/Gst.Bin.add.html";
+"\"><code>pipeline.add</code></link> puts the source and sink into the "
+"pipeline. The pipeline is a <link href=\"http://valadoc.org/gstreamer-0.10/";
+"Gst.Bin.html\"><code>Gst.Bin</code></link>, which is just an element that "
+"can contain multiple other GStreamer elements. In general, you can add as "
+"many elements as you like to the pipeline by adding more calls to "
+"<code>pipeline.add</code>."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:184(item/p)
+msgid ""
+"Next, <link href=\"http://valadoc.org/gstreamer-0.10/Gst.Element.link.html";
+"\"><code>sink.link</code></link> is used to connect the elements together, "
+"so the output of source (a tone) goes into the input of sink (which is then "
+"output to the sound card). <link href=\"http://www.valadoc.org/";
+"gstreamer-0.10/Gst.Element.set_state.html\"><code>pipeline.set_state</code></"
+"link> is then used to start playback, by setting the <link href=\"http://www.";
+"valadoc.org/gstreamer-0.10/Gst.State.html\">state of the pipeline</link> to "
+"playing (<code>Gst.State.PLAYING</code>)."
+msgstr ""
+
+#: C/guitar-tuner.vala.page:187(item/p)
+msgid ""
+"We don't want to play an annoying tone forever, so the last thing "
+"<code>play_sound</code> does is to add a <link href=\"http://www.valadoc.org/";
+"glib-2.0/GLib.TimeoutSource.html\"><code>TimeoutSource</code></link>. This "
+"sets a timeout for stopping the sound; it waits for 200 milliseconds before "
+"calling a signal handler defined inline that stops and destroys the "
+"pipeline. It returns <code>false</code> to remove itself from the timeout, "
+"otherwise it would continue to be called every 200 ms."
+msgstr ""
 
-#: C/toolbar_builder.vala.page:69(p) C/toolbar_builder.py.page:85(p)
+#: C/guitar-tuner.vala.page:198(section/p)
 msgid ""
-"Select the <gui>New</gui> Stock Id from the drop down menu, or type "
-"<input>gtk-new</input>."
+"In the UI designer, you made it so that all of the buttons will call the "
+"same function, <gui>on_button_clicked</gui>, when they are clicked. Actually "
+"we type <gui>main_on_button_clicked</gui> which tells the UI designer that "
+"this method is part of our <code>Main</code>. We need to add that function "
+"in the source file."
 msgstr ""
-"Seleccione o Id de inventario <gui>New</gui> desde o menú despregábel, ou o "
-"tipo <input>gtk-new</input>."
 
-#: C/toolbar_builder.vala.page:71(p) C/toolbar_builder.py.page:87(p)
+#: C/guitar-tuner.vala.page:199(section/p)
 msgid ""
-"Repeat the above steps for the remaining ToolButtons, with the following "
-"properties:"
+"To do this, in the user interface file (guitar_tuner.ui) select one of the "
+"buttons by clicking on it, then open <file>guitar_tuner.vala</file> (by "
+"clicking on the tab in the center). Switch to the <gui>Signals</gui> tab on "
+"the right, which you used to set the signal name. Now take the row where you "
+"set the <gui>clicked</gui> signal and drag and drop it into to the source "
+"file at the beginning of the class. The following code will be added to your "
+"source file:"
 msgstr ""
-"Repita os pasos de arriba cos TollButtons que faltan, coas seguintes "
-"propiedades:"
 
-#: C/toolbar_builder.vala.page:77(p) C/toolbar_builder.py.page:93(p)
-#: C/helloWorld.js.page:139(title)
-msgid "Name"
-msgstr "Nome"
+#: C/guitar-tuner.vala.page:201(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"public void on_button_clicked (Gtk.Button sender) {\n"
+"\n"
+"}"
+msgstr ""
 
-#: C/toolbar_builder.vala.page:78(p) C/toolbar_builder.py.page:94(p)
-msgid "Is important"
-msgstr "É importante"
+#: C/guitar-tuner.vala.page:206(note/p)
+msgid ""
+"You can also just type the code at the beginning of the class instead of "
+"using the drag and drop."
+msgstr ""
 
-#: C/toolbar_builder.vala.page:79(p) C/toolbar_builder.py.page:95(p)
-msgid "action name"
-msgstr "nome da acción"
+#: C/guitar-tuner.vala.page:207(section/p)
+msgid ""
+"This signal handler has only one argument: the <link href=\"http://valadoc.";
+"org/gtk+-3.0/Gtk.Widget.html\"><code>Gtk.Widget</code></link> that called "
+"the function (in our case, always a <link href=\"http://valadoc.org/gtk+-3.0/";
+"Gtk.Button.html\"><code>Gtk.Button</code></link>)."
+msgstr ""
 
-#: C/toolbar_builder.vala.page:80(p) C/toolbar_builder.py.page:96(p)
-#: C/label.vala.page:20(title) C/label.py.page:26(title)
-#: C/label.js.page:20(title) C/label.c.page:21(title)
-msgid "Label"
-msgstr "Etiqueta"
+#: C/guitar-tuner.vala.page:213(section/title)
+msgid "Define the signal handler"
+msgstr "Definir o manexador de sinais"
 
-#: C/toolbar_builder.vala.page:81(p) C/toolbar_builder.py.page:97(p)
-msgid "Stock Id"
-msgstr "ID de inventario"
+#: C/guitar-tuner.vala.page:214(section/p)
+msgid ""
+"We want to play the correct sound when the user clicks a button. For this, "
+"we flesh out the signal handler which we defined above, "
+"<code>on_button_clicked</code>. We could have connected every button to a "
+"different signal handler, but that would lead to a lot of code duplication. "
+"Instead, we can use the label of the button to figure out which button was "
+"clicked:"
+msgstr ""
 
-#: C/toolbar_builder.vala.page:86(p) C/toolbar_builder.py.page:102(p)
-msgid "open_button"
-msgstr "open_button"
+#: C/guitar-tuner.vala.page:215(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"public void on_button_clicked (Gtk.Button sender) {\n"
+"\tvar label = sender.get_child () as Gtk.Label;\n"
+"\tswitch (label.get_label()) {\n"
+"\t\tcase \"E\":\n"
+"\t\t\tplay_sound (369.23);\n"
+"\t\t\tbreak;\n"
+"\t\tcase \"A\":\n"
+"\t\t\tplay_sound (440);\n"
+"\t\t\tbreak;\n"
+"\t\tcase \"D\":\n"
+"\t\t\tplay_sound (587.33);\n"
+"\t\t\tbreak;\n"
+"\t\tcase \"G\":\n"
+"\t\t\tplay_sound (783.99);\n"
+"\t\t\tbreak;\n"
+"\t\tcase \"B\":\n"
+"\t\t\tplay_sound (987.77);\n"
+"\t\t\tbreak;\n"
+"\t\tcase \"e\":\n"
+"\t\t\tplay_sound (1318);\n"
+"\t\t\tbreak;\n"
+"\t\tdefault:\n"
+"\t\t\tbreak;\n"
+"\t}\n"
+"}\n"
+msgstr ""
 
-#: C/toolbar_builder.vala.page:87(p) C/toolbar_builder.vala.page:94(p)
-#: C/toolbar_builder.vala.page:101(p) C/toolbar_builder.vala.page:108(p)
-#: C/toolbar_builder.py.page:103(p) C/toolbar_builder.py.page:110(p)
-#: C/toolbar_builder.py.page:117(p) C/toolbar_builder.py.page:124(p)
-msgid "Yes"
-msgstr "Si"
+#: C/guitar-tuner.vala.page:242(section/p)
+msgid ""
+"The <code>Gtk.Button</code> that was clicked is passed as an argument "
+"(<code>sender</code>) to <code>on_button_clicked</code>. We can get the "
+"label of that button by using <code>get_child</code>, and then get the text "
+"from that label using <code>get_label</code>."
+msgstr ""
 
-#: C/toolbar_builder.vala.page:88(p) C/toolbar_builder.py.page:104(p)
-msgid "app.open"
-msgstr "app.open"
+#: C/guitar-tuner.vala.page:243(section/p)
+msgid ""
+"The switch statement compares the label text to the notes that we can play, "
+"and <code>play_sound</code> is called with the frequency appropriate for "
+"that note. This plays the tone; we have a working guitar tuner!"
+msgstr ""
 
-#: C/toolbar_builder.vala.page:89(p) C/toolbar_builder.py.page:105(p)
-#| msgid "OpenSuSE"
-msgid "Open"
-msgstr "Open"
+#: C/guitar-tuner.vala.page:254(section/p)
+msgid ""
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"guitar-tuner/guitar-tuner.vala\">reference code</link>."
+msgstr ""
 
-#: C/toolbar_builder.vala.page:90(p) C/toolbar_builder.py.page:106(p)
-msgid "gtk-open"
-msgstr "gtk-open"
+#: C/guitar-tuner.vala.page:258(section/title)
+#: C/magic-mirror.vala.page:151(section/title)
+msgid "Further reading"
+msgstr "Lectura complementaria"
 
-#: C/toolbar_builder.vala.page:93(p) C/toolbar_builder.py.page:109(p)
-msgid "undo_button"
-msgstr "undo_button"
+#: C/guitar-tuner.vala.page:259(section/p)
+#, fuzzy
+#| msgid ""
+#| "To find out more about the Vala programming language you might want to "
+#| "check out the <link href=\"http://live.gnome.org/Vala/Tutorial\";>Vala "
+#| "Tutorial</link>."
+msgid ""
+"To find out more about the Vala programming language you might want to check "
+"out the <link href=\"http://live.gnome.org/Vala/Tutorial\";>Vala Tutorial</"
+"link> and the <link href=\"http://valadoc.org/\";>Vala API Documentation</"
+"link>"
+msgstr ""
+"Para atopar máis información sobre a linguaxe de programación Vala pode "
+"visitar <link href=\"http://live.gnome.org/Vala/Tutorial\";>o titorial de "
+"Vala</link>."
 
-#: C/toolbar_builder.vala.page:95(p) C/toolbar_builder.py.page:111(p)
-msgid "win.undo"
-msgstr "win.undo"
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/hellognome.js.page:64(media)
+msgctxt "_"
+msgid ""
+"external ref='media/hellognomewebapp.png' "
+"md5='948efb6148ede3bc6b47b4b0bbe4a74f'"
+msgstr ""
 
-#: C/toolbar_builder.vala.page:96(p) C/toolbar_builder.py.page:112(p)
-msgid "Undo"
-msgstr "Desfacer"
+#: C/hellognome.js.page:16(info/desc)
+#, fuzzy
+#| msgid "A first Gtk application"
+msgid "Your first GNOME application!"
+msgstr "Un primeiro aplicativo en GTK"
 
-#: C/toolbar_builder.vala.page:97(p) C/toolbar_builder.py.page:113(p)
-msgid "gtk-undo"
-msgstr "gtk-undo"
+#: C/hellognome.js.page:19(page/title)
+msgid "1. Hello, GNOME!"
+msgstr ""
 
-#: C/toolbar_builder.vala.page:100(p) C/toolbar_builder.py.page:116(p)
-msgid "fullscreen_button"
-msgstr "fullscreen_button"
+#: C/hellognome.js.page:21(synopsis/p)
+msgid ""
+"This tutorial will show you how to write your first GNOME application in "
+"JavaScript. You will use JavaScript to write for GNOME the same way you "
+"would for the web. Afterwards, you will learn how to use \"native\" widgets, "
+"to write applications that look and feel like other GNOME apps."
+msgstr ""
 
-#: C/toolbar_builder.vala.page:102(p) C/toolbar_builder.vala.page:109(p)
-#: C/toolbar_builder.py.page:118(p) C/toolbar_builder.py.page:125(p)
-msgid "win.fullscreen"
-msgstr "win.fullscreen"
+#: C/hellognome.js.page:22(note/p)
+msgid ""
+"Have you gotten GNOME installed on your computer, and <link xref=\"set-up-"
+"gedit.js\">gedit</link> set up to write code with? You'll want to do these "
+"things first."
+msgstr ""
 
-#: C/toolbar_builder.vala.page:103(p) C/toolbar_builder.py.page:119(p)
-msgid "Fullscreen"
-msgstr "Pantalla completa"
+#: C/hellognome.js.page:28(section/title)
+msgid "Let's start with a web page"
+msgstr ""
 
-#: C/toolbar_builder.vala.page:104(p) C/toolbar_builder.py.page:120(p)
-msgid "gtk-fullscreen"
-msgstr "gtk-fullscreen"
+#: C/hellognome.js.page:30(section/p)
+msgid ""
+"Here's some basic HTML, CSS, and JavaScript code. Does this look familiar?"
+msgstr ""
 
-#: C/toolbar_builder.vala.page:107(p) C/toolbar_builder.py.page:123(p)
-msgid "leave_fullscreen_button"
-msgstr "leave_fullscreen_button"
+#: C/hellognome.js.page:31(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"&lt;!DOCTYPE html&gt;\n"
+"&lt;html&gt;\n"
+"    &lt;head&gt;\n"
+"        &lt;title&gt;Hello, GNOME!&lt;/title&gt;\n"
+"\n"
+"        &lt;!-- Use JavaScript to show a greeting when someone clicks the button --&gt;\n"
+"        &lt;script type=\"application/javascript\"&gt;\n"
+"        function greeting () {\n"
+"            document.getElementById (\"greeting\").innerHTML = (\"O hai!\");\n"
+"        }\n"
+"        &lt;/script&gt;\n"
+"\n"
+"        &lt;!-- Very basic CSS style using the GNOME font --&gt;\n"
+"        &lt;style type=\"text/css\"&gt;\n"
+"            body {\n"
+"                font-face: Cantarell, sans-serif;\n"
+"                text-align: center; }\n"
+"        &lt;/style&gt;\n"
+"\n"
+"    &lt;/head&gt;\n"
+"    &lt;body&gt;\n"
+"        &lt;br /&gt; &lt;br /&gt;\n"
+"        &lt;button type=\"button\" onclick=\"greeting()\"&gt;Hello, GNOME!&lt;/button&gt;\n"
+"\n"
+"        &lt;!-- Empty H1 element gets filled in when the button is clicked --&gt;\n"
+"        &lt;h1 id=\"greeting\"&gt;&lt;/h1&gt;\n"
+"    &lt;/body&gt;\n"
+"&lt;/html&gt;\n"
+msgstr ""
 
-#: C/toolbar_builder.vala.page:110(p) C/toolbar_builder.py.page:126(p)
-msgid "Leave Fullscreen"
-msgstr "Saír do modo de pantalla completa"
+#: C/hellognome.js.page:62(section/p)
+msgid ""
+"Let's save this as <file>hellognome.html</file>, and see what it looks like "
+"when we run it!"
+msgstr ""
 
-#: C/toolbar_builder.vala.page:111(p) C/toolbar_builder.py.page:127(p)
-msgid "gtk-leave-fullscreen"
-msgstr "gtk-leave-fullscreen"
+#: C/hellognome.js.page:66(section/p)
+msgid ""
+"You <em>can</em> run the above code by opening <file>hellognome.html</file> "
+"in a web browser. But here, we're going to create a GNOME application that "
+"runs our web app inside of it, just like you see in the screenshot. You'll "
+"be able to resize and maximize the window, and click the X in the corner to "
+"close it, just like you'd expect from any other GNOME app. The difference is "
+"that this one will run our web code inside of it."
+msgstr ""
+
+#: C/hellognome.js.page:67(section/p)
+msgid ""
+"The best part? We're going to continue to use JavaScript, to write all the "
+"parts that make our app work with GNOME. Let's look at the code, and see how "
+"it's done!"
+msgstr ""
+
+#: C/hellognome.js.page:71(section/title)
+#, fuzzy
+#| msgid "Designing the application"
+msgid "Creating a GNOME window to frame our web app"
+msgstr "Deseñar o aplicativo"
+
+#: C/hellognome.js.page:73(section/p)
+msgid ""
+"First, we need to tell GNOME that this is a JavaScript application, which "
+"uses gjs. Gjs is GNOME's way of turning your JavaScript code into "
+"instructions it understands, so this line always has to go at the start of "
+"your applications."
+msgstr ""
+
+#: C/hellognome.js.page:74(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+msgstr ""
+
+#: C/hellognome.js.page:77(section/p)
+msgid "After that, we need to tell GNOME which libraries we want to import."
+msgstr ""
+
+#: C/hellognome.js.page:78(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"const Webkit = imports.gi.WebKit;\n"
+msgstr ""
+
+#: C/hellognome.js.page:84(section/p)
+msgid ""
+"Just like how add-on libraries like jQuery let us do extra things with "
+"JavaScript, each of these libraries gives us new capabilities for our GNOME "
+"apps:"
+msgstr ""
+
+#: C/hellognome.js.page:86(item/p)
+msgid ""
+"<file>Gtk</file> and <file>Lang</file> are basic parts of any GNOME "
+"application, which let you create windows and widgets and tie them together."
+msgstr ""
+
+#: C/hellognome.js.page:87(item/p)
+msgid ""
+"<file>GLib</file> is a helper library, which lets us do things like tell "
+"GNOME where the <file>hellognome.html</file> file we created is."
+msgstr ""
+
+#: C/hellognome.js.page:88(item/p)
+msgid ""
+"And <file>Webkit</file> is a web rendering engine, which we'll use to "
+"basically create a browser window to open our HTML file with."
+msgstr ""
+
+#: C/hellognome.js.page:91(section/p)
+#, fuzzy
+#| msgid "How to write a Gtk application in C"
+msgid "Now we create the application itself:"
+msgstr "Como escribir un aplicativo GTK en C"
+
+#: C/hellognome.js.page:92(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"const HelloGNOME = new Lang.Class ({\n"
+"    Name: 'Hello GNOME',\n"
+msgstr ""
+
+#: C/hellognome.js.page:96(section/p)
+msgid ""
+"This will look familiar to you if you've worked with object-oriented "
+"JavaScript before. That's right; our whole application is a class called "
+"HelloGNOME. And as you can see, we've given it a property that says what its "
+"name is."
+msgstr ""
+
+#: C/hellognome.js.page:98(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+msgstr ""
+
+#: C/hellognome.js.page:118(section/p)
+msgid ""
+"Here's some code you will more or less copy-and-paste for every JavaScript "
+"application you build. It creates a new Application, and then binds its "
+"activate and startup signals to functions that make the window show itself "
+"and build its user interface, respectively."
+msgstr ""
 
-#: C/toolbar_builder.vala.page:120(p) C/toolbar_builder.py.page:136(p)
-msgid "Close the <gui>Tool Bar Editor</gui>."
-msgstr "Pechar o <gui>Editor de barra de ferramentas</gui>."
+#: C/hellognome.js.page:119(section/p)
+msgid ""
+"What does that mean? Well, everything in a GNOME application sends out a "
+"signal when something important happens. A button might send out the clicked "
+"signal when you click on it, for instance. Our job is to connect the signals "
+"to functions which handle them, and make the things that we want to have "
+"happen occur. We do this using each object's connect method, which takes two "
+"arguments: The signal we want to handle, and the Lang.bind function, which "
+"we have to use to tell connect which function we want to have handle the "
+"signal."
+msgstr ""
 
-#: C/toolbar_builder.vala.page:123(p)
+#: C/hellognome.js.page:120(section/p)
 msgid ""
-"When our program will first start, we don't want the <gui>Leave Fullscreen</"
-"gui> ToolButton to be visible, since the application will not be in "
-"fullscreen mode. You can set this in the <gui>Common</gui> tab, by clicking "
-"the <gui>Visible</gui> property to <gui>No</gui>. The ToolButton will still "
-"appear in the interface designer, but will behave correctly when the file is "
-"loaded into your program code."
+"In this case, we want _onActivate to handle the activate signal, and "
+"_onStartup to handle the startup signal. _onActivate just tells the window "
+"to present itself; so basically, whenever you <keyseq><key>Alt</key> "
+"<key>Tab</key></keyseq> to the application it appears, like you would expect "
+"it to. _onStartup calls _buildUI, which is the function that creates our "
+"user interface and is the next part that we will look at."
 msgstr ""
 
-#: C/toolbar_builder.vala.page:124(media) C/toolbar_builder.py.page:140(media)
-msgid "Setting the visible property to No"
-msgstr "Estabeleza a propiedade visible a Non"
+#: C/hellognome.js.page:121(note/p)
+msgid ""
+"When you copy and paste the above code for your own applications, be sure to "
+"change the name to a unique one each time."
+msgstr ""
 
-#: C/toolbar_builder.vala.page:129(p) C/toolbar_builder.py.page:145(p)
-msgid "Save your work, and close Glade."
-msgstr "Garde o seu traballo e saia de Glade."
+#: C/hellognome.js.page:125(section/title)
+msgid "Designing our window's UI"
+msgstr ""
 
-#: C/toolbar_builder.vala.page:132(p) C/toolbar_builder.py.page:148(p)
+#: C/hellognome.js.page:126(section/p)
 msgid ""
-"The XML file created by Glade is shown below. This is the description of the "
-"toolbar. At the time of this writing, the option to add the class Gtk."
-"STYLE_CLASS_PRIMARY_TOOLBAR in the Glade Interface did not exist. We can "
-"manually add this to the XML file. To do this, add the following XML code at "
-"line 9 of <file>toolbar_builder.ui</file>:"
+"In the _buildUI function, we're going to tell GNOME about our window and the "
+"things inside it, one at a time. After that, we're going to connect "
+"everything together and put it all on display."
 msgstr ""
 
-#: C/toolbar_builder.vala.page:138(p) C/toolbar_builder.py.page:154(p)
+#: C/hellognome.js.page:128(section/code)
+#, no-wrap
 msgid ""
-"If you do not add this, the program will still work fine. The resulting "
-"toolbar will however look slightly different then the screenshot at the top "
-"of this page."
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            title: \"Welcome to GNOME\",\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            window_position: Gtk.WindowPosition.CENTER });\n"
 msgstr ""
-"Se non engade isto, o programa funcionará igual. Porén barra de ferramentas "
-"resultante semellará un pouco diferente á captura de pantalla da parte "
-"superior desta páxina."
 
-#: C/toolbar_builder.vala.page:143(p) C/toolbar_builder.py.page:164(p)
+#: C/hellognome.js.page:141(section/p)
 msgid ""
-"We now create the code below, which adds the toolbar from the file we just "
-"created."
+"The first object we create is an ApplicationWindow. It needs a title to go "
+"in the title bar, and its application property needs to be the application "
+"that we created, above. Beyond that, there are various ways of customizing "
+"how it looks, which the <link xref=\"GtkApplicationWindow.js"
+"\">ApplicationWindow</link> reference page will go into more detail about. "
+"As you can see here, we gave it a default height and width (measured in "
+"pixels), and told GNOME we want our window to appear in the center of the "
+"screen."
 msgstr ""
-"Agora crearemos o código de embaixo, que engade a barra de ferrametnas desde "
-"o ficheiro que creamos."
 
-#: C/toolbar_builder.vala.page:150(link) C/toolbar.vala.page:33(link)
-#: C/toolbar.js.page:31(link)
-msgid "Gtk.Toolbar"
-msgstr "Gtk.Toolbar"
-
-#: C/toolbar_builder.vala.page:151(link) C/toolbar.vala.page:34(link)
-#| msgid "Gtk.ButtonsType"
-msgid "Gtk.Toolbutton"
-msgstr "Gtk.Toolbutton"
+#: C/hellognome.js.page:142(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create a webview to show the web app\n"
+"        this._webView = new Webkit.WebView ();\n"
+"\n"
+"        // Put the web app into the webview\n"
+"        this._webView.load_uri (GLib.filename_to_uri (GLib.get_current_dir() +\n"
+"            \"/hellognome.html\", null));\n"
+msgstr ""
 
-#: C/toolbar_builder.vala.page:152(link) C/toolbar.vala.page:35(link)
-msgid "Gtk.Stock"
-msgstr "Gtk.Stock"
+#: C/hellognome.js.page:150(section/p)
+msgid ""
+"Remember how we imported Webkit right at the start? Here we're creating a "
+"new instance of a Webkit class called a WebView, which is more or less a "
+"browser window you can put inside of your app. After that, we then give it "
+"the URI that we want it to load when the application starts up."
+msgstr ""
 
-#: C/toolbar_builder.py.page:7(title)
-msgid "Toolbar created using Glade (Python)"
+#: C/hellognome.js.page:151(section/p)
+msgid ""
+"We <em>could</em> just give it a web URI, like <link href=\"http://gnome.org";
+"\">http://gnome.org</link>. Instead, here we use a couple of GLib helper "
+"functions to tell the WebView where our <file>hellognome.html</file> file "
+"is. GLib.get_current_dir returns the directory that our app's running in, "
+"and GLib.filename_to_uri turns our file's path and filename into a URI that "
+"the WebView's load_uri function understands. (filename_to_uri's second "
+"parameter should be null unless you know what it's used for and have a "
+"reason for changing it.)"
 msgstr ""
 
-#: C/toolbar_builder.py.page:26(name) C/textview.py.page:14(name)
-#: C/strings.py.page:14(name) C/signals-callbacks.py.page:14(name)
-#: C/properties.py.page:14(name) C/model-view-controller.py.page:14(name)
-#: C/label.py.page:18(name) C/entry.py.page:18(name)
-msgid "Sebastian Pölsterl"
-msgstr "Sebastian Pölsterl"
+#: C/hellognome.js.page:152(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Put the webview into the window\n"
+"        this._window.add (this._webView);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"});\n"
+msgstr ""
 
-#: C/toolbar_builder.py.page:27(email) C/textview.py.page:15(email)
-#: C/strings.py.page:15(email) C/signals-callbacks.py.page:15(email)
-#: C/properties.py.page:15(email) C/model-view-controller.py.page:15(email)
-#: C/label.py.page:19(email) C/entry.py.page:19(email)
-msgid "sebp k-d-w org"
-msgstr "sebp k-d-w org"
+#: C/hellognome.js.page:162(section/p)
+msgid ""
+"Each window can hold one, and only one, widget. Normally, we'd use a "
+"container widget like a <link xref=\"grid.js\">Grid</link> to put multiple "
+"widgets into, then use the window's add function to add the Grid to it. "
+"Here, we just need the WebView, so that's all we add to the window. After "
+"that, as the last part of the _buildUI function that creates our window, we "
+"tell the window to show itself and its contents."
+msgstr ""
 
-#: C/toolbar_builder.py.page:31(desc) C/toolbar.py.page:18(desc)
-#| msgid "A button which can be connected to other widgets"
-msgid "A bar of buttons and other widgets"
-msgstr "Unha barra de botóns e outros widgets"
+#: C/hellognome.js.page:163(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new HelloGNOME ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
 
-#: C/toolbar_builder.py.page:37(p)
+#: C/hellognome.js.page:168(section/p)
 msgid ""
-"This example is similar to <link xref=\"toolbar.py\"/>, except we use Glade "
-"to create the toolbar in an XML .ui file."
+"Finally, we create a new instance of our HelloGNOME class, and tell GNOME to "
+"run it."
 msgstr ""
-"Este exemplo é similar a <link xref=\"toolbar.py\"/>, agás que usa Glade para "
-"crear a barra de ferrametnas nun ficheiro .ui XML."
 
-#: C/toolbar_builder.py.page:42(title)
-#| msgid "Creating the user interface"
-msgid "Creating the toolbar with Glade"
-msgstr "Crear unha barra de ferramentas con Glade"
+#: C/hellognome.js.page:172(section/title)
+#, fuzzy
+#| msgid "Run the application"
+msgid "Running your GNOME application"
+msgstr "Executar o aplicativo"
 
-#: C/toolbar_builder.py.page:139(p)
+#: C/hellognome.js.page:174(section/p)
 msgid ""
-"When our program will first start, we do not want the <gui>Leave Fullscreen</"
-"gui> ToolButton to be visible, since the application will not be in "
-"fullscreen mode. You can set this in the <gui>Common</gui> tab, by clicking "
-"the <gui>Visible</gui> property to <gui>No</gui>. The ToolButton will still "
-"appear in the interface designer, but will behave correctly when the file is "
-"loaded into your program code. Note that the method <code>show_all()</code> "
-"would override this setting - so in the code we have to use <code>show()</"
-"code> separately on all the elements."
+"Now that we've created our first GNOME application, it's time to test it "
+"out! You don't need to compile your app or install any special software for "
+"this; GNOME has gjs built in, to let it run GNOME Shell. Just save "
+"<file>hellognome.html</file> and our actual application, <file>hellognome."
+"js</file>, to a directory you can get to with the terminal. (They usually "
+"open onto your home directory, the one that's called by your username.) "
+"After that, open a terminal, go there, and type:"
 msgstr ""
 
-#: C/toolbar_builder.py.page:170(title)
-msgid "Useful methods for Gtk.Builder"
-msgstr "Métodos útiles para Gtk.Builder"
+#: C/hellognome.js.page:175(section/screen)
+#, no-wrap
+msgid " <output style=\"prompt\">$ </output>gjs hellognome.js "
+msgstr ""
 
-#: C/toolbar_builder.py.page:171(p)
+#: C/hellognome.js.page:176(section/p)
 msgid ""
-"For the useful methods for a Toolbar widget, see <link xref=\"toolbar.py\"/>"
+"You should see more or less the same screenshot as before, with a button "
+"that you can click to make a short message appear."
 msgstr ""
-"Para os métodos útiles para o widget Toolbar, vexa <link xref=\"toolbar.py\"/>"
 
-#: C/toolbar_builder.py.page:173(p)
-msgid "Gtk.Builder builds an interface from an XML UI definition."
-msgstr "Gtk.Builder constrúe unha interface desde unha definición de IU en XML."
+#: C/hellognome.js.page:179(note/p)
+msgid "You can use the terminal command"
+msgstr ""
+
+#: C/hellognome.js.page:180(note/screen)
+#, no-wrap
+msgid " <output style=\"prompt\">$ </output>cd <var>(directory name)</var> "
+msgstr ""
 
-#: C/toolbar_builder.py.page:176(p)
+#: C/hellognome.js.page:181(note/p)
 msgid ""
-"<code>add_from_file(filename)</code> loads and parses the given file and "
-"merges it with the current contents of the Gtk.Builder."
+"to navigate between directories inside the Terminal, in order to get to "
+"where you saved the files. There is also an extension for Nautilus, GNOME's "
+"file manager, which lets you right-click anywhere inside it to open a "
+"terminal window right there. Check the app you use to install new software "
+"(like Add/Remove Programs or the Software Center) for it."
 msgstr ""
-"<code>add_from_file(nomedeficheiro)</code> carga e analiza o ficheiro "
-"fornecido e combínao cos contidos actuais de Gtk.Builder."
 
-#: C/toolbar_builder.py.page:177(p)
+#: C/hellognome.js.page:188(section/p)
 msgid ""
-"<code>add_from_string(string)</code> parses the given string and merges it "
-"with the current contents of the Gtk.Builder."
+"<link xref=\"02_welcome_to_the_grid.js\">Continue on to the next tutorial</"
+"link> to learn how to build \"native\" GNOME applications that look and feel "
+"like the others, instead of a webview with HTML code inside. Or take a look "
+"at some <link xref=\"beginner.js#samples\">code samples</link>, if you'd "
+"like to see example code for each Gtk widget."
 msgstr ""
 
-#: C/toolbar_builder.py.page:178(p)
+#: C/hellognome.js.page:189(section/p)
 msgid ""
-"<code>add_objects_from_file(filename, object_ids)</code> is the same as "
-"<code>add_from_file()</code>, but it loads only the objects with the ids "
-"given in the <code>object_id</code>s list."
+"Finally, if you want to just build GNOME applications using JavaScript "
+"libraries designed for the web, you can basically stop here and go do that! "
+"Take a look at the <link xref=\"scrolledwindow.js\">ScrolledWindow</link> "
+"code sample if you'd like to see how to make a WebView widget that can "
+"scroll to show parts of a larger web page, and check out <link xref="
+"\"beginner.js#tutorials\">the later tutorials</link> if you'd like to see "
+"how to create a .desktop file for your application, which will let it appear "
+"in your desktop's Activities menu with all your other apps."
 msgstr ""
 
-#: C/toolbar_builder.py.page:179(p)
+#: C/hellognome.js.page:194(section/code)
+#, no-wrap
 msgid ""
-"<code>add_objects_from_string(filename, object_ids)</code> is the same as "
-"<code>add_from_string()</code>, but it loads only the objects with the ids "
-"given in the <code>object_id</code>s list."
+"#!/usr/bin/gjs\n"
+"\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"const Webkit = imports.gi.WebKit;\n"
+"\n"
+"const HelloGNOME = new Lang.Class ({\n"
+"    Name: 'Hello GNOME',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            title: \"Welcome to GNOME\",\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            window_position: Gtk.WindowPosition.CENTER });\n"
+"\n"
+"        // Create a webview to show the web app\n"
+"        this._webView = new Webkit.WebView ();\n"
+"\n"
+"        // Put the web app into the webview\n"
+"        this._webView.load_uri (GLib.filename_to_uri (GLib.get_current_dir() +\n"
+"            \"/hellognome.html\", null));\n"
+"\n"
+"        // Put the webview into the window\n"
+"        this._window.add (this._webView);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new HelloGNOME ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/toolbar_builder.py.page:180(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/helloWorld.js.page:27(media)
+#, fuzzy
+#| msgid "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
+msgctxt "_"
 msgid ""
-"<code>get_object(object_id)</code> retrieves the widget with the id "
-"<code>object_id</code> from the loaded objects in the builder."
+"external ref='media/helloWorld.png' md5='4c88a27211dfd1b33e504c9f78602f2d'"
+msgstr "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
+
+#: C/helloWorld.js.page:8(info/title)
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Hello World (JavaScript)"
+msgstr "JavaScript"
+
+#: C/helloWorld.js.page:23(info/desc)
+#, fuzzy
+#| msgid "A little bit more than a simple \"Hello world\" Gtk application."
+msgid "A basic \"hello, world\" application"
+msgstr "Un pouco máis que un simple aplicativo Gtk «Ola mundo»."
+
+#: C/helloWorld.js.page:26(page/title)
+msgid "Hello World"
 msgstr ""
 
-#: C/toolbar_builder.py.page:181(p)
-msgid "<code>get_objects()</code> returns all loaded objects."
-msgstr "<code>get_objects()</code> devolve todos os obxectos cargados."
+#: C/helloWorld.js.page:29(synopsis/p)
+msgid "This tutorial will demonstrate how to:"
+msgstr ""
 
-#: C/toolbar_builder.py.page:182(p)
-msgid ""
-"<code>connect_signals(handler_object)</code> connects the signals to the "
-"methods given in the <code>handler_object</code>. This can be any object "
-"which contains keys or attributes that are called like the signal handler "
-"names given in the interface description, e.g. a class or a dict."
+#: C/helloWorld.js.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "A little bit more than a simple \"Hello world\" application - write an "
+#| "image viewer in GTK."
+msgid "create a small \"Hello, World\" application using JavaScript and GTK+"
+msgstr ""
+"Algo máis que un aplicativo sinxelo «Hola mundo» - escribir un visor de "
+"imaxes en GTK."
+
+#: C/helloWorld.js.page:32(item/p)
+msgid "make the <file>.desktop</file> file"
+msgstr ""
+
+#: C/helloWorld.js.page:33(item/p)
+msgid "how to set up the build system"
 msgstr ""
 
-#: C/toolbar_builder.py.page:193(link) C/togglebutton.c.page:39(link)
-#: C/switch.py.page:50(link) C/switch.c.page:36(link)
-#: C/statusbar.c.page:39(link) C/spinbutton.c.page:39(link)
-#: C/separator.py.page:39(link) C/radiobutton.py.page:52(link)
-#: C/radiobutton.c.page:36(link) C/grid.py.page:59(link)
-#: C/grid.c.page:35(link) C/buttonbox.py.page:51(link)
-msgid "GtkGrid"
-msgstr "GtkGrid"
+#: C/helloWorld.js.page:41(section/title)
+msgid "Create the HelloWorld program"
+msgstr ""
 
-#: C/toolbar_builder.py.page:194(link) C/menubar.py.page:184(link)
-#: C/filechooserdialog.py.page:79(link)
-msgid "GtkBuilder"
-msgstr "GtkBuilder"
+#: C/helloWorld.js.page:46(section/p)
+msgid "This needs to be the first line of your script:"
+msgstr ""
 
-#: C/toolbar_builder.py.page:196(link) C/toolbar.py.page:58(link)
-#| msgid "Program Structure"
-msgid "Event Structures"
-msgstr "Estrutura de eventos"
+#: C/helloWorld.js.page:47(section/code)
+#, no-wrap
+msgid "#!/usr/bin/gjs"
+msgstr ""
 
-#: C/toolbar_builder.py.page:197(link)
-msgid "The Python Gtk+ 3 Tutorial - Glade and Gtk.Builder"
+#: C/helloWorld.js.page:48(section/p)
+msgid ""
+"It tells the script to use <link href=\"https://live.gnome.org/Gjs/\";>Gjs</"
+"link>. Gjs is a JavaScript binding for GNOME."
 msgstr ""
 
-#: C/toolbar.vala.page:7(title)
-msgid "Toolbar (Vala)"
-msgstr "Barra de ferramentas (Vala)"
+#: C/helloWorld.js.page:53(section/code)
+#, fuzzy, no-wrap
+#| msgid "const Lang = imports.lang;"
+msgid ""
+"const Lang = imports.lang;\n"
+"const Gtk = imports.gi.Gtk;"
+msgstr "const Lang = imports.lang;"
 
-#: C/toolbar.vala.page:21(title) C/toolbar.py.page:21(title)
-#: C/toolbar.js.page:20(title)
-#| msgid "Toolbar widget"
-msgid "Toolbar"
-msgstr "Barra de ferramentas"
+#: C/helloWorld.js.page:55(section/p)
+msgid ""
+"In order for our script to work with GNOME, we need to import GNOME "
+"libraries via GObject Introspection. Here we import the language bindings "
+"and GTK+, the library which contains the graphical widgets used to make "
+"GNOME applications."
+msgstr ""
+
+#: C/helloWorld.js.page:59(section/code)
+#, no-wrap
+msgid ""
+"const Application = new Lang.Class({\n"
+"    //A Class requires an explicit Name parameter. This is the Class Name.\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"       //connect to 'activate' and 'startup' signals to handlers.\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"       this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    //create the UI\n"
+"    _buildUI: function() {\n"
+"        this._window = new Gtk.ApplicationWindow({ application: this.application,\n"
+"                                                   title: \"Hello World!\" });\n"
+"    },\n"
+"\n"
+"    //handler for 'activate' signal\n"
+"    _onActivate: function() {\n"
+"        //show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"    //handler for 'startup' signal\n"
+"    _onStartup: function() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"});\n"
+msgstr ""
 
-#: C/toolbar.vala.page:24(p) C/toolbar.js.page:22(p)
+#: C/helloWorld.js.page:91(section/p)
 msgid ""
-"Toolbar can contain either text or stock icons. In this sample we use stock "
-"icons. This example has fullscreen functionality."
+"GtkApplication initializes Gtk+. It also connects the <gui>x</gui> button "
+"that's automatically generated along with the window to the \"destroy\" "
+"signal."
 msgstr ""
 
-#: C/toolbar.vala.page:25(p) C/toolbar.js.page:23(p)
+#: C/helloWorld.js.page:92(section/p)
 msgid ""
-"This example uses SimpleActions (window and app). App actions can easily be "
-"added the the app menu."
+"We can start building our first window. We do this by creating a variable "
+"called <var>_window</var> and assigning it a new Gtk.ApplicationWindow."
 msgstr ""
 
-#: C/toolbar.py.page:7(title)
-#| msgid "Toolbar widget"
-msgid "Toolbar (Python)"
-msgstr "Barra de ferramentas (Python)"
+#: C/helloWorld.js.page:93(section/p)
+msgid ""
+"We give the window a property called <var>title</var>. The title can be any "
+"string you want it to be. To be on the safe side, it's best to stick to "
+"UTF-8 encoding."
+msgstr ""
 
-#: C/toolbar.py.page:24(p)
-msgid "An example of toolbar with buttons (from stock icons)."
+#: C/helloWorld.js.page:94(section/p)
+msgid ""
+"Now we have a window which has a title and a working \"close\" button. Let's "
+"add the actual \"Hello World\" text."
 msgstr ""
 
-#: C/toolbar.py.page:35(title)
+#: C/helloWorld.js.page:97(section/title)
 #, fuzzy
-#| msgid "Menu, combo box and toolbar widgets"
-msgid "Useful methods for a Toolbar widget"
-msgstr "Widgets de menú, caixa combinada e barra de ferramentas"
+#| msgid "Closing the window"
+msgid "Label for the window"
+msgstr "Pechar a xanela"
 
-#: C/toolbar.py.page:38(p)
+#: C/helloWorld.js.page:98(section/code)
+#, no-wrap
 msgid ""
-"Use <code>insert(tool_item, position)</code> to insert the <code>tool_item</"
-"code> at <code>position</code>. If <code>position</code> is negative, the "
-"item is appended at the end of the toolbar."
+"// Add a label widget to your window\n"
+"this.label = new Gtk.Label({ label: \"Hello World\" });\n"
+"this._window.add(this.label);\n"
+"this._window.set_default_size(200, 200);"
 msgstr ""
 
-#: C/toolbar.py.page:39(p)
+#: C/helloWorld.js.page:103(section/p)
 msgid ""
-"<code>get_item_index(tool_item)</code> retrieves the position of "
-"<code>tool_item</code> on the toolbar."
+"A text label is one of the GTK+ widgets we can use, on account of having "
+"imported the GTK+ library. To use it, we create a new variable called label, "
+"and assign it a new Gtk.Label. Then we give it properties inside the curly "
+"braces {}. In this case, we're setting the text that the label will hold. "
+"Finally, we create and run the application:"
 msgstr ""
 
-#: C/toolbar.py.page:40(p)
+#: C/helloWorld.js.page:105(section/code)
+#, no-wrap
 msgid ""
-"<code>get_n_items()</code> returns the number of items on the toolbar; "
-"<code>get_nth_item(position)</code> returns the item in position "
-"<code>position</code>."
+"//run the application\n"
+"let app = new Application();\n"
+"app.application.run(ARGV);"
 msgstr ""
 
-#: C/toolbar.py.page:41(p)
+#: C/helloWorld.js.page:109(section/p)
 msgid ""
-"If the toolbar does not have room for all the menu items, and "
-"<code>set_show_arrow(True)</code>, the items that do not have room are shown "
-"through an overflow menu."
+"Gtk.ApplicationWindow can only hold one widget at a time. To construct more "
+"elaborate programs you need to create a holder widget like Gtk.Grid inside "
+"the window, and then add all the other widgets to it."
 msgstr ""
 
-#: C/toolbar.py.page:42(p)
-msgid ""
-"<code>set_icon_size(icon_size)</code> sets the size of icons in the toolbar; "
-"<code>icon_size</code> can be one of <code>Gtk.IconSize.INVALID, Gtk."
-"IconSize.MENU, Gtk.IconSize.SMALL_TOOLBAR, Gtk.IconSize.LARGE_TOOLBAR, Gtk."
-"IconSize.BUTTON, Gtk.IconSize.DND, Gtk.IconSize.DIALOG</code>. This should "
-"be used only for special-purpose toolbars, normal application toolbars "
-"should respect user preferences for the size of icons. <code>unset_icon_size"
-"()</code> unsets the preferences set with <code>set_icon_size(icon_size)</"
-"code>, so that user preferences will be used to determine the icon size."
+#: C/helloWorld.js.page:113(section/title)
+msgid "helloWorld.js"
 msgstr ""
 
-#: C/toolbar.py.page:43(p)
-msgid ""
-"<code>set_style(style)</code>, where <code>style</code> is one of <code>Gtk."
-"ToolbarStyle.ICONS, Gtk.ToolbarStyle.TEXT, Gtk.ToolbarStyle.BOTH, Gtk."
-"ToolbarStyle.BOTH_HORIZ</code>, sets if the toolbar shows only icons, only "
-"text, or both (vertically stacked or alongside each other). To let user "
-"preferences determine the toolbar style, and unset a toolbar style so set, "
-"use <code>unset_style()</code>."
+#: C/helloWorld.js.page:114(section/p)
+msgid "The complete file:"
 msgstr ""
 
-#: C/toolbar.py.page:53(link)
-#| msgid "Gtk.ButtonsType"
-msgid "GtkToolButton"
-msgstr "GtkToolButton"
-
-#: C/toolbar.py.page:54(link)
-msgid "GtkToolItem"
-msgstr "GtkToolItem"
-
-#: C/toolbar.py.page:56(link)
-#| msgid "Gtk.Application"
-msgid "GtkActionable"
-msgstr "GtkActionable"
-
-#: C/toolbar.js.page:7(title)
-#| msgid "JavaScript"
-msgid "Toolbar (JavaScript)"
-msgstr "Barra de ferramentas (JavaScript)"
-
-#: C/toolbar.js.page:17(desc)
-#| msgid "Autotools"
-msgid "A bar of tools"
-msgstr "Unha barra de ferramentas"
-
-#: C/toolbar.js.page:32(link)
-#| msgid "Gtk.ButtonsType"
-msgid "Gtk.ToolButton"
-msgstr "Gtk.ToolButton"
-
-#: C/toolbar.js.page:33(link)
-msgid "Gtk Stock items"
-msgstr "Elementos do inventario de Gtk"
-
-#: C/toolbar.js.page:34(link)
-msgid "Gdk.WindowState"
-msgstr "Gdk.WindowState"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/togglebutton.vala.page:24(None) C/togglebutton.py.page:24(None)
-#: C/togglebutton.js.page:21(None) C/togglebutton.c.page:26(None)
-#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
-msgid "@@image: 'media/togglebutton.png'; md5=791e062613d4f9bd5936390b0aa18448"
-msgstr "@@image: 'media/togglebutton.png'; md5=791e062613d4f9bd5936390b0aa18448"
+#: C/helloWorld.js.page:115(section/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Lang = imports.lang;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"const Application = new Lang.Class({\n"
+"    //A Class requires an explicit Name parameter. This is the Class Name.\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"       //connect to 'activate' and 'startup' signals to handlers.\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"       this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    //create the UI\n"
+"    _buildUI: function() {\n"
+"        this._window = new Gtk.ApplicationWindow({ application: this.application,\n"
+"                                                   title: \"Hello World!\" });\n"
+"        this._window.set_default_size(200, 200);\n"
+"        this.label = new Gtk.Label({ label: \"Hello World\" });\n"
+"        this._window.add(this.label);\n"
+"    },\n"
+"\n"
+"    //handler for 'activate' signal\n"
+"    _onActivate: function() {\n"
+"        //show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"    //handler for 'startup' signal\n"
+"    _onStartup: function() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"});\n"
+"\n"
+"//run the application\n"
+"let app = new Application();\n"
+"app.application.run(ARGV);\n"
+msgstr ""
 
-#: C/togglebutton.vala.page:7(title)
-msgid "ToggleButton (Vala)"
-msgstr "ToggleButton (Vala)"
+#: C/helloWorld.js.page:118(section/title)
+#, fuzzy
+#| msgid "Run the application"
+msgid "Running the application from terminal"
+msgstr "Executar o aplicativo"
 
-#: C/togglebutton.vala.page:20(desc) C/togglebutton.py.page:20(desc)
-#: C/togglebutton.c.page:21(desc)
-msgid "A button which retains state"
-msgstr "Un botón que mantén o seu estado"
+#: C/helloWorld.js.page:119(section/p)
+msgid ""
+"To run this application, first save it as helloWorld.js. Then open Terminal, "
+"go to the folder where your application is stored and run:"
+msgstr ""
 
-#: C/togglebutton.vala.page:23(title) C/togglebutton.py.page:23(title)
-#: C/togglebutton.js.page:20(title) C/togglebutton.c.page:24(title)
-#| msgid "Button"
-msgid "ToggleButton"
-msgstr "ToggleButton"
+#: C/helloWorld.js.page:120(section/screen)
+#, no-wrap
+msgid "<output style=\"prompt\">$ </output><input>gjs helloWorld.js</input>"
+msgstr ""
 
-#: C/togglebutton.vala.page:25(p) C/togglebutton.py.page:25(p)
-#: C/togglebutton.c.page:27(p)
-msgid "When this ToggleButton is in an active state, the spinner spins."
-msgstr "Cando este ToggleButton está no estado activo, o spinner xira."
+#: C/helloWorld.js.page:126(section/title)
+msgid "The <file>.desktop.in</file> file"
+msgstr ""
 
-#: C/togglebutton.vala.page:32(link) C/togglebutton.js.page:158(link)
-#| msgid "Gtk.ButtonsType"
-msgid "Gtk.ToggleButton"
-msgstr "Gtk.ToggleButton"
+#: C/helloWorld.js.page:127(section/p)
+msgid ""
+"Running applications from the Terminal is useful at the beginning of the "
+"application making process. To have fully working <link href=\"http://";
+"library.gnome.org/admin/system-admin-guide/stable/mimetypes-9.html.en"
+"\">application integration</link> in GNOME 3 requires a desktop launcher. "
+"For this you need to create a <file>.desktop</file> file. The <file>."
+"desktop</file> file describes the application name, the used icon and "
+"various integration bits. A deeper insight into the <file>.desktop</file> "
+"file can be found <link href=\"http://developer.gnome.org/desktop-entry-spec/";
+"\">here</link>. The <file>.desktop.in</file> file will create the <file>."
+"desktop</file>."
+msgstr ""
 
-#: C/togglebutton.py.page:7(title)
-msgid "ToggleButton (Python)"
-msgstr "ToggleButton (Python)"
+#: C/helloWorld.js.page:130(note/p)
+msgid ""
+"Before continuing, resave <file>helloWorld.js</file> as <file>helloWorld</"
+"file>. Then run this in the command line:"
+msgstr ""
 
-#: C/togglebutton.py.page:37(title)
-msgid "Useful methods for a ToggleButton widget"
-msgstr "Métodos útiles para o widget ToggleButton"
+#: C/helloWorld.js.page:131(note/screen)
+#, no-wrap
+msgid "<output style=\"prompt\">$ </output><input>chmod +x helloWorld</input>"
+msgstr ""
 
-#: C/togglebutton.py.page:38(p) C/radiobutton.py.page:37(p)
-#: C/messagedialog.py.page:36(p) C/fontchooserwidget.py.page:34(p)
-#: C/dialog.py.page:36(p) C/button.py.page:34(p) C/aboutdialog.py.page:36(p)
+#: C/helloWorld.js.page:134(section/p)
 msgid ""
-"For an explanation of signals and callback functions, see <link xref="
-"\"signals-callbacks.py\">this page</link>."
+"The example shows you the minimum requirements for a <code>.desktop.in</"
+"code> file."
 msgstr ""
 
-#: C/togglebutton.py.page:45(link) C/checkbutton.py.page:48(link)
-#| msgid "Gtk.ButtonsType"
-msgid "GtkToggleButton"
-msgstr "GtkToggleButton"
+#: C/helloWorld.js.page:135(section/code)
+#, no-wrap
+msgid ""
+"[Desktop Entry]\n"
+"Version=1.0\n"
+"Encoding=UTF-8\n"
+"Name=Hello World\n"
+"Comment=Say Hello\n"
+"Exec= prefix@/bin/helloWorld\n"
+"Icon=application-default-icon\n"
+"Terminal=false\n"
+"Type=Application\n"
+"StartupNotify=true\n"
+"Categories=GNOME;GTK;Utility;\n"
+msgstr ""
 
-#: C/togglebutton.py.page:47(link) C/togglebutton.c.page:37(link)
-#: C/spinner.py.page:40(link) C/spinner.c.page:35(link)
-msgid "GtkSpinner"
-msgstr "GtkSpinner"
+#: C/helloWorld.js.page:137(section/p)
+msgid "Now let's go through some parts of the <code>.desktop.in</code> file."
+msgstr ""
 
-#: C/togglebutton.js.page:7(title)
-#| msgid "Classes in JavaScript"
-msgid "ToggleButton (JavaScript)"
-msgstr "ToggleButton (JavaScript)"
+#: C/helloWorld.js.page:139(item/title) C/toolbar_builder.py.page:93(td/p)
+#: C/toolbar_builder.vala.page:77(td/p)
+msgid "Name"
+msgstr "Nome"
 
-#: C/togglebutton.js.page:17(desc)
-msgid "Stays pressed until you click it again"
-msgstr "Mantense premido até que prema de novo sobre él"
+#: C/helloWorld.js.page:139(item/p)
+#, fuzzy
+#| msgid "Run the application"
+msgid "The application name."
+msgstr "Executar o aplicativo"
 
-#: C/togglebutton.js.page:22(p)
-msgid ""
-"A ToggleButton is like a normal <link xref=\"button.js\">Button,</link> "
-"except that it stays pressed in when you click it. You can use it like an on/"
-"off switch, to control things like the <link xref=\"spinner.js\">Spinner</"
-"link> in this example."
+#: C/helloWorld.js.page:140(item/title)
+msgid "Comment"
 msgstr ""
 
-#: C/togglebutton.js.page:23(p)
-msgid ""
-"A ToggleButton's get_active method returns true if it's pressed in, and "
-"false if it's not. Its set_active method is used if you want to change its "
-"state without needing to click on it. When it changes state from pressed in "
-"to popped out and vice-versa, it sends out the \"toggled\" signal, which you "
-"can connect to a function to do something."
+#: C/helloWorld.js.page:140(item/p)
+#, fuzzy
+#| msgid "Designing the application"
+msgid "A short description of the application."
+msgstr "Deseñar o aplicativo"
+
+#: C/helloWorld.js.page:141(item/title)
+msgid "Exec"
 msgstr ""
 
-#: C/togglebutton.js.page:66(p) C/radiobutton.js.page:66(p)
+#: C/helloWorld.js.page:141(item/p)
 msgid ""
-"All the code for this sample goes in the RadioButtonExample class. The above "
-"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
-"go in."
+"Specifies a command to execute when you choose the application from the "
+"menu. In this example exec just tells where to find the <file>helloWorld</"
+"file> file and the file takes care of the rest."
 msgstr ""
 
-#: C/togglebutton.js.page:84(title)
-#, fuzzy
-#| msgid "Creating the signal handler"
-msgid "Creating the ToggleButton and other widgets"
-msgstr "Crear o manexador de sinais"
-
-#: C/togglebutton.js.page:90(p)
-msgid ""
-"We want this <link xref=\"spinner.js\">Spinner</link> to expand vertically "
-"and horizontally, to take up as much space as possible inside the window."
+#: C/helloWorld.js.page:142(item/title)
+msgid "Terminal"
 msgstr ""
 
-#: C/togglebutton.js.page:98(p)
+#: C/helloWorld.js.page:142(item/p)
 msgid ""
-"Creating a ToggleButton is a lot like creating a normal <link xref=\"button."
-"js\">Button.</link> The biggest difference is that you're handling a "
-"\"toggled\" signal instead of a \"clicked\" signal. This code binds the "
-"_onToggle function to that signal, so that it's called whenever our "
-"ToggleButton is toggled."
+"Specifies whether the command in the Exec key runs in a terminal window."
 msgstr ""
 
-#: C/togglebutton.js.page:108(p)
+#: C/helloWorld.js.page:145(section/p)
 msgid ""
-"Here we create a simple <link xref=\"grid.js\">Grid</link> to organize "
-"everything in, then attach the Spinner and ToggleButton to it."
+"To put your application into the appropriate category, you need to add the "
+"necessary categories to the Categories line. More information on the "
+"different categories can be found in the <link href=\"http://standards.";
+"freedesktop.org/menu-spec/latest/apa.html\">menu specification</link>."
 msgstr ""
 
-#: C/togglebutton.js.page:118(p)
+#: C/helloWorld.js.page:146(section/p)
 msgid ""
-"Now we add the Grid to the Window, and tell the Window to show itself and "
-"its child widgets when the application is started."
+"In this example we use an existing icon. For a custom icon you need to have "
+"a .svg file of your icon, stored in <file>/usr/share/icons/hicolor/scalable/"
+"apps</file>. Write the name of your icon file to the .desktop.in file, on "
+"line 7. More information on icons in: <link href=\"http://library.gnome.org/";
+"admin/system-admin-guide/stable/themes-11.html.en\"> Installing Icons for "
+"Themes </link>, <link href=\"https://live.gnome.org/GnomeGoals/AppIcon";
+"\">Installing Icons for Themes</link> and <link href=\"http://freedesktop.";
+"org/wiki/Specifications/icon-theme-spec\">on freedesktop.org: Specifications/"
+"icon-theme-spec</link>."
 msgstr ""
 
-#: C/togglebutton.js.page:122(title)
-msgid "Making something happen when the ToggleButton is toggled"
+#: C/helloWorld.js.page:149(section/title)
+msgid "The build system"
 msgstr ""
 
-#: C/togglebutton.js.page:136(p)
+#: C/helloWorld.js.page:150(section/p)
 msgid ""
-"Whenever someone toggles the button, this function checks what its state is "
-"afterwards using get_active and starts or stops the spinner accordingly. We "
-"want it to spin only while the button is pressed in, so if get_active "
-"returns true we start the spinner. Otherwise, we tell it to stop."
+"To make your application truly a part of the GNOME 3 system you need to "
+"install it with the help of autotools. The autotools build will install all "
+"the necessary files to all the right places."
 msgstr ""
 
-#: C/togglebutton.js.page:143(p) C/radiobutton.js.page:264(p)
-msgid ""
-"Finally, we create a new instance of the finished RadioButtonExample class, "
-"and set the application running."
+#: C/helloWorld.js.page:151(section/p)
+msgid "For this you need to have the following files:"
 msgstr ""
 
-#: C/togglebutton.js.page:156(link) C/textview.js.page:252(link)
-#: C/switch.js.page:269(link) C/spinbutton.js.page:203(link)
-#: C/scale.js.page:212(link) C/radiobutton.js.page:278(link)
-#: C/grid.vala.page:31(link) C/grid.js.page:36(link)
-msgid "Gtk.Grid"
-msgstr "Gtk.Grid"
-
-#: C/togglebutton.js.page:157(link) C/spinner.vala.page:30(link)
-#: C/spinner.js.page:32(link)
-msgid "Gtk.Spinner"
-msgstr "Gtk.Spinner"
+#: C/helloWorld.js.page:154(section/title)
+#: C/weatherAutotools.js.page:39(item/p)
+msgid "autogen.sh"
+msgstr "autogen.sh"
 
-#: C/togglebutton.c.page:7(title)
-msgid "ToggleButton (C)"
-msgstr "ToggleButton (C)"
+#: C/helloWorld.js.page:155(section/code)
+#, no-wrap
+msgid ""
+"#!/bin/sh\n"
+"\n"
+"set -e\n"
+"\n"
+"test -n \"$srcdir\" || srcdir=`dirname \"$0\"`\n"
+"test -n \"$srcdir\" || srcdir=.\n"
+"\n"
+"olddir=`pwd`\n"
+"cd \"$srcdir\"\n"
+"\n"
+"# This will run autoconf, automake, etc. for us\n"
+"autoreconf --force --install\n"
+"\n"
+"cd \"$olddir\"\n"
+"\n"
+"if test -z \"$NOCONFIGURE\"; then\n"
+"  \"$srcdir\"/configure \"$ \"\n"
+"fi\n"
+msgstr ""
 
-#: C/togglebutton.c.page:16(name) C/textview.c.page:12(name)
-#: C/switch.c.page:12(name) C/statusbar.c.page:16(name)
-#: C/spinner.c.page:13(name) C/spinbutton.c.page:15(name)
-#: C/scale.c.page:14(name) C/radiobutton.c.page:14(name)
-#: C/progressbar.c.page:13(name) C/messagedialog.c.page:13(name)
-#: C/linkbutton.c.page:12(name) C/label.c.page:13(name)
-#: C/image.c.page:12(name) C/grid.c.page:12(name) C/entry.c.page:12(name)
-#: C/dialog.c.page:14(name) C/button.c.page:14(name)
-#: C/aboutdialog.c.page:14(name)
-msgid "Monica Kochofar"
-msgstr "Monica Kochofar"
+#: C/helloWorld.js.page:157(section/p)
+msgid "After the <file>autogen.sh</file> file is ready and saved, run:"
+msgstr ""
 
-#: C/togglebutton.c.page:17(email) C/textview.c.page:13(email)
-#: C/switch.c.page:13(email) C/statusbar.c.page:17(email)
-#: C/spinner.c.page:14(email) C/spinbutton.c.page:16(email)
-#: C/scale.c.page:15(email) C/radiobutton.c.page:15(email)
-#: C/progressbar.c.page:14(email) C/messagedialog.c.page:14(email)
-#: C/linkbutton.c.page:13(email) C/label.c.page:14(email)
-#: C/image.c.page:13(email) C/grid.c.page:13(email) C/entry.c.page:13(email)
-#: C/dialog.c.page:15(email) C/button.c.page:15(email)
-#: C/aboutdialog.c.page:15(email)
-#| msgid "mdhillca gmail com"
-msgid "monicakochofar gmail com"
-msgstr "monicakochofar gmail com"
-
-#: C/togglebutton.c.page:38(link)
-msgid "GtkTogglebutton"
-msgstr "GtkTogglebutton"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/textview.vala.page:26(None) C/textview.py.page:37(None)
-#: C/textview.c.page:26(None)
-#| msgid ""
-#| "@@image: 'media/weatherAppJs.png'; md5=1fe859ac4854273d72ea8fc9203639b2"
-msgid "@@image: 'media/textview.png'; md5=049e859ed1af2d7c93d8cb5cfd9f7792"
-msgstr "@@image: 'media/textview.png'; md5=049e859ed1af2d7c93d8cb5cfd9f7792"
+#: C/helloWorld.js.page:158(section/screen)
+#, no-wrap
+msgid "<output style=\"prompt\">$ </output><input>chmod +x autogen.sh</input>"
+msgstr ""
 
-#: C/textview.vala.page:7(title)
-msgid "TextView (Vala)"
-msgstr "TextView (Vala)"
+#: C/helloWorld.js.page:162(section/title)
+#: C/weatherAutotools.js.page:37(item/p)
+#: C/weatherAutotools.js.page:63(section/p)
+msgid "Makefile.am"
+msgstr "Makefile.am"
 
-#: C/textview.vala.page:17(desc) C/textview.c.page:17(desc)
-msgid "Widget which displays a GtkTextBuffer"
-msgstr "Widget que mostra un GtkTextBuffer"
+#: C/helloWorld.js.page:163(section/code)
+#, no-wrap
+msgid ""
+"# The actual runnable program is set to the SCRIPTS primitive.\n"
+"# # Prefix bin_ tells where to copy this\n"
+"bin_SCRIPTS = helloWorld\n"
+"# # List of files to be distributed\n"
+"EXTRA_DIST=  \\\n"
+"\t$(bin_SCRIPTS)\n"
+"#\n"
+"#     # The desktop files\n"
+"desktopdir = $(datadir)/applications\n"
+"desktop_DATA = \\\n"
+"\thelloWorld.desktop\n"
+msgstr ""
+
+#: C/helloWorld.js.page:167(section/title)
+#: C/weatherAutotools.js.page:38(item/p)
+#: C/weatherAutotools.js.page:130(section/p)
+msgid "configure.ac"
+msgstr "configure.ac"
 
-#: C/textview.vala.page:20(title) C/textview.c.page:20(title)
-#| msgid "TreeView widget"
-msgid "TextView widget"
-msgstr "Widget TextView"
+#: C/helloWorld.js.page:168(section/code)
+#, no-wrap
+msgid ""
+"# This file is processed by autoconf to create a configure script\n"
+"AC_INIT([Hello World], 1.0)\n"
+"AM_INIT_AUTOMAKE([1.10 no-define foreign dist-xz no-dist-gzip])\n"
+"AC_CONFIG_FILES([Makefile helloWorld.desktop])\n"
+"AC_OUTPUT\n"
+msgstr ""
 
-#: C/textview.vala.page:21(p) C/textview.py.page:31(p) C/textview.c.page:21(p)
-msgid "If we press \"enter\", we have a new line."
+#: C/helloWorld.js.page:172(section/title)
+msgid "README"
 msgstr ""
 
-#: C/textview.vala.page:22(p) C/textview.c.page:22(p)
-msgid ""
-"If we press \"enter\" more times then there are lines in the default sized "
-"window, then a vertical scrollbar appears."
+#: C/helloWorld.js.page:173(section/p)
+msgid "Information users should read first. This file can be blank."
 msgstr ""
 
-#: C/textview.vala.page:23(p) C/textview.c.page:23(p)
+#: C/helloWorld.js.page:175(section/p)
 msgid ""
-"If we write a long sentence, the text will wrap breaking lines between words."
+"When you have the <file>helloWorld</file>, <file>helloWorld.desktop.in</"
+"file>, <file>Makefile.am</file>, <file>configure.ac</file> and <file>autogen."
+"sh</file> files with correct information and rights, the <file>README</file> "
+"file can include the following instructions:"
 msgstr ""
 
-#: C/textview.vala.page:24(p)
+#: C/helloWorld.js.page:176(section/code)
+#, no-wrap
 msgid ""
-"If we have a loooooooooooooooooooooooooooooooooooong word, a horizontal "
-"scrollbar will appear."
+"To build and install this program:\n"
+"\n"
+"./autogen.sh --prefix=/home/your_username/.local\n"
+"make install\n"
+"\n"
+"-------------\n"
+"Running the first line above creates the following files:\n"
+"\n"
+"aclocal.m4\n"
+"autom4te.cache\n"
+"config.log\n"
+"config.status\n"
+"configure\n"
+"helloWorld.desktop\n"
+"install-sh\n"
+"missing\n"
+"Makefile.in\n"
+"Makefile\n"
+"\n"
+"Running \"make install\", installs the application in /home/your_username/.local/bin\n"
+"and installs the helloWorld.desktop file in /home/your_username/.local/share/applications\n"
+"\n"
+"You can now run the application by typing \"Hello World\" in the Overview.\n"
+"\n"
+"----------------\n"
+"To uninstall, type:\n"
+"\n"
+"make uninstall\n"
+"\n"
+"----------------\n"
+"To create a tarball type:\n"
+"\n"
+"make distcheck\n"
+"\n"
+"This will create hello-world-1.0.tar.xz\n"
+"\n"
 msgstr ""
 
-#: C/textview.vala.page:27(p) C/textview.c.page:27(p)
-msgid "This is an example of Gtk.TextView"
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/image.c.page:21(media) C/image.js.page:20(media)
+#: C/image.py.page:21(media) C/image.vala.page:21(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/image-viewer.png'; md5=7720360611243b14283b83527be968c2"
+msgctxt "_"
+msgid "external ref='media/image.png' md5='9416aa74d9d6a857783f7a36338e7a02'"
 msgstr ""
+"@@image: 'media/image-viewer.png'; md5=7720360611243b14283b83527be968c2"
 
-#: C/textview.vala.page:34(link) C/textview.js.page:256(link)
-msgid "Gtk.TextBuffer"
-msgstr "Gtk.TextBuffer"
-
-#: C/textview.vala.page:35(link) C/textview.js.page:257(link)
-msgid "Gtk.TextView"
-msgstr "Gtk.TextView"
-
-#: C/textview.vala.page:36(link) C/textview.js.page:255(link)
-#: C/scrolledwindow.vala.page:30(link)
-msgid "Gtk.ScrolledWindow"
-msgstr "Gtk.ScrolledWindow"
-
-#: C/textview.vala.page:37(link)
-msgid "Gtk.WrapMode"
-msgstr "Gtk.WrapMode"
-
-#: C/textview.vala.page:38(link) C/scrolledwindow.vala.page:31(link)
-#| msgid "Gtk.ButtonsType"
-msgid "Gtk.PolicyType"
-msgstr "Gtk.PolicyType"
-
-#: C/textview.py.page:7(title)
-msgid "TextView (Python)"
-msgstr "TextView (Python)"
+#: C/image.c.page:7(info/title)
+#, fuzzy
+#| msgid "Image Viewer"
+msgctxt "text"
+msgid "Image (C)"
+msgstr "Visor de imaxes"
 
-#: C/textview.py.page:25(desc)
-msgid "Widget that displays a GtkTextBuffer"
+#: C/image.c.page:17(info/desc) C/image.js.page:16(info/desc)
+#: C/image.py.page:17(info/desc) C/image.vala.page:17(info/desc)
+msgid "A widget displaying an image"
 msgstr ""
 
-#: C/textview.py.page:28(title) C/textview.js.page:24(title)
-msgid "TextView"
-msgstr "TextView"
+#: C/image.c.page:20(page/title) C/image.js.page:19(page/title)
+#: C/image.py.page:20(page/title) C/image.vala.page:20(page/title)
+msgid "Image"
+msgstr ""
 
-#: C/textview.py.page:30(p)
-msgid "This is an example of Gtk.TextView."
+#: C/image.c.page:22(page/p) C/image.js.page:21(page/p)
+#: C/image.py.page:22(page/p) C/image.vala.page:22(page/p)
+msgid "This GtkApplication displays an image file from the current directory."
 msgstr ""
 
-#: C/textview.py.page:32(p)
+#: C/image.c.page:23(note/p) C/image.js.page:22(note/p)
+#: C/image.vala.page:23(note/p)
 msgid ""
-"But we can also have a new line if we write a long sentence (the text will "
-"wrap breaking lines between words)."
+"If the image file isn't loaded successfully, the image will contain a "
+"\"broken image\" icon. The <file>filename.png</file> needs to be in the "
+"current directory for this code to work. Use your favorite picture!"
 msgstr ""
 
-#: C/textview.py.page:33(p)
-msgid "If we have a loooooooooooooooooooooooooooooooooooong"
-msgstr "Se temos un loooooooooooooooooooooooooooooooonga"
-
-#: C/textview.py.page:34(p)
-msgid "(that was long)"
-msgstr "(foi demasiado longo)"
-
-#: C/textview.py.page:35(p)
-msgid "word, an horizontal scrollbar will appear."
-msgstr "palabra, aparecerá unha barra de desprazamento horizontal."
-
-#: C/textview.py.page:48(title)
-msgid "Useful methods for a TextView widget"
-msgstr "Métodos útiles para o widget TextView"
-
-#: C/textview.py.page:49(p) C/label.py.page:69(p)
+#: C/image.c.page:27(page/code)
+#, no-wrap
 msgid ""
-"An explanation of how to deal with strings and Unicode (and a recap of what "
-"these things are) can be found <link xref=\"strings.py.page\">here</link>."
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *image;\n"
+"\n"
+"  /*Create a window with a title and a default size*/\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Welcome to GNOME\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);\n"
+"\n"
+"  image = gtk_image_new_from_file (\"gnome-image.png\");\n"
+"\n"
+"  gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (image));\n"
+"\n"
+"  gtk_widget_show_all (GTK_WIDGET (window));\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\",G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"  return status;\n"
+"}\n"
 msgstr ""
 
-#: C/textview.py.page:50(p)
+#: C/image.c.page:34(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"A <code>Gtk.TextView</code> displays the text stored in a <code>Gtk."
-"TextBuffer</code>. However, most text manipulation is accomplished with "
-"iterators, represented by a <code>Gtk.TextIter</code> - a position between "
-"two characters in the text buffer. Iterators are not valid indefinitely; "
-"whenever the buffer is modified in a way that affects the contents of the "
-"buffer, all outstanding iterators become invalid. Because of this, iterators "
-"can’t be used to preserve positions across buffer modifications. To preserve "
-"a position, we use a <code>Gtk.TextMark</code>, that can be set visible with "
-"<code>visible(True)</code>. A text buffer contains two built-in marks; an "
-"\"insert\" mark (the position of the cursor) and the \"selection_bound\" "
-"mark."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkImage.html";
+"\">GtkImage</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/textview.py.page:51(p)
-msgid "Methods for a TextView widget:"
-msgstr "Métodos para o widget TextView:"
+#: C/image.js.page:6(info/title)
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Image (JavaScript)"
+msgstr "JavaScript"
 
-#: C/textview.py.page:53(p)
+#: C/image.js.page:26(page/code)
+#, no-wrap
 msgid ""
-"The TextView widget is by default editable. If you prefer otherwise, use "
-"<code>set_editable(False)</code>. If the buffer has no editable text, it "
-"might be a good idea to use <code>set_cursor_visible(False)</code> as well."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ImageExample = new Lang.Class ({\n"
+"\tName: 'Image Example',\n"
+"\n"
+"\t/* Create the application itself\n"
+"\t   This boilerplate code is needed to build any GTK+ application. */\n"
+"        _init: function () {\n"
+"   \t     this.application = new Gtk.Application ({\n"
+"  \t          application_id: 'org.example.jsimage',\n"
+"  \t          flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"   \t     });\n"
+"\n"
+"\t// Connect 'activate' and 'startup' signals to the callback functions\n"
+"\tthis.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"\tthis.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"\t},\n"
+"\n"
+"\t// Callback function for 'activate' signal presents windows when active\n"
+"\t_onActivate: function () {\n"
+"\t\tthis._window.present ();\n"
+"\t},\n"
+"\n"
+"\t// Callback function for 'startup' signal initializes menus and builds the UI\n"
+"\t_onStartup: function () {\n"
+"\t\tthis._buildUI ();\n"
+"\t},\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\t// Build the application's UI\n"
+"\t_buildUI: function () {\n"
+"\n"
+"\t\t// Create the application window\n"
+"        \tthis._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                     \t     window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                     \t     title: \"Welcome to GNOME\",\n"
+"                                                     \t     default_height: 300,\n"
+"                                                     \t     default_width: 300 });\n"
+"\n"
+"\t\t// Create the label\n"
+"\t\tthis.jsimage = new Gtk.Image ({file: \"gnome-image.png\"});\n"
+"\t\tthis._window.add (this.jsimage);\n"
+"\n"
+"       \t \t// Show the window and all child widgets\n"
+"       \t \tthis._window.show_all();\n"
+"\t}\n"
+"\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ImageExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/textview.py.page:54(p)
+#: C/image.js.page:33(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"The justification of the text is set with <code>set_justification(Gtk."
-"Justification.JUSTIFICATION)</code> where <code>JUSTIFICATION</code> is one "
-"of <code>LEFT, RIGHT, CENTER, FILL</code>."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html";
+"\">Gtk.Image</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/textview.py.page:55(p)
+#: C/image.py.page:7(info/title)
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "Image (Python)"
+msgstr "Python"
+
+#: C/image.py.page:24(note/p)
 msgid ""
-"The line wrapping of the text is set with <code>set_wrap_mode(Gtk.WrapMode."
-"WRAP)</code> where <code>WRAP</code> is one of <code>NONE</code> (the text "
-"area is made wider), <code>CHAR</code> (break lines anywhere the cursor can "
-"appear), <code>WORD</code> (break lines between words), <code>WORD_CHAR</"
-"code> (break lines between words, but if that is not enough between "
-"characters)."
+"If the image file is not loaded successfully, the image will contain a "
+"\"broken image\" icon. The <file>filename.png</file> needs to be in the "
+"current directory for this code to work."
 msgstr ""
 
-#: C/textview.py.page:57(p)
-msgid "Methods for a TextBuffer widget:"
+#: C/image.py.page:33(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # create a window\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
+"        self.set_default_size(300, 300)\n"
+"\n"
+"        # create an image\n"
+"        image = Gtk.Image()\n"
+"        # set the content of the image as the file filename.png\n"
+"        image.set_from_file(\"gnome-image.png\")\n"
+"        # add the image to the window\n"
+"        self.add(image)\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/textview.py.page:59(p)
+#: C/image.py.page:35(section/p)
 msgid ""
-"<code>get_insert()</code> returns the <code>Gtk.TextMark</code> that "
-"represents the cursor, that is the insertion point."
+"Another way to obtain what we have in the example is to create the image as "
+"an instance of another class and add it to the instance of <code>MyWindow</"
+"code> in the <code>do_activate(self)</code> method:"
 msgstr ""
 
-#: C/textview.py.page:60(p)
+#: C/image.py.page:36(section/code)
+#, no-wrap
 msgid ""
-"<code>get_selection_bound()</code> returns the <code>Gtk.TextMark</code> "
-"that represents the selection bound."
+"\n"
+"# a class to create a window\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
+"        self.set_default_size(300, 300)\n"
+"\n"
+"# a class to create an image\n"
+"class MyImage(Gtk.Image):\n"
+"    def __init__(self):\n"
+"        Gtk.Image.__init__(self)\n"
+"        self.set_from_file(\"gnome-image.png\")\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        # create an instance of MyWindow\n"
+"        win = MyWindow(self)\n"
+"        # create an instance of MyImage and add it to the window\n"
+"        win.add(MyImage())\n"
+"        # show the window and everything on it\n"
+"        win.show_all()"
+msgstr ""
+
+#: C/image.py.page:63(section/title)
+msgid "Useful methods for an Image widget"
 msgstr ""
 
-#: C/textview.py.page:61(p)
+#: C/image.py.page:66(item/p)
 msgid ""
-"<code>set_text(\"some text\", length)</code> where <code>length</code> is a "
-"positive integer or <code>-1</code>, sets the content of the buffer as the "
-"first <code>length</code> characters of the <code>\"some text\"</code> text. "
-"If <code>length</code> is omitted or <code>-1</code>, the text is inserted "
-"completely. The content of the buffer, if there is any, is destroyed."
+"To set a stock icon as image, you can use <code>set_from_stock(stock_id, "
+"size)</code> where <code>stock_id</code> is a stock icon such as <code>Gtk."
+"STOCK_ABOUT</code> (more can be found at <link href=\"http://developer.gnome.";
+"org/gtk3/unstable/gtk3-Stock-Items\">Stock Items</link>, with the caveat "
+"that they should be modified as above) and <code>size</code> is a stock icon "
+"size to be chosen from <code>Gtk.IconSize.INVALID, Gtk.IconSize.MENU, Gtk."
+"IconSize.SMALL_TOOLBAR, Gtk.IconSize.LARGE_TOOLBAR, Gtk.IconSize.BUTTON, Gtk."
+"IconSize.DND, Gtk.IconSize.DIALOG</code>."
 msgstr ""
 
-#: C/textview.py.page:62(p)
+#: C/image.py.page:67(item/p)
 msgid ""
-"<code>insert(iter, \"some text\", length)</code> where <code>iter</code> is "
-"a text iterator and <code>length</code> is a positive integer or <code>-1</"
-"code>, inserts in the buffer at <code>iter</code> the first <code>length</"
-"code> characters of the <code>\"some text\"</code> text. If <code>length</"
-"code> is omitted or <code>-1</code>, the text is inserted completely."
+"You can also use <code>set_from_icon_name(icon_name, size)</code>, where "
+"<code>icon_name</code> is a stock icon name such as <code>\"gtk-about\"</"
+"code> (more can be found as above) and <code>size</code> is as above."
 msgstr ""
 
-#: C/textview.py.page:63(p)
+#: C/image.py.page:68(item/p)
 msgid ""
-"<code>insert_at_cursor(\"some text\", length)</code> does the same as "
-"<code>insert(iter, \"some text\", length)</code>, with the current cursor "
-"taken as <code>iter</code>."
+"To load an image over a network use <code>set_from_pixbuf(pixbuf)</code>, "
+"where <code>pixbuf</code> is a <link href=\"http://developer.gnome.org/gdk-";
+"pixbuf/unstable//index.html\">GdkPixbuf</link>."
 msgstr ""
 
-#: C/textview.py.page:64(p)
+#: C/image.py.page:69(item/code)
+#, no-wrap
 msgid ""
-"<code>create_mark(\"mark_name\", iter, left_gravity)</code> where "
-"<code>iter</code> is a <code>Gtk.TextIter</code> and <code>left_gravity</"
-"code> is a boolean, creates a <code>Gtk.TextMark</code> at the position of "
-"<code>iter</code>. If <code>\"mark_name\"</code> is <code>None</code>, the "
-"mark is anonymous; otherwise, the mark can be retrieved by name using "
-"<code>get_mark()</code>. If a mark has left gravity, and text is inserted at "
-"the mark’s current location, the mark will be moved to the left of the newly-"
-"inserted text. If <code>left_gravity</code> is omitted, it defaults to "
-"<code>False</code>."
+"\n"
+"from gi.repository import Gtk\n"
+"from gi.repository import GdkPixbuf\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # create a window\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
+"        self.set_default_size(300, 300)\n"
+"\n"
+"        # create a pixbuf from file filename=\"gnome-image.png\", with width=32\n"
+"        # and height=64 amd boolean preserve_aspect_ratio=False.\n"
+"        pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(\"gnome-image.png\", 64, 128, False)\n"
+"\n"
+"        # create an image\n"
+"        image = Gtk.Image()\n"
+"        # set the content of the image as the pixbuf\n"
+"        image.set_from_pixbuf(pixbuf)\n"
+"        # add the image to the window\n"
+"        self.add(image)"
 msgstr ""
 
-#: C/textview.py.page:66(p)
+#: C/image.py.page:90(item/p)
 msgid ""
-"To specify that some text in the buffer should have specific formatting, you "
-"must define a tag to hold that formatting information, and then apply that "
-"tag to the region of text using <code>create_tag(\"tag name\", property)</"
-"code> and <code>apply_tag(tag, start_iter, end_iter)</code> as in, for "
-"instance:"
+"If <code>preserve_aspect_ratio=True</code> we can use "
+"<code>new_from_file_at_size(filename, width, height)</code>. If <code>width</"
+"code> or <code>height</code> is <code>-1</code>, it is not constrained."
+msgstr ""
+
+#: C/image.py.page:91(item/p)
+msgid ""
+"For loading from an input stream, see <code>new_from_stream()</code> and "
+"<code>new_from_stream_at_scale()</code> in the documentation"
 msgstr ""
 
-#: C/textview.py.page:67(code)
+#: C/image.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Image Viewer"
+msgctxt "text"
+msgid "Image (Vala)"
+msgstr "Visor de imaxes"
+
+#: C/image.vala.page:26(page/code)
 #, no-wrap
 msgid ""
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"Welcome to GNOME\");\n"
 "\n"
-"tag = textbuffer.create_tag(\"orange_bg\", background=\"orange\")\n"
-"textbuffer.apply_tag(tag, start_iter, end_iter)"
-msgstr ""
+"\t\tvar image = new Gtk.Image ();\n"
+"\t\timage.set_from_file (\"gnome-image.png\");\n"
+"\t\tthis.add (image);\n"
+"\t\tthis.set_default_size (300, 300);\n"
+"\t}\n"
+"}\n"
 "\n"
-"tag = textbuffer.create_tag(\"orange_bg\", background=\"orange\")\n"
-"textbuffer.apply_tag(tag, start_iter, end_iter)"
+"public class MyApplication : Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\t\tnew MyWindow (this).show_all ();\n"
+"\t}\n"
+"\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.MyApplication\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
 
-#: C/textview.py.page:70(p)
-msgid "The following are some of the common styles applied to text:"
+#: C/image.vala.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Application.html";
+"\">GtkApplication</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/textview.py.page:72(p)
-msgid "Background colour (\"background\" property)"
-msgstr "Cor de fondo (propiedade \"background\")"
+#: C/image.vala.page:32(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ApplicationWindow.html";
+"\">GtkApplicationWindow</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/textview.py.page:73(p)
-msgid "Foreground colour (\"foreground\" property)"
-msgstr "Cor de primeiro plano (propiedade \"foreground\")"
+#: C/image.vala.page:33(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Image.html\";>GtkImage</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/image-viewer.c.page:33(media) C/image-viewer.cpp.page:31(media)
+#: C/image-viewer.js.page:42(media) C/image-viewer.py.page:41(media)
+#: C/image-viewer.vala.page:48(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/image-viewer.png'; md5=7720360611243b14283b83527be968c2"
+msgctxt "_"
+msgid ""
+"external ref='media/image-viewer.png' md5='7720360611243b14283b83527be968c2'"
+msgstr ""
+"@@image: 'media/image-viewer.png'; md5=7720360611243b14283b83527be968c2"
 
-#: C/textview.py.page:74(p)
-msgid "Underline (\"underline\" property)"
-msgstr "Subliñado (propiedade \"underline\")"
+#: C/image-viewer.c.page:7(info/title)
+#, fuzzy
+#| msgid "Image Viewer"
+msgctxt "text"
+msgid "Image Viewer (C)"
+msgstr "Visor de imaxes"
 
-#: C/textview.py.page:75(p)
-msgid "Bold (\"weight\" property)"
-msgstr "Negriña (propiedade \"weight\")"
+#: C/image-viewer.c.page:10(info/desc) C/image-viewer.vala.page:10(info/desc)
+msgid "A little bit more than a simple \"Hello world\" Gtk application."
+msgstr "Un pouco máis que un simple aplicativo Gtk «Ola mundo»."
 
-#: C/textview.py.page:76(p)
-msgid "Italics (\"style\" property)"
-msgstr ""
+#: C/image-viewer.c.page:23(page/title) C/image-viewer.cpp.page:21(page/title)
+msgid "Image Viewer"
+msgstr "Visor de imaxes"
 
-#: C/textview.py.page:77(p)
-msgid "Strikethrough (\"strikethrough\" property)"
-msgstr ""
+#: C/image-viewer.c.page:26(synopsis/p) C/image-viewer.cpp.page:24(synopsis/p)
+#: C/message-board.c.page:24(synopsis/p)
+#: C/record-collection.js.page:26(synopsis/p)
+msgid "In this tutorial, you will learn:"
+msgstr "Neste titorial aprenderá:"
 
-#: C/textview.py.page:78(p)
-msgid "Justification (\"justification\" property)"
-msgstr ""
+#: C/image-viewer.c.page:28(item/p)
+msgid "Some basic concepts of C/GObject programming"
+msgstr "Algúns conceptos básicos de programación de C/GObject"
 
-#: C/textview.py.page:79(p)
-msgid "Size (\"size\" and \"size-points\" properties)"
-msgstr ""
+#: C/image-viewer.c.page:29(item/p)
+msgid "How to write a Gtk application in C"
+msgstr "Como escribir un aplicativo GTK en C"
 
-#: C/textview.py.page:80(p)
-msgid "Text wrapping (\"wrap-mode\" property)"
+#: C/image-viewer.c.page:43(item/p)
+#, fuzzy
+#| msgid ""
+#| "Choose <gui>Gtk+ (Simple)</gui> from the <gui>C</gui> tab, click "
+#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
+#| "<file>image-viewer</file> as project name and directory."
+msgid ""
+"Choose <gui>Gtk+ (Simple)</gui> from the <gui>C</gui> tab, click "
+"<gui>Continue</gui>, and fill out your details on the next few pages. Use "
+"<file>image-viewer</file> as project name and directory."
 msgstr ""
+"Seleccione <gui>GTK+ (Simple)</gui> desde a lapela <gui>C</gui>, prema "
+"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
+"<file>image-viewer</file> como nome do proxecto e cartafol."
 
-#: C/textview.py.page:82(p)
+#: C/image-viewer.c.page:46(item/p)
 msgid ""
-"You can also delete particular tags later using <code>remove_tag()</code> or "
-"delete all tags in a given region by calling <code>remove_all_tags()</code>."
+"Make sure that <gui>Use GtkBuilder for user interface</gui> is disabled as "
+"we will create the UI manually in this tutorial. Check the <link xref="
+"\"guitar-tuner.c\">Guitar-Tuner</link> tutorial if you want to learn how to "
+"use the interface builder."
 msgstr ""
+"Asegúrese que <gui>Usar GtkBuilder para a interface de usuario</gui> está "
+"desactivado xa que crearemos a UI manualmente neste titorial. Comprobe o "
+"titorial <link xref=\"guitar-tuner.c\">Guitar-Tuner</link> se quere aprender "
+"como usar o construtor de interface."
 
-#: C/textview.py.page:84(p)
-msgid "Methods for a TextIter widget"
-msgstr "Métodos para o widget TextIter"
-
-#: C/textview.py.page:86(p)
+#: C/image-viewer.c.page:61(section/p)
 msgid ""
-"<code>forward_search(needle, flags, limit)</code> searches forward for "
-"<code>needle</code>. The search will not continue past the <code>Gtk."
-"TextIter</code> limit. The <code>flags</code> can be set to one of the "
-"following, or any combination of it by concatenating them with the bitwise-"
-"OR operator <code>|</code>: <code>0</code> (the match must be exact); "
-"<code>Gtk.TextSearchFlags.VISIBLE_ONLY</code> (the match may have invisible "
-"text interspersed in needle); <code>Gtk.TextSearchFlags.TEXT_ONLY</code> "
-"(the match may have pixbufs or child widgets mixed inside the matched "
-"range); <code>Gtk.TextSearchFlags.CASE_INSENSITIVE</code> (the text will be "
-"matched regardless of what case it is in). The method returns a tuple "
-"containing a <code>Gtk.TextIter</code> pointing to the start and to the "
-"first character after the match; if no match is found, <code>None</code> is "
-"returned."
+"C is a rather verbose language, so don't be surprised that the file contains "
+"quite a lot of code. Most of it is template code. It loads an (empty) window "
+"and shows it. More details are given below; skip this list if you understand "
+"the basics:"
 msgstr ""
 
-#: C/textview.py.page:87(p)
+#: C/image-viewer.c.page:68(item/p)
 msgid ""
-"<code>backward_search(needle, flags, limit)</code> does the same as "
-"<code>forward_search()</code>, but moving backwards."
+"The <code>create_window</code> function creates a new (empty) window and "
+"connects a signal to exit the application when that window is closed."
 msgstr ""
+"A función <code>create_window</code> crea unha xanela (baleira) nova e "
+"conecta un sinal para saír do aplicativo péchase esa xanela."
 
-#: C/textview.py.page:95(link) C/textview.c.page:38(link)
-#: C/filechooserdialog.py.page:74(link)
-#, fuzzy
-msgid "GtkTextView"
-msgstr "GtkTextView"
-
-#: C/textview.py.page:96(link) C/textview.c.page:37(link)
-#: C/filechooserdialog.py.page:75(link)
-msgid "GtkTextBuffer"
-msgstr "GtkTextBuffer"
-
-#: C/textview.py.page:97(link)
-msgid "GtkTextTag"
-msgstr "GtkTextTag"
-
-#: C/textview.py.page:98(link) C/textview.c.page:39(link)
-#: C/scrolledwindow.py.page:43(link) C/filechooserdialog.py.page:76(link)
-#| msgid "Scrolling"
-msgid "GtkScrolledWindow"
-msgstr "GtkScrolledWindow"
-
-#: C/textview.py.page:99(link) C/scrolledwindow.py.page:44(link)
-#: C/scale.py.page:57(link) C/paned.py.page:41(link)
-msgid "Standard Enumerations"
-msgstr "Enumeracións estándar"
+#: C/image-viewer.c.page:84(section/title)
+#: C/image-viewer.cpp.page:81(section/title)
+#: C/image-viewer.vala.page:133(section/title)
+msgid "Creating the user interface"
+msgstr "Crear a interface de usuario"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/textview.js.page:25(None)
+#: C/image-viewer.c.page:85(section/p)
 msgid ""
-"@@image: 'media/textviewpenguinchat.png'; "
-"md5=0dd6f6aa44aaeab7901bd90162ed4c9a"
+"Now we will bring life into the empty window. GTK organizes the user "
+"interface with <code>GtkContainer</code>s that can contain other widgets and "
+"even other containers. Here we will use the simplest available container, a "
+"<code>GtkBox</code>:"
 msgstr ""
-"@@image: 'media/textviewpenguinchat.png'; "
-"md5=0dd6f6aa44aaeab7901bd90162ed4c9a"
-
-#: C/textview.js.page:7(title)
-#| msgid "JavaScript"
-msgid "TextView (JavaScript)"
-msgstr "TextView (JavaScript)"
-
-#: C/textview.js.page:21(desc)
-msgid "A multiline text editor"
-msgstr "Un editor de texto multiliña"
 
-#: C/textview.js.page:26(p)
+#: C/image-viewer.c.page:88(section/code)
+#, no-wrap
 msgid ""
-"A TextView is really (or at least usually) a nested set of three objects."
+"\n"
+"static GtkWidget*\n"
+"create_window (void)\n"
+"{\n"
+"\tGtkWidget *window;\n"
+"\tGtkWidget *button;\n"
+"\tGtkWidget *image;\n"
+"\tGtkWidget *box;\n"
+"\n"
+"\t/* Set up the UI */\n"
+"\twindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);\n"
+"\tgtk_window_set_title (GTK_WINDOW (window), \"image-viewer-c\");\n"
+"\n"
+"\tbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);\n"
+"\tbutton = gtk_button_new_with_label (_(\"Open image\"));\n"
+"\timage = gtk_image_new ();\n"
+"\n"
+"\tgtk_box_pack_start (GTK_BOX (box), image, TRUE, TRUE, 0);\n"
+"\tgtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);\n"
+"\n"
+"\tgtk_container_add (GTK_CONTAINER (window), box);\n"
+"\n"
+"\t/* Connect signals */\n"
+"\n"
+"\t/* Show open dialog when opening a file */\n"
+"\tg_signal_connect (button, \"clicked\", G_CALLBACK (on_open_image), image);\n"
+"\n"
+"\t/* Exit when the window is closed */\n"
+"\tg_signal_connect (window, \"destroy\", G_CALLBACK (gtk_main_quit), NULL);\n"
+"\n"
+"\treturn window;\n"
+"}\n"
 msgstr ""
 
-#: C/textview.js.page:28(p)
+#: C/image-viewer.c.page:123(item/p)
 msgid ""
-"At the bottom is a <link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/";
-"gjs/Gtk.TextBuffer.html\">TextBuffer.</link> This holds the text itself."
+"The first lines create the widgets we want to use: a button for opening up "
+"an image, the image view widget itself and the box we will use as a "
+"container. The macros like <code>GTK_BOX</code> are used for dynamic type "
+"checking and casting which is needed as C doesn't support object-orientation "
+"out-of-the-box."
 msgstr ""
 
-#: C/textview.js.page:29(p)
+#: C/image-viewer.c.page:128(item/p)
 msgid ""
-"In the middle is the <link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/";
-"gjs/Gtk.TextView.html\">TextView,</link> which is a widget that lets you see "
-"and edit the text in the buffer. It automatically resizes itself depending "
-"on how much text there is."
+"The calls to <code>gtk_box_pack_start</code> add the two widgets to the box "
+"and define their behaviour. The image will expand into any available space "
+"while the button will just be as big as needed. You will notice that we "
+"don't set explicit sizes on the widgets. In GTK this is usually not needed "
+"as it makes it much easier to have a layout that looks good in different "
+"window sizes. Next, the box is added to the window."
 msgstr ""
 
-#: C/textview.js.page:30(p)
+#: C/image-viewer.c.page:134(item/p)
 msgid ""
-"Since the automatic resizing can make a TextView unwieldy, you normally "
-"place it inside of a <link xref=\"scrolledwindow.js\">ScrolledWindow.</link> "
-"Despite the name, it's not an actual window in terms of having a title bar "
-"and an X button; it's a widget you put on the application you're making, "
-"which acts like a window onto a more manageable chunk of a TextView. If the "
-"text in the buffer is too big to fit, scrollbars will appear."
+"We need to define what happens when the user clicks on the button. GTK uses "
+"the concept of <em>signals</em>. When the button is clicked, it fires the "
+"<em>clicked</em> signal, which we can connect to some action. This is done "
+"using the <code>g_signal_connect</code> function which tells GTK to call the "
+"<code>on_image_open</code> function when the button is clicked and to pass "
+"the image as an additional argument to that function. We will define the "
+"<em>callback</em> in the next section."
 msgstr ""
 
-#: C/textview.js.page:32(p)
+#: C/image-viewer.c.page:139(item/p)
 msgid ""
-"If you want to change what text is displayed in the TextView, you act on the "
-"TextBuffer, since it's what actually holds the text. The same goes for if "
-"you want to see what text someone typed in. This sample application lets you "
-"talk to a (make-believe) penguin, and checks the TextBuffer to see if you "
-"typed the word \"fish\" anywhere in it."
+"The last <code>g_signal_connect()</code> makes sure that the application "
+"exits when the window is closed."
 msgstr ""
 
-#: C/textview.js.page:33(p)
+#: C/image-viewer.c.page:142(item/p)
 msgid ""
-"Real-life penguin populations are declining fast, because climate change is "
-"melting the ice that they live on and killing the fish that they eat. If "
-"you'd like to play a (somewhat silly) GNOME game based on this premise, take "
-"a look at <link href=\"http://pingus.seul.org/\";>Pingus.</link>"
+"As a last step, make sure to replace the <code>gtk_widget_show</code> call "
+"in the <code>main()</code> function by <code>gtk_widget_show_all()</code> to "
+"show the window and all the widgets it contains."
 msgstr ""
 
-#: C/textview.js.page:73(p)
+#: C/image-viewer.c.page:149(section/title)
+#: C/image-viewer.cpp.page:136(section/title)
+#: C/image-viewer.vala.page:204(section/title)
+msgid "Showing the image"
+msgstr "Mostrar a imaxe"
+
+#: C/image-viewer.c.page:150(section/p)
 msgid ""
-"All the code for this sample goes in the TextViewExample class. The above "
-"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
-"go in."
+"We will now define the signal handler for the <em>clicked</em> signal or the "
+"button we mentioned before. Add this code before the <code>create_window()</"
+"code> method."
 msgstr ""
 
-#: C/textview.js.page:91(title)
-#, fuzzy
-#| msgid "Creating the user interface"
-msgid "Creating the TextView"
-msgstr "Crear a interface de usuario"
-
-#: C/textview.js.page:101(p)
+#: C/image-viewer.c.page:153(section/code)
+#, no-wrap
 msgid ""
-"Our first step in this example is to create the <link xref=\"label.js"
-"\">Label</link> that the penguin will use to talk to you. We set the text in "
-"it to wrap by setting its wrap property to true, but we'll use a different "
-"method on the TextView itself that allows for more fine-grained control."
+"\n"
+"static void\n"
+"on_open_image (GtkButton* button, gpointer user_data)\n"
+"{\n"
+"\tGtkWidget *image = GTK_WIDGET (user_data);\n"
+"\tGtkWidget *toplevel = gtk_widget_get_toplevel (image);\n"
+"\tGtkFileFilter *filter = gtk_file_filter_new ();\n"
+"\tGtkWidget *dialog = gtk_file_chooser_dialog_new (_(\"Open image\"),\n"
+"\t                                                 GTK_WINDOW (toplevel),\n"
+"\t                                                 GTK_FILE_CHOOSER_ACTION_OPEN,\n"
+"\t                                                 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,\n"
+"\t                                                 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,\n"
+"\t                                                 NULL);\n"
+"\n"
+"\tgtk_file_filter_add_pixbuf_formats (filter);\n"
+"\tgtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog),\n"
+"\t                             filter);\n"
+"\n"
+"\tswitch (gtk_dialog_run (GTK_DIALOG (dialog)))\n"
+"\t{\n"
+"\t\tcase GTK_RESPONSE_ACCEPT:\n"
+"\t\t{\n"
+"\t\t\tgchar *filename =\n"
+"\t\t\t\tgtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));\n"
+"\t\t\tgtk_image_set_from_file (GTK_IMAGE (image), filename);\n"
+"\t\t\tbreak;\n"
+"\t\t}\n"
+"\t\tdefault:\n"
+"\t\t\tbreak;\n"
+"\t}\n"
+"\tgtk_widget_destroy (dialog);\n"
+"}\n"
 msgstr ""
 
-#: C/textview.js.page:112(p)
+#: C/image-viewer.c.page:186(section/p) C/image-viewer.cpp.page:172(section/p)
+#: C/image-viewer.js.page:278(section/p) C/image-viewer.py.page:192(section/p)
 msgid ""
-"Our first step is to create a TextBuffer to put the words into. After that "
-"we create the TextView, and tell it to use the TextBuffer we created as its "
-"buffer. We also set it to be editable, since we want to be able to type new "
-"things in."
+"This is a bit more complicated than anything we've attempted so far, so "
+"let's break it down:"
 msgstr ""
 
-#: C/textview.js.page:113(p)
+#: C/image-viewer.c.page:188(item/p)
 msgid ""
-"The wrap_mode property lets you select from four different <link href="
-"\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.WrapMode.html";
-"\">WrapModes.</link> Gtk.WrapMode.CHAR, for instance, starts wrapping around "
-"in the middle of a word if you keep typing when it gets to the edge. Most "
-"people are probably used to Gtk.WrapMode.WORD, which will automatically put "
-"the word you're typing on the next line if it gets to be too long."
+"The first argument of the signal is always the widget that sent the signal. "
+"Sometimes other arguments related to the signal come after that, but "
+"<em>clicked</em> doesn't have any. Next is the <code>user_data</code> "
+"argument which is a pointer to the data we passed when connecting the "
+"signal. In this case it is our <code>GtkImage</code> object."
 msgstr ""
 
-#: C/textview.js.page:127(p)
+#: C/image-viewer.c.page:194(item/p)
 msgid ""
-"Here we create a <link xref=\"scrolledwindow.js\">ScrolledWindow,</link> and "
-"set it to automatically scroll if it gets to be too big horizontally or "
-"vertically. We also give it a nice-looking ETCHED_IN border. After that, we "
-"put our TextView inside, and tell the ScrolledWindow to give us a viewport "
-"onto it."
+"The next interesting line is where the dialog for choosing the file is "
+"created using <code>gtk_file_chooser_dialog_new</code>. The function takes "
+"the title of the dialog, the parent window of the dialog and several options "
+"like the number of buttons and their corresponding values."
 msgstr ""
 
-#: C/textview.js.page:131(title) C/radiobutton.js.page:117(title)
-#, fuzzy
-#| msgid "Creating the user interface"
-msgid "Creating the rest of the user interface"
-msgstr "Crear a interface de usuario"
+#: C/image-viewer.c.page:198(item/p) C/image-viewer.cpp.page:180(item/p)
+#: C/image-viewer.js.page:285(item/p) C/image-viewer.py.page:199(item/p)
+msgid ""
+"Notice that we are using <em>stock</em> button names from Gtk, instead of "
+"manually typing \"Cancel\" or \"Open\". The advantage of using stock names "
+"is that the button labels will already be translated into the user's "
+"language."
+msgstr ""
 
-#: C/textview.js.page:143(p)
+#: C/image-viewer.c.page:201(item/p)
 msgid ""
-"The first <link xref=\"grid.js\">Grid</link> we create only has the Label "
-"and the ScrolledWindow inside it."
+"The next two lines restrict the <gui>Open</gui> dialog to only display files "
+"which can be opened by GtkImage. A filter object is created first; we then "
+"add all kinds of files supported by <code>GdkPixbuf</code> (which includes "
+"most image formats like PNG and JPEG) to the filter. Finally, we set this "
+"filter to be the <gui>Open</gui> dialog's filter."
 msgstr ""
 
-#: C/textview.js.page:162(p)
+#: C/image-viewer.c.page:204(item/p)
 msgid ""
-"We create a <link xref=\"button.js\">Button</link> to send your message to "
-"the penguin, and a new Grid that has the other one on top and the Button on "
-"the bottom. The Button has a margin on top, so that it isn't squished up "
-"against the ScrolledWindow."
+"<code>gtk_dialog_run</code> displays the <gui>Open</gui> dialog. The dialog "
+"will wait for the user to choose an image; when they do, "
+"<code>gtk_dialog_run</code> will return the value <code>GTK_RESPONSE_ACCEPT</"
+"code> (it would return <code>GTK_RESPONSE_CANCEL</code> if the user clicked "
+"<gui>Cancel</gui>). The <code>switch</code> statement tests for this."
 msgstr ""
 
-#: C/textview.js.page:173(p)
+#: C/image-viewer.c.page:206(item/p)
 msgid ""
-"Finally, we attach the main Grid to the window, then we tell the window and "
-"everything inside it to become visible when the application is run."
+"Assuming that the user did click <gui>Open</gui>, the next line sets the "
+"<code>file</code> property of the GtkImage to the filename of the image "
+"selected by the user. The GtkImage will then load and display the chosen "
+"image."
 msgstr ""
 
-#: C/textview.js.page:178(title)
-msgid "Function which handles the penguin's response"
+#: C/image-viewer.c.page:209(item/p)
+msgid ""
+"In the final line of this method, we destroy the <gui>Open</gui> dialog "
+"because we don't need it any more. Destroying automatically hides the dialog."
 msgstr ""
 
-#: C/textview.js.page:230(p)
+#: C/image-viewer.c.page:218(section/p) C/image-viewer.cpp.page:206(section/p)
 msgid ""
-"Here we use some basic JavaScript functions to have the penguins say "
-"something random. Penguins like fish, though, so if you mention fish we want "
-"the penguin to respond to that. To do that, we use the JavaScript String "
-"object's match method on <file>this.buffer.text</file>, which returns the "
-"contents of our TextBuffer."
+"If you haven't already done so, choose the <file>Debug/src/image-viewer</"
+"file> application in the dialog that appears. Finally, hit <gui>Run</gui> "
+"and enjoy!"
 msgstr ""
+"Se non o fixo aínda, seleccione o aplicativo <file>Debug/src/image-viewer</"
+"file> no diálogo que aparece. Finalmente, prema <gui>Executar</gui> e "
+"desfrute!"
 
-#: C/textview.js.page:231(p)
+#: C/image-viewer.c.page:223(section/p)
 msgid ""
-"Since we want to clear out the TextBuffer after each time you click Send, we "
-"set <file>this.buffer.text</file> to contain an empty string afterwards. "
-"Then we return focus to our TextView, so that you can keep typing without "
-"having to click on it beforehand."
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"image-viewer/image-viewer.c\">reference code</link>."
 msgstr ""
 
-#: C/textview.js.page:238(p)
+#: C/image-viewer.c.page:231(item/p) C/image-viewer.cpp.page:219(item/p)
+#: C/image-viewer.js.page:320(item/p) C/image-viewer.py.page:234(item/p)
+#: C/image-viewer.vala.page:292(item/p)
 msgid ""
-"Finally, we create a new instance of the finished TextViewExample class, and "
-"set the application running."
+"Have the user select a directory rather than a file, and provide controls to "
+"cycle through all of the images in a directory."
 msgstr ""
 
-#: C/textview.js.page:251(link) C/statusbar.js.page:224(link)
-#: C/radiobutton.js.page:277(link) C/grid.js.page:35(link)
-#: C/button.js.page:32(link)
-#| msgid "Gtk.ButtonsType"
-msgid "Gtk.Button"
-msgstr "Gtk.Button"
-
-#: C/textview.js.page:253(link) C/switch.js.page:271(link)
-#: C/spinbutton.js.page:204(link) C/scale.js.page:213(link)
-#: C/radiobutton.js.page:279(link) C/label.vala.page:32(link)
-#: C/label.js.page:31(link) C/dialog.vala.page:33(link)
-msgid "Gtk.Label"
-msgstr "Gtk.Label"
-
-#: C/textview.js.page:254(link) C/radiobutton.vala.page:32(link)
-#: C/radiobutton.js.page:280(link)
-#| msgid "Gtk.ButtonsType"
-msgid "Gtk.RadioButton"
-msgstr "Gtk.ButtonsType"
-
-#: C/textview.c.page:7(title)
-msgid "TextView (C)"
-msgstr "TextView (C)"
-
-#: C/textview.c.page:24(p)
+#: C/image-viewer.c.page:234(item/p) C/image-viewer.cpp.page:222(item/p)
+#: C/image-viewer.js.page:323(item/p) C/image-viewer.py.page:237(item/p)
+#: C/image-viewer.vala.page:295(item/p)
 msgid ""
-"If we have a loooooooooooooooooooooooooooooooooooong (that was long) word, "
-"a* horizontal scrollbar will appear."
+"Apply random filters and effects to the image when it is loaded and allow "
+"the user to save the modified image."
 msgstr ""
+"Aplicar filtros aleatorios e efectos á imaxe cando se carga e permitir ao "
+"usuario gardar a imaxe modificada."
 
-#: C/textview.c.page:40(link)
-#| msgid "Layout containers"
-msgid "GtkContainer"
-msgstr "GtkContainer"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/switch.vala.page:25(None) C/switch.py.page:26(None)
-#: C/switch.c.page:22(None)
-#| msgid "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
-msgid "@@image: 'media/switch_off.png'; md5=211a2962708800697ad5373dcc86ad6d"
-msgstr "@@image: 'media/switch_off.png'; md5=211a2962708800697ad5373dcc86ad6d"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/switch.vala.page:26(None) C/switch.py.page:27(None)
-#: C/switch.c.page:23(None)
-#| msgid ""
-#| "@@image: 'media/photo-wall.png'; md5=f19590d97e8ec029cda3c44b769c11cd"
-msgid "@@image: 'media/switch_on.png'; md5=95e8769f758c2d95ace0fa8ecf30b29d"
-msgstr "@@image: 'media/switch_on.png'; md5=95e8769f758c2d95ace0fa8ecf30b29d"
-
-#: C/switch.vala.page:7(title)
-msgid "Switch (Vala)"
-msgstr "Switch (Vala)"
-
-#: C/switch.vala.page:21(desc) C/switch.py.page:22(desc)
-#: C/switch.c.page:17(desc)
-msgid "A \"light switch\" style toggle"
+#: C/image-viewer.c.page:235(item/p) C/image-viewer.cpp.page:223(item/p)
+#: C/image-viewer.js.page:324(item/p) C/image-viewer.py.page:238(item/p)
+#: C/image-viewer.vala.page:296(item/p)
+msgid ""
+"<link href=\"http://www.gegl.org/api.html\";>GEGL</link> provides powerful "
+"image manipulation capabilities."
 msgstr ""
+"<link href=\"http://www.gegl.org/api.html\";>GEGL</link> fornece capacidades "
+"moi potentes de manipulación de imaxes."
 
-#: C/switch.vala.page:24(title) C/switch.py.page:25(title)
-#: C/switch.js.page:20(title) C/switch.c.page:20(title)
-msgid "Switch"
-msgstr "Interruptor"
+#: C/image-viewer.c.page:238(item/p) C/image-viewer.cpp.page:226(item/p)
+#: C/image-viewer.js.page:327(item/p) C/image-viewer.py.page:241(item/p)
+#: C/image-viewer.vala.page:299(item/p)
+msgid ""
+"Allow the user to load images from network shares, scanners, and other more "
+"complicated sources."
+msgstr ""
+"Permitir ao usuario cargar imaxes desde recursos de rede compartidos, "
+"escáneres e outras fontes máis complicadas."
 
-#: C/switch.vala.page:28(p)
-msgid "This Switch toggles the title."
+#: C/image-viewer.c.page:239(item/p) C/image-viewer.cpp.page:227(item/p)
+#: C/image-viewer.js.page:328(item/p) C/image-viewer.py.page:242(item/p)
+#: C/image-viewer.vala.page:300(item/p)
+msgid ""
+"You can use <link href=\"http://library.gnome.org/devel/gio/unstable/\";>GIO</"
+"link> to handle network file tranfers and the like, and <link href=\"http://";
+"library.gnome.org/devel/gnome-scan/unstable/\">GNOME Scan</link> to handle "
+"scanning."
 msgstr ""
 
-#: C/switch.vala.page:35(link) C/switch.js.page:272(link)
-msgid "Gtk.Switch"
-msgstr "Gtk.Switch"
+#: C/image-viewer.cpp.page:8(info/desc)
+msgid "A little bit more than a simple \"Hello world\" GTKmm application."
+msgstr "Un pouco máis que un simple aplicativo Gtkmm «Ola mundo»."
 
-#: C/switch.py.page:7(title)
-msgid "Switch (Python)"
-msgstr "Switch (Python)"
+#: C/image-viewer.cpp.page:26(item/p)
+msgid "Some basic concepts of C++/GObject programming"
+msgstr "Algúns conceptos básicos de programación de C++/GObject"
 
-#: C/switch.py.page:29(p)
-msgid "This Switch makes the title appears and disappear."
-msgstr ""
+#: C/image-viewer.cpp.page:27(item/p)
+msgid "How to write a Gtk application in C++"
+msgstr "Cómo escribir un aplicativo GTK en C++"
 
-#: C/switch.py.page:40(title)
-msgid "Useful methods for a Switch widget"
+#: C/image-viewer.cpp.page:41(item/p)
+msgid ""
+"Choose <gui>GTKmm (Simple)</gui> from the <gui>C++</gui> tab, click "
+"<gui>Forward</gui>, and fill out your details on the next few pages. Use "
+"<file>image-viewer</file> as project name and directory."
 msgstr ""
+"Seleccione <gui>GTK+ (Simple)</gui> desde a lapela <gui>C++</gui>, prema "
+"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
+"<file>image-viewer</file> como nome do proxecto e cartafol."
 
-#: C/switch.py.page:41(p) C/checkbutton.py.page:38(p)
+#: C/image-viewer.cpp.page:44(item/p)
 msgid ""
-"For a discussion on signals and callback functions, see <link xref=\"signals-"
-"callbacks.py\">this page</link>."
+"Make sure that <gui>Use GtkBuilder for user interface</gui> is disabled as "
+"we will create the UI manually in this tutorial. Check the <link xref="
+"\"guitar-tuner.cpp\">Guitar-Tuner</link> tutorial if you want to learn how "
+"to use the interface builder."
 msgstr ""
+"Asegúrese que <gui>Usar GtkBuilder para a interface de usuario</gui> está "
+"desactivado xa que crearemos a UI manualmente neste titorial. Comprobe o "
+"titorial <link xref=\"guitar-tuner.cpp\">Guitar-Tuner</link> se quere "
+"aprender como usar o construtor de interface."
 
-#: C/switch.py.page:48(link) C/switch.c.page:35(link)
-#: C/radiobutton.c.page:37(link)
-msgid "GtkSwitch"
-msgstr "GtkSwitch"
-
-#: C/switch.py.page:49(link) C/switch.c.page:34(link)
-#: C/spinbutton.c.page:37(link) C/separator.py.page:40(link)
-#: C/radiobutton.c.page:35(link) C/label.py.page:88(link)
-#: C/label.c.page:38(link) C/grid.py.page:57(link) C/dialog.c.page:36(link)
-msgid "GtkLabel"
-msgstr "GtkLabel"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/switch.js.page:21(None)
-#| msgid ""
-#| "@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
+#: C/image-viewer.cpp.page:49(item/p)
 msgid ""
-"@@image: 'media/switchanimals.png'; md5=513ae15dcf68e15eef30b76420b8c714"
+"Click <gui>Apply</gui> and the project will be created for you. Open "
+"<file>src/main.cc</file> from the <gui>Project</gui> or <gui>File</gui> "
+"tabs. You should see some code which starts with the lines:"
 msgstr ""
-"@@image: 'media/switchanimals.png'; md5=513ae15dcf68e15eef30b76420b8c714"
-
-#: C/switch.js.page:7(title)
-#| msgid "JavaScript"
-msgid "Switch (JavaScript)"
-msgstr "Switch (JavaScript)"
+"Prema <gui>Aplicar</gui> para crear o proxecto. Abra <file>src/main.cc</"
+"file> desde as lapelas <gui>Proxecto</gui> ou <gui>Ficheiro</gui>. Debería "
+"ver algún código que comeza coas liñas:"
 
-#: C/switch.js.page:17(desc)
-msgid "A sliding switch that can be flipped on and off"
+#: C/image-viewer.cpp.page:50(item/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtkmm.h&gt;\n"
+"#include &lt;iostream&gt;\n"
+"\n"
+"#include \"config.h\"&gt;"
 msgstr ""
 
-#: C/switch.js.page:22(p)
+#: C/image-viewer.cpp.page:64(item/p)
 msgid ""
-"A Switch has two positions, on and off. This example shows how you can use "
-"multiple switches together to control which <link xref=\"image.js\">Image</"
-"link> is shown in the window. The pictures used in this example <link href="
-"\"https://live.gnome.org/TarynFox?action=AttachFile&amp;do=get&amp;";
-"target=Animal+Photos.zip\">can be downloaded here.</link>"
+"The three <code>#include</code> lines at the top include the <code>config</"
+"code> (useful autoconf build defines), <code>gtkmm</code> (user interface) "
+"and <code>iostream</code> (C++-STL) libraries. Functions from these "
+"libraries are used in the rest of the code."
 msgstr ""
 
-#: C/switch.js.page:23(p)
+#: C/image-viewer.cpp.page:67(item/p)
 msgid ""
-"The window will contain a \"broken image\" icon instead of a picture if "
-"picture files named <file>redfox.png</file>, <file>muteswan.png</file>, "
-"<file>fruitbat.png</file>, and <file>gentoopenguin.png</file> aren't in the "
-"same directory. You can change the code and the pictures around as you like, "
-"but the Creative Commons-licensed photos used in this example were taken "
-"from the following sources and cropped to 640x425:"
+"The <code>main</code> function creates a new (empty) window and sets the "
+"window title."
 msgstr ""
+"A función <code>main</code> crea unha xanela nova (e baleira) e estabelece o "
+"título da xanela."
 
-#: C/switch.js.page:25(p)
+#: C/image-viewer.cpp.page:70(item/p)
 msgid ""
-"<link href=\"http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.jpg\";>Red fox "
-"photo</link> by Rob Lee, licensed <link href=\"http://creativecommons.org/";
-"licenses/by/2.0/deed.en\">CC-By</link>"
+"The <code>kit::run()</code> call starts the GTKmm main loop, which runs the "
+"user interface and starts listening for events (like clicks and key "
+"presses). As we give the window as an argument to that function, the "
+"application will automatically exit when that window is closed."
 msgstr ""
 
-#: C/switch.js.page:26(p)
+#: C/image-viewer.cpp.page:82(section/p)
 msgid ""
-"<link href=\"http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-";
-"Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.jpg\">Gentoo penguin "
-"photo</link> by Ken Funakoshi, licensed <link href=\"http://creativecommons.";
-"org/licenses/by-sa/2.0/deed.en\">CC-By-SA</link>"
+"Now we will bring life into the empty window. GTKmm organizes the user "
+"interface with <code>Gtk::Container</code>s that can contain other widgets "
+"and even other containers. Here we will use the simplest available "
+"container, a <code>Gtk::Box</code>:"
 msgstr ""
 
-#: C/switch.js.page:27(p)
+#: C/image-viewer.cpp.page:85(section/code)
+#, no-wrap
 msgid ""
-"<link href=\"http://www.flickr.com/photos/shekgraham/127431519/in/";
-"photostream/\">Fruit bat photo</link> by Shek Graham, licensed <link href="
-"\"http://creativecommons.org/licenses/by/2.0/deed.en\";>CC-By</link>"
+"\n"
+"int\n"
+"main (int argc, char *argv[])\n"
+"{\n"
+"\tGtk::Main kit(argc, argv);\n"
+"\n"
+"\tGtk::Window main_win;\n"
+"\tmain_win.set_title (\"image-viewer-cpp\");\n"
+"\n"
+"\tGtk::Box* box = Gtk::manage(new Gtk::Box());\n"
+"\tbox-&gt;set_orientation (Gtk::ORIENTATION_VERTICAL);\n"
+"\tbox-&gt;set_spacing(6);\n"
+"\tmain_win.add(*box);\n"
+"\n"
+"\timage = Gtk::manage(new Gtk::Image());\n"
+"\tbox-&gt;pack_start (*image, true, true);\n"
+"\n"
+"\tGtk::Button* button = Gtk::manage(new Gtk::Button(\"Open Image…\"));\n"
+"\tbutton-&gt;signal_clicked().connect (\n"
+"\t\tsigc::ptr_fun(&amp;on_open_image));\n"
+"\tbox-&gt;pack_start (*button, false, false);\n"
+"\n"
+"\tmain_win.show_all_children();\n"
+"\tkit.run(main_win);\n"
+"\n"
+"\treturn 0;\n"
+"}\n"
 msgstr ""
 
-#: C/switch.js.page:28(p)
+#: C/image-viewer.cpp.page:115(item/p)
 msgid ""
-"<link href=\"http://commons.wikimedia.org/wiki/File:Mute_Swan-";
-"Mindaugas_Urbonas.jpg\">Mute swan photo</link> by Mindaugas Urbonas, "
-"licensed <link href=\"http://creativecommons.org/licenses/by-sa/2.5/deed.en";
-"\">CC-By-SA</link>"
+"The first lines create the widgets we want to use: a button for opening up "
+"an image, the image view widget itself and the box we will use as a "
+"container."
 msgstr ""
 
-#: C/switch.js.page:30(p)
+#: C/image-viewer.cpp.page:118(item/p)
 msgid ""
-"Photo credits and licensing information are shown in the application's <link "
-"xref=\"aboutdialog.js\">AboutDialog.</link> Always remember to credit the "
-"original artist when using <link href=\"http://creativecommons.org";
-"\">Creative Commons-licensed works!</link>"
+"The calls to <code>pack_start</code> add the two widgets to the box and "
+"define their behaviour. The image will expand into any available space while "
+"the button will just be as big as needed. You will notice that we don't set "
+"explicit sizes on the widgets. In GTKmm this is usually not needed as it "
+"makes it much easier to have a layout that looks good in different window "
+"sizes. Next, the box is added to the window."
 msgstr ""
 
-#: C/switch.js.page:74(p)
+#: C/image-viewer.cpp.page:124(item/p)
 msgid ""
-"All the code for this sample goes in the SwitchExample class. The above code "
-"creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.";
-"Application.html\">Gtk.Application</link> for our widgets and window to go "
-"in."
+"We need to define what happens when the user clicks on the button. GTKmm "
+"uses the concept of <em>signals</em>. When the button is clicked, it fires "
+"the <em>clicked</em> signal, which we can connect to some action. This is "
+"done using the <code>signal_clicked().connect</code> method which tells "
+"GTKmm to call the <code>on_open_image</code> function when the button is "
+"clicked. We will define the <em>callback</em> in the next section."
 msgstr ""
 
-#: C/switch.js.page:75(p) C/messagedialog.js.page:70(p)
+#: C/image-viewer.cpp.page:128(item/p)
 msgid ""
-"Before we call _buildUI to create the window and the widgets inside it, we "
-"need to call _initMenus, which tells GNOME to create the menu. We can put "
-"the actual code for _initMenus after the code for _buildUI, since it doesn't "
-"matter what order we put them in so long as _initMenus is called first in "
-"_onStartup."
+"The last step is to show all widgets in the window using "
+"<code>show_all_children()</code>. This is equivalent to using the <code>show"
+"()</code> method on all our child widgets."
 msgstr ""
 
-#: C/switch.js.page:91(title)
-#| msgid "Creating the user interface"
-msgid "Creating the switches"
-msgstr "Crear os interruptores"
+#: C/image-viewer.cpp.page:137(section/p)
+msgid ""
+"We will now define the signal handler for the <em>clicked</em> signal or the "
+"button we mentioned before. Add this code before the <code>main</code> "
+"method."
+msgstr ""
 
-#: C/switch.js.page:97(p)
+#: C/image-viewer.cpp.page:140(section/code)
+#, no-wrap
 msgid ""
-"We first create the <link xref=\"image.js\">Image</link> that the switches "
-"will control. Remember that a file named <file>redfox.png</file> needs to be "
-"in the same directory as this application."
+"\n"
+"Gtk::Image* image = 0;\n"
+"\n"
+"static void\n"
+"on_open_image ()\n"
+"{\n"
+"\tGtk::FileChooserDialog dialog(\"Open image\",\n"
+"\t                              Gtk::FILE_CHOOSER_ACTION_OPEN);\n"
+"\tdialog.add_button (Gtk::Stock::OPEN,\n"
+"\t                   Gtk::RESPONSE_ACCEPT);\n"
+"\tdialog.add_button (Gtk::Stock::CANCEL,\n"
+"\t                   Gtk::RESPONSE_CANCEL);\n"
+"\n"
+"\tGlib::RefPtr&lt;Gtk::FileFilter&gt; filter =\n"
+"\t\tGtk::FileFilter::create();\n"
+"\tfilter-&gt;add_pixbuf_formats();\n"
+"\tfilter-&gt;set_name(\"Images\");\n"
+"\tdialog.add_filter (filter);\n"
+"\n"
+"\tconst int response = dialog.run();\n"
+"\tdialog.hide();\n"
+"\n"
+"\tswitch (response)\n"
+"\t{\n"
+"\t\tcase Gtk::RESPONSE_ACCEPT:\n"
+"\t\t\timage-&gt;set(dialog.get_filename());\n"
+"\t\t\tbreak;\n"
+"\t\tdefault:\n"
+"\t\t\tbreak;\n"
+"\t}\n"
+"}\n"
 msgstr ""
 
-#: C/switch.js.page:119(p)
+#: C/image-viewer.cpp.page:175(item/p)
 msgid ""
-"We use a <link xref=\"label.js\">Label</link> to mark each Switch, and give "
-"them a bit of a margin on the right so that they aren't crammed right next "
-"to the Switches. After that we create the Switches, and set them to be "
-"switched off by default."
+"The dialog for choosing the file is created using the <code>Gtk::"
+"FileChooserDialog</code> constructor. This takes the title and type of the "
+"dialog. In our case, it is an <em>Open</em> dialog."
 msgstr ""
 
-#: C/switch.js.page:120(p)
+#: C/image-viewer.cpp.page:179(item/p)
 msgid ""
-"The signal a switch sends out when it's flipped on or off is called notify::"
-"active. After we create each switch, we connect its notify::active signal to "
-"a function called _switchFlip. If you have multiple switches that each do "
-"something different, you might want to connect them to different functions, "
-"but here they're both used for the same thing: To control what picture's "
-"displayed by _image."
+"The next two lines add an <em>Open</em> and a <em>Close</em> button to the "
+"dialog."
 msgstr ""
 
-#: C/switch.js.page:144(p)
+#: C/image-viewer.cpp.page:181(item/p)
 msgid ""
-"We create a <link xref=\"grid.js\">Grid</link> for the Labels and Switches "
-"first, so that we can organize them in a 2x2 layout with a margin between it "
-"and the Image. Then we put that Grid into a larger 2x1 Grid that has the "
-"Image on top, and the Grid with the Labels and Switches on the bottom."
+"The second argument to the <code>add_button()</code> method is a value to "
+"identify the clicked button. We use predefined values provided by GTKmm "
+"here, too."
 msgstr ""
 
-#: C/switch.js.page:153(p) C/spinbutton.js.page:165(p)
+#: C/image-viewer.cpp.page:186(item/p)
 msgid ""
-"Finally, we add the larger Grid to the window, then tell the window to show "
-"itself and all the widgets inside of it."
+"The next two lines restrict the <gui>Open</gui> dialog to only display files "
+"which can be opened by <code>Gtk::Image</code>. A filter object is created "
+"first; we then add all kinds of files supported by <code>Gdk::Pixbuf</code> "
+"(which includes most image formats like PNG and JPEG) to the filter. "
+"Finally, we set this filter to be the <gui>Open</gui> dialog's filter."
 msgstr ""
 
-#: C/switch.js.page:157(title)
-msgid "Function which handles the switches being flipped"
+#: C/image-viewer.cpp.page:187(item/p)
+msgid ""
+"<code>Glib::RefPtr</code> is a smart pointer used here, that makes sure that "
+"the filter is destroyed when there is no reference to it anymore."
 msgstr ""
 
-#: C/switch.js.page:180(p)
+#: C/image-viewer.cpp.page:191(item/p)
 msgid ""
-"Each time a Switch is flipped, this function checks to see which of the two "
-"Switches are active afterwards, using the Switches' built-in get_active() "
-"function. It then changes the Image accordingly. You can change the "
-"filenames around as you like, so long as you have pictures to go with them."
+"<code>dialog.run</code> displays the <gui>Open</gui> dialog. The dialog will "
+"wait for the user to choose an image; when they do, <code>dialog.run</code> "
+"will return the value <code>Gtk::RESPONSE_ACCEPT</code> (it would return "
+"<code>Gtk::RESPONSE_CANCEL</code> if the user clicked <gui>Cancel</gui>). "
+"The <code>switch</code> statement tests for this."
 msgstr ""
 
-#: C/switch.js.page:184(title)
-#| msgid "AboutDialog"
-msgid "Creating the AboutDialog"
-msgstr "Crear un AboutDialog"
-
-#: C/switch.js.page:211(p)
+#: C/image-viewer.cpp.page:194(item/p)
 msgid ""
-"The first step is building the <link xref=\"gmenu.js\">GMenu</link> that the "
-"\"About\" button goes into. This is the menu that appears when you click the "
-"application's name in the upper-left corner of the screen, next to the "
-"Activities menu. Our menu only has two options in it: About, and Quit."
+"We hide the <gui>Open</gui> dialog because we don't need it any more. The "
+"dialog would be hidden later anyway, as it is only a local variable and is "
+"destroyed (and therefore hidden) when the scope ends."
 msgstr ""
 
-#: C/switch.js.page:247(p)
+#: C/image-viewer.cpp.page:197(item/p)
 msgid ""
-"An <link xref=\"aboutdialog.js\">AboutDialog</link> has a lot of different "
-"things you can set, to credit everyone who worked on the application and "
-"leave a note to whomever reads it. In this case, the copyright section "
-"contains our note and credits the original photographers, while the artists "
-"section shows you a list of the photographers with links to the original "
-"photos when you click the Credits button. The web URLs put after their names "
-"in the array turn their names into clickable links in the Credits section."
+"Assuming that the user did click <gui>Open</gui>, the next line loads the "
+"file into the <code>Gtk::Image</code> so that it is displayed."
 msgstr ""
 
-#: C/switch.js.page:254(p)
+#: C/image-viewer.cpp.page:211(section/p)
 msgid ""
-"Finally, we create a new instance of the finished SwitchExample class, and "
-"set the application running."
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"image-viewer/image-viewer.cc\">reference code</link>."
 msgstr ""
+"Se ten problemas con este titorial, compare o seu código con este <link href="
+"\"image-viewer/image-viewer.cc\">código de referencia</link>."
 
-#: C/switch.js.page:265(link) C/messagedialog.py.page:63(link)
-#: C/messagedialog.js.page:193(link) C/messagedialog.c.page:41(link)
-#: C/gmenu.vala.page:26(title) C/gmenu.py.page:26(title)
-#: C/gmenu.py.page:76(link) C/gmenu.js.page:20(title) C/gmenu.js.page:29(link)
-#: C/gmenu.c.page:20(title) C/gmenu.c.page:31(link)
-#: C/aboutdialog.py.page:47(link) C/aboutdialog.js.page:28(link)
-#: C/aboutdialog.c.page:37(link)
-msgid "GMenu"
-msgstr ""
+#: C/image-viewer.js.page:7(info/title)
+#, fuzzy
+#| msgid "Classes in JavaScript"
+msgctxt "text"
+msgid "Image Viewer (JavaScript)"
+msgstr "Clases en JavaScript"
 
-#: C/switch.js.page:266(link) C/messagedialog.py.page:61(link)
-#: C/messagedialog.js.page:194(link) C/messagedialog.c.page:39(link)
-#: C/menubar.py.page:183(link) C/gmenu.py.page:77(link)
-#: C/gmenu.js.page:30(link) C/gmenu.c.page:32(link)
-#: C/filechooserdialog.py.page:78(link) C/aboutdialog.js.page:29(link)
-#| msgid "SimpleAction"
-msgid "GSimpleAction"
-msgstr "GSimpleAction"
+#: C/image-viewer.js.page:10(info/desc)
+msgid ""
+"A little bit more than a simple \"Hello world\" application - write an image "
+"viewer in GTK. Includes an introduction to the JavaScript language."
+msgstr ""
+"Un aplicativo máis completo que un simple «Ola Mundo» - escriba un visor de "
+"imaxes en GTK. Isto inclúe unha introdución ao linguaxe JavaScript."
 
-#: C/switch.js.page:270(link) C/image.js.page:33(link)
-msgid "Gtk.Image"
-msgstr "Gtk.Image"
+#: C/image-viewer.js.page:14(credit/name)
+#: C/image-viewer.py.page:14(credit/name)
+msgid "Jonh Wendell"
+msgstr "Jonh Wendell"
 
-#: C/switch.c.page:7(title)
-msgid "Switch (C)"
-msgstr "Interruptor (C)"
+#: C/image-viewer.js.page:24(page/title) C/image-viewer.py.page:24(page/title)
+#: C/image-viewer.vala.page:31(page/title)
+#, fuzzy
+#| msgid "Image Viewer"
+msgid "1 Image Viewer"
+msgstr "Visor de imaxes"
 
-#: C/switch.c.page:24(p)
-msgid "This switch toggles the title of the window."
+#: C/image-viewer.js.page:27(synopsis/p) C/image-viewer.py.page:27(synopsis/p)
+msgid ""
+"In this tutorial, we're going to write a very simple GTK application that "
+"loads and displays an image file. You will learn how to:"
 msgstr ""
+"Neste titorial, imos escribir un aplicativo GTK moi sinxelo que carga e "
+"mostra un ficheiro de imaxe. Vostede aprenderá a:"
 
-#: C/strings.py.page:8(title)
-msgid "Strings (Python)"
-msgstr ""
+#: C/image-viewer.js.page:29(item/p)
+msgid "Write a basic GTK user interface in JavaScript"
+msgstr "Escribir unha interface de usuario GTK básica en JavaScript"
 
-#: C/strings.py.page:12(desc)
-msgid "An explanation of how to deal with strings in Python and GTK+."
-msgstr ""
+#: C/image-viewer.js.page:30(item/p) C/image-viewer.py.page:30(item/p)
+msgid "Deal with events by connecting signals to signal handlers"
+msgstr "Xestionar eventos conectando sinais a xestores de sinais"
 
-#: C/strings.py.page:25(title)
-msgid "Strings"
-msgstr ""
+#: C/image-viewer.js.page:31(item/p) C/image-viewer.py.page:31(item/p)
+msgid "Lay out GTK user interfaces using containers"
+msgstr "Dispoñer interfaces de usuario GTK usando contedores"
 
-#: C/strings.py.page:30(title)
-#| msgid "Define the tones"
-msgid "Definitions"
-msgstr "Definicións"
+#: C/image-viewer.js.page:32(item/p) C/image-viewer.py.page:32(item/p)
+msgid "Load and display image files"
+msgstr "Cargar e mostrar ficheiros de imaxe"
 
-#: C/strings.py.page:32(p)
-msgid ""
-"Conceptionally, a <em>string</em> is a list of <em>characters</em> such as "
-"'A', 'B', 'C' or 'È'. Characters are abstract representations and their "
-"meaning depends on the language and context they are used in. The "
-"<em>Unicode standard</em> describes how characters are represented by "
-"<em>code points</em>. For example the characters above are represented with "
-"the code points U+0041, U+0042, U+0043, and U+00C9, respectively. Basically, "
-"code points are numbers in the range from 0 to 0x10FFFF."
-msgstr ""
+#: C/image-viewer.js.page:37(item/p)
+msgid "An installed copy of the <em>gjs</em> interpreter"
+msgstr "Unha copia instalada do intérprete <em>gjs</em>"
 
-#: C/strings.py.page:34(p)
-msgid ""
-"The representation of a string as a list of code points is abstract. In "
-"order to convert this abstract representation into a sequence of bytes the "
-"Unicode string must be <em>encoded</em>. The simplest from of encoding is "
-"ASCII and is performed as follows:"
-msgstr ""
+#: C/image-viewer.js.page:38(item/p)
+msgid "Basic knowledge of any object-orientated programming language"
+msgstr "Coñecemento básico dunha linguaxe de programación orientada a obxectos"
 
-#: C/strings.py.page:37(p)
+#: C/image-viewer.js.page:52(item/p)
 msgid ""
-"If the code point is strictly less than 128, each byte is the same as the "
-"value of the code point."
+"Choose <gui>Generic Javascript</gui> from the <gui>JS</gui> tab, click "
+"<gui>Forward</gui>, and fill out your details on the next few pages. Use "
+"<file>image-viewer</file> as project name and directory."
 msgstr ""
+"Seleccione <gui>JavaScript xenérico</gui> desde a lapela <gui>JS</gui>, "
+"prema <gui>Adiante</gui> e complete os seus detalles nas seguintes páxinas. "
+"Use <file>image-viewer</file> como nome do proxecto e cartafol."
 
-#: C/strings.py.page:38(p)
+#: C/image-viewer.js.page:55(item/p)
 msgid ""
-"If the code point is 128 or greater, the Unicode string can’t be represented "
-"in this encoding. (Python raises a <sys>UnicodeEncodeError</sys> exception "
-"in this case.)"
+"Click <gui>Apply</gui> and the project will be created for you. Open "
+"<file>src/main.js</file> from the <gui>Project</gui> or <gui>File</gui> "
+"tabs. It contains very basic example code."
 msgstr ""
+"Prema <gui>Aplicar</gui> e o proxecto será creado. Abra <file>src/main.js</"
+"file> desde a lapela <gui>Proxecto</gui> ou <gui>Ficheiros</gui>. Contén "
+"código de exemplo moi básico."
+
+#: C/image-viewer.js.page:62(section/title)
+msgid "JavaScript basics: Hello World"
+msgstr "Primeiros pasos en JavaScript: Ola mundo"
 
-#: C/strings.py.page:41(p)
+#: C/image-viewer.js.page:63(section/p)
 msgid ""
-"Although ASCII encoding is simple to apply it can only encode for 128 "
-"different characters which is hardly enough. One of the most commonly used "
-"encodings that addresses this problem is UTF-8 (it can handle any Unicode "
-"code point). UTF stands for “Unicode Transformation Format”, and the ‘8’ "
-"means that 8-bit numbers are used in the encoding."
+"Before we start writing the image viewer, let's find out more about the way "
+"JavaScript is used in GNOME. Of course, your very first contact with any "
+"programming language should be the Hello World program which can already be "
+"found in <file>main.js</file>:"
 msgstr ""
+"Antes de comezar a escribir o visor de imaxes faremos unha introdución á "
+"forma na que JavaScript se usa en GNOME. Por suposto, o primeiro contacto "
+"con calquera linguaxe de programación debería ser un programa Ola Mundo que "
+"pode atopar <file>main.js</file>:"
 
-#: C/strings.py.page:46(title)
-msgid "Strings in Python 2"
-msgstr ""
+#: C/image-viewer.js.page:64(section/code)
+#, no-wrap
+msgid "print (\"Hello world!\");"
+msgstr "print (\"Ola mundo!\");"
 
-#: C/strings.py.page:48(p)
+#: C/image-viewer.js.page:65(section/p)
 msgid ""
-"Python 2 comes with two different kinds of objects that can be used to "
-"represent strings, <code>str</code> and <code>unicode</code>. Instances of "
-"<code>unicode</code> are used to express Unicode strings, whereas instances "
-"of the <code>str</code> type are byte representations (the encoded string). "
-"Under the hood, Python represents Unicode strings as either 16- or 32-bit "
-"integers, depending on how the Python interpreter was compiled."
+"This should look quite natural if you're familiar with almost any other "
+"programming language. The function <code>print</code> is called with the "
+"argument <code>\"Hello world!\"</code>, which will be printed on the screen. "
+"Note that each line of code ends with a semicolon."
 msgstr ""
+"Isto debería ser natural se está familiarizado con calquera outra linguaxe "
+"de programación. A función <code>printi</code> chámase co argumento "
+"<code>«Ola Mundo»</code>, que se imprimirá en pantalla. Teña en conta que "
+"cada liña de código remata con un punto e coma."
 
-#: C/strings.py.page:50(code)
+#: C/image-viewer.js.page:69(section/title)
+msgid "Classes in JavaScript"
+msgstr "Clases en JavaScript"
+
+#: C/image-viewer.js.page:70(section/p)
+msgid "This is the standard way to define a class in JavaScript:"
+msgstr "Esta é a forma estándar de definir unha clase en JavaScript:"
+
+#: C/image-viewer.js.page:71(section/code)
 #, no-wrap
 msgid ""
-"<![CDATA[\n"
-">>> unicode_string = u\"Fu\\u00dfb\\u00e4lle\"\n"
-">>> print unicode_string]]>\n"
-"Fußbälle\n"
+"\n"
+"function MyClass () {\n"
+"  this._init ();\n"
+"}\n"
+"\n"
+"MyClass.prototype = {\n"
+"\n"
+"  _init: function () {\n"
+"    this.propertyA = \"This is an object's field\";\n"
+"    this.propertyB = 10;\n"
+"  },\n"
+"\n"
+"  aMethod: function (arg1, arg2) {\n"
+"    print (\"inside aMethod: \" + arg1 + \" \" + arg2);\n"
+"  },\n"
+"\n"
+"  dumpProperties: function () {\n"
+"    print (this.propertyA);\n"
+"    print (this.propertyB);\n"
+"  }\n"
+"\n"
+"}"
 msgstr ""
-"<![CDATA[\n"
-">>> unicode_string = u\"Fu\\u00dfb\\u00e4lle\"\n"
-">>> print unicode_string]]>\n"
-"Fußbälle\n"
 
-#: C/strings.py.page:56(p)
+#: C/image-viewer.js.page:93(section/p)
 msgid ""
-"Unicode strings can be converted to 8-bit strings with <code>unicode.encode()"
-"</code>. Python’s 8-bit strings have a <code>str.decode()</code> method that "
-"interprets the string using the given encoding (that is, it is the inverse "
-"of the <code>unicode.encode()</code>):"
+"This defines a class called <code>MyClass</code>. Let's go through each part "
+"of the class definition:"
 msgstr ""
+"Isto define unha clase chamada <code>MyClass</code>. Vexa cada unha das "
+"partes da definición da clase:"
 
-#: C/strings.py.page:69(p)
+#: C/image-viewer.js.page:96(item/p)
 msgid ""
-"Unfortunately, Python 2.x allows you to mix <code>unicode</code> and "
-"<code>str</code> if the 8-bit string happened to contain only 7-bit (ASCII) "
-"bytes, but would get <sys>UnicodeDecodeError</sys> if it contained non-ASCII "
-"values."
+"<code>function MyClass</code> is the constructor of the class — its name "
+"must match the class's name. You can access any member of the class by using "
+"the <code>this</code> object; here, the constructor calls the class's "
+"<code>_init</code> method."
 msgstr ""
 
-#: C/strings.py.page:74(title)
-msgid "Strings in Python 3"
-msgstr "Cadeas en Python 3"
-
-#: C/strings.py.page:76(p)
+#: C/image-viewer.js.page:99(item/p)
 msgid ""
-"Since Python 3.0, all strings are stored as Unicode in an instance of the "
-"<code>str</code> type. Encoded strings on the other hand are represented as "
-"binary data in the form of instances of the bytes type. Conceptionally, "
-"<code>str</code> refers to text, whereas bytes refers to data. Use "
-"<code>encode()</code> to go from <code>str</code> to <code>bytes</code>, and "
-"<code>decode()</code> to go from <code>bytes</code> to <code>str</code>."
+"The <code>MyClass.prototype</code> block is where you define the "
+"<em>structure</em> of the class. Each class is made up of methods "
+"(functions) and fields (variables); there are three methods and two fields "
+"in this example."
 msgstr ""
 
-#: C/strings.py.page:78(p)
+#: C/image-viewer.js.page:102(item/p)
 msgid ""
-"In addition, it is no longer possible to mix Unicode strings with encoded "
-"strings, because it will result in a <code>TypeError</code>:"
+"The first method defined here is called <code>_init</code>, and we specify "
+"that it is a function with no arguments:"
 msgstr ""
 
-#: C/strings.py.page:95(title)
-msgid "Unicode in GTK+"
-msgstr "Unicode en GTK+"
+#: C/image-viewer.js.page:103(item/code)
+#, no-wrap
+msgid "_init: function ()"
+msgstr "_init: function ()"
 
-#: C/strings.py.page:97(p)
+#: C/image-viewer.js.page:104(item/p)
 msgid ""
-"GTK+ uses UTF-8 encoded strings for all text. This means that if you call a "
-"method that returns a string you will always obtain an instance of the "
-"<code>str</code> type. The same applies to methods that expect one or more "
-"strings as parameter, they must be UTF-8 encoded. However, for convenience "
-"PyGObject will automatically convert any unicode instance to str if supplied "
-"as argument:"
+"We write the function inside some curly braces. Two fields are defined here, "
+"<code>propertyA</code> and <code>propertyB</code>. The first is set to a "
+"string and the second is set to an integer (10). The function doesn't return "
+"any value."
 msgstr ""
 
-#: C/strings.py.page:108(p)
-#| msgid "Further reading"
-msgid "Furthermore:"
-msgstr "Aínda máis:"
+#: C/image-viewer.js.page:107(item/p)
+msgid ""
+"The next method is called <code>aMethod</code> and has two arguments, which "
+"it prints out when you call it. The final method is <code>dumpProperties</"
+"code>, and prints the fields <code>propertyA</code> and <code>propertyB</"
+"code>."
+msgstr ""
 
-#: C/strings.py.page:113(p)
+#: C/image-viewer.js.page:110(item/p)
 msgid ""
-"would return <code>False</code>, with the warning <code>__main__:1: "
-"UnicodeWarning: Unicode equal comparison failed to convert both arguments to "
-"Unicode - interpreting them as being unequal</code> (<code>Gtk.Label.get_text"
-"()</code> will always return a <code>str</code> instance; therefore, "
-"<code>txt</code> and <code>unicode_string</code> are not equal)."
+"Note how the class definition (prototype) is arranged; each function "
+"definition is separated by a comma."
+msgstr ""
+"Teña en conta como se ordena a definición da clase (prototipo); cada "
+"definición de función sepárase con unha coma."
+
+#: C/image-viewer.js.page:114(section/p)
+msgid "Now that MyClass has been defined, we can play with it:"
 msgstr ""
 
-#: C/strings.py.page:115(p)
+#: C/image-viewer.js.page:115(section/code)
+#, no-wrap
 msgid ""
-"This is especially important if you want to internationalize your program "
-"using <link href=\"http://docs.python.org/library/gettext.html";
-"\"><code>gettext</code></link>. You have to make sure that <code>gettext</"
-"code> will return UTF-8 encoded 8-bit strings for all languages."
+"\n"
+"var o = new MyClass ();\n"
+"o.aMethod (\"Hello\", \"world\");\n"
+"o.propertyA = \"Just changed its value!\";\n"
+"o.dumpProperties ();"
 msgstr ""
 
-#: C/strings.py.page:117(p)
+#: C/image-viewer.js.page:120(section/p)
 msgid ""
-"In general it is recommended to not use <code>unicode</code> objects in GTK+ "
-"applications at all, and only use UTF-8 encoded <code>str</code> objects "
-"since GTK+ does not fully integrate with <code>unicode</code> objects."
+"This code creates a new instance of the class called <code>o</code>, runs "
+"<code>aMethod</code>, changes <code>propertyA</code> to a different string, "
+"and then calls <code>dumpProperties</code> (which outputs the fields)."
 msgstr ""
 
-#: C/strings.py.page:119(p)
+#: C/image-viewer.js.page:121(section/p)
 msgid ""
-"With Python 3.x things are much more consistent, because PyGObject will "
-"automatically encode/decode to/from UTF-8 if you pass a string to a method "
-"or a method returns a string. Strings, or text, will always be represented "
-"as instances of <code>str</code> only:"
+"Save the code in the <file>main.js</file> and then run it by using "
+"<guiseq><gui>Run</gui><gui>Execute</gui></guiseq> from the menu or using the "
+"toolbar."
 msgstr ""
 
-#: C/strings.py.page:124(title) C/signals-callbacks.py.page:44(title)
-#: C/properties.py.page:49(title) C/model-view-controller.py.page:182(title)
-msgid "References"
-msgstr ""
+#: C/image-viewer.js.page:126(section/title)
+#: C/image-viewer.py.page:65(section/title)
+msgid "A first Gtk application"
+msgstr "Un primeiro aplicativo en GTK"
 
-#: C/strings.py.page:126(link)
-msgid "How To Deal With Strings - The Python GTK+ 3 Tutorial"
+#: C/image-viewer.js.page:127(section/p)
+msgid "Let's see what a very basic Gtk application looks like in JavaScript:"
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/statusbar.vala.page:24(None) C/statusbar.py.page:24(None)
-#| msgid ""
-#| "@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
-msgid "@@image: 'media/statusbar.png'; md5=eb1aca55315d6cda57b12a5f36058ba8"
-msgstr "@@image: 'media/statusbar.png'; md5=eb1aca55315d6cda57b12a5f36058ba8"
-
-#: C/statusbar.vala.page:7(title)
-msgid "Statusbar (Vala)"
-msgstr "Barra de estado (Vala)"
+#: C/image-viewer.js.page:128(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"Gtk.init (null, null);\n"
+"\n"
+"var w = new Gtk.Window ({title: \"Image Viewer Demo\"});\n"
+"w.show ();\n"
+"\n"
+"Gtk.main ();"
+msgstr ""
 
-#: C/statusbar.vala.page:20(desc) C/statusbar.py.page:20(desc)
-#: C/statusbar.c.page:21(desc)
-msgid "Report messages of minor importance to the user"
-msgstr "Mensaxe de informe de menos importancia para o usuario"
+#: C/image-viewer.js.page:137(section/p) C/image-viewer.py.page:90(section/p)
+msgid "Let's take a look at what's happening:"
+msgstr "Botemos unha ollada ao que está pasando:"
 
-#: C/statusbar.vala.page:23(title) C/statusbar.py.page:23(title)
-#: C/statusbar.js.page:20(title) C/statusbar.c.page:24(title)
-msgid "Statusbar"
-msgstr "Barra de estado"
+#: C/image-viewer.js.page:140(item/p) C/image-viewer.py.page:93(item/p)
+msgid ""
+"The first line imports the Gtk namespace (that is, it includes the Gtk "
+"library). The libraries are provided by GObject Introspection (gi), which "
+"provides language bindings for many GNOME libraries."
+msgstr ""
 
-#: C/statusbar.vala.page:25(p)
-msgid "This statusbar tells you what's going on."
-msgstr "Esta barra de estado dille que está pasando."
+#: C/image-viewer.js.page:143(item/p)
+msgid ""
+"<code>Gtk.init</code> initializes the Gtk library; this statement is "
+"mandatory for all Gtk programs."
+msgstr ""
 
-#: C/statusbar.vala.page:32(link) C/statusbar.js.page:227(link)
-msgid "Gtk.Statusbar"
-msgstr "Gtk.Statusbar"
+#: C/image-viewer.js.page:146(item/p)
+msgid ""
+"The next line creates the main window by creating a new <code>Gtk.Window</"
+"code> object. You can pass several properties to the window's constructor by "
+"using the syntax <code>{property: value, property: value, ...}</code>. In "
+"this case we are setting the title of the window."
+msgstr ""
 
-#: C/statusbar.py.page:7(title)
-msgid "Statusbar (Python)"
-msgstr "Barra de estado (Python)"
+#: C/image-viewer.js.page:147(item/p)
+msgid ""
+"The next line explicitly shows the window. In Gtk, every widget is hidden by "
+"default."
+msgstr ""
 
-#: C/statusbar.py.page:25(p)
+#: C/image-viewer.js.page:148(item/p)
 msgid ""
-"This statusbar tells you if you click the button or if you press any key "
-"(and which key)."
+"Finally, <code>Gtk.main</code> runs the main loop — in other words, it "
+"executes the program. The main loop listens for events (signals) from the "
+"user interface and then calls a signal handler which will do something "
+"useful. We'll learn more about signals shortly."
 msgstr ""
-"Esta barra de estado dille se premeu o botón ou se premeu calquera tecla (e "
-"que tecla)."
 
-#: C/statusbar.py.page:34(p)
+#: C/image-viewer.js.page:151(section/p)
 msgid ""
-"<code>Gdk.keyval_name(event.keyval)</code> converts the key value "
-"<code>event.keyval</code> into a symbolic name. The names and corresponding "
-"key values can be found <link href=\"http://git.gnome.org/browse/gtk+/tree/";
-"gdk/gdkkeysyms.h\">here</link>, but for instance <code>GDK_KEY_BackSpace</"
-"code> becomes the string <code>\"BackSpace\"</code>."
+"Save the code in <file>main.js</file> and run it. You will notice that the "
+"application does not quit when you close the window. This is because we "
+"haven't set up a signal handler to deal with the window's <code>destroy</"
+"code> (close) signal yet. We'll do this shortly, but for now you can just "
+"hit <keyseq><key>Ctrl</key><key>C</key></keyseq> in the terminal window to "
+"quit the program."
 msgstr ""
 
-#: C/statusbar.py.page:40(title)
-msgid "Useful methods for a Statusbar widget"
-msgstr "Métodos útiles para o widget Statusbar"
+#: C/image-viewer.js.page:156(section/title)
+msgid "Adding classes"
+msgstr "Engadir clases"
 
-#: C/statusbar.py.page:42(p)
+#: C/image-viewer.js.page:157(section/p)
 msgid ""
-"<code>pop(context_id)</code> removes the first message in the statusbar "
-"stack with the given <code>context_id</code>."
+"The proper way of doing Gtk programming is by using classes. Let's rewrite "
+"the simple code you just wrote using classes:"
 msgstr ""
 
-#: C/statusbar.py.page:43(p)
+#: C/image-viewer.js.page:158(section/code)
+#, no-wrap
 msgid ""
-"<code>remove_all(context_id)</code> removes all the messages in the "
-"statusbar stack with the given <code>context_id</code>."
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"function ImageViewer () {\n"
+"  this._init ();\n"
+"}\n"
+"\n"
+"ImageViewer.prototype = {\n"
+"  _init: function () {\n"
+"    this.window = new Gtk.Window ({title: \"Image Viewer Demo\"});\n"
+"    this.window.show ();\n"
+"  }\n"
+"}\n"
+"\n"
+"Gtk.init (0, null);\n"
+"var iv = new ImageViewer ();\n"
+"Gtk.main ();"
 msgstr ""
 
-#: C/statusbar.py.page:44(p)
+#: C/image-viewer.js.page:176(section/p)
 msgid ""
-"<code>remove(context_id, message_id)</code> removes the message with the "
-"given <code>message_id</code> in the statusbar stack with the given "
-"<code>context_id</code>. The <code>message_id</code> is returned by "
-"<code>push(context_id, \"the message\")</code> when pushing the message on "
-"the statusbar."
+"Notice that the program is the same; we just moved the window creation code "
+"to our own <code>ImageViewer</code> class. The class's constructor calls the "
+"<code>_init</code> method, which creates and shows the window. We then "
+"create an instance of the class before running the main loop (<code>Gtk."
+"main</code>)."
 msgstr ""
 
-#: C/statusbar.py.page:52(link)
-msgid "GtkStatusbar"
-msgstr "GtkStatusbar"
-
-#: C/statusbar.py.page:53(link) C/spinner.js.page:29(link)
-#: C/progressbar.py.page:57(link)
-msgid "Gdk - Key Values"
-msgstr "Gdk - Valores de chave"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/statusbar.js.page:21(None)
-#| msgid ""
-#| "@@image: 'media/guitar-tuner.png'; md5=f0b7ed4cdc2729d2d0f4d38b829db61e"
-msgid "@@image: 'media/statusbar2.png'; md5=ff6f7e5b270827ca98b2d5f7087aa766"
-msgstr "@@image: 'media/statusbar2.png'; md5=ff6f7e5b270827ca98b2d5f7087aa766"
-
-#: C/statusbar.js.page:7(title)
-#| msgid "JavaScript"
-msgid "Statusbar (JavaScript)"
-msgstr "Barra de estado (JavaScript)"
+#: C/image-viewer.js.page:177(section/p)
+msgid ""
+"This code is modular and can be split into multiple files easily. This makes "
+"it cleaner and easier to read."
+msgstr ""
 
-#: C/statusbar.js.page:17(desc)
-msgid "Show notifications in a dedicated statusbar"
-msgstr "Mostrar notificacións na barra de estado adicada"
+#: C/image-viewer.js.page:181(section/title)
+#: C/image-viewer.py.page:114(section/title)
+msgid "Signals"
+msgstr "Sinais"
 
-#: C/statusbar.js.page:22(p)
+#: C/image-viewer.js.page:182(section/p) C/image-viewer.py.page:115(section/p)
 msgid ""
-"This statusbar keeps track of how many times you've clicked a button. "
-"Applications like <link href=\"http://projects.gnome.org/gedit/\";>gedit</"
-"link> use statusbars to display information at a glance, and show "
-"notifications without interrupting the user."
+"Signals are one of the key concepts in Gtk programming. Whenever something "
+"happens to an object, it emits a signal; for example, when a button is "
+"clicked it gives off the <code>clicked</code> signal. If you want your "
+"program to do something when that event occurs, you must connect a function "
+"(a \"signal handler\") to that signal. Here's an example:"
 msgstr ""
 
-#: C/statusbar.js.page:23(p)
+#: C/image-viewer.js.page:183(section/code)
+#, no-wrap
 msgid ""
-"Messages pushed to a statusbar go on top of its stack, and can be popped off "
-"to show the next-most recent one. You can also clear away every message of a "
-"specific type all at once. This sample application demonstrates these "
-"functions."
+"\n"
+"function button_clicked () {\n"
+"  print (\"you clicked me!\");\n"
+"}\n"
+"var b = new Gtk.Button ({label:\"Click me\"});\n"
+"b.connect (\"clicked\", button_clicked);"
 msgstr ""
 
-#: C/statusbar.js.page:66(p)
+#: C/image-viewer.js.page:189(section/p) C/image-viewer.py.page:122(section/p)
 msgid ""
-"All the code for this sample goes in the StatusbarExample class. The above "
-"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
-"go in."
+"The last two lines create a <code>Gtk.Button</code> called <code>b</code> "
+"and connect its <code>clicked</code> signal to the <code>button_clicked</"
+"code> function, which is defined above. Every time the button is clicked, "
+"the code in the <code>button_clicked</code> function will be executed. It "
+"just prints a message here."
 msgstr ""
 
-#: C/statusbar.js.page:83(p)
+#: C/image-viewer.js.page:190(section/p)
+msgid "The syntax for connecting any signal to a function is:"
+msgstr "A sintaxe para conectar calquera sinal a unha función é:"
+
+#: C/image-viewer.js.page:191(section/code)
+#, no-wrap
 msgid ""
-"The _buildUI function is where we put all the code to create the "
-"application's user interface. The first step is creating a new <link href="
-"\"GtkApplicationWindow.js.page\">Gtk.ApplicationWindow</link> to put all our "
-"widgets into. The next step is to create a vertically-oriented <link href="
-"\"paned.js.page\">Gtk.Paned</link> interface, to divide the window up into "
-"two sections. This way the statusbar looks like those used in other "
-"applications, and it stays at the bottom of the window, even if the user "
-"resizes it."
+"\n"
+"object.connect (&lt;signal_name&gt;, &lt;function_to_be_called&gt;);"
 msgstr ""
 
-#: C/statusbar.js.page:87(title)
-#| msgid "Starting the fun"
-msgid "Creating the buttons"
-msgstr "Crear os botóns"
+#: C/image-viewer.js.page:193(section/p)
+msgid ""
+"You can find signal definitions for any object in the <link href=\"http://";
+"library.gnome.org/devel/gtk/stable/ch01.html\">GTK class reference</link>."
+msgstr ""
+"Pode atopar as definicións de sinais para calquera proxecto na <link href="
+"\"http://library.gnome.org/devel/gtk/stable/ch01.html\";>clase GTK de "
+"referencia</link>."
 
-#: C/statusbar.js.page:106(p)
+#: C/image-viewer.js.page:196(note/p)
 msgid ""
-"This code creates the three <link href=\"button.js.page\">Gtk.Buttons</link> "
-"we'll use to push a new message to the statusbar, pop the last one off, and "
-"clear all existing messages. The \"back\" and \"clear\" buttons are <link "
-"href=\"http://developer.gnome.org/gtk/2.24/gtk-Stock-Items.html\";>stock "
-"buttons,</link> which are automatically translated into any language GNOME "
-"supports."
+"You can simplify the code by making use of an inline function definition:"
 msgstr ""
+"Vostede pode simplificar o código facendo uso da definición en liña de "
+"funcións:"
 
-#: C/statusbar.js.page:124(p)
+#: C/image-viewer.js.page:197(note/code)
+#, no-wrap
 msgid ""
-"This code creates the <link href=\"grid.js.page\">Gtk.Grid</link> that we'll "
-"use to organize the buttons, and attaches the buttons to it in order. It "
-"then creates a <link href=\"paned.js.page\">Gtk.Frame</link> which will take "
-"up most of the window and has a large amount of padding around the buttons, "
-"and adds the Grid to the Frame. Note that we still need to put the Frame "
-"into the Paned interface, and then add it to the ApplicationWindow."
+"\n"
+"b.connect (\"clicked\", function () { print (\"you clicked me!\"); });"
 msgstr ""
 
-#: C/statusbar.js.page:128(title)
-#| msgid "Creating the signal handler"
-msgid "Creating the statusbar"
-msgstr "Crear a barra de estado"
+#: C/image-viewer.js.page:204(section/title)
+msgid "Closing the window"
+msgstr "Pechar a xanela"
 
-#: C/statusbar.js.page:145(p)
+#: C/image-viewer.js.page:205(section/p)
 msgid ""
-"Here we create the Gtk.Statusbar, and push a message to it to start off "
-"with. Then we give it its own narrow frame at the bottom of the window."
+"When you close a Gtk window it's not really closed, it's hidden. This allows "
+"you to keep the window around (which is useful if you want to ask the user "
+"if they really want to close the window, for example)."
 msgstr ""
+"Ao pechar unha xanela Gtk realmente non se pecha, agóchase. Isto permítelle "
+"manter unha xanela (útil se quere preguntarlle ao usuario se realmente "
+"desexa pechar a xanela, por exemplo)."
 
-#: C/statusbar.js.page:146(p)
+#: C/image-viewer.js.page:206(section/p)
 msgid ""
-"Every message needs to have a context id, which is an integer value you can "
-"get from the statusbar with the get_context_id() function. Its only "
-"parameter is the string value you use to describe that particular context "
-"id. Normally, you'll get a new context id for different kinds of messages, "
-"so that you can use the remove() function to remove a specific message and "
-"not just the most recent one on the stack. This is a simple example with "
-"only one kind of message, though, so we're just using one for everything."
+"In our case, we really do just want to close the window. The simplest way of "
+"doing this is by connecting the <code>hide</code> signal of the GtkWindow "
+"object to a function that closes the application. Go back to the <file>image-"
+"viewer.js</file> file and add the following code to the <code>_init</code> "
+"method, on the line above <code>this.window.show</code>:"
 msgstr ""
+"No noso caso, queremos pechar a xanela. A forma máis doada de facer isto é "
+"conectar o sinal <code>hide</code> do obxecto GtkWindow a unha función que "
+"peche o aplicativo. Vaia de novo ao ficheiro <file>image-viewer.js</file> e "
+"engada o seguinte código ao método <code>_init</code>, na liña superior a "
+"<code>this.window.show</code>."
+
+#: C/image-viewer.js.page:207(section/code)
+#, no-wrap
+msgid "this.window.connect (\"hide\", Gtk.main_quit);"
+msgstr "this.window.connect (\"hide\", Gtk.main_quit);"
 
-#: C/statusbar.js.page:147(p)
+#: C/image-viewer.js.page:208(section/p)
 msgid ""
-"We use the push() function to push a new message onto the stack. Its first "
-"parameter is the context id, and its second is the message."
+"This connects the <code>hide</code> signal of the window to Gtk's "
+"<code>main_quit</code> function, which ends the execution of the Gtk main "
+"loop. Once the main loop finishes, the function <code>Gtk.main</code> "
+"returns. Our program would continue to run any code written after the "
+"<code>Gtk.main ();</code> line, but since we don't have any code after that "
+"point, the program just ends."
 msgstr ""
 
-#: C/statusbar.js.page:160(p)
+#: C/image-viewer.js.page:212(section/title)
+#: C/image-viewer.py.page:126(section/title)
+msgid "Containers: Laying-out the user interface"
+msgstr "Contedores: deseñar a interface de usuario"
+
+#: C/image-viewer.js.page:213(section/p) C/image-viewer.py.page:127(section/p)
 msgid ""
-"This code finishes up creating the window, by packing the frames into the "
-"pane, adding it to the window, and telling the window to show all child "
-"widgets."
+"Widgets (controls, such as buttons and labels) can be arranged in the window "
+"by making use of <em>containers</em>. You can organize the layout by mixing "
+"different types of containers, like boxes and grids."
 msgstr ""
 
-#: C/statusbar.js.page:164(title)
-msgid "Functions for interacting with the statusbar"
+#: C/image-viewer.js.page:214(section/p) C/image-viewer.py.page:128(section/p)
+msgid ""
+"A <code>Gtk.Window</code> is itself a type of container, but you can only "
+"put one widget directly into it. We would like to have two widgets, an image "
+"and a button, so we must put a \"higher-capacity\" container inside the "
+"window to hold the other widgets. A number of <link href=\"http://library.";
+"gnome.org/devel/gtk/stable/GtkContainer.html\">container types</link> are "
+"available, but we will use a <code>Gtk.Box</code> here. A <code>Gtk.Box</"
+"code> can hold several widgets, organized horizontally or vertically. You "
+"can do more complicated layouts by putting several boxes inside another box "
+"and so on."
 msgstr ""
 
-#: C/statusbar.js.page:205(p)
+#: C/image-viewer.js.page:216(note/p) C/image-viewer.py.page:130(note/p)
 msgid ""
-"Here we have functions which demonstrate pushing a message onto the stack, "
-"popping the top one off of it, and clearing all messages of a particular "
-"context id. The pop() function just takes one parameter, which is the "
-"context id for the type of message you want to pop off the most recent one "
-"of. The remove_all() function works the same way, except it removes all "
-"messages of that type from the stack."
+"There is a graphical user interface designer called <app>Glade</app> "
+"integrated in <app>Anjuta</app> which makes UI design really easy. For this "
+"simple example, however, we will code everything manually."
 msgstr ""
 
-#: C/statusbar.js.page:211(p)
+#: C/image-viewer.js.page:218(section/p)
 msgid ""
-"Finally, we create a new instance of the finished StatusbarExample class, "
-"and set the application running."
+"Let's add the box and widgets to the window. Insert the following code into "
+"the <code>_init</code> method, immediately above the <code>this.window.show</"
+"code> line:"
 msgstr ""
 
-#: C/statusbar.js.page:225(link)
-msgid "Gtk.Frame"
+#: C/image-viewer.js.page:219(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"var main_box = new Gtk.Box ({orientation: Gtk.Orientation.VERTICAL, spacing: 0});\n"
+"this.window.add (main_box);"
 msgstr ""
 
-#: C/statusbar.js.page:226(link)
-msgid "Gtk.Paned"
+#: C/image-viewer.js.page:222(section/p)
+msgid ""
+"The first line creates a <code>Gtk.Box</code> called <code>main_box</code> "
+"and sets two of its properties: the <code>orientation</code> is set to "
+"vertical (so widgets are arranged in a column), and the <code>spacing</code> "
+"between the widgets is set to 0 pixels. The next line then adds the newly-"
+"created <code>Gtk.Box</code> to the window."
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/statusbar.c.page:26(None)
-#| msgid "@@image: 'media/toolbar.png'; md5=fca40afb940764d58f69b3a2add9a927"
-msgid "@@image: 'media/statusbar3.png'; md5=60c71604fb44656237ee66dfb39a8689"
-msgstr "@@image: 'media/statusbar3.png'; md5=60c71604fb44656237ee66dfb39a8689"
-
-#: C/statusbar.c.page:7(title)
-msgid "Statusbar (C)"
-msgstr "Barra de estado (C)"
-
-#: C/statusbar.c.page:27(p)
+#: C/image-viewer.js.page:223(section/p) C/image-viewer.py.page:141(section/p)
 msgid ""
-"This statusbar is used to demonstrate how messages are stacked in a last-in-"
-"first-out order. The message at the top of the stack is always the one "
-"displayed."
+"So far the window only contains an empty <code>Gtk.Box</code>, and if you "
+"run the program now you will see no changes at all (the <code>Gtk.Box</code> "
+"is a transparent container, so you can't see that it's there)."
 msgstr ""
-"Esta barra de estado úsase para demostrar como se apilan mensaxes nunha orde "
-"«o último que entra é o primeiro que sae». A mensaxe da parte superior da "
-"pila sempre se mostrará."
-
-#: C/statusbar.c.page:37(link)
-msgid "GtkStatusBar"
-msgstr "GtkStatusBar"
-
-#: C/statusbar.c.page:38(link) C/scale.c.page:38(link)
-msgid "String Utility Functions"
-msgstr "Funcións de utilidade de cadeas"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/spinner.vala.page:21(None) C/spinner.py.page:21(None)
-#: C/spinner.js.page:21(None) C/spinner.c.page:23(None)
-#| msgid ""
-#| "@@image: 'media/guitar-tuner.png'; md5=f0b7ed4cdc2729d2d0f4d38b829db61e"
-msgid "@@image: 'media/spinner.png'; md5=d04f2d81f1d72c6c2f97e8729947dfed"
-msgstr "@@image: 'media/spinner.png'; md5=d04f2d81f1d72c6c2f97e8729947dfed"
-
-#: C/spinner.vala.page:7(title)
-msgid "Spinner (Vala)"
-msgstr "Spinner (Vala)"
-
-#: C/spinner.vala.page:17(desc) C/spinner.py.page:17(desc)
-#: C/spinner.js.page:17(desc) C/spinner.c.page:18(desc)
-msgid "A spinner animation"
-msgstr "Unha animación spinner"
 
-#: C/spinner.vala.page:20(title) C/spinner.py.page:20(title)
-#: C/spinner.js.page:20(title) C/spinner.c.page:21(title)
-msgid "Spinner"
-msgstr "Indicador de progreso"
+#: C/image-viewer.js.page:227(section/title)
+#: C/image-viewer.py.page:145(section/title)
+msgid "Packing: Adding widgets to the container"
+msgstr "Empaquetado: Engadir widgets ao contedor"
 
-#: C/spinner.vala.page:22(p) C/spinner.py.page:22(p) C/spinner.js.page:22(p)
-#: C/spinner.c.page:24(p)
-msgid "This Spinner is stopped and started by pressing the spacebar."
+#: C/image-viewer.js.page:228(section/p)
+msgid ""
+"To add some widgets to the <code>Gtk.Box</code>, insert the following code "
+"directly below the <code>this.window.add (main_box)</code> line:"
 msgstr ""
 
-#: C/spinner.vala.page:29(link)
-msgid "Gtk.Widget"
-msgstr "Gtk.Widget"
-
-#: C/spinner.vala.page:31(link)
-msgid "Gdk.keyval_name"
-msgstr "Gdk.keyval_name"
-
-#: C/spinner.py.page:7(title)
-msgid "Spinner (Python)"
-msgstr "Spinner (Python)"
-
-#: C/spinner.py.page:31(p)
+#: C/image-viewer.js.page:229(section/code)
+#, no-wrap
 msgid ""
-"<code>Gdk.keyval_name(event.keyval)</code> converts the key value "
-"<code>event.keyval</code> into a symbolic name. The names and corresponding "
-"key values can be found <link href=\"http://git.gnome.org/browse/gtk+/tree/";
-"gdk/gdkkeysyms.h\">here</link>,but for instance <code>GDK_KEY_BackSpace</"
-"code> becomes the string <code>\"BackSpace\"</code>."
+"\n"
+"this.image = new Gtk.Image ();\n"
+"main_box.pack_start (this.image, true, true, 0);"
 msgstr ""
 
-#: C/spinner.py.page:41(link)
-msgid "Key Values"
-msgstr "Valores da chave"
-
-#: C/spinner.js.page:7(title)
-#| msgid "JavaScript"
-msgid "Spinner (JavaScript)"
-msgstr "Spinner (JavaScript)"
-
-#: C/spinner.c.page:7(title)
-msgid "Spinner (C)"
-msgstr "Spinner (C)"
-
-#: C/spinner.c.page:34(link)
-msgid "GObject"
-msgstr "GObject"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/spinbutton.vala.page:23(None) C/spinbutton.py.page:22(None)
-#: C/spinbutton.c.page:25(None)
-#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
-msgid "@@image: 'media/spinbutton.png'; md5=993cbb7d9bd271a329727a926195712a"
-msgstr "@@image: 'media/spinbutton.png'; md5=993cbb7d9bd271a329727a926195712a"
-
-#: C/spinbutton.vala.page:7(title)
-msgid "SpinButton (Vala)"
-msgstr "SpinButton (Vala)"
-
-#: C/spinbutton.vala.page:19(desc)
-msgid "Retrieve an integer or floating point number."
+#: C/image-viewer.js.page:232(section/p)
+msgid ""
+"The first line creates a new <code>Gtk.Image</code> called <code>image</"
+"code>, which will be used to display an image file. Then, the image widget "
+"is added (<em>packed</em>) into the <code>main_box</code> container using "
+"<code>Gtk.Box</code>'s <link href=\"http://library.gnome.org/devel/gtk/";
+"stable/GtkBox.html#gtk-box-pack-start\"><code>pack_start</code></link> "
+"method."
 msgstr ""
 
-#: C/spinbutton.vala.page:22(title) C/spinbutton.py.page:21(title)
-#: C/spinbutton.js.page:23(title) C/spinbutton.c.page:23(title)
-#| msgid "Button"
-msgid "SpinButton"
-msgstr "SpinButton"
-
-#: C/spinbutton.vala.page:24(p) C/spinbutton.py.page:23(p)
-#: C/spinbutton.c.page:26(p)
-msgid "Choose a number, by entering it or by clicking on the -/+ buttons!"
-msgstr "Seleccione un número, escribíndoo ou premendo nos botóns -/+!"
-
-#: C/spinbutton.vala.page:31(link) C/spinbutton.js.page:205(link)
-#| msgid "Gtk.ButtonsType"
-msgid "Gtk.SpinButton"
-msgstr "Gtk.SpinButton"
-
-#: C/spinbutton.py.page:7(title)
-msgid "SpinButton (Python)"
-msgstr "SpinButton (Python)"
-
-#: C/spinbutton.py.page:18(desc)
-msgid "Retrieve an integer or floating-point number from the user."
-msgstr "Obtendo un enteiro ou número en punto flotante desde o usuario."
-
-#: C/spinbutton.py.page:33(title)
-msgid "Useful methods for a SpinButton widget"
-msgstr "Métodos útiles para o widget SpinButton"
-
-#: C/spinbutton.py.page:34(p)
+#: C/image-viewer.js.page:233(section/p)
 msgid ""
-"For an explanation of signals and callback functions, see <link xref="
-"\"signals-callbacks.py\">this page</link>. An example is the <code>\"value-"
-"changed\"</code> signal, emitted when the value of the spinbutton changes."
+"<code>pack_start</code> takes 4 arguments: the widget that is to be added to "
+"the <code>Gtk.Box</code> (<code>child</code>); whether the <code>Gtk.Box</"
+"code> should grow larger when the new widget is added (<code>expand</code>); "
+"whether the new widget should take up all of the extra space created if the "
+"<code>Gtk.Box</code> gets bigger (<code>fill</code>); and how much space "
+"there should be, in pixels, between the widget and its neighbors inside the "
+"<code>Gtk.Box</code> (<code>padding</code>)."
 msgstr ""
 
-#: C/spinbutton.py.page:35(p)
+#: C/image-viewer.js.page:234(section/p) C/image-viewer.py.page:153(section/p)
 msgid ""
-"A Gtk.Adjustment is needed to construct the Gtk.SpinButton. This is the "
-"representation of a value with a lower and upper bound, together with step "
-"and page increments, and a page size, and it is constructed as <code>Gtk."
-"Adjustment(value, lower, upper, step_increment, page_increment, page_size)</"
-"code> where the fields are of type <code>float</code>; <code>step_increment</"
-"code> is the increment/decrement that is obtained by using the cursor keys "
-"or the buttons of the spinbutton. Note that <code>page_increment</code> and "
-"<code>page_size</code> are not used in this case, and they should be set to "
-"<code>0</code>."
+"Gtk containers (and widgets) dynamically expand to fill the available space, "
+"if you let them. You don't position widgets by giving them a precise x,y-"
+"coordinate location in the window; rather, they are positioned relative to "
+"one another. This makes handling window resizing much easier, and widgets "
+"should automatically take a sensible size in most situations."
 msgstr ""
 
-#: C/spinbutton.py.page:37(p)
+#: C/image-viewer.js.page:235(section/p) C/image-viewer.py.page:154(section/p)
 msgid ""
-"If you want the value of the spinbutton to wrap around when they exceed the "
-"maximum or the minimum, set <code>set_wrap(True)</code>. The <code>\"wrapped"
-"\"</code> signal is emitted when this happens."
+"Also note how the widgets are organized in a hierarchy. Once packed in the "
+"<code>Gtk.Box</code>, the <code>Gtk.Image</code> is considered a <em>child</"
+"em> of the <code>Gtk.Box</code>. This allows you to treat all of the "
+"children of a widget as a group; for example, you could hide the <code>Gtk."
+"Box</code>, which would also hide all of its children at the same time."
 msgstr ""
 
-#: C/spinbutton.py.page:38(p)
+#: C/image-viewer.js.page:236(section/p) C/image-viewer.py.page:155(section/p)
+msgid "Now insert these two lines, below the two you just added:"
+msgstr "Agora escriba estas dúas liñas, embaixo das dúas que acaba de engadir:"
+
+#: C/image-viewer.js.page:237(section/code)
+#, no-wrap
 msgid ""
-"<code>set_digits(digits)</code> sets the precision to be displayed by the "
-"spinbutton, up to 20 digits."
+"\n"
+"var open_button = new Gtk.Button ({label: \"Open a picture...\"});\n"
+"main_box.pack_start (open_button, false, false, 0);"
 msgstr ""
 
-#: C/spinbutton.py.page:39(p)
+#: C/image-viewer.js.page:240(section/p)
 msgid ""
-"To get the value of the spinbutton as an integer, use <code>get_value_as_int"
-"()</code>."
+"These lines are similar to the first two, but this time they create a "
+"<code>Gtk.Button</code> and add it to <code>main_box</code>. Notice that we "
+"are setting the <code>expand</code> argument (the second one) to "
+"<code>false</code> here, whereas it was set to <code>true</code> for the "
+"<code>Gtk.Image</code>. This will cause the image to take up all available "
+"space and the button to take only the space it needs. When you maximize the "
+"window, the button size will remain the same, but the image size will "
+"increase, taking up all of the rest of the window."
 msgstr ""
 
-#: C/spinbutton.py.page:47(link) C/spinbutton.c.page:36(link)
-#| msgid "Gtk.ButtonsType"
-msgid "GtkSpinButton"
-msgstr "GtkSpinButton"
+#: C/image-viewer.js.page:241(section/p)
+msgid ""
+"Finally, we must change the <code>this.window.show ();</code> line to read:"
+msgstr ""
 
-#: C/spinbutton.py.page:48(link) C/spinbutton.c.page:38(link)
-#: C/scale.py.page:56(link) C/scale.c.page:37(link)
-msgid "GtkAdjustment"
-msgstr "GtkAdjustment"
+#: C/image-viewer.js.page:242(section/code)
+#, no-wrap
+msgid "this.window.show_all ();"
+msgstr "this.window.show_all ();"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/spinbutton.js.page:24(None)
-#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
+#: C/image-viewer.js.page:243(section/p)
 msgid ""
-"@@image: 'media/spinbuttonkittens.png'; md5=577cce8a902140aacbab73fe8a76a010"
+"This will show the child of the Gtk window, and all of its children, and its "
+"children's children, and so on. (Remember that Gtk widgets are all hidden by "
+"default.)"
 msgstr ""
-"@@image: 'media/spinbuttonkittens.png'; md5=577cce8a902140aacbab73fe8a76a010"
 
-#: C/spinbutton.js.page:7(title)
-#| msgid "JavaScript"
-msgid "SpinButton (JavaScript)"
-msgstr "SpinButton (JavaScript)"
+#: C/image-viewer.js.page:247(section/title)
+#: C/image-viewer.py.page:164(section/title)
+msgid ""
+"Loading the image: Connecting to the button's <code>clicked</code> signal"
+msgstr ""
 
-#: C/spinbutton.js.page:20(desc)
-msgid "A number entry field that has + and - buttons"
-msgstr "O campo de entrada de número que ten os botóns +  e -."
+#: C/image-viewer.js.page:248(section/p)
+msgid ""
+"When the user clicks on the <gui>Open</gui> button, a dialog should appear "
+"so that the user can choose a picture. Once chosen, the picture should be "
+"loaded and shown in the image widget."
+msgstr ""
 
-#: C/spinbutton.js.page:25(p)
+#: C/image-viewer.js.page:249(section/p)
 msgid ""
-"A SpinButton is not related to a <link xref=\"spinner.js\">Spinner.</link> "
-"It's a text entry field which only accepts numbers, and which has plus and "
-"minus buttons to let you change the value without having to type anything in."
+"The first step is to connect the <code>clicked</code> signal of the button "
+"to a signal handler function, which we call <code>_openClicked</code>. Put "
+"this code immediately after the <code>var open_button = new Gtk.Button</"
+"code> line where the button was created:"
 msgstr ""
 
-#: C/spinbutton.js.page:26(p)
+#: C/image-viewer.js.page:250(section/code)
+#, no-wrap
 msgid ""
-"It's best used when it's obvious that only a number can be entered into it. "
-"In this example, two SpinButtons are used for the number of kittens and "
-"number of cans of tuna to give them."
+"\n"
+"open_button.connect (\"clicked\", Lang.bind (this, this._openClicked));"
 msgstr ""
 
-#: C/spinbutton.js.page:68(p)
+#: C/image-viewer.js.page:252(section/p)
 msgid ""
-"All the code for this sample goes in the SpinButtonExample class. The above "
-"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
-"go in."
+"We are using the <em>Lang</em> JavaScript helper here. It allows us to "
+"connect a <em>class method</em> to the signal, rather than a plain function "
+"(without a class) which we had used before for the window's <code>hide</"
+"code> signal. Don't worry about this for now, it's just a technical detail. "
+"For it to work, you also need to put the following line at the top of the "
+"file:"
 msgstr ""
 
-#: C/spinbutton.js.page:84(title)
-#| msgid "Creating the user interface"
-msgid "Creating the SpinButtons"
-msgstr "Crear os SpinButtons"
+#: C/image-viewer.js.page:253(section/code)
+#, no-wrap
+msgid "const Lang = imports.lang;"
+msgstr "const Lang = imports.lang;"
 
-#: C/spinbutton.js.page:91(p)
-msgid ""
-"We can use the new_with_range function to create a new SpinButton quickly. "
-"Its first parameter is the SpinButton's starting value, its second is the "
-"maximum value, and its third is how much to increment it when the plus or "
-"minus buttons are pressed."
+#: C/image-viewer.js.page:257(section/title)
+#: C/image-viewer.py.page:175(section/title)
+msgid "Loading the image: Writing the signal's callback"
 msgstr ""
 
-#: C/spinbutton.js.page:92(p)
+#: C/image-viewer.js.page:258(section/p)
 msgid ""
-"After we create the first SpinButton, we connect its value-changed signal to "
-"a function which handles what happens when the number inside either "
-"SpinButton changes."
+"Now we can create the <code>_openClicked()</code> method. Insert the "
+"following into the <code>ImageViewer.prototype</code> code block, after the "
+"<code>_init</code> method (and not forgetting the comma):"
 msgstr ""
 
-#: C/spinbutton.js.page:111(p)
+#: C/image-viewer.js.page:259(section/code)
+#, no-wrap
 msgid ""
-"If you want more fine-grained control over a SpinButton, or want to create a "
-"bunch of SpinButtons which all use the same parameters, you can create an "
-"object called an <link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Adjustment.html\">Adjustment.</link> Then you can use that object as a "
-"new SpinButton's adjustment property, and it sets all the values at once. "
-"Afterwards, you can change all the SpinButtons which use that adjustment by "
-"changing the Adjustment object's properties."
+"\n"
+"  _openClicked: function () {\n"
+"    var chooser = new Gtk.FileChooserDialog ({title: \"Select an image\",\n"
+"                                              action: Gtk.FileChooserAction.OPEN,\n"
+"                                              transient_for: this.window,\n"
+"                                              modal: true});\n"
+"    chooser.add_button (Gtk.STOCK_CANCEL, 0);\n"
+"    chooser.add_button (Gtk.STOCK_OPEN, 1);\n"
+"    chooser.set_default_response (1);\n"
+"\n"
+"    var filter = new Gtk.FileFilter ();\n"
+"    filter.add_pixbuf_formats ();\n"
+"    chooser.filter = filter;\n"
+"\n"
+"    if (chooser.run () == 1)\n"
+"      this.image.file = chooser.get_filename ();\n"
+"\n"
+"    chooser.destroy ();\n"
+"  }"
 msgstr ""
 
-#: C/spinbutton.js.page:112(p)
+#: C/image-viewer.js.page:281(item/p)
 msgid ""
-"The commented-out lines here show things you can do to customize your "
-"SpinButton. You can set the number of digits which go after the decimal "
-"point, for example, or tell it to wrap the number around if it goes past the "
-"upper or lower bounds that you set."
+"The line beginning with <code>var chooser</code> creates an <gui>Open</gui> "
+"dialog, which the user can use to choose files. We set four properties: the "
+"title of the dialog; the action (type) of the dialog (it's an \"open\" "
+"dialog, but we could have used <code>SAVE</code> if the intention was to "
+"save a file; <code>transient_for</code>, which sets the parent window of the "
+"dialog; and <code>modal</code> which, if set to <code>true</code>, prevents "
+"the user from clicking on another area of the application until the dialog "
+"is closed."
 msgstr ""
 
-#: C/spinbutton.js.page:113(p)
+#: C/image-viewer.js.page:284(item/p) C/image-viewer.py.page:198(item/p)
 msgid ""
-"For the kitties' sake, please don't use set_digits to allow a decimal number "
-"of kittens."
+"The next two lines add <gui>Cancel</gui> and <gui>Open</gui> buttons to the "
+"dialog. The second argument of the <code>add_button</code> method is the "
+"(integer) value that is returned when the button is pressed: 0 for "
+"<gui>Cancel</gui> and 1 for <gui>Open</gui>."
 msgstr ""
 
-#: C/spinbutton.js.page:117(title)
-#| msgid "Creating the user interface"
-msgid "Creating the rest of the UI"
-msgstr "Crear o resto da IU"
-
-#: C/spinbutton.js.page:128(p)
+#: C/image-viewer.js.page:288(item/p) C/image-viewer.py.page:202(item/p)
 msgid ""
-"We create each <link xref=\"label.js\">Label</link> individually, and then "
-"string them together along with the SpinButtons. The last label needs to "
-"show the number of cans of tuna per kitten, so it has a variable in the "
-"middle, which corresponds to an equation that uses the SpinButtons' "
-"get_value functions to find out what they're set at. JavaScript's Math "
-"function's floor method is used to round the number of cans of tuna per "
-"kitten down to the nearest whole number."
+"<code>set_default_response</code> determines the button that will be "
+"activated if the user double-clicks a file or presses <key>Enter</key>. In "
+"our case, we are using the <gui>Open</gui> button as default (which has the "
+"value 1)."
 msgstr ""
 
-#: C/spinbutton.js.page:154(p)
+#: C/image-viewer.js.page:291(item/p) C/image-viewer.py.page:205(item/p)
 msgid ""
-"Here we use <link xref=\"grid.js\">Grid</link> widgets to keep everything "
-"organized. One Grid holds the labels and SpinButtons in order, while the "
-"next puts that Grid on top and the final Label on the bottom."
+"The next three lines restrict the <gui>Open</gui> dialog to only display "
+"files which can be opened by <code>Gtk.Image</code>. A filter object is "
+"created first; we then add all kinds of files supported by <code>Gdk.Pixbuf</"
+"code> (which includes most image formats like PNG and JPEG) to the filter. "
+"Finally, we set this filter to be the <gui>Open</gui> dialog's filter."
 msgstr ""
 
-#: C/spinbutton.js.page:155(p)
+#: C/image-viewer.js.page:294(item/p)
 msgid ""
-"There isn't a wrong way to organize things in Grids, so long as you like how "
-"it turns out. In this case, the top Grid has a margin on the bottom to keep "
-"it evenly spaced from the bottom Label, and the bottom Label is inside a "
-"separate Grid so it will be centered relative to the Labels and SpinButtons "
-"on the top."
+"<code>chooser.run</code> displays the <gui>Open</gui> dialog. The dialog "
+"will wait for the user to choose an image; when they do, <code>chooser.run</"
+"code> will return the value <output>1</output> (it would return <output>0</"
+"output> if the user clicked <gui>Cancel</gui>). The <code>if</code> "
+"statement tests for this."
 msgstr ""
 
-#: C/spinbutton.js.page:169(title)
-msgid "Function which handles the SpinButtons' numerical values being adjusted"
+#: C/image-viewer.js.page:296(item/p) C/image-viewer.py.page:210(item/p)
+msgid ""
+"Assuming that the user did click <gui>Open</gui>, the next line sets the "
+"<code>file</code> property of the <code>Gtk.Image</code> to the filename of "
+"the image selected by the user. The <code>Gtk.Image</code> will then load "
+"and display the chosen image."
 msgstr ""
 
-#: C/spinbutton.js.page:182(p)
+#: C/image-viewer.js.page:299(item/p) C/image-viewer.py.page:213(item/p)
+#: C/image-viewer.vala.page:267(item/p)
 msgid ""
-"Here we update the perKitten variable based on the SpinButtons' new values, "
-"and use the set_label property to refresh what _lastLabel shows. Since both "
-"SpinButtons have their value-changed signal connected to this function, "
-"every time either of the numbers changes this function will update the Label."
+"In the final line of this method, we destroy the <gui>Open</gui> dialog "
+"because we don't need it any more."
 msgstr ""
 
-#: C/spinbutton.js.page:189(p)
+#: C/image-viewer.js.page:307(section/p)
 msgid ""
-"Finally, we create a new instance of the finished SpinButtonExample class, "
-"and set the application running."
+"All of the code you need should now be in place, so try running the code. "
+"That should be it; a fully-functioning image viewer (and a whistlestop tour "
+"of JavaScript and Gtk) in not much time at all!"
 msgstr ""
 
-#: C/spinbutton.js.page:200(link) C/scale.vala.page:32(link)
-#: C/scale.js.page:209(link)
-msgid "Gtk.Adjustment"
+#: C/image-viewer.js.page:312(section/p)
+msgid ""
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"image-viewer/image-viewer.js\">reference code</link>."
 msgstr ""
+"Se ten problemas con este titorial, compare o seu código con este <link href="
+"\"image-viewer/image-viewer.js\">código de referencia</link>."
 
-#: C/spinbutton.c.page:7(title)
-#| msgid "Button"
-msgid "SpinButton (C)"
-msgstr "SpinButton (C)"
-
-#: C/spinbutton.c.page:20(desc)
-msgid "Retrieve an integer or floating point number"
-msgstr "Obter un enteiro ou número de punto flotante"
-
-#: C/signals-callbacks.py.page:8(title)
-msgid "Signals and callbacks (Python)"
-msgstr "Sinais e contrachamadas (Python)"
-
-#: C/signals-callbacks.py.page:12(desc)
-msgid "An explanation of signals and callbacks in GTK+."
-msgstr "Unha explicación dos sinais e contrachamadas en GTK+"
-
-#: C/signals-callbacks.py.page:25(title)
-msgid "Signals and callbacks"
-msgstr "Sinais e contrachamadas"
-
-#: C/signals-callbacks.py.page:30(title) C/properties.py.page:30(title)
-#: C/model-view-controller.py.page:30(title)
-msgid "Overview"
-msgstr "Vista xeral"
+#: C/image-viewer.py.page:7(info/title)
+#, fuzzy
+#| msgid "Image Viewer"
+msgctxt "text"
+msgid "Image Viewer (Python)"
+msgstr "Visor de imaxes"
 
-#: C/signals-callbacks.py.page:32(p)
+#: C/image-viewer.py.page:10(info/desc)
 msgid ""
-"Like most GUI toolkits, GTK+ uses an event-driven programming model. When "
-"the user is doing nothing, GTK+ sits in the main loop and waits for input. "
-"If the user performs some action - say, a mouse click - then the main loop "
-"\"wakes up\" and delivers an event to GTK+."
+"A little bit more than a simple \"Hello world\" application - write an image "
+"viewer in GTK."
 msgstr ""
+"Algo máis que un aplicativo sinxelo «Hola mundo» - escribir un visor de "
+"imaxes en GTK."
 
-#: C/signals-callbacks.py.page:34(p)
-msgid ""
-"When widgets receive an event, they frequently emit one or more signals. "
-"Signals notify your program that \"something interesting happened\" by "
-"invoking functions you have connected to the signal. Such functions are "
-"commonly known as callbacks. When your callbacks are invoked, you would "
-"typically take some action. After a callback finishes, GTK+ will return to "
-"the main loop and await more user input."
-msgstr ""
+#: C/image-viewer.py.page:29(item/p)
+msgid "Write a basic GTK user interface in Python"
+msgstr "Escribir unha interface de usuario básica en Python"
 
-#: C/signals-callbacks.py.page:36(p)
-msgid ""
-"A generic example is: <code>handler_id = widget.connect(\"event\", callback, "
-"data)</code>. <code>widget</code> is an instance of a widget we created "
-"earlier. Next, the <code>event</code> we are interested in. Each widget has "
-"its own particular events which can occur. For instance, if you have a Gtk."
-"Button you usually want to connect to the \"clicked\" event: this means that "
-"when the button is clicked, the signal is issued. Another example is the "
-"<code>notify::property</code> signal: whenever a <link xref=\"properties.py"
-"\">property</link> is modified on a GObject, instead of just emitting the "
-"<code>notify</code> signal, GObject associates as a detail to this signal "
-"emission the name of the property modified. This allows clients who wish to "
-"be notified of changes to only one property to filter most events before "
-"receiving them. Thirdly, the callback argument is the name of the callback "
-"function, which contains the code which runs when signals of the specified "
-"type are issued. Finally, the optional data argument includes any data which "
-"should be passed when the signal is issued."
+#: C/image-viewer.py.page:37(item/p)
+msgid "Basic knowledge of the python programming language"
 msgstr ""
 
-#: C/signals-callbacks.py.page:38(p)
+#: C/image-viewer.py.page:51(item/p)
+#, fuzzy
+#| msgid ""
+#| "Choose <gui>GTKmm (Simple)</gui> from the <gui>C++</gui> tab, click "
+#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
+#| "<file>image-viewer</file> as project name and directory."
 msgid ""
-"The function returns a number (the <code>handler_id</code>) that identifies "
-"this particular signal-callback pair. This number is required to disconnect "
-"from a signal such that the callback function will not be called during any "
-"future or currently ongoing emissions of the signal it has been connected "
-"to, as in <code>widget.disconnect(handler_id)</code>."
+"Choose <gui>PyGTK (automake)</gui> from the <gui>Python</gui> tab, click "
+"<gui>Continue</gui>, and fill out your details on the next few pages. Use "
+"<file>image-viewer</file> as project name and directory."
 msgstr ""
+"Seleccione <gui>GTK+ (Simple)</gui> desde a lapela <gui>C++</gui>, prema "
+"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
+"<file>image-viewer</file> como nome do proxecto e cartafol."
 
-#: C/signals-callbacks.py.page:45(p)
+#: C/image-viewer.py.page:54(item/p)
 msgid ""
-"<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
-"\">Signals</link> in GObject documentation"
+"Be sure to disable <gui>Use GtkBuilder for user interface</gui> as we will "
+"build the user interface manually in this example. For an example of using "
+"the interface designer, check the <link xref=\"guitar-tuner.py\">Guitar-"
+"Tuner demo</link>."
 msgstr ""
 
-#: C/signals-callbacks.py.page:46(p)
+#: C/image-viewer.py.page:59(item/p)
 msgid ""
-"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.";
-"html\">Basics - Main loop and Signals</link> in Python Gtk+ 3 Tutorial"
+"Click <gui>Apply</gui> and the project will be created for you. Open "
+"<file>src/image_viewer.py</file> from the <gui>Project</gui> or <gui>File</"
+"gui> tabs. It contains very basic example code."
 msgstr ""
+"Prema <gui>Aplicar</gui> e crearase o proxecto. Abra <file>src/image_viewer."
+"py</file> desde as lapelas <gui>Proxecto</gui> ou <gui>Ficheiro</gui>. "
+"Contén un exemplo de código moi básico:"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/set-up-gedit.js.page:24(None)
-#| msgid ""
-#| "@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
-msgid "@@image: 'media/geditview.png'; md5=f1438295662d95f56fcd1d8200efaaf2"
-msgstr "@@image: 'media/geditview.png'; md5=f1438295662d95f56fcd1d8200efaaf2"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/set-up-gedit.js.page:36(None)
-#| msgid "@@image: 'media/fedora.png'; md5=19add55f4349fd9e90f3a50b344ba626"
-msgid "@@image: 'media/gediteditor.png'; md5=50db1ee8f2c545744879ee9fba5b4b24"
-msgstr "@@image: 'media/gediteditor.png'; md5=50db1ee8f2c545744879ee9fba5b4b24"
-
-#: C/set-up-gedit.js.page:18(title)
-msgid "Set up gedit for JavaScript development"
-msgstr "Configurar gedit para o desenvolvemento con JavaScript"
+#: C/image-viewer.py.page:66(section/p)
+msgid "Let's see what a very basic Gtk application looks like in Python:"
+msgstr "Vexamos como é o máis básico dun aplicativo Gtk en Python:"
 
-#: C/set-up-gedit.js.page:19(p)
+#: C/image-viewer.py.page:67(section/code)
+#, no-wrap
 msgid ""
-"This tutorial will show you how to set up <link href=\"http://projects.gnome.";
-"org/gedit/\">gedit,</link> GNOME's basic text editor, so that it has a "
-"handful of extra features which are useful for writing JavaScript code."
+"\n"
+"from gi.repository import Gtk, GdkPixbuf, Gdk\n"
+"import os, sys\n"
+"\n"
+"class GUI:\n"
+"\tdef __init__(self):\n"
+"\t\twindow = Gtk.Window()\n"
+"\t\twindow.set_title (\"Hello World\")\n"
+"\t\twindow.connect_after('destroy', self.destroy)\n"
+"\n"
+"\t\twindow.show_all()\n"
+"\n"
+"\tdef destroy(window, self):\n"
+"\t\tGtk.main_quit()\n"
+"\n"
+"def main():\n"
+"\tapp = GUI()\n"
+"\tGtk.main()\n"
+"\n"
+"if __name__ == \"__main__\":\n"
+"    sys.exit(main())\n"
+"\n"
+"  "
 msgstr ""
 
-#: C/set-up-gedit.js.page:22(title)
-msgid "Making code clearer"
-msgstr "Facer o código máis claro"
-
-#: C/set-up-gedit.js.page:23(p)
+#: C/image-viewer.py.page:96(item/p)
 msgid ""
-"Click on <gui>Edit</gui> in gedit's menu bar, then click on <gui>Preferences."
-"</gui> You should see something like this:"
+"In the <code>__init__</code> method of the <code>GUI</code> class creates an "
+"(empty) <code>Gtk.Window</code>, sets its title and then connects a signal "
+"to quit the application once the window is closed. That's pretty simple "
+"overall, more on signals later."
 msgstr ""
 
-#: C/set-up-gedit.js.page:25(p)
-msgid "Here are the options you want to make sure are turned on."
+#: C/image-viewer.py.page:101(item/p)
+msgid ""
+"Next, <code>destroy</code> is defined which just quits the application. It "
+"is called by the <code>destroy</code> signal connected above."
 msgstr ""
+"A continuación, <code>destroy</code> está definido só para saír do "
+"aplicativo. É chamado pola sinal <code>destroy</code> conectada enriba."
+
+#: C/image-viewer.py.page:105(item/p)
+msgid "The rest of the file does initialisation for Gtk and displays the GUI."
+msgstr "O resto do ficheiro inicializa Gtk e mostra o GUI."
 
-#: C/set-up-gedit.js.page:27(p)
+#: C/image-viewer.py.page:109(section/p)
 msgid ""
-"<gui>Display line numbers</gui> will help you compare the code you type in "
-"with the original, and make it easier to see which line is causing an error "
-"if there is a bug."
+"This code is ready to run, so try it using <guiseq><gui>Run</"
+"gui><gui>Execute</gui></guiseq>. It should show you an empty window."
 msgstr ""
 
-#: C/set-up-gedit.js.page:28(p)
+#: C/image-viewer.py.page:116(section/code)
+#, no-wrap
 msgid ""
-"<gui>Highlight current line</gui> makes it easier to see which line you're "
-"on, when you have to go back and forth a lot."
+"\n"
+"def button_clicked () :\n"
+"  print \"you clicked me!\"\n"
+"\n"
+"b = new Gtk.Button (\"Click me\")\n"
+"b.connect_after ('clicked', button_clicked)"
 msgstr ""
 
-#: C/set-up-gedit.js.page:29(p)
+#: C/image-viewer.py.page:132(section/p)
 msgid ""
-"<gui>Highlight matching brackets</gui> helps you make sure you didn't leave "
-"out a bracket by accident."
+"Let's add the box and widgets to the window. Insert the following code into "
+"the <code>__init__</code> method, immediately after the <code>window."
+"connect_after</code> line:"
 msgstr ""
 
-#: C/set-up-gedit.js.page:34(title)
-msgid "Making editing easier"
+#: C/image-viewer.py.page:133(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"box = Gtk.Box()\n"
+"box.set_spacing (5)\n"
+"box.set_orientation (Gtk.Orientation.VERTICAL)\n"
+"window.add (box)\n"
+"\n"
 msgstr ""
 
-#: C/set-up-gedit.js.page:35(p)
+#: C/image-viewer.py.page:140(section/p)
 msgid ""
-"In gedit's <gui>Preferences</gui> dialog, click on the <gui>Editor</gui> "
-"tab. You should see something like this:"
+"The first line creates a <code>Gtk.Box</code> called <code>box</code> and "
+"the following lines set two of its properties: the <code>orientation</code> "
+"is set to vertical (so the widgets are arranged in a column), and the "
+"<code>spacing</code> between the widgets is set to 5 pixels. The next line "
+"then adds the newly-created <code>Gtk.Box</code> to the window."
 msgstr ""
 
-#: C/set-up-gedit.js.page:37(p)
+#: C/image-viewer.py.page:146(section/p)
 msgid ""
-"Here, you want to have <gui>Enable automatic indentation</gui> turned on. "
-"This means that when you hit <key>Enter</key> the cursor stays indented as "
-"far as the last line was. This is extremely useful when writing JavaScript "
-"code, since it uses indentation to make it clearer which parts do what."
+"To add some widgets to the <code>Gtk.Box</code>, insert the following code "
+"directly below the <code>window.add (box)</code> line:"
 msgstr ""
 
-#: C/set-up-gedit.js.page:38(p)
+#: C/image-viewer.py.page:147(section/code)
+#, no-wrap
 msgid ""
-"If you want to share code with other people who write GNOME JavaScript "
-"applications, you'll also want to set <gui>Tab width</gui> to 4 and turn on "
-"<gui>Insert spaces instead of tabs.</gui>"
+"\n"
+"self.image = Gtk.Image()\n"
+"box.pack_start (self.image, False, False, 0)"
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/separator.py.page:23(None)
-#| msgid "@@image: 'media/fedora.png'; md5=19add55f4349fd9e90f3a50b344ba626"
-msgid "@@image: 'media/separator.png'; md5=8769b27662ce5c77f99e9ce33751a21a"
-msgstr "@@image: 'media/separator.png'; md5=8769b27662ce5c77f99e9ce33751a21a"
-
-#: C/separator.py.page:7(title)
-msgid "Seperator (Python)"
-msgstr "Separador (Python)"
-
-#: C/separator.py.page:18(desc)
-#| msgid "Display widgets"
-msgid "A separator widget"
-msgstr "Un widgets de separación"
-
-#: C/separator.py.page:21(title)
-msgid "Separator"
-msgstr "Separador"
-
-#: C/separator.py.page:24(p)
-msgid "A horizontal and a vertical separator divide some labels."
-msgstr "Un separador horizontal ou vertical para dividir algunhas etiquetas."
-
-#: C/separator.py.page:34(title)
-msgid "API Reference"
-msgstr "Referencia da API"
-
-#: C/separator.py.page:38(link)
-msgid "GtkSeparator"
-msgstr "GtkSeparator"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/scrolledwindow.vala.page:22(None) C/scrolledwindow.py.page:21(None)
-#| msgid "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
+#: C/image-viewer.py.page:150(section/p)
 msgid ""
-"@@image: 'media/scrolledwindow.png'; md5=697bb3205d5c4fb0b4ea8db435843157"
+"The first line creates a new <code>Gtk.Image</code> called <code>image</"
+"code>, which will be used to display an image file. As we need that later on "
+"in the signal handler, we will define it as a class-wide variable. You need "
+"to add <code>image = 0</code> to the beginning of the <code>GUI</code> "
+"class. Then, the image widget is added (<em>packed</em>) into the <code>box</"
+"code> container using GtkBox's <link href=\"http://library.gnome.org/devel/";
+"gtk/stable/GtkBox.html#gtk-box-pack-start\"><code>pack_start</code></link> "
+"method."
 msgstr ""
-"@@image: 'media/scrolledwindow.png'; md5=697bb3205d5c4fb0b4ea8db435843157"
-
-#: C/scrolledwindow.vala.page:7(title)
-msgid "ScrolledWindow (Vala)"
-msgstr "ScrolledWindow (Vala)"
-
-#: C/scrolledwindow.vala.page:18(desc) C/scrolledwindow.py.page:17(desc)
-msgid "Adds scrollbars to its child widget"
-msgstr "Engade barras de desprazamento no seu widget fillo"
-
-#: C/scrolledwindow.vala.page:21(title) C/scrolledwindow.py.page:20(title)
-#| msgid "Scrolling"
-msgid "ScrolledWindow"
-msgstr "ScrolledWindow"
-
-#: C/scrolledwindow.vala.page:23(p) C/scrolledwindow.py.page:22(p)
-msgid "An image in a scrolled window."
-msgstr "Unha imaxe dunha xanela con desprazamento."
 
-#: C/scrolledwindow.py.page:7(title)
-msgid "ScrolledWindow (Python)"
-msgstr "ScrolledWindow (Python)"
-
-#: C/scrolledwindow.py.page:31(title)
-msgid "Useful methods for a ScrolledWindow widget"
-msgstr "Métodos útiles para o widget ScrollWindow"
+#: C/image-viewer.py.page:152(section/p)
+msgid ""
+"<code>pack_start</code> takes 4 arguments: the widget that is to be added to "
+"the GtkBox (<code>child</code>); whether the <code>Gtk.Box</code> should "
+"grow larger when the new widget is added (<code>expand</code>); whether the "
+"new widget should take up all of the extra space created if the <code>Gtk."
+"Box</code> gets bigger (<code>fill</code>); and how much space there should "
+"be, in pixels, between the widget and its neighbors inside the <code>Gtk."
+"Box</code> (<code>padding</code>)."
+msgstr ""
 
-#: C/scrolledwindow.py.page:33(p)
+#: C/image-viewer.py.page:156(section/code)
+#, no-wrap
 msgid ""
-"<code>set_policy(hscrollbar_policy, vscrollbar_policy)</code> where each of "
-"the arguments is one of <code>Gtk.Policy.AUTOMATIC, Gtk.Policy.ALWAYS, Gtk."
-"Policy.NEVER</code> regulates whether the horizontal and vertical scrollbars "
-"should appear: with <code>AUTOMATIC</code> they appear only if needed, "
-"<code>ALWAYS</code> and <code>NEVER</code> are self-explanatory."
+"\n"
+"button = Gtk.Button (\"Open a picture...\")\n"
+"box.pack_start (button, False, False, 0)\n"
 msgstr ""
 
-#: C/scrolledwindow.py.page:34(p)
+#: C/image-viewer.py.page:160(section/p)
 msgid ""
-"<code>add_with_viewport(widget)</code> is used to add the Gtk.Widget "
-"<code>widget</code> without native scrolling capabilities inside the window."
+"These lines are similar to the first two, but this time they create a "
+"<code>Gtk.Button</code> and add it to <code>box</code>. Notice that we are "
+"setting the <code>expand</code> argument (the second one) to <code>False</"
+"code> here, whereas it was set to <code>True</code> for the <code>Gtk.Image</"
+"code>. This will cause the image to take up all available space and the "
+"button to take only the space it needs. When you maximize the window, the "
+"button size will remain the same, but the image size will increase, taking "
+"up all of the rest of the window."
 msgstr ""
 
-#: C/scrolledwindow.py.page:35(p)
+#: C/image-viewer.py.page:165(section/p)
 msgid ""
-"<code>set_placement(window_placement)</code> sets the placement of the "
-"contents with respect to the scrollbars for the scrolled window. The options "
-"for the argument are <code>Gtk.CornerType.TOP_LEFT</code> (default: the "
-"scrollbars are on the bottom and on the right of the window), <code>Gtk."
-"CornerType.TOP_RIGHT, Gtk.CornerType.BOTTOM_LEFT, Gtk.CornerType."
-"BOTTOM_RIGHT</code>."
+"When the user clicks on the <gui>Open Image...</gui> button, a dialog should "
+"appear so that the user can choose a picture. Once chosen, the picture "
+"should be loaded and shown in the image widget."
 msgstr ""
 
-#: C/scrolledwindow.py.page:36(p)
+#: C/image-viewer.py.page:166(section/p)
 msgid ""
-"<code>set_hadjustment(adjustment)</code> and <code>set_vadjustment"
-"(adjustment)</code> set the Gtk.Adjustment <code>adjustment</code>. This is "
-"the representation of a value with a lower and upper bound, together with "
-"step and page increments, and a page size, and it is constructed as "
-"<code>Gtk.Adjustment(value, lower, upper, step_increment, page_increment, "
-"page_size)</code> where the fields are of type <code>float</code>. (Note "
-"that <code>step_increment</code> is not used in this case, it can be set to "
-"<code>0</code>.)"
+"The first step is to connect the <code>clicked</code> signal of the button "
+"to a signal handler function, which we call <code>on_open_clicked</code>. "
+"Put this code immediately after the <code>button = Gtk.Button()</code> line "
+"where the button was created:"
 msgstr ""
 
-#: C/scrolledwindow.py.page:45(link) C/paned.py.page:42(link)
-#: C/image.vala.page:33(link) C/image.py.page:100(link)
-#: C/image.c.page:34(link) C/grid.py.page:58(link)
-msgid "GtkImage"
+#: C/image-viewer.py.page:167(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"button.connect_after('clicked', self.on_open_clicked)\n"
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/scale.vala.page:23(None) C/scale.py.page:22(None)
-#| msgid "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
-msgid "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
-msgstr "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
+#: C/image-viewer.py.page:170(section/p)
+msgid ""
+"This will connect the <code>clicked</code> signal to <code>on_open_clicked</"
+"code> method that we will define below."
+msgstr ""
 
-#: C/scale.vala.page:7(title)
-#| msgid "Sample Vala code"
-msgid "Scale (Vala)"
-msgstr "Scale (Vala)"
+#: C/image-viewer.py.page:176(section/p)
+msgid ""
+"Now we can create the <code>on_open_clicked</code> method. Insert the "
+"following into the <code>GUI</code> class code block, after the "
+"<code>__init__</code> method:"
+msgstr ""
 
-#: C/scale.vala.page:19(desc) C/scale.py.page:18(desc) C/scale.c.page:19(desc)
-msgid "A slider widget for selecting a value from a range"
-msgstr "Un widget de desprazamento para seleccionar un valor dun rango"
+#: C/image-viewer.py.page:177(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"def on_open_clicked (self, button):\n"
+"\tdialog = Gtk.FileChooserDialog (\"Open Image\", button.get_toplevel(), Gtk.FileChooserAction.OPEN);\n"
+"\tdialog.add_button (Gtk.STOCK_CANCEL, 0)\n"
+"\tdialog.add_button (Gtk.STOCK_OK, 1)\n"
+"\tdialog.set_default_response(1)\n"
+"\n"
+"\tfilefilter = Gtk.FileFilter ()\n"
+"\tfilefilter.add_pixbuf_formats ()\n"
+"\tdialog.set_filter(filefilter)\n"
+"\n"
+"\tif dialog.run() == 1:\n"
+"\t\tself.image.set_from_file(dialog.get_filename())\n"
+"\n"
+"\tdialog.destroy()"
+msgstr ""
 
-#: C/scale.vala.page:22(title) C/scale.py.page:21(title)
-#: C/scale.js.page:20(title) C/scale.c.page:22(title)
-msgid "Scale"
-msgstr "Escala"
+#: C/image-viewer.py.page:195(item/p)
+msgid ""
+"The line beginning with <code>dialog</code> creates an <gui>Open</gui> "
+"dialog, which the user can use to choose files. We set three properties: the "
+"title of the dialog; the action (type) of the dialog (it's an \"open\" "
+"dialog, but we could have used <code>SAVE</code> if the intention was to "
+"save a file; and <code>transient_for</code>, which sets the parent window of "
+"the dialog."
+msgstr ""
 
-#: C/scale.vala.page:24(p) C/scale.py.page:23(p) C/scale.c.page:25(p)
-msgid "Slide the scales!"
-msgstr "Desprazar as escalas!"
+#: C/image-viewer.py.page:208(item/p)
+msgid ""
+"<code>dialog.run</code> displays the <gui>Open</gui> dialog. The dialog will "
+"wait for the user to choose an image; when they do, <code>dialog.run</code> "
+"will return the value <output>1</output> (it would return <output>0</output> "
+"if the user clicked <gui>Cancel</gui>). The <code>if</code> statement tests "
+"for this."
+msgstr ""
 
-#: C/scale.vala.page:31(link) C/scale.js.page:214(link)
-msgid "Gtk.Scale"
-msgstr "Gtk.Scale"
+#: C/image-viewer.py.page:221(section/p)
+msgid ""
+"All of the code you need should now be in place, so try running the code. "
+"That should be it; a fully-functioning image viewer (and a whistlestop tour "
+"of Python and Gtk) in not much time at all!"
+msgstr ""
 
-#: C/scale.vala.page:33(link)
-#| msgid "Gtk.ButtonsType"
-msgid "Gtk.PositionType"
-msgstr "Gtk.PositionType"
+#: C/image-viewer.py.page:226(section/p)
+msgid ""
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"image-viewer/image-viewer.py\">reference code</link>."
+msgstr ""
 
-#: C/scale.vala.page:34(link)
-#| msgid "Gtk.Application"
-msgid "Gtk.Orientation"
-msgstr "Gtk.Orientation"
+#: C/image-viewer.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Image Viewer"
+msgctxt "text"
+msgid "Image Viewer (Vala)"
+msgstr "Visor de imaxes"
 
-#: C/scale.py.page:7(title)
-#| msgid "Python"
-msgid "Scale (Python)"
-msgstr "Scale (Python)"
+#: C/image-viewer.vala.page:22(credit/name)
+msgid "Philip Chimento"
+msgstr "Philip Chimento"
 
-#: C/scale.py.page:33(title)
-msgid "Useful methods for a Scale widget"
-msgstr "Métodos útiles para o widget Scale"
+#: C/image-viewer.vala.page:33(synopsis/p)
+#, fuzzy
+#| msgid ""
+#| "In this tutorial, we're going to write a very simple GTK application that "
+#| "loads and displays an image file. You will learn how to:"
+msgid ""
+"In this tutorial you will create an application which opens and displays an "
+"image file. You will learn:"
+msgstr ""
+"Neste titorial, imos escribir un aplicativo GTK moi sinxelo que carga e "
+"mostra un ficheiro de imaxe. Vostede aprenderá a:"
 
-#: C/scale.py.page:34(p)
+#: C/image-viewer.vala.page:35(item/p)
 msgid ""
-"For an explanation of signals and callback functions, see <link xref="
-"\"signals-callbacks.py\">this page</link>. An example is the <code>\"value-"
-"changed\"</code> signal, emitted when the value of the scale changes."
+"How to set up a basic project using the <link xref=\"getting-ready\">Anjuta "
+"IDE</link>."
 msgstr ""
 
-#: C/scale.py.page:35(p)
+#: C/image-viewer.vala.page:36(item/p)
 msgid ""
-"A Gtk.Adjustment is needed to construct the Gtk.Scale. This is the "
-"representation of a value with a lower and upper bound, together with step "
-"and page increments, and a page size, and it is constructed as <code>Gtk."
-"Adjustment(value, lower, upper, step_increment, page_increment, page_size)</"
-"code> where the fields are of type <code>float</code>; <code>step_increment</"
-"code> is the increment/decrement that is obtained by using the cursor keys, "
-"<code>page_increment</code> the one that is obtained clicking on the scale "
-"itself. Note that <code>page_size</code> is not used in this case, it should "
-"be set to <code>0</code>."
+"How to write a <link href=\"http://developer.gnome.org/platform-overview/";
+"stable/gtk\">Gtk application</link> in Vala"
 msgstr ""
 
-#: C/scale.py.page:37(p)
+#: C/image-viewer.vala.page:37(item/p)
 msgid ""
-"<code>get_value()</code> retrieves the current value of the scale; "
-"<code>set_value(value)</code> sets it (if the <code>value</code>, of type "
-"<code>float</code>, is outside the minimum or maximum range, it will be "
-"clamped to fit inside them). These are methods of the class Gtk.Range."
+"Some basic concepts of <link href=\"http://developer.gnome.org/gobject/";
+"stable/\">GObject</link> programming"
 msgstr ""
 
-#: C/scale.py.page:38(p)
+#: C/image-viewer.vala.page:44(item/p)
 msgid ""
-"Use <code>set_draw_value(False)</code> to avoid displaying the current value "
-"as a string next to the slider."
+"You may find the <link href=\"http://valadoc.org/gtk+-3.0/\";>gtk+-3.0</link> "
+"API Reference useful, although it is not necessary to follow the tutorial."
 msgstr ""
 
-#: C/scale.py.page:39(p)
+#: C/image-viewer.vala.page:60(item/p)
+#, fuzzy
+#| msgid ""
+#| "Choose <gui>Gtk+ (Simple)</gui> from the <gui>C</gui> tab, click "
+#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
+#| "<file>guitar-tuner</file> as project name and directory."
 msgid ""
-"To highlight the part of the scale between the origin and the current value:"
+"From the <gui>Vala</gui> tab choose <gui>Gtk+ (Simple)</gui>, click "
+"<gui>Continue</gui>, and fill out your details on the next page. Use "
+"<file>image-viewer</file> as project name and directory."
 msgstr ""
+"Seleccione <gui>GTK+ (Simple)</gui> desde a lapela <gui>C</gui>, prema "
+"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
+"<file>guitar-tunner</file> como nome do proxecto e cartafol."
 
-#: C/scale.py.page:40(code)
-#, no-wrap
+#: C/image-viewer.vala.page:64(item/p)
+#, fuzzy
+#| msgid ""
+#| "Make sure that <gui>Use GtkBuilder for user interface</gui> is disabled "
+#| "as we will create the UI manually in this tutorial. Check the <link xref="
+#| "\"guitar-tuner.c\">Guitar-Tuner</link> tutorial using the interface "
+#| "builder."
 msgid ""
-"\n"
-"self.h_scale.set_restrict_to_fill_level(False)\n"
-"self.h_scale.set_fill_level(self.h_scale.get_value())\n"
-"self.h_scale.set_show_fill_level(True)"
+"Make sure that <gui>Use GtkBuilder for user interface</gui> is unchecked as "
+"we will create the UI manually in this tutorial."
 msgstr ""
+"Asegúrese que <gui>Usar GtkBuilder para a interface de usuario</gui> está "
+"desactivado xa que crearemos a UI manualmente neste titorial. Comprobe o "
+"titorial <link xref=\"guitar-tuner.c\">Guitar-Tuner</link> usando o "
+"construtor de interface."
 
-#: C/scale.py.page:44(p)
+#: C/image-viewer.vala.page:65(note/p)
 msgid ""
-"in the callback function of the \"value-changed\" signal, so to have the new "
-"filling every time the value is changed. These are methods of the class Gtk."
-"Range."
+"You will learn how to use the interface builder in the <link xref=\"guitar-"
+"tuner.vala\">Guitar-Tuner</link> tutorial."
 msgstr ""
 
-#: C/scale.py.page:46(p)
+#: C/image-viewer.vala.page:69(item/p)
+#, fuzzy
+#| msgid ""
+#| "Click <gui>Apply</gui> and the project will be created for you. Open "
+#| "<file>src/main.js</file> from the <gui>Project</gui> or <gui>File</gui> "
+#| "tabs. It contains very basic example code."
 msgid ""
-"<code>add_mark(value, position, markup)</code> adds a mark at the "
-"<code>value</code> (<code>float</code> or <code>int</code> if that is the "
-"precision of the scale), in <code>position</code> (<code>Gtk.PositionType."
-"LEFT, Gtk.PositionType.RIGHT, Gtk.PositionType.TOP, Gtk.PositionType.BOTTOM</"
-"code>) with text <code>Null</code> or <code>markup</code> in the Pango "
-"Markup Language. To clear marks, <code>clear_marks()</code>."
+"Click <gui>Continue</gui> then <gui>Apply</gui> and the project will be "
+"created for you. Open <file>src/image_viewer.vala</file> from the "
+"<gui>Project</gui> or <gui>File</gui> tabs. You will see this code:"
 msgstr ""
+"Prema <gui>Aplicar</gui> e o proxecto será creado. Abra <file>src/main.js</"
+"file> desde a lapela <gui>Proxecto</gui> ou <gui>Ficheiros</gui>. Contén "
+"código de exemplo moi básico."
 
-#: C/scale.py.page:47(p)
+#: C/image-viewer.vala.page:72(item/code)
+#, no-wrap
 msgid ""
-"<code>set_digits(digits)</code> sets the precision of the scale at "
-"<code>digits</code> digits."
+"\n"
+"using GLib;\n"
+"using Gtk;\n"
+"\n"
+"public class Main : Object\n"
+"{\n"
+"\n"
+"\tpublic Main ()\n"
+"\t{\n"
+"\t\tWindow window = new Window();\n"
+"\t\twindow.set_title (\"Hello World\");\n"
+"\t\twindow.show_all();\n"
+"\t\twindow.destroy.connect(on_destroy);\n"
+"\t}\n"
+"\n"
+"\tpublic void on_destroy (Widget window)\n"
+"\t{\n"
+"\t\tGtk.main_quit();\n"
+"\t}\n"
+"\n"
+"\tstatic int main (string[] args)\n"
+"\t{\n"
+"\t\tGtk.init (ref args);\n"
+"\t\tvar app = new Main ();\n"
+"\n"
+"\t\tGtk.main ();\n"
+"\n"
+"\t\treturn 0;\n"
+"\t}\n"
+"}"
 msgstr ""
 
-#: C/scale.py.page:55(link) C/scale.c.page:35(link)
-msgid "GtkScale"
+#: C/image-viewer.vala.page:108(section/p)
+msgid ""
+"The code loads an (empty) window from the user interface description file "
+"and shows it. More details are given below; skip this list if you understand "
+"the basics:"
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/scale.js.page:21(None)
-#| msgid "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
+#: C/image-viewer.vala.page:113(item/p)
 msgid ""
-"@@image: 'media/scalepenguins.png'; md5=2dbe6a833fec86fde71a5ddb421e2cd5"
+"The two <code>using</code> lines at the top import namespaces so we don't "
+"have to name them explicitly."
 msgstr ""
-"@@image: 'media/scalepenguins.png'; md5=2dbe6a833fec86fde71a5ddb421e2cd5"
 
-#: C/scale.js.page:7(title)
-#| msgid "JavaScript"
-msgid "Scale (JavaScript)"
-msgstr "Scale (JavaScript)"
+#: C/image-viewer.vala.page:116(item/p)
+#, fuzzy
+#| msgid ""
+#| "The <code>create_window</code> function creates a new (empty) window and "
+#| "connects a signal to exit the application when that window is closed."
+msgid ""
+"The constructor of the <code>Main</code> class creates a new (empty) window "
+"and connects a <link href=\"https://live.gnome.org/Vala/SignalsAndCallbacks";
+"\">signal</link> to exit the application when that window is closed."
+msgstr ""
+"A función <code>create_window</code> crea unha xanela (baleira) nova e "
+"conecta un sinal para saír do aplicativo péchase esa xanela."
 
-#: C/scale.js.page:17(desc)
-msgid "A slider which corresponds to a numerical value"
-msgstr "Un desprazador que corresponde co valor numérico"
+#: C/image-viewer.vala.page:121(item/p)
+msgid ""
+"The <code>static main</code> function is run by default when you start a "
+"Vala application. It calls a few functions which create the <code>Main</"
+"code> class, set up and then run the application. The <link href=\"http://";
+"valadoc.org/gtk+-3.0/Gtk.main.html\"><code>Gtk.main</code></link> function "
+"starts the GTK <link href=\"http://en.wikipedia.org/wiki/Event_loop\";>main "
+"loop</link>, which runs the user interface and starts listening for events "
+"(like clicks and key presses)."
+msgstr ""
 
-#: C/scale.js.page:22(p)
+#: C/image-viewer.vala.page:128(section/p)
+#: C/magic-mirror.vala.page:88(section/p)
 msgid ""
-"A Scale is a horizontal or vertical slider, that represents a value inside a "
-"numerical range. When you create a new Scale, you set what its default "
-"position is, what the numbers at the top and bottom of the range are, and "
-"things like how much it moves up or down when you click on the Scale to "
-"either side of the knob. To keep from having to type all that in every time "
-"you create a new Scale, you can create an object called an Adjustment which "
-"keeps track of all that, then tell each new Scale to use that Adjustment."
+"Change the <gui>Configuration</gui> to <gui>Default</gui> and then press "
+"<gui>Execute</gui> to configure the build directory. You only need to do "
+"this once, for the first build."
 msgstr ""
 
-#: C/scale.js.page:23(p)
+#: C/image-viewer.vala.page:134(section/p)
 msgid ""
-"This scale is a simple widget that lets you adjust the size of an iceberg "
-"that penguins live on. The number of penguins on the iceberg is the product "
-"of the values of the two sliders. Try playing with them and seeing what "
-"happens."
+"Now we will bring life into the empty window. GTK organizes the user "
+"interface with <link href=\"http://www.valadoc.org/gtk+-2.0/Gtk.Container.";
+"html\"><code>Gtk.Container</code></link>s that can contain other widgets and "
+"even other containers. Here we will use the simplest available container, a "
+"<link href=\"http://unstable.valadoc.org/gtk+-2.0/Gtk.Box.html\";><code>Gtk."
+"Box</code></link>."
 msgstr ""
 
-#: C/scale.js.page:65(p)
-msgid ""
-"All the code for this sample goes in the ScaleExample class. The above code "
-"creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.";
-"Application.html\">Gtk.Application</link> for our widgets and window to go "
-"in."
+#: C/image-viewer.vala.page:138(section/p)
+msgid "Add the following lines to the top of the <code>Main</code> class:"
 msgstr ""
 
-#: C/scale.js.page:81(title)
-#| msgid "Creating the signal handler"
-msgid "Creating the scales"
-msgstr "Creando as escalas"
-
-#: C/scale.js.page:91(p)
+#: C/image-viewer.vala.page:139(section/code)
+#, no-wrap
 msgid ""
-"The new_with_range method is one way to create a new Scale widget. The "
-"parameters it takes are a <link href=\"http://www.roojs.org/seed/gir-1.2-";
-"gtk-3.0/gjs/Gtk.Orientation.html\">Gtk.Orientation</link>, the minimum "
-"value, the maximum value, and the increment for a single step. After that we "
-"use the Scale's methods to set its starting value, and how many decimal "
-"places it runs to. We also set its vertical alignment in this case, to "
-"control where it appears in the window."
+"\n"
+"private Window window;\n"
+"private Image image;\n"
 msgstr ""
 
-#: C/scale.js.page:92(p)
-msgid ""
-"We can use the set_draw_value method to tell it whether or not to show the "
-"number next to the sliding scale. It's commented out in this example."
+#: C/image-viewer.vala.page:144(section/p)
+msgid "Now replace the current constructor with the one below:"
 msgstr ""
 
-#: C/scale.js.page:104(p)
+#: C/image-viewer.vala.page:145(section/code)
+#, no-wrap
 msgid ""
-"An Adjustment is an object we can use to simplify things when creating a new "
-"Scale. The Adjustment's \"value\" property is what the Scale's default value "
-"is, while \"upper\" and \"lower\" make the high and low ends of the "
-"numerical range. Meanwhile, the increment values show how much the slider "
-"moves when you do things like click on it."
+"\n"
+"\n"
+"public Main () {\n"
+"\n"
+"\twindow = new Window ();\n"
+"\twindow.set_title (\"Image Viewer in Vala\");\n"
+"\n"
+"\t// Set up the UI\n"
+"\tvar box = new Box (Orientation.VERTICAL, 5);\n"
+"\tvar button = new Button.with_label (\"Open image\");\n"
+"\timage = new Image ();\n"
+"\n"
+"\tbox.pack_start (image, true, true, 0);\n"
+"\tbox.pack_start (button, false, false, 0);\n"
+"\twindow.add (box);\n"
+"\n"
+"\t// Show open dialog when opening a file\n"
+"\tbutton.clicked.connect (on_open_image);\n"
+"\n"
+"\twindow.show_all ();\n"
+"\twindow.destroy.connect (main_quit);\n"
+"}\n"
 msgstr ""
 
-#: C/scale.js.page:116(p)
+#: C/image-viewer.vala.page:170(item/p)
 msgid ""
-"Here we create a new Scale object using _adjustment as its \"adjustment\" "
-"property. This is a great shortcut. We still have to tell it to round off "
-"the decimal place, though. Note that the draw_value property is commented "
-"out; this is how you tell it not to show the number next to the Scale when "
-"you're creating one this way."
+"The first two lines are the parts of the GUI that we will need to access "
+"from more than one method. We declare them up here so that they are "
+"accessible throughout the class instead of only in the method where they are "
+"created."
 msgstr ""
 
-#: C/scale.js.page:132(p)
+#: C/image-viewer.vala.page:174(item/p)
 msgid ""
-"We can use the get_value method to find out the numerical value a Scale is "
-"set at. We can then do whatever we want with it, including multiply the two "
-"Scales' values together and have a <link xref=\"label.js\">Label</link> show "
-"us the product. We set the label's text to wrap around, because we're having "
-"it display a silly message too."
+"The first lines of the constructor create the empty window. The next lines "
+"create the widgets we want to use: a button for opening up an image, the "
+"image view widget itself and the box we will use as a container."
 msgstr ""
 
-#: C/scale.js.page:133(p)
+#: C/image-viewer.vala.page:178(item/p)
 msgid ""
-"After we create the Label, we connect the two Scales' \"value-changed\" "
-"signals to _recalc, a function that will recalculate the number of penguins "
-"on the iceberg and come up with a new message."
+"The calls to <link href=\"http://unstable.valadoc.org/gtk+-2.0/Gtk.Box.";
+"pack_start.html\"><code>pack_start</code></link> add the two widgets to the "
+"box and define their behaviour. The image will expand into any available "
+"space whereas the button will just be as big as needed. You will notice that "
+"we don't set explicit sizes on the widgets. In GTK this is usually not "
+"needed as it makes it much easier to have a layout that looks good in "
+"different window sizes. Next, the box is added to the window."
 msgstr ""
 
-#: C/scale.js.page:148(p)
+#: C/image-viewer.vala.page:185(item/p)
 msgid ""
-"Here we create a <link xref=\"grid.js\">Grid</link> to put everything in, "
-"then attach all our widgets to it. Note that here and on some of the widgets "
-"themselves we're using margins to keep things neatly spaced."
+"We need to define what happens when the user clicks on the button. GTK uses "
+"the concept of <em>signals</em>."
 msgstr ""
 
-#: C/scale.js.page:157(p)
+#: C/image-viewer.vala.page:186(item/p)
 msgid ""
-"Finally, we add the Grid to the window, then tell the window to show itself "
-"and all the widgets inside of it."
+"When the <link href=\"http://valadoc.org/gtk+-3.0/Gtk.Button.html\";>button</"
+"link> is clicked, it fires the <link href=\"http://valadoc.org/gtk+-3.0/Gtk.";
+"Button.clicked.html\"><code>clicked</code></link> signal, which we can "
+"connect to some action (defined in a <link href=\"https://live.gnome.org/";
+"Vala/SignalsAndCallbacks\">callback</link> method)."
 msgstr ""
 
-#: C/scale.js.page:161(title)
-msgid "Function which handles the scales' values changing"
+#: C/image-viewer.vala.page:189(item/p)
+msgid ""
+"This is done using the <code>connect</code> method of the button's "
+"<code>clicked</code> signal, which in this case tells GTK to call the (yet "
+"undefined) <code>on_image_open</code> callback method when the button is "
+"clicked. We will define the <em>callback</em> in the next section."
 msgstr ""
 
-#: C/scale.js.page:191(p)
+#: C/image-viewer.vala.page:193(item/p)
 msgid ""
-"Remember, we can get a Scale's value using its get_value method. Here we "
-"simply recalculate what the product of the two values is after one of the "
-"Scales is moved, add in a silly message depending on how many penguins are "
-"left, and change the wording on _label to show the new number and message."
+"In the callback, we need to access the <code>window</code> and <code>image</"
+"code> widgets, which is why we defined them as private members at the top of "
+"our class."
 msgstr ""
 
-#: C/scale.js.page:198(p)
+#: C/image-viewer.vala.page:197(item/p)
 msgid ""
-"Finally, we create a new instance of the finished ScaleExample class, and "
-"set the application running."
+"The last <code>connect</code> call makes sure that the application exits "
+"when the window is closed. The code generated by Anjuta called an "
+"<code>on_destroy</code> callback method which called <link href=\"http://www.";
+"valadoc.org/gtk+-2.0/Gtk.main_quit.html\"><code>Gtk.main_quit</code></link>, "
+"but just connecting our signal to <code>main_quit</code> directly is easier. "
+"You can delete the <code>on_destroy</code> method."
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/scale.c.page:24(None)
-#| msgid ""
-#| "@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
-msgid "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
-msgstr "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
-
-#: C/scale.c.page:7(title)
-msgid "Scale (C)"
+#: C/image-viewer.vala.page:205(section/p)
+msgid ""
+"We will now define the signal handler for the <code>clicked</code> signal "
+"for the button we mentioned before. Add this code after the constructor:"
 msgstr ""
 
-#: C/scale.c.page:36(link)
-msgid "GtkRange"
-msgstr "GtkRange"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/record-collection.js.page:64(None)
+#: C/image-viewer.vala.page:208(section/code)
+#, no-wrap
 msgid ""
-"@@image: 'media/record-collection.png'; md5=2d645997687ed5aacd36aafafc16e072"
+"\n"
+"public void on_open_image (Button self) {\n"
+"\tvar filter = new FileFilter ();\n"
+"\tvar dialog = new FileChooserDialog (\"Open image\",\n"
+"\t                                    window,\n"
+"\t                                    FileChooserAction.OPEN,\n"
+"\t                                    Stock.OK,     ResponseType.ACCEPT,\n"
+"\t                                    Stock.CANCEL, ResponseType.CANCEL);\n"
+"\tfilter.add_pixbuf_formats ();\n"
+"\tdialog.add_filter (filter);\n"
+"\n"
+"\tswitch (dialog.run ())\n"
+"\t{\n"
+"\t\tcase ResponseType.ACCEPT:\n"
+"\t\t\tvar filename = dialog.get_filename ();\n"
+"\t\t\timage.set_from_file (filename);\n"
+"\t\t\tbreak;\n"
+"\t\tdefault:\n"
+"\t\t\tbreak;\n"
+"\t}\n"
+"\tdialog.destroy ();\n"
+"}\n"
 msgstr ""
-"@@image: 'media/record-collection.png'; md5=2d645997687ed5aacd36aafafc16e072"
-
-#: C/record-collection.js.page:7(title)
-#| msgid "Record Collection"
-msgid "Record Collection (JavaScript)"
-msgstr "Colección de música (JavaScript)"
 
-#: C/record-collection.js.page:10(desc)
-msgid "Create a small database application for ordering your music collection"
+#: C/image-viewer.vala.page:231(section/p)
+msgid "This is a bit complicated, so let's break it down:"
 msgstr ""
-"Cree un pequeno aplicativo con unha base de datos para ordenar a súa "
-"colección de música"
-
-#: C/record-collection.js.page:14(name) C/image-viewer.vala.page:14(name)
-#: C/image-viewer.cpp.page:12(name) C/image-viewer.c.page:14(name)
-#: C/guitar-tuner.vala.page:13(name) C/guitar-tuner.py.page:14(name)
-#: C/guitar-tuner.cpp.page:12(name) C/guitar-tuner.c.page:14(name)
-#: C/getting-ready.page:11(name) C/audio-player.vala.page:13(name)
-msgid "GNOME Documentation Project"
-msgstr "Proxecto de documentación de GNOME"
-
-#: C/record-collection.js.page:15(email) C/index.page:8(email)
-#: C/image-viewer.vala.page:15(email) C/image-viewer.cpp.page:13(email)
-#: C/image-viewer.c.page:15(email) C/guitar-tuner.vala.page:14(email)
-#: C/guitar-tuner.py.page:15(email) C/guitar-tuner.cpp.page:13(email)
-#: C/guitar-tuner.c.page:15(email) C/getting-ready.page:12(email)
-#: C/audio-player.vala.page:14(email)
-msgid "gnome-doc-list gnome org"
-msgstr "gnome-doc-list gnome org"
-
-#: C/record-collection.js.page:18(name) C/photo-wall.c.page:17(name)
-#: C/magic-mirror.vala.page:18(name) C/index.page:17(name)
-#: C/image-viewer.vala.page:18(name) C/image-viewer.py.page:18(name)
-#: C/image-viewer.js.page:18(name) C/image-viewer.cpp.page:16(name)
-#: C/image-viewer.c.page:18(name) C/guitar-tuner.vala.page:17(name)
-#: C/guitar-tuner.py.page:18(name) C/guitar-tuner.cpp.page:16(name)
-#: C/guitar-tuner.c.page:18(name)
-msgid "Johannes Schmid"
-msgstr "Johannes Schmid"
-
-#: C/record-collection.js.page:19(email) C/photo-wall.c.page:18(email)
-#: C/magic-mirror.vala.page:19(email) C/index.page:18(email)
-#: C/image-viewer.vala.page:19(email) C/image-viewer.py.page:19(email)
-#: C/image-viewer.js.page:19(email) C/image-viewer.cpp.page:17(email)
-#: C/image-viewer.c.page:19(email) C/guitar-tuner.vala.page:18(email)
-#: C/guitar-tuner.py.page:19(email) C/guitar-tuner.cpp.page:17(email)
-#: C/guitar-tuner.c.page:19(email)
-msgid "jhs gnome org"
-msgstr "jhs gnome org"
-
-#: C/record-collection.js.page:23(title)
-#| msgid "Record Collection"
-msgid "3 Record Collection"
-msgstr "3 Colección de gravacións"
-
-#: C/record-collection.js.page:26(p) C/message-board.c.page:24(p)
-#: C/image-viewer.cpp.page:24(p) C/image-viewer.c.page:26(p)
-msgid "In this tutorial, you will learn:"
-msgstr "Neste titorial aprenderá:"
-
-#: C/record-collection.js.page:28(p)
-msgid "How to connect to a database using libgda"
-msgstr "Como conectar con unha base de datos usando libgda"
-
-#: C/record-collection.js.page:29(p)
-msgid "How to insert and browse records in a database table"
-msgstr "Como insertar e examinar rexistros nunha táboa dunha base de datos"
-
-#: C/record-collection.js.page:34(title) C/photo-wall.c.page:36(title)
-msgid "Introduction"
-msgstr "Introdución"
 
-#: C/record-collection.js.page:35(p)
+#: C/image-viewer.vala.page:232(note/p)
 msgid ""
-"This demo uses the Javascript language. We are going to demonstrate how to "
-"connect and use a database from a GTK program, by using the GDA (GNOME Data "
-"Access) library. Thus you also need this library installed."
+"A signal handler is a type of callback method that is called when a signal "
+"is emitted. Here the terms are used interchangeably."
 msgstr ""
-"Esta demostración usa o linguaxe JavaScript. Vaise demostrar como conectar e "
-"usar unha base de datos desde un programa GTK, usando a biblioteca GDA "
-"(«GNOME Data Access», Acceso a datos de GNOME). Polo tanto, é preciso ter "
-"instalada tamén esta biblioteca."
 
-#: C/record-collection.js.page:38(p)
+#: C/image-viewer.vala.page:235(item/p)
 msgid ""
-"GNOME Data Access (GDA) is library whose purpose is to provide universal "
-"access to different kinds and types of data sources. This goes from "
-"traditional relational database systems, to any imaginable kind of data "
-"source such as a mail server, a LDAP directory, etc. For more information, "
-"and for a full API and documentation, visit the <link href=\"http://library.";
-"gnome.org/devel/libgda/stable/\">GDA website</link>."
+"The first argument of the callback method is always the widget that sent the "
+"signal. Sometimes other arguments related to the signal come after that, but "
+"<em>clicked</em> doesn't have any."
 msgstr ""
-"GNOME Data Access (GDA) é unha biblioteca cuxo propósito é fornecer acceso "
-"universal a diferentes tipos de orixes de datos. Isto vai desde os sistemas "
-"de bases de datos relacionais tradicionais a calquera tipo imaxinábel de "
-"orixe de datos como un servidor de correo, un directorio LDAP, ect. Para "
-"máis información e para obter a API completa e a documentación visite o "
-"<link href=\"http://library.gnome.org/devel/libgda/stable/\";>sitio web de "
-"GDA</link>."
 
-#: C/record-collection.js.page:41(p)
+#: C/image-viewer.vala.page:237(item/p)
 msgid ""
-"Although a big part of the code is related to user interface (GUI), we are "
-"going to focus our tutorial on the database parts (we might mention other "
-"parts we think are relevant though). To know more about Javascript programs "
-"in GNOME, see the <link xref=\"image-viewer.js\">Image Viewer program</link> "
-"tutorial."
+"In this case the <code>button</code> sent the <code>clicked</code> signal, "
+"which is connected to the <code>on_open_image</code> callback method:"
 msgstr ""
-"Aínda que a maioría do código está relacionado con interfaces de usuario "
-"(GUI), imos enforcar este titorial nas partes relacionadas coa base de datos "
-"(aínda que podemos mencionar outras partes que son relevantes). Para saber "
-"máis sobre os programas JavaScript en GNOME vexa o titorial <link xref="
-"\"image-viewer.js\">programa Visor de Imaxes</link>."
-
-#: C/record-collection.js.page:47(title) C/photo-wall.c.page:46(title)
-#: C/message-board.c.page:41(title) C/magic-mirror.vala.page:44(title)
-#: C/image-viewer.vala.page:51(title) C/image-viewer.py.page:44(title)
-#: C/image-viewer.js.page:45(title) C/image-viewer.cpp.page:34(title)
-#: C/image-viewer.c.page:36(title) C/guitar-tuner.py.page:42(title)
-#: C/guitar-tuner.cpp.page:40(title) C/guitar-tuner.c.page:42(title)
-msgid "Create a project in Anjuta"
-msgstr "Cree un proxecto de Anjuta"
 
-#: C/record-collection.js.page:48(p) C/photo-wall.c.page:47(p)
-#: C/magic-mirror.vala.page:45(p) C/image-viewer.vala.page:52(p)
-#: C/image-viewer.py.page:45(p) C/image-viewer.js.page:46(p)
-#: C/image-viewer.cpp.page:35(p) C/image-viewer.c.page:37(p)
-#: C/guitar-tuner.vala.page:46(p) C/guitar-tuner.py.page:43(p)
-#: C/guitar-tuner.cpp.page:41(p) C/guitar-tuner.c.page:43(p)
+#: C/image-viewer.vala.page:238(item/code)
+#, no-wrap
 msgid ""
-"Before you start coding, you'll need to set up a new project in Anjuta. This "
-"will create all of the files you need to build and run the code later on. "
-"It's also useful for keeping everything together."
+"\n"
+"        button.clicked.connect (on_open_image);\n"
 msgstr ""
-"Antes de comezar a programar, deberá configurar un proxecto novo en Anjuta. "
-"Isto creará todos os ficheiros que precise para construír e executar o "
-"código máis adiante. Tamén é útil para manter todo ordenado."
 
-#: C/record-collection.js.page:51(p) C/photo-wall.c.page:50(p)
-#: C/magic-mirror.vala.page:48(p) C/image-viewer.py.page:48(p)
-#: C/image-viewer.js.page:49(p) C/image-viewer.cpp.page:38(p)
-#: C/image-viewer.c.page:40(p) C/guitar-tuner.py.page:46(p)
-#: C/guitar-tuner.cpp.page:44(p) C/guitar-tuner.c.page:46(p)
+#: C/image-viewer.vala.page:242(item/p)
 msgid ""
-"Start Anjuta and click <guiseq><gui>File</gui><gui>New</gui><gui>Project</"
-"gui></guiseq> to open the project wizard."
+"The <code>on_open_image</code> method takes the button that emitted the "
+"signal as an argument:"
 msgstr ""
-"Inicie Anjuta e prema <guiseq><gui>Ficheiro</gui><gui>Novo</"
-"gui><gui>Proxecto</gui></guiseq> para abrir o asistente de proxectos."
 
-#: C/record-collection.js.page:54(p)
+#: C/image-viewer.vala.page:243(item/code)
+#, no-wrap
 msgid ""
-"Choose <gui>Generic Javascript</gui> from the <gui>JS</gui> tab, click "
-"<gui>Forward</gui>, and fill-out your details on the next few pages. Use "
-"<file>record-collection</file> as project name and directory."
+"\n"
+"        public void on_open_image (Button self)\n"
 msgstr ""
-"Seleccione <gui>JavaScript xenérico</gui> desde a lapela <gui>JS</gui>, "
-"prema <gui>Adiante</gui> e complete os seus detalles nas seguintes páxinas. "
-"Use <file>record-collection</file> como nome do proxecto e cartafol."
 
-#: C/record-collection.js.page:57(p)
+#: C/image-viewer.vala.page:248(item/p)
 msgid ""
-"Click <gui>Finished</gui> and the project will be created for you. Open "
-"<file>src/main.js</file> from the <gui>Project</gui> or <gui>File</gui> "
-"tabs. It contains very basic example code."
+"The next interesting line is where the dialog for choosing the file is "
+"created. <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.FileChooserDialog.";
+"html\"><code>FileChooserDialog</code></link>'s constructor takes the title "
+"of the dialog, the parent window of the dialog and several options like the "
+"number of buttons and their corresponding values."
 msgstr ""
-"Prema <gui>Rematar</gui> e o proxecto será creado. Abra <file>src/main.js</"
-"file> desde a lapela <gui>Proxecto</gui> ou <gui>Ficheiros</gui>. Contén "
-"código de exemplo moi básico."
-
-#: C/record-collection.js.page:63(title)
-msgid "Program Structure"
-msgstr "Estrutura do programa"
 
-#: C/record-collection.js.page:65(p)
+#: C/image-viewer.vala.page:250(item/p)
 msgid ""
-"This demo is a simple GTK application (with a single window) capable of "
-"inserting records into a database table as well as browsing all records of "
-"the table. The table has two fields: <code>id</code>, an integer, and "
-"<code>name</code>, a varchar. The first section (on the top) of the "
-"application allows you to insert a record into the table. The last section "
-"(bottom) allows you to see all the records of that table. Its content is "
-"refreshed every time a new record is inserted and on the application startup."
+"Notice that we are using <link href=\"http://unstable.valadoc.org/gtk+-3.0/";
+"Gtk.Stock.html\"><em>stock</em></link> button names from Gtk, instead of "
+"manually typing \"Cancel\" or \"Open\". The advantage of using stock names "
+"is that the button labels will already be translated into the user's "
+"language."
 msgstr ""
-"Esta demostración é un aplicativo GTK (cunha única xanela) capaz de inserir "
-"rexistros nunha táboa de base de datos así como navegar por tódolos "
-"rexistros da toa. A táboa ten dous campos: <code>id</code>, un enteiro e "
-"<code>name</code>, un varchar. A primeira sección (na parte superior) do "
-"aplicativo permítelle inserir un rexistro na táboa. A última sección "
-"(abaixo) permítelle ver tódolos rexistros dunha táboa. Os contidos "
-"actualízanse cada vez que se insire un novo rexistro e ao iniciar o "
-"aplicativo."
-
-#: C/record-collection.js.page:70(title)
-msgid "Starting the fun"
-msgstr "Comezar a diversión"
 
-#: C/record-collection.js.page:71(p)
-msgid "Let's start by examining the skeleton of the program:"
-msgstr "Comezar examinando o esqueleto do programa:"
+#: C/image-viewer.vala.page:254(item/p)
+msgid ""
+"The next two lines restrict the <gui>Open</gui> dialog to only display files "
+"which can be opened by <em>GtkImage</em>. GtkImage is a widget which "
+"displays an image. A filter object is created first; we then add all kinds "
+"of files supported by <link href=\"http://www.valadoc.org/gdk-pixbuf-2.0/Gdk.";
+"Pixbuf.html\"><code>Gdk.Pixbuf</code></link> (which includes most image "
+"formats like PNG and JPEG) to the filter. Finally, we set this filter to be "
+"the <gui>Open</gui> dialog's filter."
+msgstr ""
 
-#: C/record-collection.js.page:97(p)
+#: C/image-viewer.vala.page:259(item/p)
 msgid ""
-"Lines 1‒4: Initial imports. Pay special attention to line 3, which tells "
-"Javascript to import the GDA library, our focus in this tutorial."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.run.html";
+"\"><code>dialog.run</code></link> displays the <gui>Open</gui> dialog. The "
+"dialog will wait for the user to choose an image; when they do, <code>dialog."
+"run</code> will return the <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"ResponseType.html\">ResponseType</link> value <code>ResponseType.ACCEPT</"
+"code> (it would return <code>ResponseType.CANCEL</code> if the user clicked "
+"<gui>Cancel</gui>). The <code>switch</code> statement tests for this."
 msgstr ""
-"Liñas 1-4: importacións iniciais. Preste especial atención á liña 3, que "
-"indica que JavaScript importe a a biblioteca GDA, noso obxectivo neste "
-"titorial."
 
-#: C/record-collection.js.page:98(p)
+#: C/image-viewer.vala.page:264(item/p)
 msgid ""
-"Lines 6‒17: Define our <code>Demo</code> class. Pay special attention to "
-"lines 13‒15, where we call 3 methods which will do the whole job. They will "
-"be detailed below."
+"Assuming that the user did click <gui>Open</gui>, the next lines get the "
+"filename of the image selected by the user, and tell the <code>GtkImage</"
+"code> widget to load and display the selected image."
 msgstr ""
-"Liñas 6-17: Define a clase <code>Demo</code>. Poña especial atención ás "
-"liñas 13-15, onde chamamos a 3 métodos que farán o traballo. Falaremos deles "
-"máis adiante."
 
-#: C/record-collection.js.page:99(p)
-msgid "Lines 19‒23: Start the application."
-msgstr "Liñas 19-23: Iniciar o aplicativo."
-
-#: C/record-collection.js.page:104(title)
-msgid "Designing the application"
-msgstr "Deseñar o aplicativo"
+#: C/image-viewer.vala.page:268(item/p)
+msgid "Destroying automatically hides the dialog."
+msgstr ""
 
-#: C/record-collection.js.page:105(p)
+#: C/image-viewer.vala.page:277(section/p)
+#, fuzzy
+#| msgid ""
+#| "If you haven't already done so, choose the <file>Debug/src/image-viewer</"
+#| "file> application in the dialog that appears. Finally, hit <gui>Run</gui> "
+#| "and enjoy!"
 msgid ""
-"Let's take a look at the <code>setupWindow</code> method. It is responsible "
-"for creating the User Interface (UI). As UI is not our focus, we will "
-"explain only the relevant parts."
+"If you haven't already done so, choose the <file>src/image-viewer</file> "
+"application in the dialog that appears. Finally, hit <gui>Run</gui> and "
+"enjoy!"
 msgstr ""
-"Botémoslle unha ollada ao método <code>setupWindow</code>. É o responsábel "
-"de crear a Interface de Usuario (UI). Xa que a UI non é o noso enfoque "
-"explicaremos só as partes máis relevantes."
+"Se non o fixo aínda, seleccione o aplicativo <file>Debug/src/image-viewer</"
+"file> no diálogo que aparece. Finalmente, prema <gui>Executar</gui> e "
+"desfrute!"
 
-#: C/record-collection.js.page:156(p)
+#: C/image-viewer.vala.page:283(section/p)
+#, fuzzy
+#| msgid ""
+#| "If you run into problems with the tutorial, compare your code with this "
+#| "<link href=\"image-viewer/image-viewer.js\">reference code</link>."
 msgid ""
-"Lines 22 and 27: Create the 2 entries (for the two fields) in which users "
-"will type something to get inserted in the database."
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"image-viewer/image-viewer.vala\">reference code</link>."
 msgstr ""
-"Liñas 22 e 27: crear as dúas entradas (para os dous campos) nas que o "
-"usuario escribirá algo para inserilo na base de datos."
+"Se ten problemas con este titorial, compare o seu código con este <link href="
+"\"image-viewer/image-viewer.js\">código de referencia</link>."
 
-#: C/record-collection.js.page:157(p)
+#: C/image-viewer.vala.page:290(item/p)
 msgid ""
-"Lines 31‒34: Create the Insert button. We connect its <code>clicked</code> "
-"signal to the <code>_insertClicked</code> private method of the class. This "
-"method is detailed below."
+"Set it up so that when the window opens it is of a specific size to start "
+"off with. For example, 200 X 200 pixels."
 msgstr ""
-"Liñas 31-34: crear o botón «Insertar». Conéctase o seu sinal <code>clicked</"
-"code> co método privado <code>_insertClicked</code> de clase. Este método "
-"detállase a continuación"
 
-#: C/record-collection.js.page:158(p)
-msgid ""
-"Line 39: Create the widget (<code>TextView</code>) where we will show the "
-"contents of the table."
+#: C/js.page:7(info/title)
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "link"
+msgid "JavaScript"
+msgstr "JavaScript"
+
+#: C/js.page:16(page/title)
+msgid "Tutorials, code samples and platform demos in JavaScript"
 msgstr ""
-"Liña 39: Crear o widget (<code>TextView</code>) onde se mostrarán os "
-"contidos da táboa."
 
-#: C/record-collection.js.page:159(p)
-msgid ""
-"Line 44: Create the label where we will show the number of records in the "
-"table. Initially it's empty, it will be updated later."
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/label.c.page:25(media) C/label.js.page:21(media)
+#: C/label.py.page:27(media) C/label.vala.page:21(media)
+#, fuzzy
+#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
+msgctxt "_"
+msgid "external ref='media/label.png' md5='734975c18653d88379f983e4501c3fc0'"
+msgstr "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
+
+#: C/label.c.page:7(info/title)
+#, fuzzy
+#| msgid "Label"
+msgctxt "text"
+msgid "Label (C)"
+msgstr "Etiqueta"
+
+#: C/label.c.page:18(info/desc) C/label.vala.page:17(info/desc)
+msgid "A widget which displays text"
 msgstr ""
-"Liña 44: crea a etiqueta onde se mostrará o número de rexistros existentes "
-"na táboa. Inicialmente está baleiro, actualizarase máis tarde."
 
-#: C/record-collection.js.page:164(title)
-msgid "Connecting to and initializing the database"
-msgstr "Conectar e inicializar a base de datos"
+#: C/label.c.page:21(page/title) C/label.js.page:20(page/title)
+#: C/label.py.page:26(page/title) C/label.vala.page:20(page/title)
+#: C/toolbar_builder.py.page:96(td/p) C/toolbar_builder.vala.page:80(td/p)
+msgid "Label"
+msgstr "Etiqueta"
 
-#: C/record-collection.js.page:165(p)
-msgid ""
-"The code which makes the connection to the database is in the "
-"<code>setupDatabase</code> method below:"
+#: C/label.c.page:26(td/p) C/label.py.page:28(page/p)
+#: C/label.vala.page:22(page/p)
+msgid "A simple label"
 msgstr ""
-"O código que fai a conexión coa base de datos está no método "
-"<code>setupDatabase</code> de embaixo:"
 
-#: C/record-collection.js.page:182(p)
+#: C/label.c.page:31(page/code)
+#, no-wrap
 msgid ""
-"Lines 2‒3: Create the GDA's <code>Connection</code> object. We must supply "
-"to its constructor some properties:"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *label;\n"
+"\n"
+"  /*Create a window with a title and a default size*/\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_application (GTK_WINDOW (window), GTK_APPLICATION (app));\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Welcome to GNOME\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 200,100);\n"
+"   \n"
+"  /*Create a label and set its alignment. Setting the line wrap to TRUE makes \n"
+"  the label break lines if the text exceeds the widget's size. When set to \n"
+"  FALSE the text gets cut off by the edge of the widget*/\n"
+"  label = gtk_label_new (\"Hello GNOME!\");\n"
+"  gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER);\n"
+"  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);\n"
+"\n"
+"  gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (label));\n"
+"\n"
+"  gtk_widget_show_all (GTK_WIDGET (window));\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\",G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"  return status;\n"
+"}\n"
 msgstr ""
-"Liña 2-3: crear o obxecto de GDA <code>Conection</code>. Debe fornecerlle ao "
-"seu construtor algunhas propiedades:"
 
-#: C/record-collection.js.page:185(p)
+#: C/label.c.page:38(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"<code>provider</code>: One of GDA's supported providers. GDA supports "
-"SQLite, MySQL, PostgreSQL, Oracle and many others. For demo purposes we will "
-"use a SQLite database, as it comes installed by default in most "
-"distributions and it is simple to use (it just uses a file as a database)."
+"<link href=\"http://developer.gnome.org/gtk3/3.4/GtkLabel.html\";>GtkLabel</"
+"link>"
 msgstr ""
-"<code>provider</code>: un dos fornecedores con asistencia en GDA. GDA é "
-"compatíbel con SQLite, MySQL, PostgreSQL, Oracle e moitos outros. Para os "
-"propósitos desta demostración usaremos unha base de datos SQLite, xa que ven "
-"instalada por omisión na maioría das distribucións e é moi sinxela de usar "
-"(usa un só ficheiro por base de datos)."
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/record-collection.js.page:188(p)
-msgid ""
-"<code>cnc_string</code>: The connection string. It may change from provider "
-"to provider. The syntax for SQLite is: <code>DB_DIR=<var>PATH</var>;"
-"DB_NAME=<var>FILENAME</var></code>. In this demo we are accessing a database "
-"called gnome_demo in the user home dir (note the call to GLib's "
-"<code>get_home_dir</code> function)."
+#: C/label.js.page:7(info/title)
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Label (JavaScript)"
+msgstr "JavaScript"
+
+#: C/label.js.page:17(info/desc)
+msgid "A label which can contain text"
 msgstr ""
-"<code>cnc_string</code>: A cadea de conexión. Pode cambiar dun fornecedor a "
-"outro. A sintaxe para SQLite é: <code>DB_DIR=<var>PATH</var>;"
-"DB_NAME=<var>FILENAME</var></code>. Nesta demostración accederemos a unha "
-"base de datos chamada gnome_demo no cartafol persoal do usuario (olle a "
-"chamada á función de GLib <code>get_home_dir</code>)."
 
-#: C/record-collection.js.page:192(p)
-msgid ""
-"If the provider is not supported by GDA, or if the connection string is "
-"missing some element, line 2 will raise an exception. So, in real life we "
-"should handle it with JavaScript's statement <code>try</code>...<code>catch</"
-"code>."
+#: C/label.js.page:22(page/p)
+msgid "A label displaying a friendly message."
 msgstr ""
-"Se o fornecedor non é compatíbel con GDA, ou falta algún elemento na cadea "
-"de conexión, dispararase a excepción da liña 2. Polo que na vida real "
-"deberíamos xestionar as declaracións JavaScript entre bloques <code>try</"
-"code>...<code>catch</code>."
 
-#: C/record-collection.js.page:196(p)
+#: C/label.js.page:24(page/code)
+#, no-wrap
 msgid ""
-"Line 4: Open the connection. In the SQLite provider, if the database does "
-"not exist, it will be created in this step."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const LabelExample = new Lang.Class ({\n"
+"    Name: 'Label Example',\n"
+"\n"
+"    /* Create the application itself\n"
+"       This boilerplate code is needed to build any GTK+ application. */\n"
+"        _init: function () {\n"
+"            this.application = new Gtk.Application ({\n"
+"                application_id: 'org.example.jslabel',\n"
+"                flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"            });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"            this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                              window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                              title: \"Welcome to GNOME\",\n"
+"                                                              default_height: 100,\n"
+"                                                              default_width: 200 });\n"
+"\n"
+"        // Create the label\n"
+"        this.label = new Gtk.Label ({label: \"Hello GNOME!\"});\n"
+"        this._window.add (this.label);\n"
+"\n"
+"                // Show the window and all child widgets\n"
+"                this._window.show_all();\n"
+"    }\n"
+"\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new LabelExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Liña 4: Abrir a conexión. No fornecedor de SQLite, se a conexión non existe "
-"crearase neste paso."
 
-#: C/record-collection.js.page:198(p)
+#: C/label.js.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Lines 6‒10: Try to do a simple select to check if the table exists (line 7). "
-"If it does not exist (because the database was just created), this command "
-"will raise an exception, which is handled by the <code>try</code>..."
-"<code>catch</code> block. If it is the case, we run the create table "
-"statement (line 9)."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Label.html";
+"\">Gtk.Label</link>"
 msgstr ""
-"Liñas 6-10: Tenta facer unha selección sinxela para comprobar que a táboa "
-"existe (liña 7). Se non existe (porque a base de datos foi recén creada), "
-"esta orde disparará unha excepción, que está xestionada polo bloque "
-"<code>try</code>...<code>catch</code>. Se este é o caso executarase a "
-"declaración de creación de táboa (liña 9)."
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/record-collection.js.page:199(p)
-msgid ""
-"In order to run the SQL commands above we are using global GDA functions, "
-"<code>execute_select_command</code> and <code>execute_non_select_command</"
-"code>. They are simple to use, and just require two arguments: The "
-"<code>Connection</code> object and the SQL command to be parsed."
+#: C/label.py.page:7(info/title)
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "Label (Python)"
+msgstr "Python"
+
+#: C/label.py.page:23(info/desc)
+msgid "A widget that displays a small to medium amount of text"
 msgstr ""
-"Para executar ordes SQL usamos as funcións globais de GDA, "
-"<code>execute_select_command</code> e <code>execute_non_select_command</"
-"code>. Son moi sinxelas de usar, e só requiren dous argumentos: o obxecto "
-"<code>Connection</code> e a orde SQL a analizar."
 
-#: C/record-collection.js.page:203(p)
-msgid "At this point we have the database set up, and are ready to use it."
-msgstr "Neste punto temos a base de datos configurada e lista para usala."
+#: C/label.py.page:35(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # constructor for a Gtk.ApplicationWindow\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
+"        self.set_default_size(200, 100)\n"
+"\n"
+"        # create a label\n"
+"        label = Gtk.Label()\n"
+"        # set the text of the label\n"
+"        label.set_text(\"Hello GNOME!\")\n"
+"        # add the label to the window\n"
+"        self.add(label)\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
 
-#: C/record-collection.js.page:207(title)
-msgid "Selecting"
-msgstr "Seleccionar"
+#: C/label.py.page:37(section/p)
+msgid ""
+"Another way to obtain what we have in the example is to create the label as "
+"an instance of another class and add it to the instance of <code>MyWindow</"
+"code> in the <code>do_activate(self)</code> method:"
+msgstr ""
 
-#: C/record-collection.js.page:208(p)
+#: C/label.py.page:38(section/code)
+#, no-wrap
 msgid ""
-"After connecting to the database, our demo's constructor calls the "
-"<code>selectData</code> method. It is responsible for getting all the "
-"records in the table and showing them on the <code>TextView</code> widget. "
-"Let's take a look at it:"
+"\n"
+"# a class to define a window\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
+"        self.set_default_size(200, 100)\n"
+"\n"
+"# a class to define a label\n"
+"class MyLabel(Gtk.Label):\n"
+"    def __init__(self):\n"
+"        Gtk.Label.__init__(self)\n"
+"        self.set_text(\"Hello GNOME!\")\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        # create an instance of MyWindow\n"
+"        win = MyWindow(self)\n"
+"        # create an instance of MyLabel\n"
+"        label = MyLabel()\n"
+"        # and add it to the window\n"
+"        win.add(label)\n"
+"        # show the window and everything on it\n"
+"        win.show_all()"
 msgstr ""
-"Despois de conectarse á base de datos, o construtor da nosa demostración "
-"chama ao método <code>selectData</code>. É responsábel de obter tódolos "
-"rexistros na táboa e para mostrarllas no widget <code>TextView</code>. "
-"Votémoslle unha ollada:"
 
-#: C/record-collection.js.page:229(p)
-msgid ""
-"Line 2: The <code>SELECT</code> command. We are using the global GDA's "
-"function <code>execute_select_command</code> for that. It returns a "
-"<code>DataModel</code> object, which is later used to retrieve the rows."
+#: C/label.py.page:68(section/title)
+msgid "Useful methods for a Label widget"
 msgstr ""
-"Liña 2: A orde <code>SELECT</code>. Usamos a función global de GDA "
-"<code>execute_select_command</code> para iso. Devólve un obxecto "
-"<code>DataModel</code>, que máis tarde empregaremos para obter as filas."
 
-#: C/record-collection.js.page:230(p)
+#: C/label.py.page:69(section/p) C/textview.py.page:49(section/p)
 msgid ""
-"Line 3: Create an <code>Iter</code> object, which is used to iterate over "
-"the <code>DataModel</code>'s records."
+"An explanation of how to deal with strings and Unicode (and a recap of what "
+"these things are) can be found <link xref=\"strings.py.page\">here</link>."
 msgstr ""
-"Liña 3: Crea un obxecto <code>Iter</code>, que se usa para iterar sobre os "
-"rexistros de <code>DataModel</code>."
 
-#: C/record-collection.js.page:231(p)
+#: C/label.py.page:70(section/p)
 msgid ""
-"Line 7: Loop through all the records, fetching them with the help of the "
-"<code>Iter</code> object. At this point, the <code>iter</code> variable "
-"contains the actual, retrieved data. Its <code>move_next</code> method "
-"returns <code>false</code> when it reaches the last record."
+"<code>label = Gtk.Label(label=\"Hello GNOME!\")</code> could also be used to "
+"create a label and set the text directly. For a general discussion of this, "
+"see <link xref=\"properties.py\">here</link>."
 msgstr ""
-"Liña 7: Iterar por tódolos rexistros e obtelos coa axuda do obxecto "
-"<code>Iter</code>. Neste punto a variábel <code>iter</code> contén os datos "
-"actualizados obtidos. O seu método <code>move_next</code> devolve "
-"<code>false</code> cando se chegue ao último rexistro."
-
-#: C/record-collection.js.page:233(p)
-msgid "Lines 8‒9: We do two things in each line:"
-msgstr "Liñas 8-9: fanse dúas cousas en cada liña:"
 
-#: C/record-collection.js.page:235(p)
+#: C/label.py.page:72(item/p)
 msgid ""
-"Use <code>Iter</code>'s method <code>get_value_at</code>, which requires "
-"only one argument: the column number to retrieve, starting at 0. As our "
-"<code>SELECT</code> command returns only two columns, we are retrieving "
-"columns 0 and 1."
+"<code>set_line_wrap(True)</code> breaks lines if the text of the label "
+"exceeds the size of the widget."
 msgstr ""
-"Use o método <code>get_value_at</code> de <code>Iter</code>, que só precisa "
-"un argumento: o número de columna que recuperar, comezando por 0. Xa que a "
-"orde <code>SELECT</code> só devolve dúas columnas, se está recuperando as "
-"columnas 0 e 1."
 
-#: C/record-collection.js.page:236(p)
+#: C/label.py.page:73(item/p)
 msgid ""
-"The method <code>get_value_at</code> returns the field in GLib's "
-"<code>GValue</code> format. A simple way to convert this format to a string "
-"is by using GDA's global function <code>value_stringify</code>. That's what "
-"we are doing here, and we store the results in the variables <code>id_field</"
-"code> and <code>name_field</code>."
+"<code>set_justify(Gtk.Justification.LEFT)</code> (or <code>Gtk.Justification."
+"RIGHT, Gtk.Justification.CENTER, Gtk.Justification.FILL</code>) sets the "
+"alignment of the lines in the text of the label relative to each other. The "
+"method has no effect on a single-line label."
 msgstr ""
-"O método <code>get_value_at</code> devolve o campo no formato <code>GValue</"
-"code> de GLib. Unha forma sinxela de converter este formato a unha cadea é "
-"usando a función global de GDA <code>value_stringify</code>. Que é o facemos "
-"aquí, e almacenamos os resultados nas variábeis <code>id_field</code> e "
-"<code>name_field</code>."
 
-#: C/record-collection.js.page:239(p)
+#: C/label.py.page:74(item/p)
 msgid ""
-"Line 11: Concatenate the two fields to make one text line, separated by "
-"<code>\"=&gt;\"</code>, and store it in the <code>text</code> variable."
+"For decorated text we can use <code>set_markup(\"text\")</code>, where <code>"
+"\"text\"</code> is a text in the <link href=\"http://developer.gnome.org/";
+"pango/stable/PangoMarkupFormat.html\">Pango Markup Language</link>. An "
+"example:"
 msgstr ""
-"Liña 11: Concaténanse os dous campos para facer unha única liña de texto, "
-"separada por <code>\"=&gt;\"</code>, e almacenámolas na variábel <code>text</"
-"code>."
 
-#: C/record-collection.js.page:240(p)
+#: C/label.py.page:75(item/code)
+#, no-wrap
 msgid ""
-"Line 14: After the loop is finished, we have all the records formatted in "
-"the <code>text</code> variable. In this line we just set the contents of the "
-"<code>TextView</code> with that variable."
+"\n"
+"label.set_markup(\"Text can be &lt;small&gt;small&lt;/small&gt;, &lt;big&gt;big&lt;/big&gt;, \"\n"
+"                 \"&lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt; and even point to somewhere \"\n"
+"                 \"in the &lt;a href=\\\"http://www.gtk.org\\\"; \"\n"
+"                 \"title=\\\"Click to find out more\\\"&gt;internets&lt;/a&gt;.\")"
 msgstr ""
-"Liña 14: Logo de que o bucle remate, temos tódolos rexistros formatados na "
-"variábel <code>text</code>. Nesta liña estabelecemos os contidos de "
-"<code>TextView</code> con dita variábel."
 
-#: C/record-collection.js.page:241(p)
+#: C/label.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Scale (Vala)"
+msgctxt "text"
+msgid "Label (Vala)"
+msgstr "Scale (Vala)"
+
+#: C/label.vala.page:24(page/code)
+#, no-wrap
 msgid ""
-"Line 15: Display the number of records in the table, making use of the "
-"<code>DataModel</code>'s <code>get_n_rows</code> method."
+"\n"
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"Welcome to GNOME\");\n"
+"\n"
+"\t\tvar label = new Gtk.Label (\"Hello GNOME!\");\n"
+"\n"
+"\t\tthis.add (label);\n"
+"\t\tthis.set_default_size (200, 100);\n"
+"\t\tthis.show_all ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"public class MyApplication : Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\t\tnew MyWindow (this).show ();\n"
+"\t}\n"
+"\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.MyApplication\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
-"Liña 15: mostrar o número de rexistros na táboa, usando o método "
-"<code>get_n_rows</code> de <code>DataModel</code> <code>get_n_rows</code>."
 
-#: C/record-collection.js.page:246(title)
-msgid "Inserting"
-msgstr "Insertando"
+#: C/license.page:8(info/desc)
+msgid "Legal information."
+msgstr ""
 
-#: C/record-collection.js.page:247(p)
-msgid ""
-"OK, we know how to connect to a database and how to select rows from a "
-"table. Now it's time to do an <code>INSERT</code> on the table. Do you "
-"remember above, in the method <code>setupWindow</code> we connected the "
-"<gui>Insert</gui> button's <code>clicked</code> signal to the method "
-"<code>_insertClicked</code>? Let's see the implementation of this method."
+#: C/license.page:11(page/title)
+msgid "License"
 msgstr ""
-"OK, sabemos como conectarse a unha base de datos e como seleccionar filas "
-"dunha táboa. Agora é tempo de facer un <code>INSERT</code> na táboa. Lembra "
-"arriba no método <code>setupWindow</code> que conectamos o sinal "
-"<code>clicked</code> do botón <gui>Insert</gui> ao método "
-"<code>_insertClicked</code>? Vexamos a implementación deste método."
 
-#: C/record-collection.js.page:268(p)
+#: C/license.page:12(page/p)
 msgid ""
-"We have learned how to use GDA's convenience functions "
-"<code>execute_select_command</code> and <code>execute_non_select_command</"
-"code> to quickly execute SQL commands on the database. GDA allows one to "
-"build a SQL statement indirectly, by using its <code>SqlBuilder</code> "
-"object. What are the benefits of this? GDA will generate the SQL statement "
-"dynamically, and it will be valid for the connection provider used (it will "
-"use the same SQL dialect the provider uses). Let's study the code:"
+"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
+"Unported license."
 msgstr ""
-"Aprendemos como usar as funcións de GDA de forma conveniente "
-"<code>execute_select_command</code> e <code>execute_non_select_command</"
-"code> para executar ordes SQL de forma rápida nunha base de datos. GDA "
-"permítelle construír unha declaración SQL de forma indirecta usando o seu "
-"obxecto <code>SqlBuilder</code>. Cales son os beneficios de isto? GDA xerará "
-"a declaración SQL de forma dinámica e será válida para o fornecedor de "
-"conexión usado (usarase o mesmo dialecto SQL que o fornecedor usa). "
-"Estudiemos o código:"
 
-#: C/record-collection.js.page:272(p)
-msgid ""
-"Lines 2‒3: Check if the user filled all the fields. The code for the private "
-"method <code>_validateFields</code> is really simple and you can read it in "
-"the full demo source code."
+#: C/license.page:20(page/p)
+msgid "You are free:"
 msgstr ""
-"Liña 2-3: compróbase que o usuario completa tódolos campos. O código do "
-"método privato <code>_validateFields</code> é realmente sinxelo e pode lelo "
-"no código fonte completo da demostración."
 
-#: C/record-collection.js.page:273(p)
-msgid ""
-"Line 5: The faster way of doing the <code>INSERT</code>. It's commented out "
-"as we want to show how to use the <code>SqlBuilder</code> object to build a "
-"SQL statement portable across databases."
+#: C/license.page:25(item/title)
+msgid "<em>To share</em>"
 msgstr ""
-"Liña 5: A forma máis rápida é <code>INSERT</code>. Está descomentado xa que "
-"queremos ver como usar o obxecto <code>SqlBuilder</code> para construír unha "
-"declaración SQL portábel a través das bases de datos."
 
-#: C/record-collection.js.page:274(p)
-msgid ""
-"Line 7: Create the <code>SqlBuilder</code> object. We must pass the type of "
-"statement we are going to build. It can be <code>SELECT</code>, "
-"<code>UPDATE</code>, <code>INSERT</code> or <code>DELETE</code>."
+#: C/license.page:26(item/p)
+msgid "To copy, distribute and transmit the work."
 msgstr ""
-"Liña 7: crea o obxecto <code>SqlBilder</code>. Debemos pasar o tipo de "
-"declaración que queremos construír. Pode ser <code>SELECT</code>, "
-"<code>UPDATE</code>, <code>INSERT</code> ou <code>DELETE</code>."
 
-#: C/record-collection.js.page:275(p)
-msgid ""
-"Line 8: Set the name of the table on which the built statement will operate "
-"(it will generate <code>INSERT INTO demo</code>)"
+#: C/license.page:29(item/title)
+msgid "<em>To remix</em>"
 msgstr ""
-"Liña 8: estabelecer o nome da base de datos na que operará a sentencia "
-"construída (xerará <code>INSERT INTO demo</code>)"
 
-#: C/record-collection.js.page:276(p)
-msgid ""
-"Lines 9‒10: Set the fields and its values that will be part of the "
-"statement. The first argument is the field name (as in the table). The "
-"second one is the value for that field."
+#: C/license.page:30(item/p)
+msgid "To adapt the work."
 msgstr ""
-"Liñas 9-10: estabelecer os campos que formarán parte da sentenza e os seus "
-"valores. O primeiro campo é o nome do campo (como aparece na táboa). O "
-"segundo é o valor deste campo."
 
-#: C/record-collection.js.page:277(p)
+#: C/license.page:33(page/p)
+#, fuzzy
+#| msgid "The code has the following purpose:"
+msgid "Under the following conditions:"
+msgstr "O código ten o seguinte propósito:"
+
+#: C/license.page:38(item/title)
+#, fuzzy
+#| msgid "Introduction"
+msgid "<em>Attribution</em>"
+msgstr "Introdución"
+
+#: C/license.page:39(item/p)
 msgid ""
-"Line 11: Get the dynamically generated <code>Statement</code> object, which "
-"represents a SQL statement."
+"You must attribute the work in the manner specified by the author or "
+"licensor (but not in any way that suggests that they endorse you or your use "
+"of the work)."
 msgstr ""
-"Liña 11: obter o obxecto <code>Statement</code> xerado dinamicamente, que "
-"representa unha sentenza SQL."
 
-#: C/record-collection.js.page:278(p)
-msgid "Line 12: Finally, execute the SQL statement (<code>INSERT</code>)."
-msgstr "Liña 12: finalmente, executar a sentenza SQL (<code>INSERT</code>)."
+#: C/license.page:46(item/title)
+msgid "<em>Share Alike</em>"
+msgstr ""
 
-#: C/record-collection.js.page:279(p)
+#: C/license.page:47(item/p)
 msgid ""
-"Line 14: Clear the id and name fields on the screen. The code for the "
-"private method <code>_clearFields</code> is really simple and you can read "
-"it in the full demo source code."
+"If you alter, transform, or build upon this work, you may distribute the "
+"resulting work only under the same, similar or a compatible license."
 msgstr ""
-"Liña 14: limpar os campos id e nome na pantalla. O código do método privado "
-"<code>_clearFields</code> é moi sinxelo e pode lelo no código fonte completo "
-"da demostración."
 
-#: C/record-collection.js.page:280(p)
+#: C/license.page:53(page/p)
 msgid ""
-"Line 15: Refresh the view on the screen by doing another <code>SELECT</code>."
+"For the full text of the license, see the <link href=\"http://";
+"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
+"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-";
+"sa/3.0/\">Commons Deed</link>."
 msgstr ""
-"Liña 15: actualizar a vista na pantalla facendo outro <code>SELECT</code>."
 
-#: C/record-collection.js.page:282(p)
+#: C/license.page:60(note/p)
 msgid ""
-"You can also make use of parameters while building the statement. By using "
-"the <code>SqlBuilder</code> objects and parameters you are less subject to "
-"attacks like SQL injection. Check the <link href=\"http://library.gnome.org/";
-"devel/libgda/stable/\">GDA documentation</link> for more information about "
-"parameters."
+"As a special exception, the copyright holders give you permission to copy, "
+"modify, and distribute the example code contained in this documentation "
+"under the terms of your choosing, without restriction."
 msgstr ""
-"Tamén pode usar parámetros mentres constrúe a sentenza. Usando obxectos e "
-"parámetros <code>SqlBuilder</code> será menos susceptíbel a ataques de "
-"inxección de SQL. Para obter información adicional sobre os parámetros, "
-"consulte a <link href=\"http://library.gnome.org/devel/libgda/stable/";
-"\">documentación de GDA</link>."
 
-#: C/record-collection.js.page:286(title) C/image-viewer.py.page:220(title)
-#: C/image-viewer.js.page:306(title) C/guitar-tuner.py.page:224(title)
-msgid "Run the application"
-msgstr "Executar o aplicativo"
-
-#: C/record-collection.js.page:287(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/linkbutton.c.page:22(media) C/linkbutton.js.page:21(media)
+#: C/linkbutton.py.page:23(media) C/linkbutton.vala.page:21(media)
+#, fuzzy
+#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
+msgctxt "_"
 msgid ""
-"All of the code you need should now be in place, so try running the code. "
-"You now have a database for your record collection!"
-msgstr ""
-"Todo o código que precisa agora está no seu lugar, polo que tente executar o "
-"código. Agora ten unha base de datos para a súa colección de rexistros!"
+"external ref='media/linkbutton.png' md5='3712eae8953e87c65a6aa74503b8e32b'"
+msgstr "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
 
-#: C/record-collection.js.page:291(title) C/photo-wall.c.page:379(title)
-#: C/magic-mirror.vala.page:144(title) C/image-viewer.vala.page:282(title)
-#: C/image-viewer.py.page:225(title) C/image-viewer.js.page:311(title)
-#: C/image-viewer.cpp.page:210(title) C/image-viewer.c.page:222(title)
-#: C/guitar-tuner.vala.page:253(title) C/guitar-tuner.py.page:229(title)
-#: C/guitar-tuner.js.page:234(title) C/guitar-tuner.cpp.page:255(title)
-#: C/guitar-tuner.c.page:257(title)
-msgid "Reference Implementation"
-msgstr "Implementación de referencia"
+#: C/linkbutton.c.page:7(info/title)
+#, fuzzy
+#| msgid "Button"
+msgctxt "text"
+msgid "LinkButton (C)"
+msgstr "Botón"
 
-#: C/record-collection.js.page:292(p)
-msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"record-collection/record-collection.js\">reference code</link>."
+#: C/linkbutton.c.page:17(info/desc) C/linkbutton.vala.page:17(info/desc)
+msgid "Create buttons bound to a URL"
 msgstr ""
-"Se ten problemas co titorial, compare o seu código con este <link href="
-"\"record-collection/record-collection.js\">código de referencia</link>."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/radiobutton.vala.page:24(None) C/radiobutton.py.page:25(None)
-#: C/radiobutton.c.page:24(None)
-#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
-msgid "@@image: 'media/radiobutton.png'; md5=d115460280d8e41493dd98054b5822a5"
-msgstr "@@image: 'media/radiobutton.png'; md5=d115460280d8e41493dd98054b5822a5"
+#: C/linkbutton.c.page:20(page/title) C/linkbutton.js.page:20(page/title)
+#: C/linkbutton.py.page:21(page/title) C/linkbutton.vala.page:20(page/title)
+#, fuzzy
+#| msgid "Button"
+msgid "LinkButton"
+msgstr "Botón"
 
-#: C/radiobutton.vala.page:7(title)
-msgid "RadioButton (Vala)"
-msgstr "RadioButton (Vala)"
+#: C/linkbutton.c.page:23(page/p)
+msgid "This button links to the GNOME live webpage."
+msgstr ""
 
-#: C/radiobutton.vala.page:20(desc)
-msgid "A choice from multiple CheckButtons."
+#: C/linkbutton.c.page:25(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *linkbutton;\n"
+"\n"
+"  window = gtk_application_window_new (app);\n"
+"\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"GNOME LinkButton\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 250, 50);\n"
+"\n"
+"  linkbutton = gtk_link_button_new (\"Link to GNOME live!\");\n"
+"  gtk_link_button_set_uri (GTK_LINK_BUTTON(linkbutton), \"http://live.gnome.org\";);\n"
+"\n"
+"  gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (linkbutton));\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
 msgstr ""
 
-#: C/radiobutton.vala.page:23(title) C/radiobutton.py.page:24(title)
-#: C/radiobutton.js.page:20(title) C/radiobutton.c.page:22(title)
-#| msgid "Button"
-msgid "RadioButton"
-msgstr "RadioButton"
-
-#: C/radiobutton.vala.page:25(p)
-msgid "These RadioButtons report their activity in the terminal."
+#: C/linkbutton.c.page:33(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkLinkButton.html";
+"\">GtkLinkButton</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/radiobutton.py.page:7(title)
-msgid "RadioButton (Python)"
-msgstr "RadioButton (Python)"
-
-#: C/radiobutton.py.page:21(desc)
-msgid "Mutually exclusive buttons."
-msgstr "Botóns mutuamente exclusivos."
+#: C/linkbutton.js.page:7(info/title)
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "LinkButton (JavaScript)"
+msgstr "JavaScript"
 
-#: C/radiobutton.py.page:26(p)
-msgid ""
-"Three RadioButtons. You can see in the terminal if they are turned off or on."
+#: C/linkbutton.js.page:17(info/desc)
+msgid "A button that links to a web page"
 msgstr ""
 
-#: C/radiobutton.py.page:36(title)
-msgid "Useful methods for a RadioButton widget"
-msgstr "Métodos útiles para o widget RadioButton"
-
-#: C/radiobutton.py.page:39(p)
-msgid ""
-"Instead of <code>button1 = Gtk.RadioButton(label=\"Button 1\")</code> we "
-"could create the button and label it with"
+#: C/linkbutton.js.page:22(page/p)
+msgid "A button that links to live.gnome.org."
 msgstr ""
 
-#: C/radiobutton.py.page:40(code)
+#: C/linkbutton.js.page:24(page/code)
 #, no-wrap
 msgid ""
+"#!/usr/bin/gjs\n"
 "\n"
-"button1 = Gtk.RadioButton()\n"
-"button1.set_label(\"Button 1\")."
-msgstr ""
-
-#: C/radiobutton.py.page:43(p)
-msgid ""
-"For a general discussion of this, see <link xref=\"properties.py\">here</"
-"link>."
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const LinkButtonExample = new Lang.Class ({\n"
+"    Name: 'LinkButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"        _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"              application_id: 'org.example.jslinkbutton',\n"
+"              flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"         });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"    this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                 window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                 title: \"GNOME LinkButton\",\n"
+"                                                 default_height: 50,\n"
+"                                                 default_width: 250 });\n"
+"\n"
+"        // Create the LinkButton and have it link to live.gnome.org\n"
+"        this.LinkButton = new Gtk.LinkButton ({label: \"Link to GNOME live!\",\n"
+"                               uri: \"http://live.gnome.org\"});\n"
+"        this._window.add (this.LinkButton);\n"
+"\n"
+"    // Show the window and all child widgets\n"
+"    this._window.show_all();\n"
+"    },\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new LinkButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/radiobutton.py.page:44(p)
+#: C/linkbutton.js.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Yet another way to create a new RadioButton with a label is <code>button1 = "
-"Gtk.RadioButton.new_with_label(None, \"Button 1\")</code> (the first "
-"arguement is the group of the radiobuttons, which we can get with "
-"<code>get_group()</code>, the second argument is the label)."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.LinkButton.";
+"html\">Gtk.LinkButton</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/radiobutton.py.page:53(link)
-#| msgid "Gtk.ButtonsType"
-msgid "GtkRadioButton"
-msgstr "GtkRadioButton"
+#: C/linkbutton.py.page:7(info/title)
+#, fuzzy
+#| msgid "SpinButton (Python)"
+msgctxt "text"
+msgid "LinkButton (Python)"
+msgstr "SpinButton (Python)"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/radiobutton.js.page:21(None)
-#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
-msgid ""
-"@@image: 'media/radiobuttontravel.png'; md5=0c5f01ee160bb42716ccf5dccbd080c0"
+#: C/linkbutton.py.page:18(info/desc)
+msgid "A button bound to an URL"
 msgstr ""
-"@@image: 'media/radiobuttontravel.png'; md5=0c5f01ee160bb42716ccf5dccbd080c0"
-
-#: C/radiobutton.js.page:7(title)
-#| msgid "Classes in JavaScript"
-msgid "RadioButton (JavaScript)"
-msgstr "RadioButton (JavaScript)"
 
-#: C/radiobutton.js.page:17(desc)
-msgid "Only one can be selected at a time"
+#: C/linkbutton.py.page:24(page/p)
+msgid "A button that links to a web page."
 msgstr ""
 
-#: C/radiobutton.js.page:22(p)
+#: C/linkbutton.py.page:31(section/code)
+#, no-wrap
 msgid ""
-"RadioButtons are named after old-style car radios, which had buttons for "
-"switching between channel presets. Because the radio could only be tuned to "
-"one station at a time, only one button could be pressed in at a time; if you "
-"pressed a new one, the one that was already pressed in would pop back out. "
-"That's how these buttons work, too."
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"GNOME LinkButton\", application=app)\n"
+"        self.set_default_size(250, 50)\n"
+"\n"
+"        # a linkbutton pointing to the given URI\n"
+"        button = Gtk.LinkButton(uri=\"http://live.gnome.org\";)\n"
+"        # with given text\n"
+"        button.set_label(\"Link to GNOME live!\")\n"
+"\n"
+"        # add the button to the window\n"
+"        self.add(button)\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup (self):\n"
+"        Gtk.Application.do_startup (self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/radiobutton.js.page:23(p)
-msgid ""
-"Each RadioButton needs a text label and a group. Only one button in a group "
-"can be selected at a time. You don't name each group; you just set new "
-"RadioButtons to be part of the same group as an existing one. If you create "
-"a new one outside of a group, it automatically creates a new group for it to "
-"be part of."
+#: C/linkbutton.py.page:35(section/title)
+msgid "Useful methods for a LinkButton widget"
 msgstr ""
 
-#: C/radiobutton.js.page:82(title)
-#| msgid "Creating the user interface"
-msgid "Creating the radiobuttons"
-msgstr "Crear os radiobuttons"
-
-#: C/radiobutton.js.page:88(p)
+#: C/linkbutton.py.page:37(item/p)
 msgid ""
-"We use a <link xref=\"label.js\">Gtk.Label</link> to set each group of "
-"RadioButtons apart. Nothing will stop you from putting RadioButtons from all "
-"different groups wherever you want, so if you want people to know which ones "
-"go together you need to organize things accordingly."
+"<code>get_visited()</code> returns the 'visited' state (<code>True</code> or "
+"<code>False</code>) of the URI where the LinkButton points. The button "
+"becomes visited when it is clicked."
 msgstr ""
 
-#: C/radiobutton.js.page:101(p)
+#: C/linkbutton.py.page:38(item/p)
 msgid ""
-"Here are three different ways to create RadioButtons. The first is the usual "
-"way, where we create a new Gtk.RadioButton and assign its properties at the "
-"same time. The second and third use functions which automatically handle "
-"some of the properties; new_from_widget takes a single argument, the "
-"RadioButton that you want to put this new one in the same group as. "
-"Meanwhile, new_with_label_from_widget takes that and the RadioButton's label "
-"at the same time."
+"<code>set_visited(True)</code> sets the 'visited' state of the URI where the "
+"LinkButton points as <code>True</code> (analogously for <code>False</code>)."
 msgstr ""
 
-#: C/radiobutton.js.page:102(p)
+#: C/linkbutton.py.page:39(item/p)
 msgid ""
-"The first RadioButton in a group is the one that's selected by default. Try "
-"uncommenting the last line in this sample code to see how you can set a "
-"different one to be the default selection."
+"Each time the button is clicked, the signal <code>\"activate-link\"</code> "
+"is emitted. For an explanation of signals and callback functions, see <link "
+"xref=\"signals-callbacks.py\">this page</link>."
 msgstr ""
 
-#: C/radiobutton.js.page:113(p)
+#: C/linkbutton.py.page:47(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Here we create the label for the second group of buttons, and then create "
-"them all the same way."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkLinkButton.html";
+"\">GtkLinkButton</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/radiobutton.js.page:129(p)
-msgid ""
-"This code creates a <link xref=\"button.js\">Gtk.Button</link> and binds it "
-"to a function which will show people a silly message when they click OK, "
-"depending on which RadioButtons were selected."
-msgstr ""
+#: C/linkbutton.vala.page:7(info/title)
+#, fuzzy
+#| msgid "SpinButton (Vala)"
+msgctxt "text"
+msgid "LinkButton (Vala)"
+msgstr "SpinButton (Vala)"
 
-#: C/radiobutton.js.page:130(p)
-msgid ""
-"To make sure the button's \"OK\" label shows up properly in every language "
-"that GNOME is translated into, remember to use one of Gtk's <link href="
-"\"http://developer.gnome.org/gtk/2.24/gtk-Stock-Items.html\";>stock button "
-"types.</link>"
+#: C/linkbutton.vala.page:22(page/p)
+msgid "This button links to GNOME live."
 msgstr ""
 
-#: C/radiobutton.js.page:166(p)
+#: C/linkbutton.vala.page:24(page/code)
+#, no-wrap
 msgid ""
-"We use a separate <link xref=\"grid.js\">Gtk.Grid</link> to organize each "
-"group of radio buttons. This way we can change the layout with less fuss "
-"later on. The second Grid has a margin on top, to visually separate the two "
-"sets of choices."
+"/* This is the application. */\n"
+"public class MyApplication : Gtk.Application {\n"
+"\t/* Override the 'activate' signal of GLib.Application. */\n"
+"\tprotected override void activate () {\n"
+"\n"
+"\t\t/* Create the window of this application and child widget and show all the things. */\n"
+"\t\tvar window = new Gtk.ApplicationWindow (this);\n"
+"\t\twindow.set_default_size (250, 50);\n"
+"\t\twindow.title = \"GNOME LinkButton\";\n"
+"\n"
+"\t\tvar linkbutton = new Gtk.LinkButton.with_label (\"http://live.gnome.org\";, \"Link to GNOME live!\");\n"
+"\n"
+"\t\twindow.add (linkbutton);\n"
+"\t\twindow.show_all ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main creates and runs the application. */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/radiobutton.js.page:167(p)
+#: C/linkbutton.vala.page:29(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"After we've organized them, we put them into a third, master Grid, along "
-"with the OK button. Then we attach that to the window."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.LinkButton.html\";>Gtk."
+"LinkButton</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/radiobutton.js.page:175(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/magic-mirror.vala.page:41(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/magic-mirror.png'; md5=8171faea6ed3b6ddac0da084c29e4e22"
+msgctxt "_"
 msgid ""
-"Finally, we tell the window and everything inside it to become visible when "
-"the application is run."
+"external ref='media/magic-mirror.png' md5='8171faea6ed3b6ddac0da084c29e4e22'"
 msgstr ""
+"@@image: 'media/magic-mirror.png'; md5=8171faea6ed3b6ddac0da084c29e4e22"
 
-#: C/radiobutton.js.page:180(title) C/combobox.js.page:169(title)
-#: C/comboboxtext.js.page:112(title)
-msgid "Function which handles your selection"
-msgstr ""
+#: C/magic-mirror.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Magic Mirror"
+msgctxt "text"
+msgid "Magic Mirror (Vala)"
+msgstr "Espello máxico"
 
-#: C/radiobutton.js.page:200(p)
-msgid ""
-"When you click OK, a <link xref=\"messagedialog.js\">Gtk.MessageDialog</"
-"link> appears. This function creates and displays the popup window, then "
-"binds its OK button to a function that closes it. What text appears in the "
-"popup depends on the _messageText() function, which returns a different "
-"value depending on which set of options you chose."
+#: C/magic-mirror.vala.page:10(info/desc)
+msgid "Use your webcam as a mirror using the GStreamer framework and Gtk+"
 msgstr ""
+"Use a súa cámara web como un espello usando o marco de traballo GStreamer e "
+"GTK+"
+
+#: C/magic-mirror.vala.page:14(credit/name)
+msgid "Daniel G. Siegel"
+msgstr "Daniel G. Siegel"
+
+#: C/magic-mirror.vala.page:23(page/title)
+#, fuzzy
+#| msgid "Magic Mirror"
+msgid "4 Magic Mirror"
+msgstr "Espello máxico"
 
-#: C/radiobutton.js.page:246(p)
+#: C/magic-mirror.vala.page:26(synopsis/p)
 msgid ""
-"The get_active() method is how we can tell which RadioButton's pressed in. "
-"This function returns a different silly message depending on which set of "
-"buttons was pressed. Its return value is used as the MessageDialog's text "
-"property."
+"<em>Your mirror just fell off the wall and broke into a thousand pieces — "
+"but you need a mirror to shave your beard off or add some makeup! You only "
+"have 15 minutes left before catching the bus to work. So what can you do?</"
+"em>"
 msgstr ""
 
-#: C/radiobutton.js.page:257(p)
+#: C/magic-mirror.vala.page:27(synopsis/p)
 msgid ""
-"This function is called when the MessageDialog's OK button is pressed. It "
-"simply makes the popup go away."
+"In this tutorial, we're going to make a program which lets you use your "
+"webcam as a mirror. You will learn how to:"
 msgstr ""
 
-#: C/radiobutton.c.page:7(title)
-msgid "RadioButton (C)"
-msgstr ""
+#: C/magic-mirror.vala.page:29(item/p)
+msgid "Create a GTK+ application"
+msgstr "Crear un apliativo GTK+"
 
-#: C/radiobutton.c.page:19(desc)
-msgid "A choice from multiple checkbuttons"
+#: C/magic-mirror.vala.page:30(item/p)
+msgid "Access your webcam using GStreamer and embed the result into a window"
 msgstr ""
+"Acceda á súa cámara web usando GStreamer e incruste o resultado nunha xanela"
 
-#: C/radiobutton.c.page:25(p)
-msgid "These radiobuttons report their activity in the terminal."
-msgstr ""
+#: C/magic-mirror.vala.page:31(item/p)
+msgid "Grab photos off your webcam"
+msgstr "Obter as fotos da śua cámara web"
 
-#: C/py.page:6(title)
-msgid "Python"
-msgstr "Python"
+#: C/magic-mirror.vala.page:36(item/p)
+msgid "Installed copies of GTK, GStreamer, and a Vala compiler"
+msgstr "Copias instaladas de GTK, GStreamer e compilador de Vala"
 
-#: C/py.page:15(title)
-msgid "Tutorials, code samples and platform demos in Python"
+#: C/magic-mirror.vala.page:37(item/p)
+msgid "Basic knowledge of an object-oriented programming language"
+msgstr "Coñecemento básico dun linguaxe de programación orientado a obxectos"
+
+#: C/magic-mirror.vala.page:51(item/p)
+msgid ""
+"Choose <gui>Gtk+ (simple)</gui> from the <gui>Vala</gui> tab, click "
+"<gui>Forward</gui>, and fill out your details on the next few pages. Use "
+"<file>guitar-tuner</file> as project name and directory."
 msgstr ""
 
-#: C/properties.py.page:8(title)
-msgid "Properties (Python)"
+#: C/magic-mirror.vala.page:54(item/p)
+msgid ""
+"Disable <gui>Use GtkBuilder for user interface</gui> as we will create the "
+"UI manually in this tutorial. Check the <link xref=\"guitar-tuner.vala"
+"\">Guitar-Tuner</link> tutorial using the interface builder."
 msgstr ""
 
-#: C/properties.py.page:12(desc)
-msgid "An explanation of properties, getters and setters."
+#: C/magic-mirror.vala.page:59(item/p)
+msgid ""
+"Make sure that <gui>Configure external packages</gui> is selected. On the "
+"next page, select <em>gstreamer-0.10</em> from the list to include the "
+"<app>GStreamer</app> library into your project."
 msgstr ""
 
-#: C/properties.py.page:25(title)
-msgid "Properties"
+#: C/magic-mirror.vala.page:63(item/p)
+msgid ""
+"Click <gui>Apply</gui> and the project will be created for you. Open "
+"<file>src/magic_mirror.vala</file> from the <gui>Project</gui> or <gui>File</"
+"gui> tabs. You should see some code which starts with the lines:"
 msgstr ""
 
-#: C/properties.py.page:32(p)
+#: C/magic-mirror.vala.page:73(section/p)
 msgid ""
-"<em>Properties</em> describe the configuration and state of widgets, and "
-"each widget has its own particular set of properties. For example, a widget "
-"such as a button or a label has the property \"label\" which contains the "
-"text of the widget. You can specify the name and value of any number of "
-"properties as keyword arguments when creating an instance of a widget: for "
-"example, to create a label aligned to the right with the text “Hello World” "
-"and an angle of 25 degrees, you can use:"
+"The code loads an (empty) window and shows it. More details are given below; "
+"skip this list if you understand the basics:"
 msgstr ""
 
-#: C/properties.py.page:33(code)
-#, no-wrap
+#: C/magic-mirror.vala.page:79(item/p)
 msgid ""
-"\n"
-"label = Gtk.Label(label=\"Hello World\", angle=25, halign=Gtk.Align.END)"
+"The constructor of the <code>Main</code> class creates a new window and sets "
+"its title. Afterwards the window is shown and a signal is connected which "
+"quits the application if the window is closed. More on signals later on."
 msgstr ""
-"\n"
-"label = Gtk.Label(label=\"Hola mundo\", angle=25, halign=Gtk.Align.END)"
 
-#: C/properties.py.page:36(p)
-msgid "This is equivalent to:"
-msgstr "Isto é equivalente a:"
+#: C/magic-mirror.vala.page:83(item/p)
+msgid ""
+"The static <code>main</code> function is run by default when you start a "
+"Vala application. It calls a few functions which create the Main class, set "
+"up and then run the application. The <code>Gtk.Main</code> function starts "
+"the GTK main loop, which runs the user interface and starts listening for "
+"events (like clicks and key presses)."
+msgstr ""
+
+#: C/magic-mirror.vala.page:92(section/title)
+msgid "Access the webcam video stream with GStreamer"
+msgstr "Acceder ao fluxo de vídeo de cámara web con GStreamer"
+
+#: C/magic-mirror.vala.page:93(section/p)
+msgid ""
+"The GStreamer multimedia framework is able to handle video from webcams. "
+"Let's add GStreamer to our application and so we can access the video stream."
+msgstr ""
+"O contorno multimedia de traballo de GStreamer é capaz de manexar vídeo "
+"desde cámara web. Engada GStreamer ao seu aplicativo e poderá acceder ao "
+"fluxo de vídeo."
 
-#: C/properties.py.page:37(code)
+#: C/magic-mirror.vala.page:95(section/code)
 #, no-wrap
 msgid ""
 "\n"
-"label = Gtk.Label()\n"
-"label.set_label(\"Hello World\")\n"
-"label.set_angle(25)\n"
-"label.set_halign(Gtk.Align.END)"
-msgstr ""
+"using GLib;\n"
+"using Gtk;\n"
 "\n"
-"label = Gtk.Label()\n"
-"label.set_label(\"Hola Mundo\")\n"
-"label.set_angle(25)\n"
-"label.set_halign(Gtk.Align.END)"
+"public class Main : Object\n"
+"{\n"
+"\tprivate Gst.Element camerabin;\n"
+"\n"
+"\tpublic Main () {\n"
+"\t\tthis.camerabin = Gst.ElementFactory.make (\"camerabin\", \"camera\");\n"
+"\t\tthis.camerabin.set_state (Gst.State.PLAYING);\n"
+"\t}\n"
+"\n"
+"\tstatic int main (string[] args) {\n"
+"\t\tGtk.init (ref args);\n"
+"\t\tGst.init (ref args);\n"
+"\t\tvar app = new Main ();\n"
+"\n"
+"\t\tGtk.main ();\n"
+"\n"
+"\t\treturn 0;\n"
+"\t}\n"
+"}\n"
+msgstr ""
 
-#: C/properties.py.page:43(p)
+#: C/magic-mirror.vala.page:120(item/p)
 msgid ""
-"Once you have created such a label, you can get the text with the getter "
-"<code>label.get_label()</code>."
+"First we remove the window we created before because GStreamer will take "
+"care of showing the picture on screen."
 msgstr ""
+"Primeiro quítase a xanela creada anteriormente, xa que GStreamer encargarase "
+"de mostrar a imaxe na pantalla."
 
-#: C/properties.py.page:45(p)
+#: C/magic-mirror.vala.page:124(item/p)
 msgid ""
-"Instead of using getters and setters you can also get and set the properties "
-"with <code>get_property(\"prop-name\")</code> and <code>set_property(\"prop-"
-"name\", value)</code>, respectively."
+"Now we are creating a GStreamer element which accesses our webcam. We are "
+"using the Camerabin element, which is an all-in-one camera element and is "
+"capable of taking photos, videos, applying effects and much more. Perfect "
+"for our use case! With <code>this.camerabin.set_state (Gst.State.PLAYING)</"
+"code> we tell the GStreamer pipeline we just created to start playing. Easy, "
+"no?"
 msgstr ""
+"Agora vaise crear un elemento de GStreamer que accede á cámara web. Vaise a "
+"usar o elemento «Camerabin», que é un elemento de cámara todo en un capaz de "
+"facer fotos, vídeos, aplicar efectos e moito máis. Perfecto para o noso caso "
+"de uso. Con <code>this.camerabin.set_state (Gst.State.PLAYING)</code> "
+"indícase á túbería de GStreamer que se acaba de crear que empece a "
+"reproducir. Sinxelo, non?"
 
-#: C/properties.py.page:51(p)
+#: C/magic-mirror.vala.page:131(item/p)
 msgid ""
-"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.";
-"html\">Basics - Properties</link> in Python Gtk+ 3 Tutorial"
+"Of course it is also possible to integrate the video more tighly into other "
+"windows but that is an advanced topic that includes some details of the X "
+"Window System we will omit here."
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/progressbar.vala.page:21(None) C/progressbar.c.page:23(None)
+#: C/magic-mirror.vala.page:135(item/p)
 msgid ""
-"@@image: 'media/progressbar_fill.ogv'; md5=287763d1d3f4a328212ea2243910f5e4"
+"Compile and run it again. You will end up with two windows. In the next step "
+"we will integrate the video into the GTK+ window."
 msgstr ""
-"@@image: 'media/progressbar_fill.ogv'; md5=287763d1d3f4a328212ea2243910f5e4"
 
-#: C/progressbar.vala.page:7(title)
-msgid "ProgressBar (Vala)"
+#: C/magic-mirror.vala.page:145(section/p)
+msgid ""
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"magic-mirror/magic-mirror.vala\">reference code</link>. There "
+"is also a more <link href=\"magic-mirror/magic-mirror-advanced.vala"
+"\">extensive implementation</link> that embeds the window into a regular Gtk."
+"Window which involves some advanced techniques, and adds buttons to start/"
+"stop the picture."
 msgstr ""
+"Se ten problemas con este titorial, compare o seu código con este <link href="
+"\"magic-mirror/magic-mirror.vala\">código de referencia</link>. Tamén hai "
+"unha <link href=\"magic-mirror/magic-mirror-advanced.vala\">implementación "
+"máis ampla</link> que incrusta a xanela nunha xanela GTK regular que implica "
+"algunhas técnicas avanzadas, e engade botóns para iniciar/deter a imaxe."
 
-#: C/progressbar.vala.page:17(desc) C/progressbar.c.page:18(desc)
-msgid "A widget which indicates progress visually"
+#: C/magic-mirror.vala.page:152(section/p)
+msgid ""
+"To find out more about the Vala programming language you might want to check "
+"out the <link href=\"http://live.gnome.org/Vala/Tutorial\";>Vala Tutorial</"
+"link>."
 msgstr ""
+"Para atopar máis información sobre a linguaxe de programación Vala pode "
+"visitar <link href=\"http://live.gnome.org/Vala/Tutorial\";>o titorial de "
+"Vala</link>."
 
-#: C/progressbar.vala.page:20(title) C/progressbar.py.page:20(title)
-#: C/progressbar.js.page:19(title) C/progressbar.c.page:21(title)
-msgid "ProgressBar"
-msgstr "ProgressBar"
+#: C/magic-mirror.vala.page:157(section/title)
+msgid "Conclusion"
+msgstr "Conclusión"
 
-#: C/progressbar.vala.page:22(p) C/progressbar.c.page:24(p)
+#: C/magic-mirror.vala.page:158(section/p)
 msgid ""
-"This ProgressBar \"fills in\" by a fraction of the bar until it is full."
+"That's it, you have managed to create a full-featured webcam photo "
+"application in 15 minutes. Now you can shave your beard off or add some "
+"makeup to your beautiful face, right before having a beautiful day at your "
+"workplace, where you can impress your friends and colleagues with an awesome "
+"application you just made in 15 minutes."
 msgstr ""
+"Isto é todo, acaba de crear un aplicativo completo para sacar fotos coa "
+"cámara web en menos de 15 minutos. Agora xa pode afeitar a barba, "
+"maquillarse un pouco e ordenar o seu espazo de traballo para impresionar aos "
+"seus amigos e colegas con un aplicativo feito en 15 minutos."
 
-#: C/progressbar.vala.page:29(link) C/progressbar.js.page:41(link)
-#: C/grid.js.page:37(link)
-msgid "Gtk.ProgressBar"
-msgstr "Gtk.ProgressBar"
-
-#: C/progressbar.vala.page:30(link)
-msgid "GLib.Timeout"
-msgstr "GLib.Timeout"
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/menubar.py.page:28(media) C/menubar.vala.page:23(media)
+#, fuzzy
+#| msgid "@@image: 'media/ubuntu.png'; md5=40845e4a40b335b1958da1403f01c13f"
+msgctxt "_"
+msgid "external ref='media/menubar.png' md5='7b642aaa1628d5e43ab85ac230ac1c78'"
+msgstr "@@image: 'media/ubuntu.png'; md5=40845e4a40b335b1958da1403f01c13f"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/progressbar.py.page:21(None) C/progressbar.js.page:20(None)
-#| msgid ""
-#| "@@image: 'media/message-board.ogv'; md5=beb80c4538776dc2cdd26c95abea5027"
-msgid "@@image: 'media/progressbar.ogv'; md5=36deab3dd4b5be968828fa2ef416d612"
-msgstr "@@image: 'media/progressbar.ogv'; md5=36deab3dd4b5be968828fa2ef416d612"
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/menubar.py.page:129(media) C/menubar.vala.page:133(media)
+#, fuzzy
+#| msgid "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
+msgctxt "_"
+msgid ""
+"external ref='media/menubar_choices.png' "
+"md5='47cdfa12caf85ba20dd3e835bd7f893f'"
+msgstr "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
 
-#: C/progressbar.py.page:7(title)
-msgid "ProgressBar (Python)"
-msgstr "ProgressBar (Python)"
+#: C/menubar.py.page:7(info/title)
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "MenuBar (Python)"
+msgstr "Python"
 
-#: C/progressbar.py.page:17(desc)
-msgid "A widget which indicates progress visually."
+#: C/menubar.py.page:24(info/desc) C/menubar.vala.page:19(info/desc)
+msgid "A widget which holds GtkMenuItem widgets"
 msgstr ""
 
-#: C/progressbar.py.page:25(p) C/progressbar.js.page:24(p)
-msgid "Pressing any key stops and starts this ProgressBar."
+#: C/menubar.py.page:27(page/title) C/menubar.vala.page:22(page/title)
+msgid "MenuBar"
 msgstr ""
 
-#: C/progressbar.py.page:32(p) C/progressbar.js.page:31(p)
-msgid "This ProgressBar is stopped and started by pressing any key."
+#: C/menubar.py.page:29(page/p) C/menubar.vala.page:24(page/p)
+msgid "A MenuBar created using XML and GtkBuilder."
 msgstr ""
 
-#: C/progressbar.py.page:44(title)
-msgid "Useful methods for a ProgressBar widget"
+#: C/menubar.py.page:33(section/title) C/menubar.vala.page:28(section/title)
+msgid "Create a MenuBar using XML"
 msgstr ""
 
-#: C/progressbar.py.page:46(p)
-msgid ""
-"Instead of <code>pulse()</code>, that makes the bar go back and forth, if we "
-"want the ProgressBar to \"fill in\" a fraction (a <code>float</code> between "
-"<code>0.0</code> and <code>1.0</code> included) of the bar that has been "
-"completed, use <code>set_fraction(fraction)</code>."
+#: C/menubar.py.page:34(section/p) C/menubar.vala.page:29(section/p)
+msgid "To create the menubar using XML:"
 msgstr ""
 
-#: C/progressbar.py.page:47(p)
-msgid ""
-"To set a text and show it (superimposed over the bar) use <code>set_text"
-"(\"some text\")</code> and <code>set_show_text(True)</code>. If a text is "
-"not set and <code>set_show_text(True)</code> the text will be the percentage "
-"of the work that has been completed."
+#: C/menubar.py.page:36(item/p) C/menubar.vala.page:31(item/p)
+msgid "Create <file>menubar.ui</file> using your favorite text editor."
 msgstr ""
 
-#: C/progressbar.py.page:55(link) C/progressbar.c.page:34(link)
-#: C/grid.c.page:33(link)
-msgid "GtkProgressBar"
-msgstr "GtkProgressBar"
-
-#: C/progressbar.py.page:56(link)
-msgid "GLib - The Main Event Loop"
-msgstr "Glib - O búcle de eventos principal"
-
-#: C/progressbar.js.page:6(title)
-msgid "ProgressBar (JavaScript)"
-msgstr "ProgressBar (JavaScript)"
-
-#: C/progressbar.js.page:16(desc)
-msgid "A bar which animates to indicate progress"
+#: C/menubar.py.page:37(item/p) C/menubar.vala.page:32(item/p)
+msgid "Enter the following line at the top of the file:"
 msgstr ""
 
-#: C/progressbar.js.page:38(link)
-msgid "GLib"
-msgstr "GLib"
-
-#: C/progressbar.c.page:7(title)
-msgid "ProgressBar (C)"
-msgstr "ProgressBar (C)"
-
-#: C/progressbar.c.page:35(link)
-msgid "G_Timeout"
-msgstr "G_Timeout"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/photo-wall.c.page:78(None)
-msgid "@@image: 'media/photo-wall.png'; md5=f19590d97e8ec029cda3c44b769c11cd"
-msgstr "@@image: 'media/photo-wall.png'; md5=f19590d97e8ec029cda3c44b769c11cd"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/photo-wall.c.page:81(None)
+#: C/menubar.py.page:38(item/code) C/menubar.vala.page:33(item/code)
+#, no-wrap
 msgid ""
-"@@image: 'media/photo-wall-focused.png'; md5=9f1ceecf3a28c1e468597b093a10cbae"
+"\n"
+"&lt;?xml version=\"1.0\"? encoding=\"UTF-8\"?&gt;"
 msgstr ""
-"@@image: 'media/photo-wall-focused.png'; md5=9f1ceecf3a28c1e468597b093a10cbae"
-
-#: C/photo-wall.c.page:6(title)
-#| msgid "Photo Wall"
-msgid "Photo Wall (C)"
-msgstr "Mural de fotos (C)"
 
-#: C/photo-wall.c.page:9(desc)
-msgid "A Clutter image viewer"
-msgstr "Un visor de imaxes Clutter"
-
-#: C/photo-wall.c.page:13(name)
-msgid "Chris Kühl"
-msgstr "Chris Kühl"
-
-#: C/photo-wall.c.page:14(email)
-msgid "chrisk openismus com"
-msgstr "chrisk openismus com"
-
-#: C/photo-wall.c.page:22(title)
-msgid "Photo Wall"
-msgstr "Mural de fotos"
-
-#: C/photo-wall.c.page:25(p)
+#: C/menubar.py.page:41(item/p) C/menubar.vala.page:36(item/p)
 msgid ""
-"For this example we will build a simple image viewer using Clutter. You will "
-"learn:"
+"We want to create the interface which will contain our menubar and its "
+"submenus. Our menubar will contain <gui>File</gui>, <gui>Edit</gui>, "
+"<gui>Choices</gui> and <gui>Help</gui> submenus. We add the following XML "
+"code to the file:"
 msgstr ""
-"Para este exemplo construirase un sinxelo visor de imaxes usando Clutter. "
-"Aprenderá:"
-
-#: C/photo-wall.c.page:27(p)
-msgid "How to size and position <code>ClutterActor</code>s"
-msgstr "Como dimensionar e posicionar varios <code>ClutterActor</code>"
 
-#: C/photo-wall.c.page:28(p)
-msgid "How to place an image in a <code>ClutterActor</code>"
-msgstr "Como posicionar unha imaxe nun <code>ClutterActor</code>"
-
-#: C/photo-wall.c.page:29(p)
-msgid "How to do simple transitions using Clutter's animation framework"
+#: C/menubar.py.page:42(item/code) C/menubar.vala.page:37(item/code)
+#, no-wrap
+msgid ""
+"&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n"
+"&lt;interface&gt;\n"
+"  &lt;menu id=\"menubar\"&gt;\n"
+"    &lt;submenu&gt;\n"
+"      &lt;attribute name=\"label\"&gt;File&lt;/attribute&gt;\n"
+"    &lt;/submenu&gt;\n"
+"    &lt;submenu&gt;\n"
+"      &lt;attribute name=\"label\"&gt;Edit&lt;/attribute&gt;\n"
+"    &lt;/submenu&gt;\n"
+"    &lt;submenu&gt;\n"
+"      &lt;attribute name=\"label\"&gt;Choices&lt;/attribute&gt;\n"
+"    &lt;/submenu&gt;\n"
+"    &lt;submenu&gt;\n"
+"      &lt;attribute name=\"label\"&gt;Help&lt;/attribute&gt;\n"
+"    &lt;/submenu&gt;\n"
+"  &lt;/menu&gt;\n"
+"&lt;/interface&gt;\n"
+msgstr ""
+
+#: C/menubar.py.page:44(item/p)
+msgid ""
+"Now we will create the .py file and use GtkBuilder to import the "
+"<file>menubar.ui</file> we just created."
 msgstr ""
-"Como facer transicións sinxelas usando o framework de animacións Clutter."
 
-#: C/photo-wall.c.page:30(p)
-msgid "How to make <code>ClutterActor</code>s respond to mouse events"
+#: C/menubar.py.page:48(section/title) C/menubar.vala.page:42(section/title)
+msgid "Add the MenuBar to the window using GtkBuilder"
 msgstr ""
-"Como facer que os <code>ClutterActor</code> respondan a eventos do rato"
-
-#: C/photo-wall.c.page:31(p)
-msgid "How to get file names from a directory"
-msgstr "Como obter nomes de ficheiros dun cartafol"
 
-#: C/photo-wall.c.page:37(p)
+#: C/menubar.py.page:49(section/code)
+#, no-wrap
 msgid ""
-"Clutter is a library for creating dynamic user interfaces using OpenGL for "
-"hardware acceleration. This example demonstates a small, but central, part "
-"of the Clutter library to create a simple but attractive image viewing "
-"program."
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"MenuBar Example\", application=app)\n"
+"        self.set_default_size(200, 200)\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"        # a builder to add the UI designed with Glade to the grid:\n"
+"        builder = Gtk.Builder()\n"
+"        # get the file (if it is there)\n"
+"        try:\n"
+"            builder.add_from_file(\"menubar_basis.ui\")\n"
+"        except:\n"
+"            print \"file not found\"\n"
+"            sys.exit()\n"
+"\n"
+"        # we use the method Gtk.Application.set_menubar(menubar) to add the menubar\n"
+"        # to the application (Note: NOT the window!)\n"
+"        self.set_menubar(builder.get_object(\"menubar\"))\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
-"Clutter é unha biblioteca para crear interfaces de usuario dinámicas usando "
-"OpenGL para a aceleración gráfica. Este exemplo demostra unha parte pequena, "
-"porén central, da biblioteca Clutter para crear un sinxelo, máis atractivo, "
-"programa de visualización de imaxes."
 
-#: C/photo-wall.c.page:40(p)
+#: C/menubar.py.page:50(section/p)
 msgid ""
-"To help us reach our goal we will be utilising a few other common pieces of "
-"GLib as well. Most importantly, we'll use one <code>GSList</code>, a singly-"
-"linked list, to hold our <code>ClutterActor</code>s and another one for file "
-"path names. We will also use <code>GDir</code>, a utility for working with "
-"directories, to access our image directory and gather file paths."
+"Now run the python application. It should look like the picture at the top "
+"of this page."
 msgstr ""
-"Para axudarlle a alcanzar o seu destino usaremos tamén algunhas pezas comúns "
-"de GLib. A máis importante, usaremos <code>GSList</code>, unha lista ligada "
-"para manter os nosos <code>ClutterActor</code>s e os nomes de ruta de "
-"ficheiro."
 
-#: C/photo-wall.c.page:53(p)
-#, fuzzy
-#| msgid ""
-#| "Choose <gui>Gtk+ (simple)</gui> from the <gui>C</gui> tab, click "
-#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
-#| "<file>photo-wall</file> as project name and directory."
-msgid ""
-"Choose <gui>Gtk+ (simple)</gui> from the <gui>C</gui> tab, click "
-"<gui>Continue</gui>, and fill out your details on the next few pages. Use "
-"<file>photo-wall</file> as project name and directory."
+#: C/menubar.py.page:54(section/title) C/menubar.vala.page:50(section/title)
+msgid "Add items to the menus"
 msgstr ""
-"Seleccione <gui>Gtk+ (sinmple)</gui> desde a lapela <gui>C</gui>, e prema "
-"<gui>Adiante</gui>, e complete os detalles nas seguintes páxinas. Use <file"
-">photo-wall</file> como nome do proxecto e cartafol."
 
-#: C/photo-wall.c.page:56(p)
+#: C/menubar.py.page:55(section/p) C/menubar.vala.page:51(section/p)
 msgid ""
-"Make sure that <gui>Use GtkBuilder for user interface</gui> is disabled as "
-"we will create the UI manually in this tutorial. Check the <link xref="
-"\"guitar-tuner.c\">Guitar-Tuner</link> tutorial using the interface builder."
+"We start off by adding 2 menuitems to the <gui>File</gui> menu: <gui>New</"
+"gui> and <gui>Quit</gui>. We do this by adding a <code>section</code> to the "
+"the <code>File</code> submenu with these items. The <file>menubar.ui</file> "
+"should look like this (lines 6 to 13 inclusive comprise the newly added "
+"section):"
 msgstr ""
-"Asegúrese que <gui>Usar GtkBuilder para a interface de usuario</gui> está "
-"desactivado xa que crearemos a UI manualmente neste titorial. Comprobe o "
-"titorial <link xref=\"guitar-tuner.c\">Guitar-Tuner</link> usando o "
-"construtor de interface."
 
-#: C/photo-wall.c.page:61(p)
-msgid ""
-"Enable <gui>Configure external packages</gui>. On the next page, select "
-"<em>clutter-1.0</em> from the list to include the Clutter library in your "
-"project."
+#: C/menubar.py.page:58(listing/title)
+msgid "menubar.ui"
 msgstr ""
-"Active <gui>Configurar paquetes externos</gui>. Na seguinte páxina "
-"seleccione <em>clutter-1.0</em> desde a lista para incluír a biblioteca "
-"Clutter no seu proxecto."
 
-#: C/photo-wall.c.page:65(p) C/image-viewer.c.page:51(p)
-#: C/guitar-tuner.c.page:56(p)
+#: C/menubar.py.page:59(listing/code) C/menubar.vala.page:52(section/code)
+#, no-wrap
 msgid ""
-"Click <gui>Apply</gui> and the project will be created for you. Open "
-"<file>src/main.c</file> from the <gui>Project</gui> or <gui>File</gui> tabs. "
-"You should see some code which starts with the lines:"
+"\n"
+"&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n"
+"&lt;interface&gt;\n"
+"  &lt;menu id=\"menubar\"&gt;\n"
+"    &lt;submenu&gt;\n"
+"      &lt;attribute name=\"label\"&gt;File&lt;/attribute&gt;\n"
+"      &lt;section&gt;\n"
+"        &lt;item&gt;\n"
+"          &lt;attribute name=\"label\"&gt;New&lt;/attribute&gt;\n"
+"        &lt;/item&gt;\n"
+"        &lt;item&gt;\n"
+"          &lt;attribute name =\"label\"&gt;Quit&lt;/attribute&gt;\n"
+"        &lt;/item&gt;\n"
+"      &lt;/section&gt;\n"
+"    &lt;/submenu&gt;\n"
+"    &lt;submenu&gt;\n"
+"      &lt;attribute name=\"label\"&gt;Edit&lt;/attribute&gt;\n"
+"    &lt;/submenu&gt;\n"
+"    &lt;submenu&gt;\n"
+"      &lt;attribute name=\"label\"&gt;Choices&lt;/attribute&gt;\n"
+"    &lt;/submenu&gt;\n"
+"    &lt;submenu&gt;\n"
+"      &lt;attribute name=\"label\"&gt;Help&lt;/attribute&gt;\n"
+"    &lt;/submenu&gt;\n"
+"  &lt;/menu&gt;\n"
+"&lt;/interface&gt;"
+msgstr ""
+
+#: C/menubar.py.page:87(section/p)
+msgid ""
+"Following this pattern, you can now add a <code>Copy</code> and a "
+"<code>Paste</code> item to the <code>Edit</code> submenu, and an "
+"<code>About</code> item to the <code>Help</code> submenu."
 msgstr ""
-"Prema <gui>Aplicar</gui> para crear o proxecto. Abra <file>src/main.c</file> "
-"desde as lapelas <gui>Proxecto</gui> ou <gui>Ficheiro</gui>. Debería ver "
-"algún código que comeza coas liñas:"
-
-#: C/photo-wall.c.page:74(title)
-msgid "A look at Photo Wall"
-msgstr "Unha ollada ao Muro de fotos"
 
-#: C/photo-wall.c.page:75(p)
-msgid "Our image viewer presents the user with a wall of images."
-msgstr "O novo visor de imaxes móstralle ao usuario un muro de imaxes."
+#: C/menubar.py.page:92(section/title) C/menubar.vala.page:86(section/title)
+#, fuzzy
+#| msgid "Set up the actors"
+msgid "Setup actions"
+msgstr "Configurar os actores"
 
-#: C/photo-wall.c.page:79(p)
+#: C/menubar.py.page:94(section/p)
 msgid ""
-"When an image is clicked, it is animated to fill the viewing area. When the "
-"image having focus is clicked it is returned to its original position using "
-"an animation with the same duration of 500 milliseconds."
+"We now create the actions for \"New\" and \"Quit\" connected to a callback "
+"function in the Python file; for instance we create \"new\" as:"
 msgstr ""
-"Cando se fai clic sobre unha imaxe, esta anímase para ocupar todo o área de "
-"visualización. Cando se fai clic sobre unha imaxe que ten o foco volverá á "
-"súa posición orixinal usando unha animación da mesma duración de 500 "
-"milisegundos."
-
-#: C/photo-wall.c.page:85(title)
-msgid "Initial setup"
-msgstr "Configuración inicial"
 
-#: C/photo-wall.c.page:86(p)
+#: C/menubar.py.page:95(section/code)
+#, no-wrap
 msgid ""
-"The following code segment contains many of the defines and variables we "
-"will be using in the following sections. Use this as a reference for later "
-"sections. Copy this code to the beginning of <file>src/main.c</file>:"
+"\n"
+"new_action = Gio.SimpleAction.new(\"new\", None)\n"
+"new_action.connect(\"activate\", self.new_callback)"
 msgstr ""
-"O seguinte fragmento de código contén moitas definicións e variábeis que se "
-"usarán nas seguintes seccións. Úseo como referencia para as próximas "
-"seccións. Copie este código ao principio de <file>src/main.c</file>:"
 
-#: C/photo-wall.c.page:123(title)
-msgid "Jumping into the code"
-msgstr "Saltando ao código"
+#: C/menubar.py.page:99(section/p)
+msgid "And we create the callback function of \"new\" as"
+msgstr ""
 
-#: C/photo-wall.c.page:124(p)
+#: C/menubar.py.page:100(section/code)
+#, no-wrap
 msgid ""
-"We will start by taking a look at the <code>main()</code> function as a "
-"whole. Then we'll discuss the other code sections in detail. Change the "
-"<file>src/main.c</file> to contain this <code>main()</code> function. You "
-"can delete the <code>create_window()</code> function as we don't need it in "
-"this example."
+"\n"
+"def new_callback(self, action, parameter):\n"
+"    print \"You clicked \\\"New\\\"\""
 msgstr ""
-"Comezaremos ollando a función <code>main()</code>. Logo discutiremos as "
-"outras seccións de código en detalle. Cambie o ficheiro <file>src/main.c</"
-"file> para que conte;a a función <code>main()</code>. Pode elminar a función "
-"<code>create_window()</code> xa que non a necesitamos neste exemplo."
 
-#: C/photo-wall.c.page:165(p)
+#: C/menubar.py.page:104(section/p)
 msgid ""
-"Line 4: <code>ClutterColor</code> is defined by setting the red, green, blue "
-"and transparency (alpha) values. The values range from 0-255. For "
-"transparency a value of 255 is opaque."
+"Now, in the XML file, we connect the menu items to the actions in the XML "
+"file by adding the \"action\" attribute:"
 msgstr ""
-"Liña 4: <code>ClutterColor</code> é definido estabelecendo o valor a "
-"vermello, verde, azul ou transparente (alfa). O rango de valores están entre "
-"0-255. Para a transparencia 255 é opaco."
 
-#: C/photo-wall.c.page:166(p)
+#: C/menubar.py.page:105(section/code)
+#, no-wrap
 msgid ""
-"Line 7: You must initialize Clutter. If you forget to do this, you will get "
-"very strange errors. Be warned."
+"\n"
+"&lt;item&gt;\n"
+"  &lt;attribute name=\"label\"&gt;New&lt;/attribute&gt;\n"
+"  &lt;attribute name=\"action\"&gt;app.new&lt;/attribute&gt;\n"
+"&lt;/item&gt;"
 msgstr ""
-"Liña 7: Debe inicializar Clutter. Se esqueceu isto, haberá moitos erros "
-"estraños. Está avisado."
 
-#: C/photo-wall.c.page:167(p)
+#: C/menubar.py.page:111(section/p)
 msgid ""
-"Lines 9‒11: Here we get the default <code>ClutterStage</code> that was "
-"provided by <code>clutter_init</code>. We then set the size using the "
-"defines from the previous section and the address of the <code>ClutterColor</"
-"code> we just defined."
+"Note that for an action that is relative to the application, we use the "
+"prefix <code>app.</code>; for actions that are relative to the window we use "
+"the prefix <code>win.</code>."
 msgstr ""
-"Liñas 9-11: aquí é onde se obtén o <code>ClutterStage</code> predeterminado "
-"que forneceu <code>clutter_init</code>. Entón estabelécese o tamaño usando o "
-"definido na sección anterior e os enderezos do <code>ClutterColor</code> que "
-"xa están definidas."
 
-#: C/photo-wall.c.page:168(p)
+#: C/menubar.py.page:113(section/p)
 msgid ""
-"A <code>ClutterStage</code> is the top-level <code>ClutterActor</code> onto "
-"which other <code>ClutterActor</code>s are placed."
+"Finally, in the Python file, we add the action to the application or to the "
+"window - so for instance <code>app.new</code> will be added to the "
+"application in the method <code>do_startup(self)</code> as"
 msgstr ""
-"Un <code>CluterStage</code> é o nivel superior dun <code>ClutterActor</code> "
-"no que se localizan outros <code>ClutterActor</code>."
 
-#: C/photo-wall.c.page:170(p)
+#: C/menubar.py.page:114(section/code)
+#, no-wrap
 msgid ""
-"Line 12: Here we call our function for getting the image file paths. We'll "
-"look at this in a bit."
+"\n"
+"self.add_action(new_action)"
 msgstr ""
-"Liña 12: aquí chámase á función para obter as rutas das imaxes. Isto verase "
-"en breve."
 
-#: C/photo-wall.c.page:171(p)
+#: C/menubar.py.page:119(section/title) C/menubar.vala.page:138(section/title)
+#, fuzzy
+#| msgid "A first Gtk application"
+msgid "Actions: Application or Window?"
+msgstr "Un primeiro aplicativo en GTK"
+
+#: C/menubar.py.page:120(section/p) C/menubar.vala.page:139(section/p)
 msgid ""
-"Lines 14‒26: This is where we set up the <code>ClutterActor</code>s, load "
-"the images and place them into their spot in the image wall. We will look at "
-"this in detail in the next section."
+"Above, we created the \"new\" and \"open\" actions as part of the "
+"MyApplication class. Actions which control the application itself, such as "
+"\"quit\" should be created similarly."
 msgstr ""
-"Liña 14-26: aquí é onde se configuran os <code>ClutterActor</code>, cárganse "
-"as imaxes e colócanse no seu sitio no mural de imaxes. Isto verase con máis "
-"detalle na seguinte sección."
 
-#: C/photo-wall.c.page:172(p)
+#: C/menubar.py.page:122(section/p) C/menubar.vala.page:142(section/p)
 msgid ""
-"Line 29: Show the stage and <em>all its children</em>, meaning our images."
+"Some actions, such as \"copy\" and \"paste\" deal with the window, not the "
+"application. Window actions should be created as part of the window class."
 msgstr ""
-"Liña 29: mostra o escenario e <em>todos os seus fillos</em>, é dicir, as "
-"imaxes."
 
-#: C/photo-wall.c.page:173(p)
-msgid "Line 32: Start the Clutter main loop."
-msgstr "Liña 32: inicia o bucle principal de Clutter."
+#: C/menubar.py.page:124(section/p)
+msgid ""
+"The complete example files contain both application actions and window "
+"applications. The window actions are the ones usually included in the <link "
+"xref=\"gmenu.py\">application menu</link> also. It is not good practice to "
+"include window actions in the applcation menu. For demonstration purposes, "
+"the complete example files which follow include XML in the UI file which "
+"creates the application menu which includes a \"New\" and \"Open\" item, and "
+"these are hooked up to the same actions as the menubar items of the same "
+"name."
+msgstr ""
 
-#: C/photo-wall.c.page:178(title)
-msgid "Setting up our image actors"
-msgstr "Configurar os nosos actores de imaxe"
+#: C/menubar.py.page:128(section/title) C/menubar.vala.page:132(section/title)
+msgid "Choices submenu and items with state"
+msgstr ""
 
-#: C/photo-wall.c.page:179(p)
+#: C/menubar.py.page:130(section/p)
 msgid ""
-"In Clutter, an actor is the most basic visual element. Basically, everything "
-"you see is an actor."
+"Lines 30 to 80 inclusive of the <link xref=\"menubar.py#xml-code\"/> "
+"demonstrate the XML code used to create the UI for <gui>Choices</gui> menu."
 msgstr ""
-"En Clutter, un actor é o elemento visual máis básico. Basicamente, todo o "
-"que ve é un actor."
 
-#: C/photo-wall.c.page:180(p)
+#: C/menubar.py.page:132(section/p)
 msgid ""
-"In this section, we are going to take a closer look at the loop used for "
-"setting up the <code>ClutterActor</code>s that will display our images."
+"The actions created so far are <em>stateless</em>, that is they do not "
+"retain or depend on a state given by the action itself. The actions we need "
+"to create for the Choices submenu, on the other hand, are <em>stateful</em>. "
+"An example of creation of a stateful action is:"
 msgstr ""
-"Nesta sección, imos botar unha ollada máis polo miúdo ao búcle usado para "
-"configurar os <code>ClutterActor</code>s que mostrarán as nosas imaxes."
 
-#: C/photo-wall.c.page:198(p)
+#: C/menubar.py.page:133(section/code)
+#, no-wrap
 msgid ""
-"Line 5: Here we want to get the path at the <var>n</var>th location in the "
-"<code>GSList</code> that is holding our image path names. The <var>n</var>th "
-"position is calculated based on <code>row</code> and <code>col</code>. The "
-"return value is a pointer to a <code>GSList</code> which is just a node in "
-"the list. We will use this to get the actual path in the next line. The "
-"first parameter is a pointer to the head of the list."
+"\n"
+"shape_action = Gio.SimpleAction.new_stateful(\"shape\", GLib.VariantType.new('s'), 
GLib.Variant.new_string('line'))"
 msgstr ""
-"Liña 5: aquí quérese obter a ruta á localización <var>n</var>-ésima na "
-"<code>GSList</code> que contén os nomes das rutas das imaxes. A <var>n</var>-"
-"ésima posición calcúlase baseándose en <code>row</code> e <code>col</code>. "
-"O valor de retorno é un punteiro a <code>GSList</code> que é simplemente un "
-"nodo na lista. Isto usarase para obter a ruta actual na seguinte liña. O "
-"primeiro parámetro é un punteiro á cabeceira da lista."
 
-#: C/photo-wall.c.page:200(p)
+#: C/menubar.py.page:136(section/p)
 msgid ""
-"Line 6: This is where we actually create the <code>ClutterActor</code> and "
-"place the image into the actor. The first argument is the path which we "
-"access through our <code>GSList</code> node. The second argument is for "
-"error reporting but we are ignoring that to keep things short."
+"where the variables of the method are: name, parameter type (in this case, a "
+"string - see <link href=\"http://developer.gnome.org/glib/unstable/glib-";
+"GVariantType.html\">here</link> for a complete list of character meanings), "
+"initial state (in this case, 'line' - in case of a <code>True</code> boolean "
+"value it should be <code>Glib.Variant.new_boolean(True)</code>, and so on, "
+"see <link href=\"http://developer.gnome.org/glib/unstable/glib-GVariant.html";
+"\">here</link> for a complete list)"
 msgstr ""
-"Liña 6: aquí é onde actualmente se crea o <code>ClutterActor</code> e "
-"localízase a imaxe no actor. O primeiro argumento é a ruta coa que se "
-"acceder ao nodo da <code>GSList</code>. O seguindo argumento é para informar "
-"dun error, pero ignórase para simplificar."
 
-#: C/photo-wall.c.page:202(p)
-msgid "Line 7: We'll look at this function in a later section."
-msgstr "Liña 7: esta función verase nunha sección posterior."
+#: C/menubar.py.page:138(section/p)
+msgid ""
+"After creating the stateful SimpleAction we connect it to the callback "
+"function and we add it to the window (or the application, if it is the "
+"case), as before:"
+msgstr ""
 
-#: C/photo-wall.c.page:204(p)
+#: C/menubar.py.page:140(section/code)
+#, no-wrap
 msgid ""
-"Line 8: This adds the <code>ClutterActor</code> to the stage, which is a "
-"container. It also assumes ownership of the <code>ClutterActor</code> which "
-"is something you'll want to look into as you get deeper into GNOME "
-"development. See the <link href=\"http://library.gnome.org/devel/gobject/";
-"stable/gobject-memory.html\"><code>GObject</code> documentation</link> for "
-"the gory details."
+"\n"
+"shape_action.connect(\"activate\", self.shape_callback)\n"
+"self.add_action(shape_action)"
+msgstr ""
+
+#: C/menubar.py.page:147(section/title) C/menubar.vala.page:153(section/title)
+msgid "Complete XML UI file for this example"
 msgstr ""
-"Liña 8: isto engade o <code>ClutterActor</code> ao escenario, que é un "
-"contedor. Asume o propietario do <code>ClutterActor</code>, que é algo que "
-"quererá cando profundice no desenvolvemento de GNOME. Para obter máis "
-"detalles, consulte a <link href=\"http://library.gnome.org/devel/gobject/";
-"stable/gobject-memory.html\">documentación de <code>GObject</code></link>."
 
-#: C/photo-wall.c.page:206(p)
+#: C/menubar.py.page:148(section/code) C/menubar.vala.page:154(section/code)
+#, no-wrap
 msgid ""
-"Line 9: This adds our <code>ClutterActor</code> to a <code>GSList</code> so "
-"that we can later iterate over the <code>ClutterActor</code>s."
+"&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n"
+"&lt;interface&gt;\n"
+"  &lt;menu id=\"menubar\"&gt;\n"
+"    &lt;submenu&gt;\n"
+"      &lt;attribute name=\"label\"&gt;File&lt;/attribute&gt;\n"
+"      &lt;section&gt;\n"
+"        &lt;item&gt;\n"
+"          &lt;attribute name=\"label\"&gt;New&lt;/attribute&gt;\n"
+"          &lt;attribute name=\"action\"&gt;app.new&lt;/attribute&gt;\n"
+"        &lt;/item&gt;\n"
+"        &lt;item&gt;\n"
+"          &lt;attribute name=\"label\"&gt;Quit&lt;/attribute&gt;\n"
+"          &lt;attribute name=\"action\"&gt;app.quit&lt;/attribute&gt;\n"
+"        &lt;/item&gt;\n"
+"      &lt;/section&gt;\n"
+"    &lt;/submenu&gt;\n"
+"    &lt;submenu&gt;\n"
+"      &lt;attribute name=\"label\"&gt;Edit&lt;/attribute&gt;\n"
+"      &lt;section&gt;\n"
+"        &lt;item&gt;\n"
+"          &lt;attribute name=\"label\"&gt;Copy&lt;/attribute&gt;\n"
+"          &lt;attribute name=\"action\"&gt;win.copy&lt;/attribute&gt;\n"
+"        &lt;/item&gt;\n"
+"        &lt;item&gt;\n"
+"          &lt;attribute name=\"label\"&gt;Paste&lt;/attribute&gt;\n"
+"          &lt;attribute name=\"action\"&gt;win.paste&lt;/attribute&gt;\n"
+"        &lt;/item&gt;\n"
+"      &lt;/section&gt;\n"
+"    &lt;/submenu&gt;\n"
+"    &lt;submenu&gt;\n"
+"      &lt;attribute name=\"label\"&gt;Choices&lt;/attribute&gt;\n"
+"      &lt;submenu&gt;\n"
+"        &lt;attribute name=\"label\"&gt;Shapes&lt;/attribute&gt;\n"
+"          &lt;section&gt;\n"
+"            &lt;item&gt;\n"
+"              &lt;attribute name=\"label\"&gt;Line&lt;/attribute&gt;\n"
+"              &lt;attribute name=\"action\"&gt;win.shape&lt;/attribute&gt;\n"
+"              &lt;attribute name=\"target\"&gt;line&lt;/attribute&gt;\n"
+"            &lt;/item&gt;\n"
+"            &lt;item&gt;\n"
+"              &lt;attribute name=\"label\"&gt;Triangle&lt;/attribute&gt;\n"
+"              &lt;attribute name=\"action\"&gt;win.shape&lt;/attribute&gt;\n"
+"              &lt;attribute name=\"target\"&gt;triangle&lt;/attribute&gt;\n"
+"            &lt;/item&gt;\n"
+"            &lt;item&gt;\n"
+"              &lt;attribute name=\"label\"&gt;Square&lt;/attribute&gt;\n"
+"              &lt;attribute name=\"action\"&gt;win.shape&lt;/attribute&gt;\n"
+"              &lt;attribute name=\"target\"&gt;square&lt;/attribute&gt;\n"
+"            &lt;/item&gt;\n"
+"            &lt;item&gt;\n"
+"              &lt;attribute name=\"label\"&gt;Polygon&lt;/attribute&gt;\n"
+"              &lt;attribute name=\"action\"&gt;win.shape&lt;/attribute&gt;\n"
+"              &lt;attribute name=\"target\"&gt;polygon&lt;/attribute&gt;\n"
+"            &lt;/item&gt;\n"
+"            &lt;item&gt;\n"
+"              &lt;attribute name=\"label\"&gt;Circle&lt;/attribute&gt;\n"
+"              &lt;attribute name=\"action\"&gt;win.shape&lt;/attribute&gt;\n"
+"              &lt;attribute name=\"target\"&gt;circle&lt;/attribute&gt;\n"
+"            &lt;/item&gt;\n"
+"          &lt;/section&gt;\n"
+"      &lt;/submenu&gt;\n"
+"      &lt;section&gt;\n"
+"        &lt;item&gt;\n"
+"          &lt;attribute name=\"label\"&gt;On&lt;/attribute&gt;\n"
+"          &lt;attribute name=\"action\"&gt;app.state&lt;/attribute&gt;\n"
+"          &lt;attribute name=\"target\"&gt;on&lt;/attribute&gt;\n"
+"        &lt;/item&gt;\n"
+"        &lt;item&gt;\n"
+"          &lt;attribute name=\"label\"&gt;Off&lt;/attribute&gt;\n"
+"          &lt;attribute name=\"action\"&gt;app.state&lt;/attribute&gt;\n"
+"          &lt;attribute name=\"target\"&gt;off&lt;/attribute&gt;\n"
+"        &lt;/item&gt;\n"
+"      &lt;/section&gt;\n"
+"      &lt;section&gt;\n"
+"        &lt;item&gt;\n"
+"          &lt;attribute name=\"label\"&gt;Awesome&lt;/attribute&gt;\n"
+"          &lt;attribute name=\"action\"&gt;app.awesome&lt;/attribute&gt;\n"
+"        &lt;/item&gt;\n"
+"      &lt;/section&gt;\n"
+"    &lt;/submenu&gt;\n"
+"    &lt;submenu&gt;\n"
+"      &lt;attribute name=\"label\"&gt;Help&lt;/attribute&gt;\n"
+"      &lt;section&gt;\n"
+"        &lt;item&gt;\n"
+"          &lt;attribute name=\"label\"&gt;About&lt;/attribute&gt;\n"
+"          &lt;attribute name=\"action\"&gt;win.about&lt;/attribute&gt;\n"
+"        &lt;/item&gt;\n"
+"      &lt;/section&gt;\n"
+"    &lt;/submenu&gt;\n"
+"  &lt;/menu&gt;\n"
+"  &lt;menu id=\"appmenu\"&gt;\n"
+"    &lt;section&gt;\n"
+"      &lt;item&gt;\n"
+"        &lt;attribute name=\"label\"&gt;New&lt;/attribute&gt;\n"
+"        &lt;attribute name=\"action\"&gt;app.new&lt;/attribute&gt;\n"
+"      &lt;/item&gt;\n"
+"      &lt;item&gt;\n"
+"        &lt;attribute name=\"label\"&gt;Quit&lt;/attribute&gt;\n"
+"        &lt;attribute name=\"action\"&gt;app.quit&lt;/attribute&gt;\n"
+"      &lt;/item&gt;\n"
+"    &lt;/section&gt;\n"
+"  &lt;/menu&gt;\n"
+"&lt;/interface&gt;\n"
+msgstr ""
+
+#: C/menubar.py.page:152(section/title)
+msgid "Complete Python file for this example"
 msgstr ""
-"Liña 9: isto engade o <code>ClutterActor</code> a unha <code>GSList</code> "
-"que logo se poderá iterar sobre os <code>ClutterActor</code>."
 
-#: C/photo-wall.c.page:207(p)
+#: C/menubar.py.page:153(section/code)
+#, no-wrap
 msgid ""
-"Interesting to note is that we want to prepend the <code>ClutterActor</"
-"code>s rather than append so that we avoid traversing the list upon each "
-"insertion. You will often see <code>g_slist_prepend</code> followed by "
-"<code>g_slist_reverse</code> because it faster than inserting many objects "
-"at the end of the list."
+"from gi.repository import Gtk\n"
+"from gi.repository import GLib\n"
+"from gi.repository import Gio\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"MenuBar Example\", application=app)\n"
+"        self.set_default_size(200, 200)\n"
+"\n"
+"        # action without a state created (name, parameter type)\n"
+"        copy_action = Gio.SimpleAction.new(\"copy\", None)\n"
+"        # connected with the callback function\n"
+"        copy_action.connect(\"activate\", self.copy_callback)\n"
+"        # added to the window\n"
+"        self.add_action(copy_action)\n"
+"\n"
+"        # action without a state created (name, parameter type)\n"
+"        paste_action = Gio.SimpleAction.new(\"paste\", None)\n"
+"        # connected with the callback function\n"
+"        paste_action.connect(\"activate\", self.paste_callback)\n"
+"        # added to the window\n"
+"        self.add_action(paste_action)\n"
+"\n"
+"        # action with a state created (name, parameter type, initial state)\n"
+"        shape_action = Gio.SimpleAction.new_stateful(\"shape\", GLib.VariantType.new('s'), 
GLib.Variant.new_string('line'))\n"
+"        # connected to the callback function\n"
+"        shape_action.connect(\"activate\", self.shape_callback)\n"
+"        # added to the window\n"
+"        self.add_action(shape_action)\n"
+"\n"
+"        # action with a state created\n"
+"        about_action = Gio.SimpleAction.new(\"about\", None)\n"
+"        # action connected to the callback function\n"
+"        about_action.connect(\"activate\", self.about_callback)\n"
+"        # action added to the application\n"
+"        self.add_action(about_action)\n"
+"\n"
+"    # callback function for copy_action\n"
+"    def copy_callback(self, action, parameter):\n"
+"        print \"\\\"Copy\\\" activated\"\n"
+"\n"
+"    # callback function for paste_action\n"
+"    def paste_callback(self, action, parameter):\n"
+"        print \"\\\"Paste\\\" activated\"\n"
+"\n"
+"    # callback function for shape_action\n"
+"    def shape_callback(self, action, parameter):\n"
+"\t\tprint \"Shape is set to\", parameter.get_string()\n"
+"\t\t# Note that we set the state of the action!\n"
+"\t\taction.set_state(parameter)\n"
+"\n"
+"    # callback function for about (see the AboutDialog example)\n"
+"    def about_callback(self, action, parameter):\n"
+"        # a  Gtk.AboutDialog\n"
+"        aboutdialog = Gtk.AboutDialog()\n"
+"\n"
+"        # lists of authors and documenters (will be used later)\n"
+"        authors = [\"GNOME Documentation Team\"]\n"
+"        documenters = [\"GNOME Documentation Team\"]\n"
+"\n"
+"        # we fill in the aboutdialog\n"
+"        aboutdialog.set_program_name(\"MenuBar Example\")\n"
+"        aboutdialog.set_copyright(\"Copyright \\xc2\\xa9 2012 GNOME Documentation Team\")\n"
+"        aboutdialog.set_authors(authors)\n"
+"        aboutdialog.set_documenters(documenters)\n"
+"        aboutdialog.set_website(\"http://developer.gnome.org\";)\n"
+"        aboutdialog.set_website_label(\"GNOME Developer Website\")\n"
+"\n"
+"        # to close the aboutdialog when \"close\" is clicked we connect the\n"
+"        # \"response\" signal to on_close\n"
+"        aboutdialog.connect(\"response\", self.on_close)\n"
+"        # show the aboutdialog\n"
+"        aboutdialog.show()\n"
+"\n"
+"    # a callback function to destroy the aboutdialog\n"
+"    def on_close(self, action, parameter):\n"
+"        action.destroy()\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        # FIRST THING TO DO: do_startup()\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"        # action without a state created\n"
+"        new_action = Gio.SimpleAction.new(\"new\", None)\n"
+"        # action connected to the callback function\n"
+"        new_action.connect(\"activate\", self.new_callback)\n"
+"        # action added to the application\n"
+"        self.add_action(new_action)\n"
+"\n"
+"        # action without a state created\n"
+"        quit_action = Gio.SimpleAction.new(\"quit\", None)\n"
+"        # action connected to the callback function\n"
+"        quit_action.connect(\"activate\", self.quit_callback)\n"
+"        # action added to the application\n"
+"        self.add_action(quit_action)\n"
+"\n"
+"        # action with a state created\n"
+"        state_action = Gio.SimpleAction.new_stateful(\"state\",  GLib.VariantType.new('s'), 
GLib.Variant.new_string('off'))\n"
+"        # action connected to the callback function\n"
+"        state_action.connect(\"activate\", self.state_callback)\n"
+"        # action added to the application\n"
+"        self.add_action(state_action)\n"
+"\n"
+"        # action with a state created\n"
+"        awesome_action = Gio.SimpleAction.new_stateful(\"awesome\", None, 
GLib.Variant.new_boolean(False))\n"
+"        # action connected to the callback function\n"
+"        awesome_action.connect(\"activate\", self.awesome_callback)\n"
+"        # action added to the application\n"
+"        self.add_action(awesome_action)\n"
+"\n"
+"        # a builder to add the UI designed with Glade to the grid:\n"
+"        builder = Gtk.Builder()\n"
+"        # get the file (if it is there)\n"
+"        try:\n"
+"            builder.add_from_file(\"menubar.ui\")\n"
+"        except:\n"
+"            print \"file not found\"\n"
+"            sys.exit()\n"
+"\n"
+"        # we use the method Gtk.Application.set_menubar(menubar) to add the menubar\n"
+"        # and the menu to the application (Note: NOT the window!)\n"
+"        self.set_menubar(builder.get_object(\"menubar\"))\n"
+"        self.set_app_menu(builder.get_object(\"appmenu\"))\n"
+"\n"
+"    # callback function for new\n"
+"    def new_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"New\\\"\"\n"
+"\n"
+"    # callback function for quit\n"
+"    def quit_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"Quit\\\"\"\n"
+"        sys.exit()\n"
+"\n"
+"    # callback function for state\n"
+"    def state_callback(self, action, parameter):\n"
+"        print \"State is set to\", parameter.get_string()\n"
+"        action.set_state(parameter)\n"
+"\n"
+"    # callback function for awesome\n"
+"    def awesome_callback(self, action, parameter):\n"
+"        action.set_state(GLib.Variant.new_boolean(not action.get_state()))\n"
+"        if action.get_state().get_boolean() is True:\n"
+"            print \"You checked \\\"Awesome\\\"\"\n"
+"        else:\n"
+"            print \"You unchecked \\\"Awesome\\\"\"\n"
+"\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
-"É interesante ter en conta que prefírese antepoñer os <code>ClutterActor</"
-"code> no lugar de anexalos, o que evita atravesar a lista en cada inserción. "
-"A miúdo verá <code>g_slist_prepend</code> seguido de <code>g_slist_reverse</"
-"code>, xa que é máis rápido que inserir varios obxectos ao final da lista."
 
-#: C/photo-wall.c.page:213(title)
-msgid "Loading the images"
-msgstr "Cargar as imaxes"
+#: C/menubar.py.page:156(section/title)
+msgid "Mnemonics and Accelerators"
+msgstr ""
 
-#: C/photo-wall.c.page:214(p)
+#: C/menubar.py.page:157(section/p) C/menubar.vala.page:161(section/p)
 msgid ""
-"Let's take a short break from Clutter to see how we can get the file names "
-"from our image directory."
+"Labels may contain mnemonics. Mnemonics are underlined characters in the "
+"label, used for keyboard navigation. Mnemonics are created by placing an "
+"underscore before the mnemonic character. For example \"_File\" instead of "
+"just \"File\" in the menubar.ui label attribute."
 msgstr ""
-"Botemos unha pequena ollada a Clutter para ver como obter os nomes dos "
-"ficheiros desde o noso cartafol de imaxes."
 
-#: C/photo-wall.c.page:241(p)
+#: C/menubar.py.page:158(section/p) C/menubar.vala.page:162(section/p)
 msgid ""
-"Lines 5 and 12: This opens our directory or, if an error occured, returns "
-"after printing an error message."
+"The mnemonics are visible when you press the <key>Alt</key> key. Pressing "
+"<keyseq><key>Alt</key><key>F</key></keyseq> will open the <gui>File</gui> "
+"menu."
 msgstr ""
-"Liñas 5 e 12: Isto abre o noso cartafol ou, se se produce un erro, devolve "
-"despois de imprimir unha mensaxe de erro."
 
-#: C/photo-wall.c.page:242(p)
+#: C/menubar.py.page:160(section/p) C/menubar.vala.page:167(section/p)
 msgid ""
-"Lines 14‒23: The first line gets another file name from the <code>GDir</"
-"code> we opened earlier. If there was an image file (which we check by "
-"looking at its extension, \".png\" or \".jpg\") in the directory we proceed "
-"to prepend the image directory path to the filename and prepend that to the "
-"list we set up earlier. Lastly we attempt to get the next path name and "
-"reenter the loop if another file was found."
+"Accelerators can be explicitly added in the UI definitions. For example, it "
+"is common to be able to quit an application by pressing <keyseq><key>Ctrl</"
+"key><key>Q</key></keyseq> or to save a file by pressing <keyseq><key>Ctrl</"
+"key><key>S</key></keyseq>. To add an accelerator to the UI definition, you "
+"simply need add an \"accel\" attribute to the item."
 msgstr ""
-"Liñas 14‒23: la primeira liña obtén outro nome de ficheiro do <code>GDir</"
-"code> aberto anteriormente. Se hai un ficheiro de imaxe (compróbase mirando "
-"se a extensión é «.png» o «.jpg») no cartafol, procédese a antepoñer a ruta "
-"do cartafol da imaxe ao nome do ficheiro e anteponse na lista creada "
-"anteriormente. Por último, inténtase obter a seguinte ruta e vólvese entrar "
-"no bucle se se atopa outro ficheiro."
-
-#: C/photo-wall.c.page:247(title)
-msgid "Set up the actors"
-msgstr "Configurar os actores"
 
-#: C/photo-wall.c.page:248(p)
+#: C/menubar.py.page:161(section/p) C/menubar.vala.page:168(section/p)
 msgid ""
-"We now take a look at the sizing and positioning of <code>ClutterActor</"
-"code>s and also readying the <code>ClutterActor</code> for user interaction."
+"<code mime=\"application/xml\">&lt;attribute name=\"accel\"&gt;&amp;lt;"
+"Primary&amp;gt;q&lt;/attribute&gt;</code> will create the <keyseq><key>Ctrl</"
+"key><key>Q</key></keyseq> sequence when added to the <code>Quit</code> label "
+"item. Here, \"Primary\" refers to the <key>Ctrl</key> key on a PC or the "
+"<key>⌘</key> key on a Mac."
 msgstr ""
-"Vote unha ollada ao tamaño e ao posicionamento dos <code>ClutterActor</code> "
-"e a como se deixa listo o <code>ClutterActor</code> para a interacción do "
-"usuario."
 
-#: C/photo-wall.c.page:267(p)
+#: C/menubar.py.page:163(section/code) C/menubar.vala.page:170(section/code)
+#, no-wrap
 msgid ""
-"Line 7: Setting an actor reactive means that it reacts to events, such as "
-"<code>button-press-event</code> in our case. For Photo Wall, all "
-"<code>ClutterActor</code>s in the wall should initially be reactive."
+"\n"
+"&lt;item&gt;\n"
+"  &lt;attribute name=\"label\"&gt;_Quit&lt;/attribute&gt;\n"
+"  &lt;attribute name=\"action\"&gt;app.quit&lt;/attribute&gt;\n"
+"  &lt;attribute name=\"accel\"&gt;&amp;lt;Primary&amp;gt;q&lt;/attribute&gt;\n"
+"&lt;/item&gt;"
 msgstr ""
-"Liña 7: configurar un actor como «reactivo» significa que reacciona aos "
-"eventos tales como <code>button-press-event</code> no noso caso. Para o "
-"mural de fotos, todos os <code>ClutterActor</code> do mural deben ser "
-"inicialmente reactivos."
 
-#: C/photo-wall.c.page:270(p)
-msgid ""
-"Line 9‒12: Now we connect the <code>button-press-event</code> to the "
-"<code>actor_clicked_cb</code> callback which we will look at next."
+#: C/menubar.py.page:171(section/title) C/menubar.vala.page:178(section/title)
+msgid "Translatable strings"
 msgstr ""
-"Liñas 9-12: agora conéctase o evento <code>button-press-evento</code> á "
-"chamada <code>actor_clicked_cb</code> que veremos máis adiante."
 
-#: C/photo-wall.c.page:273(p)
-msgid "At this point we've got a wall of images that are ready to be viewed."
+#: C/menubar.py.page:172(section/p) C/menubar.vala.page:179(section/p)
+msgid ""
+"Since GNOME applications are being translated into <link href=\"http://l10n.";
+"gnome.org/languages/\">many languages</link>, it is important that the "
+"strings in your application are translable. To make a label translatable, "
+"simple set <code>translatable=\"yes\"</code>:"
 msgstr ""
-"Neste punto obteremos un muro de imaxes que están listas para ser mostradas."
 
-#: C/photo-wall.c.page:277(title)
-msgid "Reacting to the clicks"
-msgstr "Reaccionar aos clics"
+#: C/menubar.py.page:176(section/code)
+#, no-wrap
+msgid "&lt;attribute name=\"label\" translatable=\"yes\"&gt;Quit&lt;/attribute&gt;"
+msgstr ""
 
-#: C/photo-wall.c.page:322(p)
+#: C/menubar.py.page:183(item/p)
 msgid ""
-"Lines 1‒4: We have to make sure our callback function matches the signature "
-"required for the <code>button_clicked_event</code> signal. For our example, "
-"we will only use the first argument, the <code>ClutterActor</code> that is "
-"actually clicked."
+"<link href=\"http://developer.gnome.org/gio/unstable/GSimpleAction.html";
+"\">GSimpleAction</link>"
 msgstr ""
 
-#: C/photo-wall.c.page:324(p)
+#: C/menubar.py.page:184(item/p) C/toolbar_builder.py.page:194(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"A few words on the arguments we are not using in this example. The "
-"<code>ClutterEvent</code> is different depending on what event is being "
-"handled. For example, a key event produces a <code>ClutterKeyEvent</code> "
-"from which you can get the key being pressed among other information. For "
-"mouse click events you get a <code>ClutterButtonEvent</code> from which you "
-"can get the <code>x</code> and <code>y</code> values. See the Clutter "
-"documentation for other <code>ClutterEvent</code> types."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkBuilder.html";
+"\">GtkBuilder</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/menubar.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Statusbar (Vala)"
+msgctxt "text"
+msgid "MenuBar (Vala)"
+msgstr "Barra de estado (Vala)"
 
-#: C/photo-wall.c.page:325(p)
+#: C/menubar.vala.page:39(item/p)
 msgid ""
-"The <code>user_data</code> is what one uses to pass data into the the "
-"function. A pointer to any data type can be passed in. If you need multiple "
-"data to be passed into the callback, you can place the data into a struct "
-"and pass its address in."
+"Now we will create the .vala file and use GtkBuilder to import the "
+"<file>menubar.ui</file> we just created."
 msgstr ""
 
-#: C/photo-wall.c.page:329(p)
+#: C/menubar.vala.page:43(section/code)
+#, no-wrap
 msgid ""
-"Line 7: We set up a static flag to track which state we are in: wall mode or "
-"focus mode. We start out in wall mode so no image has focus. Thus, we set "
-"the flag to <code>FALSE</code> initially."
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"MenuBar Example\");\n"
+"\t\tthis.set_default_size (200, 200);\n"
+"\t}\n"
+"}\n"
+"\n"
+"class MyApplication: Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\t\tnew MyWindow (this).show ();\n"
+"\t}\n"
+"\tprotected override void startup () {\n"
+"\t\tbase.startup ();\n"
+"\n"
+"\t\t/* Setup menubar. */\n"
+"\t\t/* Get the UI file. */\n"
+"\t\tvar builder = new Gtk.Builder ();\n"
+"\t\ttry {\n"
+"\t\t\tbuilder.add_from_file (\"menubar_basis.ui\");\n"
+"\t\t/* Handle the exception. */\n"
+"\t\t} catch (Error e) {\n"
+"\t\t\terror (\"Unable to load file: %s\", e.message);\n"
+"\t\t}\n"
+"\n"
+"\t\t/* Get the menubar from the builder. */\n"
+"\t\tthis.menubar = builder.get_object (\"menubar\") as MenuModel;\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main creates and runs the application. */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/photo-wall.c.page:330(p)
+#: C/menubar.vala.page:44(section/p)
 msgid ""
-"Line 9: This line of code runs a custom function, "
-"<code>foreach_set_focus_state</code>, for each element in our "
-"<code>actor_list</code>, passing it the address to the <code>is_focused</"
-"code> flag. We'll see the definition of the <code>foreach_set_focus_state</"
-"code> function in the next section."
+"Now, compile the vala file, and run it. The application should look like the "
+"picture at the top of this page."
 msgstr ""
 
-#: C/photo-wall.c.page:331(p)
+#: C/menubar.vala.page:79(section/p)
 msgid ""
-"Lines 13‒19: Reaching this code means that one image currently has focus and "
-"we want to return to wall mode. The <code>clutter_actor_animate</code> "
-"function is used to animate a <code>ClutterActor</code>'s property or "
-"properties from the current state(s) to the specified state(s). The "
-"arguments are as follows:"
+"Following this pattern, you can now add a <code>Copy</code> and a "
+"<code>Paste</code> item to the <code>Edit</code> submenu, and an "
+"<code>About</code> item to the <code>Help</code> submenu. We will hold off "
+"on adding items to the <link xref=\"menubar.vala#choices\">Choices submenu</"
+"link> until further in the tutorial."
 msgstr ""
 
-#: C/photo-wall.c.page:333(p)
-msgid "The address of the <code>ClutterActor</code> to animate"
-msgstr "O enderezo do <code>ClutterActor</code> a animar"
-
-#: C/photo-wall.c.page:334(p)
+#: C/menubar.vala.page:81(note/p)
 msgid ""
-"The animation mode to use. Here we use <code>CLUTTER_LINEAR</code> so that "
-"we have a constant speed for animation."
+"You do not need to recompile the vala program if you only made changes to "
+"the UI file. Just run your previously compiled application, and the UI "
+"changes will be reflected."
 msgstr ""
 
-#: C/photo-wall.c.page:335(p)
-msgid ""
-"The duration of the animation in milliseconds. I've chosen 500 ms for this "
-"example."
+#: C/menubar.vala.page:87(section/p)
+msgid "This is a three step process."
 msgstr ""
 
-#: C/photo-wall.c.page:336(p)
+#: C/menubar.vala.page:89(item/p)
 msgid ""
-"The remaining arguments are property/value pairs. Here we want to set the "
-"<code>x</code> value to the starting <code>x</code> value this "
-"<code>ClutterActor</code> was at before being brought into focus."
+"First we create the ActionEntry array in the MyApplication class. An "
+"ActionEntry consists of:"
 msgstr ""
 
-#: C/photo-wall.c.page:337(p)
-msgid ""
-"The last argument must always be <code>NULL</code> to indicate that there "
-"are no more properties to be set."
+#: C/menubar.vala.page:92(item/p)
+msgid "the \"action name\" (mandatory)"
 msgstr ""
 
-#: C/photo-wall.c.page:339(p)
+#: C/menubar.vala.page:93(item/p)
 msgid ""
-"The <code>depth</code> property needs a little more explaining. We need to "
-"raise the focused image so that it doesn't slide behind other "
-"<code>ClutterActor</code>s. In this section we are returning it to the same "
-"depth as the others on the wall."
+"the callback function to connect to the \"activate\" signal of the action "
+"(if applicable)"
 msgstr ""
 
-#: C/photo-wall.c.page:340(p)
+#: C/menubar.vala.page:94(item/p)
 msgid ""
-"Depth also determines which <code>ClutterActor</code>s receive events. A "
-"<code>ClutterActor</code> with a higher depth value receives the click "
-"events and can choose whether the event gets sent to <code>ClutterActor</"
-"code>s under it. We'll see how that works in a few steps."
+"the type of the parameter that must be passed to the activate function for "
+"the action (if applicable)"
 msgstr ""
 
-#: C/photo-wall.c.page:342(p)
-msgid ""
-"Line 24: Reaching this line of code means we are currently in the wall state "
-"and are about to give a <code>ClutterActor</code> focus. Here we save the "
-"starting position so that we can return to it later."
+#: C/menubar.vala.page:95(item/p)
+msgid "the initial state for this action (if applicable)"
 msgstr ""
 
-#: C/photo-wall.c.page:343(p)
-msgid ""
-"Line 25: Setting the <code>ClutterActor</code>'s <code>reactive</code> "
-"property to <code>TRUE</code> makes this <code>ClutterActor</code> react to "
-"events. In this focused state the only <code>ClutterActor</code> that we "
-"want to receive events will be the <code>ClutterActor</code> being viewed. "
-"Clicking on the <code>ClutterActor</code> will return it to its starting "
-"position."
+#: C/menubar.vala.page:96(item/p)
+msgid "the callback to connect to \"change-state\" signal (if applicable)"
 msgstr ""
 
-#: C/photo-wall.c.page:344(p)
+#: C/menubar.vala.page:98(item/code)
+#, no-wrap
 msgid ""
-"Lines 27‒33: This is similar to the above block of code. Notice that we are "
-"setting the the depth to raise it above the other images."
+"\n"
+"const ActionEntry[] actions = {\n"
+"    { \"new\", new_cb }, // {\"action name\", callback_function}\n"
+"    { \"quit\", quit_cb }\n"
+"};"
 msgstr ""
 
-#: C/photo-wall.c.page:345(p)
-msgid ""
-"Line 37: Here we toggle the <code>is_focused</code> flag to the current "
-"state."
+#: C/menubar.vala.page:105(item/p)
+msgid "Second, we create the callback functions the actions are connected to."
 msgstr ""
 
-#: C/photo-wall.c.page:346(p)
+#: C/menubar.vala.page:106(item/code)
+#, no-wrap
 msgid ""
-"As mentioned previously, the <code>ClutterActor</code>s with higher "
-"<code>depth</code> values receive events but can allow <code>ClutterActor</"
-"code>s below them to also receive events. Returning <code>TRUE</code> will "
-"stop events from being passed down, while <code>FALSE</code> will pass "
-"events down."
+"\n"
+"void new_cb (SimpleAction action, Variant? parameter) {\n"
+"    print (\"You clicked \\\"New\\\"\\n\");\n"
+"    //new MyWindow (this).show ();\n"
+"}\n"
+"\n"
+"void quit_cb (SimpleAction action, Variant? parameter) {\n"
+"    print (\"You clicked \\\"Quit\\\"\\n\");\n"
+"    //this.quit ();  **Bug #674090**\n"
+"}"
 msgstr ""
 
-#: C/photo-wall.c.page:348(p)
+#: C/menubar.vala.page:117(item/p)
 msgid ""
-"Remember, however, that to receive events the <code>ClutterActor</code>s "
-"must be set <code>reactive</code>."
+"And lastly, we connect the menu items to the actions in the XML file by "
+"adding the \"action\" attribute:"
 msgstr ""
 
-#: C/photo-wall.c.page:352(p)
+#: C/menubar.vala.page:118(item/code)
+#, no-wrap
 msgid ""
-"The following is the convenience function passed to <code>g_slist_foreach</"
-"code>."
+"\n"
+"&lt;item&gt;\n"
+"  &lt;attribute name=\"label\"&gt;New&lt;/attribute&gt;\n"
+"  &lt;attribute name=\"action\"&gt;app.new&lt;/attribute&gt;\n"
+"&lt;/item&gt;\n"
+"&lt;item&gt;\n"
+"  &lt;attribute name=\"label\"&gt;Quit&lt;/attribute&gt;\n"
+"  &lt;attribute name=\"action\"&gt;app.quit&lt;/attribute&gt;\n"
+"&lt;/item&gt;"
 msgstr ""
 
-#: C/photo-wall.c.page:365(p)
+#: C/menubar.vala.page:134(section/p)
 msgid ""
-"Lines 2‒5: The signature of this function requires two <code>gpointer</"
-"code>s. The first is a pointer to the <code>ClutterActor</code> that our "
-"<code>GSList</code> holds and the other is the <code>is_focused</code> flag "
-"that we've passed in the previous section. We want to cast these and store "
-"them for easy use."
+"Lines 30 to 80 inclusive of the <link xref=\"menubar.vala#xml-code\"/> "
+"demonstrate the XML code used to create the UI for <gui>Choices</gui> menu."
 msgstr ""
 
-#: C/photo-wall.c.page:366(p)
+#: C/menubar.vala.page:145(section/p)
 msgid ""
-"Line 7: Depending on which boolean value is passed in, the "
-"<code>ClutterActor</code> will be set to respond to events or not."
+"The complete example files contain both application actions and window "
+"applications. The window actions are the ones usually included in the <link "
+"xref=\"gmenu.vala\">application menu</link> also. It is not good practice to "
+"include window actions in the applcation menu. For demonstration purposes, "
+"the complete example files which follow include XML in the UI file which "
+"creates the application menu which includes a \"New\" and \"Open\" item, and "
+"these are hooked up to the same actions as the menubar items of the same "
+"name."
 msgstr ""
 
-#: C/photo-wall.c.page:371(title) C/image-viewer.vala.page:274(title)
-#: C/image-viewer.cpp.page:204(title) C/image-viewer.c.page:216(title)
-#: C/guitar-tuner.vala.page:247(title) C/guitar-tuner.cpp.page:249(title)
-#: C/guitar-tuner.c.page:251(title)
-msgid "Build and run the application"
-msgstr "Construír e executar o aplicativo"
+#: C/menubar.vala.page:156(section/title)
+msgid "Complete Vala file for this example"
+msgstr ""
 
-#: C/photo-wall.c.page:372(p)
+#: C/menubar.vala.page:157(section/code)
+#, no-wrap
 msgid ""
-"All of the code should now be ready to go. All you need now is some pictures "
-"to load. By default, the pictures are loaded from a <file>berlin_images</"
-"file> directory. If you want, you can change the <code>#define "
-"IMAGE_DIR_PATH</code> line near the top to refer to your photo directory, or "
-"create a <file>berlin_images</file> directory by clicking "
-"<guiseq><gui>Project</gui><gui>New Directory...</gui></guiseq> and creating "
-"a <file>berlin_images</file> directory as a subdirectory of the <file>photo-"
-"wall</file> directory. Make sure to put at least twelve images in the "
-"directory!"
-msgstr ""
-"Todo o código debería estar listo para executarse. Todo o que necesita son "
-"algunhas imaxes para cargar. De maneira predeterminada, as imaxes cárganse "
-"desde o cartafol <file>berlin_images</file>. Se quere, pode cambiar a liña "
-"<code>#define IMAGE_DIR_PATH</code> do principio para que faga referencia ao "
-"seu cartafol de fotos, ou crear un cartafol <file>berlin_images</file> "
-"premendo en <guiseq><gui>Proxecto</gui><gui>Cartafol novo…</gui></guiseq> e "
-"creando un cartafol <file>berlin_images</file> como subcartafol do cartafol "
-"<file>mural-fotos</file>. Asegúrese de poñer cando menos doce imaxes no "
-"cartafol."
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\t/* Callback functions for the window actions. */\n"
+"\tvoid copy_cb (SimpleAction action, Variant? parameter) {\n"
+"\t\tprint (\"\\\"Copy\\\" activated\\n\");\n"
+"\t}\n"
+"\n"
+"\tvoid paste_cb (SimpleAction action, Variant? parameter) {\n"
+"\t\tprint (\"\\\"Paste\\\" activated\\n\");\n"
+"\t}\n"
+"\n"
+"\tvoid shape_cb (SimpleAction action, Variant? parameter) {\n"
+"\t\tprint (\"shape is set to %s\\n\", parameter.get_string(null));\n"
+"\t\taction.set_state (parameter);\n"
+"\t}\n"
+"\n"
+"\t/* Create the window actions. */\n"
+"\tconst ActionEntry[] actions = {\n"
+"\t\t/*{ \"action name\", cb to connect to \"activate\" signal, parameter type,\n"
+"\t\t     initial state, cb to connect to \"change-state\" signal } */\n"
+"\t\t{ \"copy\", copy_cb },\n"
+"\t\t{ \"paste\", paste_cb },\n"
+"\t\t{ \"shape\", shape_cb, \"s\", \"'line'\"}\n"
+"\t};\n"
+"\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"MenuBar Example\");\n"
+"\t\tthis.set_default_size (200, 200);\n"
+"\n"
+"\t\t/* Setup window actions. */\n"
+"\t\tthis.add_action_entries (actions, this);\n"
+"\t}\n"
+"}\n"
+"\n"
+"class MyApplication: Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\t\tnew MyWindow (this).show ();\n"
+"\t}\n"
+"\n"
+"\t/* Callback functions for the application actions. */\n"
+"\tvoid new_cb (SimpleAction action, Variant? parameter) {\n"
+"\t\t//new MyWindow (this).show ();\n"
+"\t\tprint (\"You clicked \\\"New\\\"\\n\");\n"
+"\t}\n"
+"\n"
+"\tvoid quit_cb (SimpleAction action, Variant? parameter) {\n"
+"\t\tprint (\"You clicked \\\"Quit\\\"\\n\");\n"
+"\t\t//this.quit ();  **Bug #674090**\n"
+"\t}\n"
+"\n"
+"\tvoid awesome_cb (SimpleAction action, Variant? parameter) {\n"
+"\t\tvar active = action.get_state ().get_boolean ();\n"
+"\t\taction.set_state (new Variant.boolean (!active));\n"
+"\t\tif (active)\n"
+"\t\t\tprint (\"You unchecked \\\"Awesome\\\"\\n\");\n"
+"\t\telse\n"
+"\t\t\tprint (\"You checked \\\"Awesome\\\"\\n\");\n"
+"\t}\n"
+"\n"
+"\tvoid state_cb (SimpleAction action, Variant? parameter) {\n"
+"\t\tprint (\"state is set to %s\\n\", parameter.get_string(null));\n"
+"\t\taction.set_state (parameter);\n"
+"\t}\n"
+"\n"
+"\t/* Create the application actions. */\n"
+"\tconst ActionEntry[] actions = {\n"
+"\t\t{ \"new\", new_cb },\n"
+"\t\t{ \"quit\", quit_cb },\n"
+"\t\t{ \"awesome\", awesome_cb, null, \"false\" },\n"
+"\t\t{ \"state\", state_cb, \"s\", \"'off'\" }\n"
+"\t};\n"
+"\n"
+"\tprotected override void startup () {\n"
+"\t\tbase.startup ();\n"
+"\n"
+"\t\t/* Setup application actions. */\n"
+"\t\tthis.add_action_entries (actions, this);\n"
+"\n"
+"\t\t/* Setup menubar and app_menu. */\n"
+"\t\t/* Get the UI file. */\n"
+"\t\tvar builder = new Gtk.Builder ();\n"
+"\t\ttry {\n"
+"\t\t\tbuilder.add_from_file (\"menubar.ui\");\n"
+"\t\t} catch (Error e) {\n"
+"\t\t\terror (\"Unable to load file: %s\", e.message);\n"
+"\t\t}\n"
+"\n"
+"\t\t/* Get the menubar from the builder. */\n"
+"\t\tthis.menubar = builder.get_object (\"menubar\") as MenuModel;\n"
+"\n"
+"\t\t/* Get the app_menu from the builder. */\n"
+"\t\tthis.app_menu = builder.get_object (\"appmenu\") as MenuModel;\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main creates and runs the application. */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
 
-#: C/photo-wall.c.page:374(p)
-msgid ""
-"When you have done that, click <guiseq><gui>Build</gui><gui>Build Project</"
-"gui></guiseq> to build everything again, then <guiseq><gui>Run</"
-"gui><gui>Execute</gui></guiseq> to start the application."
+#: C/menubar.vala.page:160(section/title)
+msgid "Mnemonics"
 msgstr ""
-"Cando teña que facer iso, prema <guiseq><gui>Construír</gui><gui>Construír "
-"proxecto</gui></guiseq> para construír todo de novo, logo "
-"<guiseq><gui>Executar</gui><gui>Executar</gui></guiseq> para iniciar o "
-"aplicativo."
 
-#: C/photo-wall.c.page:375(p)
+#: C/menubar.vala.page:166(section/title)
+#, fuzzy
+#| msgid "Selectors"
+msgid "Accelerators"
+msgstr "Selectores"
+
+#: C/menubar.vala.page:182(section/p)
 msgid ""
-"If you haven't already done so, choose the <file>Debug/src/photo-wall</file> "
-"application in the dialog that appears. Finally, hit <gui>Run</gui> and "
-"enjoy!"
+"<code mime=\"application/xml\">&lt;attribute name=\"label\" translatable="
+"\"yes\"&gt;Quit&lt;/attribute&gt;</code>"
 msgstr ""
-"Se non o fixo aínda, seleccione o aplicativo <file>Debug/src/photo-wall</"
-"file> no diálogo que aparece. Finalmente, prema <gui>Executar</gui> e "
-"desfrute!"
 
-#: C/photo-wall.c.page:380(p)
+#: C/menubar.vala.page:191(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"photo-wall/photo-wall.c\">reference code</link>."
+"<link href=\"http://valadoc.org/gio-2.0/GLib.ActionEntry.html\";>Glib."
+"ActionEntry</link>"
 msgstr ""
-"Se ten problemas ao executar este titorial compare o seu código con este "
-"<link href=\"photo-wall/photo-wall.c\">código de referencia</link>."
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/paned.py.page:21(None)
+#: C/menubar.vala.page:192(item/p)
 #, fuzzy
-#| msgid "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
-msgid "@@image: 'media/paned.png'; md5=01e36d8a51ee18313616d63d2e15d993"
-msgstr "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
-
-#: C/paned.py.page:7(title)
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://valadoc.org/gio-2.0/Gtk.Builder.html\";>Gtk.Builder</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/menubutton.js.page:21(media) C/menubutton.py.page:27(media)
+#: C/menubutton.vala.page:21(media)
 #, fuzzy
-#| msgid "Python"
-msgid "Paned (Python)"
-msgstr "Python"
+#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
+msgctxt "_"
+msgid ""
+"external ref='media/menubutton.png' md5='1feb7b836a522c3007079d4420621d9d'"
+msgstr "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
 
-#: C/paned.py.page:17(desc)
-msgid "A widget with two adjustable panes"
-msgstr ""
+#: C/menubutton.js.page:7(info/title)
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "MenuButton (JavaScript)"
+msgstr "JavaScript"
 
-#: C/paned.py.page:20(title)
-msgid "Paned"
+#: C/menubutton.js.page:12(credit/name)
+msgid "Anna Zacchi"
 msgstr ""
 
-#: C/paned.py.page:22(p)
-msgid "Two images in two adjustable panes, horizontally aligned."
+#: C/menubutton.js.page:17(info/desc) C/menubutton.py.page:23(info/desc)
+#: C/menubutton.vala.page:17(info/desc)
+msgid "A widget that shows a menu when clicked on"
 msgstr ""
 
-#: C/paned.py.page:32(title)
-msgid "Useful methods for a Paned widget"
-msgstr ""
+#: C/menubutton.js.page:20(page/title) C/menubutton.py.page:26(page/title)
+#: C/menubutton.vala.page:20(page/title)
+msgid "MenuButton"
+msgstr "MenuButton"
 
-#: C/paned.py.page:33(p)
+#: C/menubutton.js.page:22(page/p) C/menubutton.py.page:28(page/p)
+#: C/menubutton.vala.page:22(page/p)
 msgid ""
-"To have two vertically aligned panes, use <code>Gtk.Orientation.VERTICAL</"
-"code> instead of <code>Gtk.Orientation.HORIZONTAL</code>. The method "
-"<code>add1(widget1)</code> will add the <code>widget1</code> to the top "
-"pane, and <code>add2(widget2)</code> will add the <code>widget2</code> to "
-"the bottom pane."
-msgstr ""
-
-#: C/paned.py.page:40(link)
-msgid "GtkPaned"
+"The GtkMenuButton widget is used to display a menu when clicked on. This "
+"menu can be provided either as a GtkMenu, or an abstract GMenuModel. The "
+"GtkMenuButton widget can hold any valid child widget. That is, it can hold "
+"almost any other standard GtkWidget. The most commonly used child is the "
+"provided GtkArrow."
 msgstr ""
 
-#: C/model-view-controller.py.page:8(title)
-msgid "The Model/View/Controller design (Python)"
+#: C/menubutton.js.page:26(note/p) C/menubutton.py.page:30(note/p)
+#: C/menubutton.vala.page:26(note/p)
+msgid "You need to be running GNOME 3.6 for the MenuButton to work."
 msgstr ""
 
-#: C/model-view-controller.py.page:12(desc)
-#: C/model-view-controller.py.page:25(title)
-msgid "The Model/View/Controller design"
+#: C/menubutton.js.page:27(page/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const Application = new Lang.Class ({\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application ({ application_id: 'org.example.myapp',\n"
+"                                                  flags: Gio.ApplicationFlags.FLAGS_NONE });\n"
+"\n"
+"       //connect to 'activate' and 'startup' signals to the callback functions\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"       this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    //create the UI (in this case it's just the ApplicationWindow)\n"
+"    _buildUI: function() {\n"
+"        this._window = new Gtk.ApplicationWindow({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"Welcome to GNOME\" });\n"
+"        this._window.set_default_size(600, 400);\n"
+"        this.grid = new Gtk.Grid();\n"
+"        this._window.add(this.grid);\n"
+"\n"
+"\n"
+"        this._menuButton = new Gtk.MenuButton();\n"
+"        this.grid.attach(this._menuButton, 0, 0, 1, 1 );\n"
+"        this.menu = new Gtk.Menu.new_from_model(this.menuModel);\n"
+"\n"
+"        this.menu.show();\n"
+"        this._menuButton.set_menu(this.menu);\n"
+"        this._menuButton.set_size_request(80, 35);\n"
+"        this._menuButton.show();\n"
+"\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"    _showNew: function() {\n"
+"    print(\"New Menu. It doesn't do anything. It is only a demonstration.\");\n"
+"    },\n"
+"\n"
+"    _showAbout: function() {\n"
+"        print(\"No AboutDialog here.  This is only a demonstration.\");\n"
+"    },\n"
+"\n"
+"    //create the menu items and connect the signals to the callback functions.\n"
+"    _initMenus: function() {\n"
+"        let newAction = new Gio.SimpleAction({ name: 'new' });\n"
+"        newAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showNew();\n"
+"            }));\n"
+"        this.application.add_action(newAction);\n"
+"\n"
+"        let aboutAction = new Gio.SimpleAction({ name: 'about' });\n"
+"        aboutAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showAbout();\n"
+"            }));\n"
+"        this.application.add_action(aboutAction);\n"
+"\n"
+"        let quitAction = new Gio.SimpleAction({ name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"         this.application.add_action(quitAction);\n"
+"\n"
+"        this.menuModel = new Gio.Menu();\n"
+"\n"
+"        this.menuItemNew = Gio.MenuItem.new(\"New\", 'app.new');\n"
+"        this.menuItemAbout = Gio.MenuItem.new(\"About\", 'app.about');\n"
+"        this.fileMenuItem = Gio.MenuItem.new(\"Other\", null);\n"
+"\n"
+"        this.menuModel.append_item(this.menuItemNew);\n"
+"        this.menuModel.append_item(this.menuItemAbout);\n"
+"\n"
+"        //submenu\n"
+"        this.subMenu = new Gio.Menu();\n"
+"        this.fileMenuItem.set_submenu(this.subMenu);\n"
+"        this.menuItemQuit = Gio.MenuItem.new(\"Quit\", 'app.quit');\n"
+"        this.subMenu.append_item(this.menuItemQuit);\n"
+"        this.menuModel.append_item(this.fileMenuItem);\n"
+"    },\n"
+"\n"
+"    //callback function for 'activate' signal\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    //callback function for 'startup' signal\n"
+"    _onStartup: function() {\n"
+"        //You must call _initMenus() before calling _buildUI().\n"
+"        this._initMenus();\n"
+"        this._buildUI();\n"
+"    }\n"
+"});\n"
+"\n"
+"//run the application\n"
+"let app = new Application();\n"
+"app.application.run(ARGV);\n"
 msgstr ""
 
-#: C/model-view-controller.py.page:32(p)
+#: C/menubutton.js.page:32(item/p) C/menubutton.vala.page:32(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Both the <link xref=\"treeview_simple_liststore.py\">TreeView</link> and the "
-"<link xref=\"combobox.py\">ComboBox</link> widgets are built on the "
-"<em>Model/View/Controller</em> design. The <em>Model</em> (an implementation "
-"of <code>Gtk.TreeModel</code>, usually <code>Gtk.TreeStore</code> or "
-"<code>Gtk.ListStore</code>) stores the data; the <em>View</em> (e.g. "
-"<code>Gtk.TreeView</code>, <code>Gtk.ComboBox</code>, or <code>Gtk."
-"ComboBoxText</code>) gets change notifications and displays the content of "
-"the model. The <em>Controller</em>, finally, changes the state of the model "
-"(via some methods in the model's implementation - such as <code>append()</"
-"code> or <code>remove()</code>) and notifies the view of these changes (via "
-"signals like <code>\"changed\"</code>)."
+"<link href=\"http://developer.gnome.org/gtk3/3.5/gtk3-GtkMenuButton.html";
+"\">MenuButton</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/model-view-controller.py.page:37(title)
-msgid "The Model"
-msgstr ""
+#: C/menubutton.py.page:7(info/title) C/tooltip.py.page:7(info/title)
+#, fuzzy
+#| msgid "MenuButton"
+msgctxt "text"
+msgid "MenuButton"
+msgstr "MenuButton"
 
-#: C/model-view-controller.py.page:39(p)
+#: C/menubutton.py.page:36(section/code)
+#, no-wrap
 msgid ""
-"The main difference between the two main implementations of <code>Gtk."
-"TreeModel</code> is that <code>Gtk.ListStore</code> contains simple rows of "
-"data without children, whereas <code>Gtk.TreeStore</code> also contains rows "
-"of data, but each row may have child rows (which in turn can have child "
-"rows, and so on)."
+"from gi.repository import Gtk\n"
+"from gi.repository import Gio\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Menubutton Example\", application=app)\n"
+"        self.set_default_size(600, 400)\n"
+"\n"
+"        grid = Gtk.Grid()\n"
+"        \n"
+"        # a menubutton\n"
+"        menubutton = Gtk.MenuButton()\n"
+"        menubutton.set_size_request(80, 35)\n"
+"        \n"
+"        grid.attach(menubutton, 0, 0, 1, 1)\n"
+"        \n"
+"        # a menu with two actions\n"
+"        menumodel = Gio.Menu()\n"
+"        menumodel.append(\"New\", \"app.new\")\n"
+"        menumodel.append(\"About\", \"win.about\")\n"
+"\n"
+"        # a submenu with one action for the menu\n"
+"        submenu = Gio.Menu()\n"
+"        submenu.append(\"Quit\", \"app.quit\")\n"
+"        menumodel.append_submenu(\"Other\", submenu)\n"
+"\n"
+"        # the menu is set as the menu of the menubutton\n"
+"        menubutton.set_menu_model(menumodel)\n"
+"\n"
+"        # the action related to the window (about)\n"
+"        about_action = Gio.SimpleAction.new(\"about\", None)\n"
+"        about_action.connect(\"activate\", self.about_callback)\n"
+"        self.add_action(about_action)\n"
+"        \n"
+"        self.add(grid)\n"
+"\n"
+"    # callback for \"about\"\n"
+"    def about_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"About\\\"\"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"        #  the actions related to the application\n"
+"        new_action = Gio.SimpleAction.new(\"new\", None)\n"
+"        new_action.connect(\"activate\", self.new_callback)\n"
+"        self.add_action(new_action)\n"
+"        \n"
+"        quit_action = Gio.SimpleAction.new(\"quit\", None)\n"
+"        quit_action.connect(\"activate\", self.quit_callback)\n"
+"        self.add_action(quit_action)\n"
+"    \n"
+"    # callback functions for the actions related to the application\n"
+"    def new_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"New\\\"\"\n"
+"\n"
+"    def quit_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"Quit\\\"\"\n"
+"        self.quit()\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/model-view-controller.py.page:41(p)
-msgid ""
-"The data in the Model can be retrieved or modified using the tree iter and "
-"column index, or <code>Gtk.TreeIter</code>, or <code>Gtk.TreePath</code>."
+#: C/menubutton.py.page:40(section/title)
+msgid "Useful methods for a MenuButton widget"
 msgstr ""
 
-#: C/model-view-controller.py.page:43(p)
+#: C/menubutton.py.page:41(section/p)
 msgid ""
-"As with Python's built-in list object you can use <code>len()</code> to get "
-"the number of rows and use slices to retrieve or set values. Otherwise, the "
-"method <code>append()</code> returns a <code>Gtk.TreeIter</code> instance, "
-"which points to the location of the newly inserted row. You can also "
-"retrieve a <code>Gtk.TreeIter</code> by calling <code>get_iter()</code>."
+"The positioning of the menu is determined by the \"direction\" property of "
+"the menu button and the \"halign\" or \"valign\" properties of the menu. For "
+"example, when the direction is <code>Gtk.ArrowType.DOWN</code> (other "
+"option: <code>UP</code>) and the horizontal alignment is <code>Gtk.Align."
+"START</code> (other options: <code>CENTER</code> and <code>END</code>), the "
+"menu will be positioned below the button, with the starting edge (depending "
+"on the text direction) of the menu aligned with the starting edge of the "
+"button. If there is not enough space below the button, the menu is popped up "
+"above the button instead. If the alignment would move part of the menu "
+"offscreen, it is 'pushed in'."
 msgstr ""
 
-#: C/model-view-controller.py.page:45(p)
+#: C/menubutton.py.page:43(section/p)
 msgid ""
-"As <code>Gtk.ListStore</code> contains only one level, i.e. nodes do not "
-"have any child nodes, a path is essentially the index of the row you want to "
-"access. In the case of <code>Gtk.TreeStore</code>, a path is a list of "
-"indexes or a string. The string form is a list of numbers separated by a "
-"colon. Each number refers to the offset at that level. Thus, the path <code>"
-"\"0\"</code> refers to the root node and the path <code>\"2:4\"</code> "
-"refers to the fifth child of the third node."
-msgstr ""
-
-#: C/model-view-controller.py.page:47(p)
-msgid "Useful methods for a <code>Gtk.TreeModel</code>:"
+"In the case of vertical alignment, the possible ArrowType directions are "
+"<code>LEFT</code> and <code>RIGHT</code> and the vertical alignment is again "
+"<code>START</code>, <code>CENTER</code> or <code>END</code>."
 msgstr ""
 
-#: C/model-view-controller.py.page:49(p)
+#: C/menubutton.py.page:45(section/p)
 msgid ""
-"<code>get_iter(path)</code> returns a <code>Gtk.TreeIter</code> instance "
-"pointing to <code>path</code>. This is expected to be a colon-separated list "
-"of numbers, or a tuple. For example, the string <code>\"10:4:0\"</code> is "
-"equivalent to the tuple <code>(10, 4, 0)</code>, as both would create a path "
-"of depth 3 pointing to the 11th child of the root node, the 5th child of "
-"that 11th child, and the 1st child of that 5th child."
+"<code>set_align_widget(alignment)</code> and <code>set_direction(direction)</"
+"code> can be used to set these properties."
 msgstr ""
 
-#: C/model-view-controller.py.page:50(p)
+#: C/menubutton.py.page:52(item/p)
 msgid ""
-"<code>iter_next(treeiter)</code> returns a <code>Gtk.TreeIter</code> "
-"instance pointing the node following treeiter at the current level or "
-"<code>None</code> if there is no next iter."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMenuButton.html";
+"\">MenuButton</link>"
 msgstr ""
 
-#: C/model-view-controller.py.page:51(p)
-msgid ""
-"<code>iter_has_child(treeiter)</code> returns <code>True</code> if "
-"<code>treeiter</code> has children, <code>False</code> otherwise."
-msgstr ""
+#: C/menubutton.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Button (Vala)"
+msgctxt "text"
+msgid "MenuButton (Vala)"
+msgstr "Botón (Vala)"
 
-#: C/model-view-controller.py.page:52(p)
+#: C/menubutton.vala.page:27(page/code)
+#, no-wrap
 msgid ""
-"<code>iter_children(treeiter)</code> returns a <code>Gtk.TreeIter</code> "
-"instance pointing to the first child of <code>treeiter</code> or <code>None</"
-"code> if <code>treeiter</code> has no children."
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"MenuButton Example\");\n"
+"\t\tthis.set_default_size (600, 400);\n"
+"\t\tvar grid = new Gtk.Grid ();\n"
+"\n"
+"\t\tvar menubutton = new Gtk.MenuButton();\n"
+"\t\tmenubutton.set_size_request (80, 35);\n"
+"\n"
+"\t\tvar menumodel = new Menu ();\n"
+"\t\tmenumodel.append (\"New\", \"app.new\");\n"
+"\t\tmenumodel.append (\"About\", \"win.about\");\n"
+"\n"
+"\t\t/* We create the last item as a MenuItem, so that\n"
+"\t\t * a submenu can be appended to this menu item.\n"
+"\t\t */\n"
+"\t\tvar submenu = new Menu ();\n"
+"\t\tmenumodel.append_submenu (\"Other\", submenu);\n"
+"\t\tsubmenu.append (\"Quit\", \"app.quit\");\n"
+"\t\tmenubutton.set_menu_model (menumodel);\n"
+"\n"
+"\t\tvar about_action = new SimpleAction (\"about\", null);\n"
+"\t\tabout_action.activate.connect (this.about_cb);\n"
+"\t\tthis.add_action (about_action);\n"
+"\n"
+"\t\tthis.add(grid);\n"
+"\t\tgrid.attach(menubutton, 0, 0, 1, 1);\n"
+"\t}\n"
+"\n"
+"\tvoid about_cb (SimpleAction simple, Variant? parameter) {\n"
+"\t\tprint (\"You clicked \\\"About\\\"\\n\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"public class MyApplication : Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\t\tnew MyWindow (this).show_all ();\n"
+"\t}\n"
+"\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.MyApplication\");\n"
+"\t}\n"
+"\n"
+"\t/* Override the 'startup' signal of GLib.Application. */\n"
+"\tprotected override void startup () {\n"
+"\t\tbase.startup ();\n"
+"\n"
+"\t\tvar new_action = new SimpleAction (\"new\", null);\n"
+"\t\tnew_action.activate.connect (this.new_cb);\n"
+"\t\tthis.add_action (new_action);\n"
+"\n"
+"\t\tvar quit_action = new SimpleAction (\"quit\", null);\n"
+"\t\tquit_action.activate.connect (this.quit);\n"
+"\t\tthis.add_action (quit_action);\n"
+"\t}\n"
+"\n"
+"\tvoid new_cb (SimpleAction simple, Variant? parameter) {\n"
+"\t\tprint (\"You clicked \\\"New\\\"\\n\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/model-view-controller.py.page:53(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/message-board.c.page:36(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/message-board.ogv'; md5=beb80c4538776dc2cdd26c95abea5027"
+msgctxt "_"
 msgid ""
-"<code>get_iter_first()</code> returns a <code>Gtk.TreeIter</code> instance "
-"pointing to the first iterator in the tree (the one at the path <code>\"0\"</"
-"code>) or <code>None</code> if the tree is empty."
+"external ref='media/message-board.ogv' md5='beb80c4538776dc2cdd26c95abea5027'"
 msgstr ""
+"@@image: 'media/message-board.ogv'; md5=beb80c4538776dc2cdd26c95abea5027"
 
-#: C/model-view-controller.py.page:56(p)
-msgid "Useful methods for a <code>Gtk.ListStore</code>:"
-msgstr ""
+#: C/message-board.c.page:7(info/title)
+#, fuzzy
+#| msgid "Message Board"
+msgctxt "text"
+msgid "Message Board (C)"
+msgstr "Taboleiro de mensaxes"
 
-#: C/model-view-controller.py.page:58(p)
-msgid ""
-"<code>append(row)</code> appends a new row to this list store, where "
-"<code>row</code> can be a list of values for each column; <code>row</code> "
-"can also be omitted or <code>None</code>, and in that case an empty row will "
-"be appended. The method returns a <code>Gtk.TreeIter</code> pointing to the "
-"appended row."
-msgstr ""
+#: C/message-board.c.page:10(info/desc)
+msgid "A simple program using WebKitGTK+ and the DOM."
+msgstr "Un programa sinxelo usando WebKitGTK+ e DOM."
 
-#: C/model-view-controller.py.page:59(p) C/model-view-controller.py.page:65(p)
-msgid ""
-"<code>remove(iter)</code> removes <code>iter</code> from the <code>Gtk."
-"ListStore</code>, and returns <code>True</code> if the iter is valid, and "
-"<code>False</code> if the iter is not. After being removed, <code>iter</"
-"code> is set to be the next valid row."
-msgstr ""
+#: C/message-board.c.page:21(page/title)
+msgid "Message Board"
+msgstr "Taboleiro de mensaxes"
 
-#: C/model-view-controller.py.page:62(p)
-msgid "Useful methods for a <code>Gtk.TreeStore</code>:"
+#: C/message-board.c.page:26(item/p)
+msgid "How to display a web page with WebKit."
+msgstr "Como mostrar unha páxina web con WebKit"
+
+#: C/message-board.c.page:27(item/p)
+msgid ""
+"How to manipulate the contents of a web page using WebKit's DOM functions."
 msgstr ""
+"Como manipular os contidos dunha páxina web usando as funcións de DOM de "
+"WebKit."
 
-#: C/model-view-controller.py.page:64(p)
+#: C/message-board.c.page:30(synopsis/p)
 msgid ""
-"<code>append(parent, row)</code> appends a new row to this tree store; "
-"<code>parent</code> must be a valid Gtk.TreeIter. If parent is not "
-"<code>None</code>, then it will append the new row after the last child of "
-"parent, otherwise it will append a row to the top level; <code>row</code> "
-"can be a list of values for each column, or it can be omitted or <code>None</"
-"code>; in this latter case an empty row will be appended. The method returns "
-"a <code>Gtk.TreeIter</code> pointing to the appended row."
+"This tutorial assumes you are familiar with the C programming language and "
+"have a basic understanding of GTK+, including how to create and place "
+"widgets and how to connect callback functions to signals. See <link xref="
+"\"image-viewer.c\"/> to learn the basics of GTK+."
 msgstr ""
+"Este titorial asume que vostede está familiarizado co linguaxe de "
+"programación C e ten coñecementos básicos de GTK+, incluíndo como crear e "
+"dispor widgets e como conectar funcións de callback a sinais. Vexa <link "
+"xref=\"image-viewer.c\"/> para aprender o básico de GTK+."
 
-#: C/model-view-controller.py.page:71(title)
-msgid "The View: the TreeView case"
+#: C/message-board.c.page:43(section/p)
+msgid ""
+"The GNOME platform includes WebKitGTK+, built on top of the powerful WebKit "
+"HTML framework. WebKit is used throughout GNOME, not just to view web pages "
+"on the Internet, but also to create rich user interfaces that can be easily "
+"styled with CSS."
 msgstr ""
+"A paltaforma GNOME inclúe WebKitGTK+, construído sobre o potente marco de "
+"traballo WebKit. WebKitGTK usase en todo GNOME, non só para ver páxinas web "
+"en Internet, senón tamén para crear interfaces de usuario enriquecidas ás "
+"que se poden engadir estilos de forma doada con CSS."
 
-#: C/model-view-controller.py.page:73(p)
+#: C/message-board.c.page:48(section/p)
 msgid ""
-"A Treeview shows the structure of children and parent items as a tree. See "
-"for instance <link xref=\"treeview_treestore.py\">this example</link>."
+"In this tutorial, you will create a simple message board using WebKit. The "
+"message board will allow you to enter some text and have it added to a list "
+"of messages in HTML. Before you begin, you need to set up a project in "
+"Anjuta."
 msgstr ""
+"Neste titorial, vostede creará un taboleiro de mensaxes sinxelo usando "
+"WebKit. O taboleiro de mensaxes permitiralle inserir algún texto e engadilo "
+"a unha lista de mensaxes en HTML. Antes de comezar debe configurar un "
+"proxecto en Anjuta."
 
-#: C/model-view-controller.py.page:75(p)
+#: C/message-board.c.page:54(item/p)
+#, fuzzy
+#| msgid ""
+#| "In Anjuta, click <guiseq><gui>File</gui><gui>New</gui><gui>Project</gui></"
+#| "guiseq> to open the new project assistant."
 msgid ""
-"The <code>Gtk.TreeViewColumn</code> is used to organize the vertical columns."
+"In Anjuta, click <guiseq><gui>File</gui><gui>New</gui> <gui>Project</gui></"
+"guiseq> to open the new project assistant."
 msgstr ""
+"En Anjuta, prema <guiseq><gui>Ficheiro</gui><gui>Novo</gui><gui>Proxecto</"
+"gui></guiseq> para abrir un asistente de novo proxecto."
 
-#: C/model-view-controller.py.page:77(p)
-msgid "Useful methods for a <code>Gtk.TreeView</code>:"
+#: C/message-board.c.page:56(item/p)
+#, fuzzy
+#| msgid ""
+#| "Select <gui>GTK+ (simple)</gui> on the <gui>C</gui> tab, and click "
+#| "<gui>Forward</gui>."
+msgid ""
+"Select <gui>GTK+ (simple)</gui> on the <gui>C</gui> tab, and click "
+"<gui>Continue</gui>."
 msgstr ""
+"Seleccione <gui>GTK+ (simple)</gui> na lapela <gui>C</gui> e prema "
+"<gui>Adiante</gui>."
 
-#: C/model-view-controller.py.page:79(p)
+#: C/message-board.c.page:58(item/p)
+#, fuzzy
+#| msgid ""
+#| "Fill out your details on the <gui>Basic information</gui> page. Use "
+#| "<input>message-board</input> for the project name. Click <gui>Forward</"
+#| "gui>."
 msgid ""
-"<code>set_model(model)</code> sets the model for this tree view. If this "
-"tree view already has a model set, it will remove it before setting the new "
-"model. If model is <code>None</code>, then it will unset the old model."
+"Fill out your details on the <gui>Basic information</gui> page. Use "
+"<input>message-board</input> for the project name. Click <gui>Continue</gui>."
 msgstr ""
+"Complete os detalles na páxina <gui>Información básica</gui>. Use "
+"<input>message-board</input> para o nome do proxecto. Prema <gui>Seguinte</"
+"gui>."
 
-#: C/model-view-controller.py.page:80(p)
+#: C/message-board.c.page:61(item/p)
 msgid ""
-"<code>get_model()</code> returns the model this tree view is based on, "
-"<code>None</code> if the model is unset."
+"Disable the <gui>Use GtkBuilder for user interface</gui> option as this "
+"tutorial builds the user-interface manually."
 msgstr ""
+"Desactive a opción <gui>Usar GtkBuilder para a interface de usuario</gui> xa "
+"que neste titorial construirase a interface de usuario de forma manual."
 
-#: C/model-view-controller.py.page:81(p)
+#: C/message-board.c.page:64(item/p)
+#, fuzzy
+#| msgid ""
+#| "You need to tell Anjuta you're using WebKitGTK+ on this project. On the "
+#| "<gui>Project options</gui> page, select <gui>Configure external packages</"
+#| "gui>. Click <gui>Forward</gui>. On the <gui>Configure external packages</"
+#| "gui> page, check <gui>webkitgtk-3.0</gui>."
 msgid ""
-"<code>append_column(column)</code> appends <code>column</code> to the list "
-"of columns."
+"You need to tell Anjuta you're using WebKitGTK+ on this project. On the "
+"<gui>Project options</gui> page, select <gui>Configure external packages</"
+"gui>. Click <gui>Continue</gui>. On the <gui>Configure external packages</"
+"gui> page, check <gui>webkitgtk-3.0</gui>."
 msgstr ""
+"Debe dicirlle a Anjuta que está usando WebKitGTK+ neste proxecto. Na páxina "
+"de <gui>Opcións do proxecto</gui>, seleccione <gui>Configurar paquetes "
+"externos</gui>. Prema <gui>Seguinte</gui>. Na páxina <gui>Configurar "
+"paquetes externos</gui> marque <gui>webkitgtk-3.0</gui>."
 
-#: C/model-view-controller.py.page:82(p)
+#: C/message-board.c.page:70(section/p)
 msgid ""
-"<code>get_selection()</code> gets the <code>Gtk.TreeSelection</code> "
-"associated with this tree view."
+"After you finish the new project assistant, open the file <file>src/main.c</"
+"file> from either the <gui>Project</gui> or the <gui>File</gui> tab. Anjuta "
+"will have filled this in with some basic GTK+ code from its templates. Since "
+"you are creating a WebKit project, you first need to include the WebKit "
+"headers. After the line that includes <code>gtk/gtk.h</code>, add the "
+"following line:"
 msgstr ""
 
-#: C/model-view-controller.py.page:85(p)
-msgid "Useful methods for a <code>Gtk.TreeViewColumn</code>:"
-msgstr ""
+#: C/message-board.c.page:77(section/code)
+#, no-wrap
+msgid "#include &lt;webkit/webkit.h&gt;"
+msgstr "#include &lt;webkit/webkit.h&gt;"
 
-#: C/model-view-controller.py.page:87(p)
+#: C/message-board.c.page:79(section/p)
 msgid ""
-"<code>add_attribute(renderer, attribute, value)</code> adds an attribute "
-"mapping to this column. <code>attribute</code> is the parameter on "
-"<code>renderer</code> to be set from the <code>value</code>"
+"Verify that everything works by building what you have so far. Click "
+"<guiseq><gui>Build</gui><gui>Build Project</gui></guiseq> or just press "
+"<keyseq><key>Shift</key><key>F7</key></keyseq>. The first time you build, "
+"you will be asked for some configure options. Just accept the defaults and "
+"click <gui>Execute</gui>."
 msgstr ""
 
-#: C/model-view-controller.py.page:88(p)
+#: C/message-board.c.page:85(section/p)
+#, fuzzy
+#| msgid ""
+#| "You should now be able to run the program. Click <guiseq><gui>Run</"
+#| "gui><gui>Execute</gui></guiseq> or just press <key>F3</key>. You should "
+#| "see an empty window appear."
 msgid ""
-"<code>pack_start(renderer, expand)</code> packs <code>renderer</code> into "
-"the beginning of this column. If <code>expand</code> is <code>False</code>, "
-"then <code>renderer</code> is allocated no more space than it needs. Any "
-"unused space is divided evenly between cells for which expand is <code>True</"
-"code>."
+"You should now be able to run the program. Click <guiseq> <gui>Run</"
+"gui><gui>Execute</gui></guiseq> or just press <key>F3</key>. You should see "
+"an empty window appear."
 msgstr ""
+"Debería poder executar o programa. Prema <guiseq><gui>Executar</"
+"gui><gui>Executar</gui></guiseq> ou prema <key>F3</key>. Debería aparecer "
+"unha xanela baleira."
 
-#: C/model-view-controller.py.page:89(p)
-msgid ""
-"<code>pack_end(renderer, expand)</code> adds <code>renderer</code> to end of "
-"this column. If <code>expand</code> is <code>False</code>, then "
-"<code>renderer</code> is allocated no more space than it needs. Any unused "
-"space is divided evenly between cells for which <code>expand</code> is "
-"<code>True</code>."
-msgstr ""
+#: C/message-board.c.page:91(section/title)
+msgid "Lay out your window and web view"
+msgstr "Dispor a súa xanela e a vista web"
 
-#: C/model-view-controller.py.page:90(p)
+#: C/message-board.c.page:93(section/p)
 msgid ""
-"<code>set_sort_column_id(sort_column_id)</code> sets the column of the model "
-"by which this column (of the view) should be sorted. This also makes the "
-"columnd header clickable."
+"Now that you can show a window, it's time to start working with WebKit. For "
+"this tutorial, you'll create a text entry and a web view and pack them both "
+"into a window. Find the function <code>create_window</code> and replace it "
+"with the following:"
 msgstr ""
+"Agora que pode mostrar unha xanela, é hora de comezar o traballo con webkit. "
+"Para este titorial, crearemos unha entrada de texto e unha vista web e "
+"empaquetarémolas nunha xanela. Busque a función <code>create_window</code> e "
+"substitúaa co seguinte:"
 
-#: C/model-view-controller.py.page:91(p)
+#: C/message-board.c.page:98(section/code)
+#, no-wrap
 msgid ""
-"<code>set_sort_indicator(setting)</code> sets whether a little arrow is "
-"displayed in the column header; <code>setting</code> can either be "
-"<code>True</code> (indicator is shown) or <code>False</code>."
+"\n"
+"static GtkWidget*\n"
+"create_window (void)\n"
+"{\n"
+"    GtkWidget *window, *box, *scroll, *view, *entry;\n"
+"\n"
+"    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);\n"
+"    gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);\n"
+"    gtk_window_set_title (GTK_WINDOW (window), \"Message Board\");\n"
+"    g_signal_connect (window, \"delete-event\", G_CALLBACK (gtk_main_quit), NULL);\n"
+"\n"
+"    box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);\n"
+"    gtk_container_set_border_width (GTK_CONTAINER (box), 6);\n"
+"    gtk_container_add (GTK_CONTAINER (window), box);\n"
+"\n"
+"    entry = gtk_entry_new ();\n"
+"    gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 0);\n"
+"\n"
+"    scroll = gtk_scrolled_window_new (NULL, NULL);\n"
+"    g_object_set (scroll, \"shadow-type\", GTK_SHADOW_IN, NULL);\n"
+"    gtk_box_pack_start (GTK_BOX (box), scroll, TRUE, TRUE, 0);\n"
+"\n"
+"    view = webkit_web_view_new ();\n"
+"    gtk_container_add (GTK_CONTAINER (scroll), view);\n"
+"    webkit_web_view_load_string (WEBKIT_WEB_VIEW (view),\n"
+"                                 \"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;\",\n"
+"                                 \"text/html\",\n"
+"                                 \"UTF-8\",\n"
+"                                 NULL);\n"
+"\n"
+"    gtk_widget_show_all (GTK_WIDGET (box));\n"
+"    return window;\n"
+"}\n"
 msgstr ""
 
-#: C/model-view-controller.py.page:92(p)
+#: C/message-board.c.page:133(section/p)
 msgid ""
-"<code>set_sort_order(order)</code> changes the order by which the column is "
-"sorted; <code>order</code> can either be <code>Gtk.SortType.ASCENDING</code> "
-"or <code>Gtk.SortType.DESCENDING</code>."
+"You first create a <code>GtkWindow</code> object and set its title and "
+"default size. You also connect the <code>gtk_main_quit</code> function to "
+"the <code>delete-event</code> signal. The <code>delete-event</code> signal "
+"is emitted when the window is closed. The <code>gtk_main_quit</code> "
+"function is part of GTK, and it quits the application."
 msgstr ""
+"Primeiro cree un obxecto <code>GtkWindow</code> e estabeleza o seu título e "
+"o seu tamaño predeterminado. Tamén pode conectar a función "
+"<code>gtk_main_quit</code> ao sinal <code>delete-event</code>. O sinal "
+"<code>delete-event</code> emítese cando se pecha a xanela. A función "
+"<code>gtk_main_quit</code> é parte de GTK+, e sae do aplicativo."
 
-#: C/model-view-controller.py.page:98(title)
-msgid "The View: the ComboBox case"
+#: C/message-board.c.page:139(section/p)
+msgid ""
+"You then create a vertical box and add it to the window. A window can only "
+"hold a single child widget, so you need to use a box to add multiple "
+"widgets. The second argument to <code>gtk_box_new</code> sets the amount of "
+"padding (in pixels) between each child, and the next line puts a six-pixel "
+"border around the entire thing."
 msgstr ""
 
-#: C/model-view-controller.py.page:100(p)
+#: C/message-board.c.page:145(section/p)
 msgid ""
-"A <code>Gtk.ComboBox</code> allows for the selection of an item from a "
-"dropdown menu, see for instance <link xref=\"combobox.py\">this example</"
-"link>. For a list of textual choices, one can also use the simpler <code>Gtk."
-"ComboBoxText</code>. Both <code>Gtk.ComboBox</code> and <code>Gtk."
-"ComboBoxText</code> can contain an entry."
+"You next create a <code>GtkEntry</code> object and pack it into the box. The "
+"third and fourth arguments to <code>gtk_box_pack_start</code> specify that "
+"the entry shouldn't take up any extra space the box has available. The "
+"fourth argument is the amount of padding you want around the entry. In this "
+"case, you set the padding to zero, because you're allowing the box to handle "
+"all the padding."
 msgstr ""
 
-#: C/model-view-controller.py.page:102(p)
-msgid "Useful methods for a <code>Gtk.ComboBox</code>:"
+#: C/message-board.c.page:152(section/p)
+msgid ""
+"Before you add a web view, you have to create a scrolled window to put it "
+"inside of. The scrolled window will place scrollbars on the right and bottom "
+"when necessary, and prevent your web view from filling your entire screen. "
+"This time, you pass <code>TRUE</code> and <code>TRUE</code> to "
+"<code>gtk_box_pack_start</code> to allow the scrolled window (and thus, the "
+"web view) to use any extra space available in the box."
 msgstr ""
 
-#: C/model-view-controller.py.page:104(p)
+#: C/message-board.c.page:159(section/p)
 msgid ""
-"The static method <code>new_with_entry()</code> creates a new empty "
-"<code>Gtk.ComboBox</code> with an entry; the static method "
-"<code>new_with_model(model)</code> creates a new one with the model "
-"initialized to <code>model</code>; and the static method "
-"<code>new_with_model_and_entry(model)</code> is a combination of the two."
+"Finally, you create a <code>WebKitWebView</code> and add it to the scrolled "
+"window. Then load a very basic HTML page into the web view by calling "
+"<code>webkit_web_view_load_string</code> with the following arguments:"
 msgstr ""
 
-#: C/model-view-controller.py.page:105(p)
+#: C/message-board.c.page:165(item/title)
+#, fuzzy
+#| msgid "WEBKIT_WEB_VIEW (view)"
+msgid "<code>WEBKIT_WEB_VIEW (view)</code>"
+msgstr "WEBKIT_WEB_VIEW (view)"
+
+#: C/message-board.c.page:166(item/p)
 msgid ""
-"<code>get_active_iter()</code> returns a <code>Gtk.TreeIter</code> pointing "
-"to the current active item. If no active item exists, <code>None</code> is "
-"returned."
+"The view itself. Because <code>view</code> is typed as a <code>GtkWidget*</"
+"code>, you have to use <code>WEBKIT_WEB_VIEW</code> to safely cast the "
+"object."
 msgstr ""
+"A vista por si mesma. Xa que <code>view</code> é de tipo <code>GtkWidget*</"
+"code>, debe usar <code>WEBKIT_WEB_VIEW</code> para converter o tipo de "
+"obxecto con seguranza."
+
+#: C/message-board.c.page:171(item/title)
+#, fuzzy
+#| msgid "\"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;\""
+msgid "<code>\"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;\"</code>"
+msgstr "\"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;\""
+
+#: C/message-board.c.page:172(item/p)
+msgid "The simplest HTML file you could possibly write."
+msgstr "O ficheiro HTLM máis sinxelo que pode escribir."
 
-#: C/model-view-controller.py.page:106(p)
+#: C/message-board.c.page:175(item/title)
+#, fuzzy
+#| msgid "\"text/html\""
+msgid "<code>\"text/html\"</code>"
+msgstr "\"text/html\""
+
+#: C/message-board.c.page:176(item/p)
 msgid ""
-"<code>set_model(model)</code> sets the model used by this combo box to be "
-"<code>model</code>, and it will unset a previously set model (if there is "
-"any). If <code>model</code> is <code>None</code>, then it will unset the "
-"model. Note that this function does not clear the cell renderers."
+"The MIME type of the content you provided. In this case, you're using plain "
+"HTML."
 msgstr ""
+"O tipo MIME do contido que forneceu. Neste caso, está usando HTML plano."
 
-#: C/model-view-controller.py.page:107(p)
-msgid ""
-"<code>set_entry_text_column(text_column)</code> sets the model column which "
-"this combo box should use to get strings from to be <code>text_column</"
-"code>. The column <code>text_column</code> in the model of this combo box "
-"must be of type <code>str</code> (this is only relevant if this combo box "
-"has been created with the “has-entry” property set to True)."
+#: C/message-board.c.page:180(item/title)
+msgid "<code>\"UTF-8\"</code>"
 msgstr ""
 
-#: C/model-view-controller.py.page:108(p)
+#: C/message-board.c.page:181(item/p)
 msgid ""
-"<code>set_wrap_width(width)</code> sets the wrap width of this combo box to "
-"be <code>width</code>. The wrap width is basically the preferred number of "
-"columns when you want the popup to be layed out in a grid."
+"The character encoding of the content you provided. Although you only used "
+"ASCII characters, it's a good idea to specify UTF-8. UTF-8 is used as the "
+"default encoding throughout the GNOME platform."
 msgstr ""
+"A codificación de caracteres do contido que forneceu. Aínda que só se usen "
+"caracteres ASCII é boa idea especificar UTF-8. UTF-8 úsase como a "
+"codificación predeterminada na plataforma GNOME."
 
-#: C/model-view-controller.py.page:111(p)
-msgid "Useful methods for a <code>Gtk.ComboBoxText</code>:"
+#: C/message-board.c.page:186(item/title)
+msgid "<code>NULL</code>"
 msgstr ""
 
-#: C/model-view-controller.py.page:113(p)
+#: C/message-board.c.page:187(item/p)
 msgid ""
-"The static method <code>new_with_entry()</code> creates a new empty "
-"<code>Gtk.ComboBoxText</code> with an entry."
+"The base URI. You don't need it in this simple example, but you might want "
+"to provide a <sys>file:</sys> URI if you add images or other features where "
+"you want to use relative URI references."
 msgstr ""
+"O URI base. Non o precisa neste exemplo sinxelo, pero podería fornecer unha "
+"URI <sys>file:</sys> se quere engadir imaxes ou outras características onde "
+"queira usar preferencias relativas a URI."
 
-#: C/model-view-controller.py.page:114(p)
+#: C/message-board.c.page:194(note/p)
 msgid ""
-"<code>append_text(text)</code> appends <code>text</code> to the list of "
-"strings stored in this combo box."
+"Every time you add a widget, you have to call <code>gtk_widget_show</code> "
+"on it for it to be visible. If you call <code>gtk_widget_show_all</code> on "
+"a container widget like a <code>GtkBox</code>, GTK+ will automatically show "
+"all the widgets inside the container, to any depth. Sometimes you don't want "
+"to call <code>gtk_widget_show_all</code>, such as when you want to "
+"dynamically hide and show some widgets in response to events."
 msgstr ""
 
-#: C/model-view-controller.py.page:115(p)
+#: C/message-board.c.page:202(section/p)
 msgid ""
-"<code>get_active_text()</code> returns the currently active string in this "
-"combo box, or <code>None</code> if none is selected. If this combo box "
-"contains an entry, this function will return its contents (which will not "
-"necessarily be an item from the list)."
-msgstr ""
-
-#: C/model-view-controller.py.page:121(title)
-msgid "The View: the Cellrenderers"
+"Finally, you have to call <code>gtk_widget_show_all</code> on the box. "
+"Otherwise, none of the widgets you created will be visible. (The window is "
+"shown in the <code>main</code> function with <code>gtk_widget_show</code>.)"
 msgstr ""
 
-#: C/model-view-controller.py.page:123(p)
+#: C/message-board.c.page:206(section/p)
 msgid ""
-"The View makes use of <code>Gtk.CellRenderer</code>s of various types to "
-"draw the data."
-msgstr ""
-
-#: C/model-view-controller.py.page:125(p)
-msgid "Implementations of <code>Gtk.CellRenderer</code> and useful methods:"
+"Build and run the message board again. You should see a window with a text "
+"entry and a web view. It doesn't do anything yet because the text entry and "
+"the web view don't know anything about each other."
 msgstr ""
 
-#: C/model-view-controller.py.page:127(p)
-msgid "<code>Gtk.CellRendererText</code> - renders text in a cell"
-msgstr ""
+#: C/message-board.c.page:212(section/title)
+msgid "Hook up signals"
+msgstr "Capturar sinais"
 
-#: C/model-view-controller.py.page:128(p)
+#: C/message-board.c.page:214(section/p)
 msgid ""
-"<code>Gtk.CellRendererToggle</code> - renders a toggle or radio button in a "
-"cell. Useful methods:"
+"Now you want to make the message board actually <em>do</em> something when "
+"you enter text into the text entry. To do this, connect a callback function "
+"to the <code>activate</code> signal of <code>entry</code>. GTK+ emits the "
+"<code>activate</code> signal whenever the user presses <key>Enter</key> in "
+"the entry. Add the following into <code>create_window</code>, anywhere after "
+"both <code>entry</code> and <code>view</code> have been defined:"
 msgstr ""
 
-#: C/model-view-controller.py.page:130(p)
+#: C/message-board.c.page:221(section/code)
+#, no-wrap
 msgid ""
-"<code>set_active(setting)</code> - activates or deactivates a cell renderer"
+"\n"
+"g_signal_connect (entry, \"activate\", G_CALLBACK (entry_activate_cb), view);\n"
 msgstr ""
 
-#: C/model-view-controller.py.page:131(p)
-msgid "<code>get_active()</code> - returns whether the cell renderer is active"
+#: C/message-board.c.page:225(section/p)
+msgid ""
+"You then have to actually define <code>entry_activate_cb</code>. Define it "
+"as follows, anywhere above <code>create_window</code>:"
 msgstr ""
 
-#: C/model-view-controller.py.page:132(p)
+#: C/message-board.c.page:228(section/code)
+#, no-wrap
 msgid ""
-"<code>set_radio(radio)</code> - if radio is <code>True</code>, the cell "
-"renderer renders a radio toggle (i.e. a toggle in a group of mutually-"
-"exclusive toggles); if <code>False</code>, it renders a check toggle (a "
-"standalone boolean option)"
+"\n"
+"static void\n"
+"entry_activate_cb (GtkEntry *entry, WebKitWebView *view)\n"
+"{\n"
+"    WebKitDOMDocument *document;\n"
+"    WebKitDOMElement *body, *div;\n"
+"\n"
+"    document = webkit_web_view_get_dom_document (view);\n"
+"    body = webkit_dom_document_query_selector (document, \"body\", NULL);\n"
+"    div = webkit_dom_document_create_element (document, \"div\", NULL);\n"
+"    webkit_dom_node_set_text_content (WEBKIT_DOM_NODE (div),\n"
+"                                      gtk_entry_get_text (entry),\n"
+"                                      NULL);\n"
+"    webkit_dom_node_append_child (WEBKIT_DOM_NODE (body),\n"
+"                                  WEBKIT_DOM_NODE (div),\n"
+"                                  NULL);\n"
+"    gtk_entry_set_text (entry, \"\");\n"
+"}\n"
 msgstr ""
 
-#: C/model-view-controller.py.page:133(p)
+#: C/message-board.c.page:248(section/p)
 msgid ""
-"<code>get_radio()</code> - returns whether we are rendering radio toggles "
-"rather than checkboxes."
+"The first thing you do is get a <code>WebKitDOMDocument</code> object that "
+"represents the HTML document displayed in <code>view</code>. The DOM classes "
+"and methods in WebKit allow you to inspect and manipulate the HTML document, "
+"and work very similarly to the DOM APIs you might already know from "
+"JavaScript."
 msgstr ""
 
-#: C/model-view-controller.py.page:136(p)
-msgid "<code>Gtk.CellRendererPixbuf</code> - renders an image in a cell"
+#: C/message-board.c.page:254(section/p)
+msgid ""
+"Once you have the document, you want to get the <code>body</code> element so "
+"that you can add <code>div</code> elements to it. The "
+"<code>webkit_dom_document_query_selector</code> function lets you find an "
+"element in the document using CSS selectors. This keeps you from having to "
+"write tedious loops to traverse the document."
 msgstr ""
 
-#: C/model-view-controller.py.page:137(p)
+#: C/message-board.c.page:265(section/p)
 msgid ""
-"<code>Gtk.CellRendererCombo</code> - renders text in a cell; but while "
-"<code>Gtk.CellRendererText</code> offers a simple entry to edit the text, "
-"<code>Gtk.CellRendererCombo</code> offers a <code>Gtk.ComboBox</code> widget "
-"to edit the text. It can be used with and without an associated Gtk.Entry "
-"widget, depending on the value of the “has-entry” property."
+"Next, you create a new <code>div</code> element to hold the message. Every "
+"element you create has to be attached to a document, so the function to "
+"create an element takes the <code>WebKitDOMDocument</code> as its first "
+"arguments. You then set the text content of the element to the contents of "
+"the text entry. Because <code>gtk_entry_get_text</code> returns a "
+"<code>const gchar*</code>, you don't have to free the result."
 msgstr ""
 
-#: C/model-view-controller.py.page:138(p)
+#: C/message-board.c.page:278(section/p)
 msgid ""
-"<code>Gtk.CellRendererProgress</code> - renders a numeric value as a "
-"progress bar in a cell; it can display a text on top of the progress bar"
+"Finally, you append the new <code>div</code> element to the body and clear "
+"out the text entry so you can type something new. Build and run the program "
+"again and test it for yourself."
 msgstr ""
 
-#: C/model-view-controller.py.page:139(p)
+#: C/message-board.c.page:285(section/title)
+msgid "Make it look better with CSS"
+msgstr "Mellorar o aspecto con CSS"
+
+#: C/message-board.c.page:287(section/p)
 msgid ""
-"<code>Gtk.CellRendererSpinner</code> - renders a spinning animation in a cell"
+"At this point, your program is completely functional, but not very pretty. "
+"You can style the message display with CSS, just like you can with any other "
+"HTML page. There are many ways you could attach some CSS to the page: You "
+"could add it in the initial HTML document. You could inline it in the "
+"<code>style</code> attribute of the <code>div</code> elements. You could "
+"even programmatically construct it using the DOM APIs."
 msgstr ""
 
-#: C/model-view-controller.py.page:140(p)
-msgid "<code>Gtk.CellRendererSpin</code> - renders a spin button in a cell"
+#: C/message-board.c.page:294(section/p)
+msgid ""
+"In this tutorial, you'll attach the CSS using the <code>user-stylesheet-uri</"
+"code> property of the <code>WebKitWebSetting</code> object attached to your "
+"web view. In a more complete application, you would want to save and load "
+"your HTML file. Keeping the style information outside the actual HTML means "
+"that you can change the styling completely within your application, without "
+"having to change users' files. You would normally just install a file along "
+"with your application, but just to keep everything in one file for this "
+"demo, we'll use a trick called a data URI. First, define the CSS as a static "
+"string near the top of your file."
 msgstr ""
 
-#: C/model-view-controller.py.page:141(p)
+#: C/message-board.c.page:303(section/code)
+#, no-wrap
 msgid ""
-"<code>Gtk.CellRendererAccel</code> - renders a keyboard accelerator in a cell"
+"\n"
+"static const guchar CSS[] =\n"
+"\"body { margin: 0; padding: 0; }\\n\"\n"
+"\"div { \"\n"
+"\" -webkit-border-radius: 2px;\"\n"
+"\" background: -webkit-gradient(linear, 0% 100%, 0% 0%,\"\n"
+"\" from(#f1f1f1), to(white));\"\n"
+"\" border: solid 1px #c6c6c6;\"\n"
+"\" -webkit-box-shadow: 0px 0px 2px #c6c6c6;\"\n"
+"\" margin: 12px; padding: 6px;\"\n"
+"\"}\";\n"
 msgstr ""
 
-#: C/model-view-controller.py.page:147(title)
-msgid "The Controller: the Selection"
+#: C/message-board.c.page:316(section/p)
+msgid ""
+"All you have in this example are <code>div</code> elements inside a "
+"<code>body</code> element. If you created more complicated HTML, you could "
+"use whatever CSS is necessary. In fact, if you're comfortable with CSS, you "
+"should trying changing this to something you like better."
 msgstr ""
 
-#: C/model-view-controller.py.page:149(p)
+#: C/message-board.c.page:321(section/p)
 msgid ""
-"Most applications will need to not only deal with displaying data, but also "
-"receiving input events from users. To do this, simply get a reference to a "
-"selection object and connect to the <code>\"changed\"</code> signal."
+"To apply the CSS, you set the <code>user-stylesheet-uri</code> in the "
+"<code>create_window</code> function, anywhere after <code>view</code> has "
+"already been defined."
 msgstr ""
 
-#: C/model-view-controller.py.page:151(code)
+#: C/message-board.c.page:327(section/code)
 #, no-wrap
 msgid ""
 "\n"
-"select = tree.get_selection()\n"
-"select.connect(\"changed\", on_tree_selection_changed)\n"
+"tmp = g_base64_encode (CSS, strlen((gchar *) CSS));\n"
+"css = g_strconcat (\"data:text/css;charset=utf-8;base64,\",\n"
+"                   tmp, NULL);\n"
+"g_object_set (webkit_web_view_get_settings (WEBKIT_WEB_VIEW (view)),\n"
+"              \"user-stylesheet-uri\", css, NULL);\n"
+"g_free (css);\n"
+"g_free (tmp);\n"
 msgstr ""
 
-#: C/model-view-controller.py.page:156(p)
-msgid "Then to retrieve data for the row selected:"
+#: C/message-board.c.page:337(section/p)
+msgid ""
+"Also, make sure to add variable declarations for <code>tmp</code> and "
+"<code>css</code> to the top of <code>create_window</code>."
 msgstr ""
 
-#: C/model-view-controller.py.page:158(code)
+#: C/message-board.c.page:340(section/code)
 #, no-wrap
 msgid ""
 "\n"
-"def on_tree_selection_changed(selection):\n"
-"    model, treeiter = selection.get_selected()\n"
-"    if treeiter != None:\n"
-"        print \"You selected\", model[treeiter][0]\n"
-msgstr ""
-
-#: C/model-view-controller.py.page:165(p)
-msgid "Useful method for a <code>Gtk.TreeSelection</code>:"
+"gchar *tmp, *css;\n"
 msgstr ""
+"\n"
+"gchar *tmp, *css;\n"
 
-#: C/model-view-controller.py.page:168(p)
+#: C/message-board.c.page:344(section/p)
 msgid ""
-"<code>set_mode(type)</code> sets the type of selection, where type is one of"
-msgstr ""
-
-#: C/model-view-controller.py.page:170(p)
-msgid "<code>Gtk.SelectionMode.NONE</code> - no selection is possible"
+"A data URI starts with <sys>data:</sys> and some information about the "
+"content type and how the data is encoded. The actual data follows after a "
+"comma, in this case encoded in Base64. Unlike other URI schemes like "
+"<sys>http:</sys>, <sys>ftp:</sys>, and <sys>file:</sys>, the <sys>data:</"
+"sys> URI scheme doesn't specify where to find a file to load. Rather, it "
+"gives the entire contents of the file."
 msgstr ""
 
-#: C/model-view-controller.py.page:171(p)
+#: C/message-board.c.page:351(section/p)
 msgid ""
-"<code>Gtk.SelectionMode.SINGLE</code> - zero or one element may be selected"
+"The code above first encodes your CSS definitions in Base64, then combines "
+"that with a fixed string to create a data URI. The <code>g_strconcat</code> "
+"function can take any number of string arguments and concatenate them all "
+"together, so you have to pass <code>NULL</code> as the final argument so it "
+"knows when to stop. And don't forget to free those temporary strings after "
+"you set the stylesheet property."
 msgstr ""
 
-#: C/model-view-controller.py.page:172(p)
+#: C/message-board.c.page:358(section/p)
 msgid ""
-"<code>Gtk.SelectionMode.BROWSE</code> - exactly one element is selected. In "
-"some circumstances, such as initially or during a search operation, it’s "
-"possible for no element to be selected. What is really enforced is that the "
-"user can’t deselect a currently selected element except by selecting another "
-"element."
+"Build and run the program again. It should now work exactly the same as at "
+"the end of the last section, except the messages will be nicely styled with "
+"a border and a subtle background gradient."
 msgstr ""
 
-#: C/model-view-controller.py.page:173(p)
-msgid ""
-"<code>Gtk.SelectionMode.MULTIPLE</code> -any number of elements may be "
-"selected. Clicks toggle the state of an item. Any number of elements may be "
-"selected. The Ctrl key may be used to enlarge the selection, and Shift key "
-"to select between the focus and the child pointed to. Some widgets may also "
-"allow Click-drag to select a range of elements."
-msgstr ""
+#: C/message-board.c.page:364(section/title)
+msgid "Learn more"
+msgstr "Aprender máis"
 
-#: C/model-view-controller.py.page:176(p)
+#: C/message-board.c.page:366(section/p)
 msgid ""
-"<code>get_selected()</code> returns a tuple <code>(model, treeiter)</code>, "
-"where <code>model</code> is the current model and <code>treeiter</code> a "
-"<code>Gtk.TreeIter</code> pointing to the currently selected row, or None if "
-"no rows are selected. The method does not work if the selection mode is set "
-"to <code>Gtk.SelectionMode.MULTIPLE</code>; in that case, use "
-"<code>get_selected_rows()</code> instead, which Returns a list of <code>Gtk."
-"TreePath</code> instances of all selected rows."
-msgstr ""
-
-#: C/model-view-controller.py.page:188(link)
-#: C/combobox_multicolumn.py.page:43(link) C/combobox.py.page:40(link)
-msgid "GtkComboBox"
+"This tutorial showed you how to create a basic application using GTK+ and "
+"WebKit, including showing a document and manipulating its contents. To "
+"create a real application, you probably want to do a little bit more. Try "
+"adding features on your own. Here are a few ideas:"
 msgstr ""
+"Este titorial mostroulle como crear un aplicativo sinxelo usando GTK+ e "
+"WebKit, incluindo como mostrar un documento e manipular o seu contido. Para "
+"crear un aplicativo real, probabelmente queira facer algo máis. Probe a "
+"engadir características vostede mesmo. Aquí hai algunhas ideas:"
 
-#: C/model-view-controller.py.page:189(link)
-msgid "GtkCellRenderer"
+#: C/message-board.c.page:372(item/p)
+msgid ""
+"If you're comfortable with CSS, try changing the style of the message "
+"display. CSS is easy to get started with, but increasingly more powerful. "
+"There is a wealth of CSS tutorials on the Internet, and just about "
+"everything you can do on the web, you can do in this application."
 msgstr ""
+"Si se sinte comodo usando CSS, probe a cambiar o estilo da visualización da "
+"mensaxe. É moi doado iniciarse en CSS, pero cada vez é máis potente. Hai "
+"unha gran cantidade de titoriais de CSS en Internet, e case todo o que se "
+"pode facer nunha páxina web, pódese facer neste aplicativo."
 
-#: C/model-view-controller.py.page:190(link)
-msgid "The Python Gtk+ 3 Tutorial - Tree and List Widgets"
+#: C/message-board.c.page:378(item/p)
+msgid ""
+"Right now, you lose all your messages whenever you close the message board. "
+"Try saving the HTML contents after each post, and loading the saved file (if "
+"it exists) on startup."
 msgstr ""
+"Agora mesmo, tódalas mesnaxes pérdense ao pechar o cadro de mensaxes. Probe "
+"a gardar o contido HTML despois de cada envío, e a cargar o ficheiro cargado "
+"(se existe) ao inicio."
 
-#: C/model-view-controller.py.page:191(link)
-msgid "The Python Gtk+ 3 Tutorial - CellRenderers"
+#: C/message-board.c.page:386(item/p)
+msgid ""
+"If you keep your messages around for a long time, you'll start wondering "
+"when you posted them. Add a timestamp to each message when it's posted. "
+"You'll probably want to create some additional child <code>div</code> "
+"elements with different classes that you can style in the CSS."
 msgstr ""
 
-#: C/model-view-controller.py.page:192(link)
-msgid "The Python Gtk+ 3 Tutorial - ComboBox"
+#: C/message-board.c.page:393(item/p)
+msgid ""
+"This program keeps messages around forever. Think about ways you could allow "
+"the user to delete messages. Perhaps you want messages to disappear "
+"automatically after they're too old, or after there are a certain number of "
+"messages before them. Or you could add a link in each message to delete it. "
+"You could even override the context menu when you right-click on a message. "
+"These features involve exploring WebKit's DOM API more."
 msgstr ""
+"Este programa garda as mensaxes para sempre. Pense algunha maneira para que "
+"o usuario poida borrar mensaxes. Tal vez queira que as mensaxes desapareza "
+"automaticamente cando son moi antigas ou despois de que haxa certo número de "
+"mensaxes por diante. Ou podería engadir unha ligazón en cada mensaxe para "
+"borrala. Tamén pode omitir o menú contextual cando preme co botón dereito "
+"sobe unha mensaxe. Esta características implican explorar máis da API do DOM "
+"de WebKit."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/messagedialog.vala.page:21(None) C/messagedialog.py.page:22(None)
-#: C/messagedialog.js.page:24(None) C/messagedialog.c.page:23(None)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/messagedialog.c.page:23(media) C/messagedialog.js.page:24(media)
+#: C/messagedialog.py.page:22(media) C/messagedialog.vala.page:21(media)
 #, fuzzy
 #| msgid ""
 #| "@@image: 'media/messagedialog.png'; md5=7cca8bbffdce01233e13624bbfb7e294"
+msgctxt "_"
 msgid ""
-"@@image: 'media/messagedialog.png'; md5=1956288274018e2386d9cba96a2101de"
+"external ref='media/messagedialog.png' md5='1956288274018e2386d9cba96a2101de'"
 msgstr ""
 "@@image: 'media/messagedialog.png'; md5=7cca8bbffdce01233e13624bbfb7e294"
 
-#: C/messagedialog.vala.page:7(title)
+#: C/messagedialog.c.page:7(info/title)
 #, fuzzy
 #| msgid "MessageDialog"
-msgid "MessageDialog (Vala)"
+msgctxt "text"
+msgid "MessageDialog (C)"
 msgstr "MessageDialog"
 
-#: C/messagedialog.vala.page:17(desc) C/messagedialog.py.page:18(desc)
-#: C/messagedialog.c.page:18(desc)
+#: C/messagedialog.c.page:18(info/desc) C/messagedialog.py.page:18(info/desc)
+#: C/messagedialog.vala.page:17(info/desc)
 msgid "A message window"
 msgstr "Unha xanela de mensaxe"
 
-#: C/messagedialog.vala.page:20(title) C/messagedialog.py.page:21(title)
-#: C/messagedialog.js.page:23(title) C/messagedialog.c.page:21(title)
+#: C/messagedialog.c.page:21(page/title)
+#: C/messagedialog.js.page:23(page/title)
+#: C/messagedialog.py.page:21(page/title)
+#: C/messagedialog.vala.page:20(page/title)
 msgid "MessageDialog"
 msgstr "MessageDialog"
 
-#: C/messagedialog.vala.page:22(p) C/messagedialog.c.page:24(p)
+#: C/messagedialog.c.page:24(page/p) C/messagedialog.vala.page:22(page/p)
 msgid "A modal message dialog which can cause the world to explode."
 msgstr ""
 
-#: C/messagedialog.vala.page:30(link)
-msgid "Gtk.ResponseType"
-msgstr "Gtk.ResponseType"
-
-#: C/messagedialog.vala.page:31(link) C/messagedialog.js.page:197(link)
-#: C/entry.js.page:32(link) C/combobox.js.page:243(link)
-#: C/comboboxtext.js.page:183(link)
-msgid "Gtk.MessageDialog"
-msgstr "Gtk.MessageDialog"
-
-#: C/messagedialog.vala.page:32(link)
-msgid "Gtk.DialogFlags"
-msgstr "Gtk.DialogFlags"
-
-#: C/messagedialog.vala.page:33(link)
-msgid "Gtk.MessageType"
-msgstr "Gtk.MessageType"
-
-#: C/messagedialog.vala.page:34(link)
-msgid "Gtk.ButtonsType"
-msgstr "Gtk.ButtonsType"
-
-#: C/messagedialog.py.page:7(title)
-#, fuzzy
-#| msgid "MessageDialog"
-msgid "MessageDialog (Python)"
-msgstr "MessageDialog"
-
-#: C/messagedialog.py.page:23(p)
-msgid ""
-"A message dialog which prints messages on the terminal, depending on your "
-"choices."
-msgstr ""
-
-#: C/messagedialog.py.page:35(title)
-msgid "Useful methods for a MessageDialog widget"
-msgstr ""
-
-#: C/messagedialog.py.page:38(p)
-msgid ""
-"In the constructor of MessageDialog we could set flags as <code>Gtk."
-"DialogFlags.DESTROY_WITH_PARENT</code> (to destroy the messagedialog window "
-"when its parent window is destroyed) or as <code>Gtk.DialogFlags.MODAL</"
-"code> (no interaction with other windows of the application)."
-msgstr ""
-
-#: C/messagedialog.py.page:39(p)
-msgid ""
-"In the constructor of MessageDialog we could set type as any of <code>Gtk."
-"MessageType.INFO, Gtk.MessageType.WARNING, Gtk.MessageType.QUESTION, Gtk."
-"MessageType.ERROR, Gtk.MessageType.OTHER</code> depending on what type of "
-"message we want."
-msgstr ""
-
-#: C/messagedialog.py.page:40(p)
-msgid ""
-"In the constructor of MessageDialog we could set buttons as any of <code>Gtk."
-"ButtonsType.NONE, Gtk.ButtonsType.OK, Gtk.ButtonsType.CLOSE, Gtk.ButtonsType."
-"CANCEL, Gtk.ButtonsType.YES_NO, Gtk.ButtonsType.OK_CANCEL</code>, or any "
-"button using <code>add_button()</code> as in Gtk.Dialog."
-msgstr ""
-
-#: C/messagedialog.py.page:41(p)
+#: C/messagedialog.c.page:25(note/p)
 msgid ""
-"We could substitute the default image of the MessageDialog with another "
-"image using"
+"To test out the application once it has started running, you can click on "
+"the \"Message Dialog\" tab that appears in the top menubar of the screen."
 msgstr ""
 
-#: C/messagedialog.py.page:42(code)
+#: C/messagedialog.c.page:29(page/code)
 #, no-wrap
 msgid ""
 "\n"
-"image = Gtk.Image()\n"
-"image.set_from_stock(Gtk.STOCK_CAPS_LOCK_WARNING, Gtk.IconSize.DIALOG)\n"
-"image.show()\n"
-"messagedialog.set_image(image)"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function in which reacts to the \"response\" signal from the user in\n"
+" * the message dialog window.\n"
+" * This function is used to interact with the user in the terminal.\n"
+" */\n"
+"static void\n"
+"on_response (GtkDialog *dialog,\n"
+"             gint       response_id,\n"
+"             gpointer   user_data)\n"
+"{\n"
+"  /* If the button clicked gives response OK (response_id being -5) */\n"
+"  if (response_id == GTK_RESPONSE_OK) \n"
+"     g_print (\"*boom*\\n\");\n"
+"\n"
+"  /* If the button clicked gives response CANCEL (response_id being -6) */\n"
+"  else if (response_id == GTK_RESPONSE_CANCEL)\n"
+"     g_print (\"good choice\\n\");\n"
+"\n"
+"  /* If the message dialog is destroyed (for example by pressing escape) */\n"
+"  else if (response_id == GTK_RESPONSE_DELETE_EVENT)\n"
+"     g_print (\"dialog closed or cancelled\\n\");\n"
+"\n"
+"  /* Destroy the dialog after one of the above actions have taken place */\n"
+"  gtk_widget_destroy (GTK_WIDGET (dialog));\n"
+"\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the response signal \"activate\" related to the SimpleAction\n"
+" * message_action.\n"
+" * This function is used to cause the message dialog window to popup.\n"
+" */\n"
+"static void\n"
+"message_cb (GSimpleAction *simple,\n"
+"            GVariant      *parameter,\n"
+"            gpointer       user_data)\n"
+"{\n"
+"   /* the parent variable in this case represents the window */\n"
+"   GtkWidget *message_dialog;\n"
+"   GtkWindow *parent = user_data;\n"
+"   \n"
+"   /* Create a new message dialog, and set the parameters as follows:\n"
+"    * Dialog Flags - make the constructed dialog modal \n"
+"    * (modal windows prevent interaction with other windows in the application)\n"
+"    * Message Type - nonfatal warning message\n"
+"    * Buttons Type - use the ok and cancel buttons\n"
+"    * message_format - text that you want the user to see in the window \n"
+"    */\n"
+"   message_dialog = gtk_message_dialog_new (parent, GTK_DIALOG_MODAL, \n"
+"                                            GTK_MESSAGE_WARNING, \n"
+"                                            GTK_BUTTONS_OK_CANCEL, \n"
+"                                            \"This action will cause the universe to stop existing.\");\n"
+"\n"
+"   gtk_widget_show_all (message_dialog);\n"
+"\n"
+"   g_signal_connect (GTK_DIALOG (message_dialog), \"response\", \n"
+"                    G_CALLBACK (on_response), NULL);\n"
+"\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *label;\n"
+"\n"
+"  GSimpleAction *message_action;\n"
+"\n"
+"  /* Create a window with a title and a default size */\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"GMenu Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 400, 200);\n"
+"\n"
+"  /* Create a label and add it to the window */\n"
+"  label = gtk_label_new (\"This application goes boom!\");\n"
+"  gtk_container_add (GTK_CONTAINER (window), label);\n"
+"\n"
+"  /* Create a new simple action, giving it a NULL parameter type. It will \n"
+"   * always be NULL for actions invoked from a menu. (e.g clicking on an \"ok\" \n"
+"   * or \"cancel\" button)\n"
+"   */\n"
+"  message_action = g_simple_action_new (\"message\", NULL); \n"
+"\n"
+"  /* Connect the \"activate\" signal to the appropriate callback function */\n"
+"  g_signal_connect (message_action, \"activate\", G_CALLBACK (message_cb), \n"
+"                    GTK_WINDOW (window));\n"
+"\n"
+"  /* Adds the message_action to the overall action map. An Action map is an \n"
+"   * interface that contains a number of named GAction instances \n"
+"   * (such as message_action) \n"
+"   */\n"
+"  g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (message_action));\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the response signal \"activate\" from the \"quit\" action \n"
+" * in the function directly below.\n"
+" */ \n"
+"static void\n"
+"quit_cb (GSimpleAction *simple,\n"
+"         GVariant      *parameter,\n"
+"         gpointer       user_data)\n"
+"{\n"
+"  GApplication *application = user_data;\n"
+"\n"
+"  g_application_quit (application);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Startup function for the menu we are creating in this sample */\n"
+"static void\n"
+"startup (GApplication *app,\n"
+"         gpointer      user_data)\n"
+"{\n"
+"  GMenu *menu;\n"
+"  GSimpleAction *quit_action;\n"
+"\n"
+"  /* Initialize the GMenu, and add a menu item with label \"Message\" and action \n"
+"   * \"win.message\". Also add another menu item with label \"Quit\" and action \n"
+"   * \"app.quit\" \n"
+"   */\n"
+"  menu = g_menu_new ();\n"
+"  g_menu_append (menu, \"Message\", \"win.message\");\n"
+"  g_menu_append (menu, \"Quit\", \"app.quit\");\n"
+"\n"
+"  /* Create a new simple action for the application. (In this case it is the \n"
+"   * \"quit\" action.\n"
+"   */\n"
+"  quit_action = g_simple_action_new (\"quit\", NULL);\n"
+"\n"
+"  /* Ensure that the menu we have just created is set for the overall application */\n"
+"  gtk_application_set_app_menu (GTK_APPLICATION (app), G_MENU_MODEL (menu));\n"
+"\n"
+"  g_signal_connect (quit_action, \n"
+"                    \"activate\", \n"
+"                    G_CALLBACK (quit_cb), \n"
+"                    app);\n"
+"\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (quit_action));\n"
+"\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Startup function for the application */\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  g_signal_connect (app, \"startup\", G_CALLBACK (startup), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
 msgstr ""
 
-#: C/messagedialog.py.page:47(p)
+#: C/messagedialog.c.page:36(item/p)
 msgid ""
-"where <code>Gtk.STOCK_CAPS_LOCK_WARNING</code> is any image from <link href="
-"\"http://developer.gnome.org/gtk3/unstable/gtk3-Stock-Items.html\";>Stock "
-"Items</link>. We could also set any image as in the Image widget, as "
-"<code>image.set_from_file(\"filename.png\")</code>."
+"<link href=\"http://developer.gnome.org/gio/stable/GApplication.html";
+"\">GApplication</link>"
 msgstr ""
 
-#: C/messagedialog.py.page:48(p)
+#: C/messagedialog.c.page:38(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"<code>format_secondary_text(\"some secondary message\")</code> sets a "
-"secondary message. The primary text becomes bold."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkMessageDialog.html";
+"\">GtkMessageDialog</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/messagedialog.py.page:58(link) C/messagedialog.c.page:38(link)
-#, fuzzy
-#| msgid "Gtk.MessageDialog"
-msgid "GtkMessageDialog"
-msgstr "Gtk.MessageDialog"
-
-#: C/messagedialog.py.page:59(link) C/dialog.py.page:49(link)
-#: C/dialog.c.page:35(link)
-#, fuzzy
-#| msgid "Gtk.DialogFlags"
-msgid "GtkDialog"
-msgstr "Gtk.DialogFlags"
-
-#: C/messagedialog.py.page:62(link) C/messagedialog.c.page:40(link)
-#: C/aboutdialog.c.page:38(link)
-msgid "GActionMap"
+#: C/messagedialog.c.page:39(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gio/stable/GSimpleAction.html#g-";
+"simple-action-new\">GSimpleAction</link>"
 msgstr ""
 
-#: C/messagedialog.js.page:7(title)
+#: C/messagedialog.js.page:7(info/title)
 #, fuzzy
 #| msgid "MessageDialog"
+msgctxt "text"
 msgid "MessageDialog (JavaScript)"
 msgstr "MessageDialog"
 
-#: C/messagedialog.js.page:20(desc)
+#: C/messagedialog.js.page:20(info/desc)
 #, fuzzy
 #| msgid "A message window"
 msgid "A popup message attached to a window"
 msgstr "Unha xanela de mensaxe"
 
-#: C/messagedialog.js.page:25(p)
+#: C/messagedialog.js.page:25(page/p)
 msgid ""
 "A MessageDialog is a modal message dialog, which means a popup that you have "
 "to respond to before you get back to what you were doing in the window that "
@@ -7299,7 +19614,7 @@ msgid ""
 "corner, next to Activities."
 msgstr ""
 
-#: C/messagedialog.js.page:26(p)
+#: C/messagedialog.js.page:26(note/p)
 msgid ""
 "The difference between a MessageDialog and a <link xref=\"dialog.js"
 "\">Dialog</link> is that a Dialog can contain whatever widgets and content "
@@ -7307,27 +19622,113 @@ msgid ""
 "make popups appear with a basic message and buttons."
 msgstr ""
 
-#: C/messagedialog.js.page:69(p) C/comboboxtext.js.page:65(p)
+#: C/messagedialog.js.page:43(section/code)
+#, no-wrap
 msgid ""
-"All the code for this sample goes in the MessageDialogExample class. The "
-"above code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/";
-"gjs/Gtk.Application.html\">Gtk.Application</link> for our widgets and window "
-"to go in."
+"\n"
+"const MessageDialogExample = new Lang.Class ({\n"
+"    Name: 'MessageDialog Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jsmessagedialog',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._initMenus();\n"
+"        this._buildUI ();\n"
+"    },\n"
+msgstr ""
+
+#: C/messagedialog.js.page:70(note/p) C/switch.js.page:75(note/p)
+msgid ""
+"Before we call _buildUI to create the window and the widgets inside it, we "
+"need to call _initMenus, which tells GNOME to create the menu. We can put "
+"the actual code for _initMenus after the code for _buildUI, since it doesn't "
+"matter what order we put them in so long as _initMenus is called first in "
+"_onStartup."
+msgstr ""
+
+#: C/messagedialog.js.page:71(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Gtk.MessageDialog Example\",\n"
+"            default_height: 200,\n"
+"            default_width: 400 });\n"
 msgstr ""
 
-#: C/messagedialog.js.page:91(p)
+#: C/messagedialog.js.page:85(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create a silly warning message and add it to the window\n"
+"        this.warningLabel = new Gtk.Label ({\n"
+"            label: \"This application goes boom! (Not really.)\"});\n"
+"        this._window.add (this.warningLabel);\n"
+msgstr ""
+
+#: C/messagedialog.js.page:91(section/p)
 msgid ""
 "For this example, all that we have in the window the popup comes out of is a "
-"silly warning <link xref=\"label.js\">Label.</link>"
+"silly warning <link xref=\"label.js\">Label</link>."
 msgstr ""
 
-#: C/messagedialog.js.page:95(title)
+#: C/messagedialog.js.page:95(section/title)
 #, fuzzy
 #| msgid "Designing the application"
 msgid "Creating the application's menu"
 msgstr "Deseñar o aplicativo"
 
-#: C/messagedialog.js.page:121(p)
+#: C/messagedialog.js.page:96(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    // Build the application menu, including the button that calls the dialog\n"
+"    _initMenus: function() {\n"
+"        let menu = new Gio.Menu();\n"
+"        menu.append(\"Message\",'app.message');\n"
+"        menu.append(\"Quit\",'app.quit');\n"
+"        this.application.set_app_menu(menu);\n"
+"\n"
+"        // This pops up a MessageDialog when \"Message\" is clicked in the menu\n"
+"        let messageAction = new Gio.SimpleAction ({ name: 'message' });\n"
+"        messageAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showMessageDialog();\n"
+"            }));\n"
+"        this.application.add_action(messageAction);\n"
+"\n"
+"        // This closes the window when \"Quit\" is clicked in the menu\n"
+"        let quitAction = new Gio.SimpleAction ({ name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"        this.application.add_action(quitAction);\n"
+"    },\n"
+msgstr ""
+
+#: C/messagedialog.js.page:121(section/p)
 msgid ""
 "Here, we build the <link xref=\"gmenu.js\">GMenu</link> where we'll be "
 "putting the \"Message\" button which triggers the popup MessageDialog. The "
@@ -7336,13 +19737,32 @@ msgid ""
 "has two options in it: Message, and Quit."
 msgstr ""
 
-#: C/messagedialog.js.page:125(title)
+#: C/messagedialog.js.page:125(section/title)
 #, fuzzy
 #| msgid "MessageDialog"
 msgid "Creating the MessageDialog"
 msgstr "MessageDialog"
 
-#: C/messagedialog.js.page:141(p)
+#: C/messagedialog.js.page:126(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    _showMessageDialog: function () {\n"
+"\n"
+"        // Create a modal MessageDialog whose parent is the window\n"
+"        this._messageDialog = new Gtk.MessageDialog ({\n"
+"            transient_for: this._window,\n"
+"            modal: true,\n"
+"            buttons: Gtk.ButtonsType.OK_CANCEL,\n"
+"            message_type: Gtk.MessageType.WARNING,\n"
+"            text: \"This action will cause the universe to stop existing.\" });\n"
+"\n"
+"        this._messageDialog.connect ('response', Lang.bind(this, this._response_cb));\n"
+"        this._messageDialog.show();\n"
+"    },\n"
+msgstr ""
+
+#: C/messagedialog.js.page:141(section/p)
 msgid ""
 "To make our MessageDialog a popup attached to the main window, we set its "
 "modal property to true and set it to be \"transient_for\" _window. After "
@@ -7352,19 +19772,50 @@ msgid ""
 "function which handles it."
 msgstr ""
 
-#: C/messagedialog.js.page:142(p)
+#: C/messagedialog.js.page:142(note/p)
 msgid "Here are some resources for making your own MessageDialogs:"
 msgstr ""
 
-#: C/messagedialog.js.page:144(link)
-msgid "List of button types"
+#: C/messagedialog.js.page:144(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkMessageDialog.";
+"html#GtkButtonsType\">List of button types</link>"
+msgstr ""
+
+#: C/messagedialog.js.page:145(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkMessageDialog.";
+"html#GtkMessageType\">List of message types</link>"
 msgstr ""
 
-#: C/messagedialog.js.page:145(link)
-msgid "List of message types"
+#: C/messagedialog.js.page:149(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    // Callback function (aka signal handler) for the response signal\n"
+"    _response_cb: function (messagedialog, response_id) {\n"
+"\n"
+"        // A simple switch that changes the main window's label\n"
+"        switch (response_id) {\n"
+"            case Gtk.ResponseType.OK:\n"
+"                this.warningLabel.set_label (\"*BOOM*\\n\");\n"
+"                break;\n"
+"            case Gtk.ResponseType.CANCEL:\n"
+"                this.warningLabel.set_label (\"Good choice!\\n\");\n"
+"                break;\n"
+"            case Gtk.ResponseType.DELETE_EVENT:\n"
+"                this.warningLabel.set_label (\"Dialog closed or cancelled.\\n\");\n"
+"                break;\n"
+"        }\n"
+"\n"
+"        this._messageDialog.destroy();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
 msgstr ""
 
-#: C/messagedialog.js.page:172(p)
+#: C/messagedialog.js.page:172(section/p)
 msgid ""
 "This function takes two parameters, the MessageDialog and its response_id, "
 "both of which are automatically supplied (you don't have to manually pass "
@@ -7375,8910 +19826,15873 @@ msgid ""
 "afterwards."
 msgstr ""
 
-#: C/messagedialog.js.page:179(p)
+#: C/messagedialog.js.page:174(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new MessageDialogExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/messagedialog.js.page:179(section/p)
 msgid ""
 "Finally, we create a new instance of the finished MessageDialogExample "
 "class, and set the application running."
 msgstr ""
 
-#: C/messagedialog.c.page:7(title)
+#: C/messagedialog.js.page:184(section/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const MessageDialogExample = new Lang.Class ({\n"
+"    Name: 'MessageDialog Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jsmessagedialog',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._initMenus();\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Gtk.MessageDialog Example\",\n"
+"            default_height: 200,\n"
+"            default_width: 400 });\n"
+"\n"
+"        // Create a silly warning message and add it to the window\n"
+"        this.warningLabel = new Gtk.Label ({\n"
+"            label: \"This application goes boom! (Not really.)\"});\n"
+"        this._window.add (this.warningLabel);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application menu, including the button that calls the dialog\n"
+"    _initMenus: function() {\n"
+"        let menu = new Gio.Menu();\n"
+"        menu.append(\"Message\",'app.message');\n"
+"        menu.append(\"Quit\",'app.quit');\n"
+"        this.application.set_app_menu(menu);\n"
+"\n"
+"        // This pops up a MessageDialog when \"Message\" is clicked in the menu\n"
+"        let messageAction = new Gio.SimpleAction ({ name: 'message' });\n"
+"        messageAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showMessageDialog();\n"
+"            }));\n"
+"        this.application.add_action(messageAction);\n"
+"\n"
+"        // This closes the window when \"Quit\" is clicked in the menu\n"
+"        let quitAction = new Gio.SimpleAction ({ name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"        this.application.add_action(quitAction);\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _showMessageDialog: function () {\n"
+"\n"
+"        // Create a modal MessageDialog whose parent is the window\n"
+"        this._messageDialog = new Gtk.MessageDialog ({\n"
+"            transient_for: this._window,\n"
+"            modal: true,\n"
+"            buttons: Gtk.ButtonsType.OK_CANCEL,\n"
+"            message_type: Gtk.MessageType.WARNING,\n"
+"            text: \"This action will cause the universe to stop existing.\" });\n"
+"\n"
+"        this._messageDialog.connect ('response', Lang.bind(this, this._response_cb));\n"
+"        this._messageDialog.show();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Callback function (aka signal handler) for the response signal\n"
+"    _response_cb: function (messagedialog, response_id) {\n"
+"\n"
+"        // A simple switch that changes the main window's label\n"
+"        switch (response_id) {\n"
+"            case Gtk.ResponseType.OK:\n"
+"                this.warningLabel.set_label (\"*BOOM*\\n\");\n"
+"                break;\n"
+"            case Gtk.ResponseType.CANCEL:\n"
+"                this.warningLabel.set_label (\"Good choice!\\n\");\n"
+"                break;\n"
+"            case Gtk.ResponseType.DELETE_EVENT:\n"
+"                this.warningLabel.set_label (\"Dialog closed or cancelled.\\n\");\n"
+"                break;\n"
+"        }\n"
+"\n"
+"        this._messageDialog.destroy();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new MessageDialogExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#: C/messagedialog.py.page:7(info/title)
 #, fuzzy
 #| msgid "MessageDialog"
-msgid "MessageDialog (C)"
+msgctxt "text"
+msgid "MessageDialog (Python)"
 msgstr "MessageDialog"
 
-#: C/messagedialog.c.page:25(p)
+#: C/messagedialog.py.page:23(page/p)
 msgid ""
-"To test out the application once it has started running, you can click on "
-"the \"Message Dialog\" tab that appears in the top menubar of the screen."
+"A message dialog which prints messages on the terminal, depending on your "
+"choices."
 msgstr ""
 
-#: C/messagedialog.c.page:36(link)
-#, fuzzy
-#| msgid "Gtk.Application"
-msgid "GApplication"
-msgstr "Gtk.Application"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/message-board.c.page:36(None)
+#: C/messagedialog.py.page:30(section/code)
+#, no-wrap
 msgid ""
-"@@image: 'media/message-board.ogv'; md5=beb80c4538776dc2cdd26c95abea5027"
+"from gi.repository import Gtk\n"
+"from gi.repository import Gio\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\n"
+"     # constructor for a window (the parent window) with a label\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"GMenu Example\", application=app)\n"
+"        self.set_default_size(400, 200)\n"
+"        label = Gtk.Label()\n"
+"        label.set_text(\"This application goes boom!\")\n"
+"        self.add(label)\n"
+"\n"
+"        # create the message_action (a Gio.SimpleAction) - for the window\n"
+"        message_action = Gio.SimpleAction.new(\"message\", None)\n"
+"        # connect the signal from the action to the function message_cb()\n"
+"        message_action.connect(\"activate\", self.message_cb)\n"
+"        # add the action to the application\n"
+"        app.add_action(message_action)\n"
+"\n"
+"    # callback function for the signal \"activate\" from the message_action\n"
+"    # in the menu of the parent window\n"
+"    def message_cb(self, action, parameter):\n"
+"        # a Gtk.MessageDialog\n"
+"        messagedialog = Gtk.MessageDialog(parent=self,\n"
+"                                          flags=Gtk.DialogFlags.MODAL,\n"
+"                                          type=Gtk.MessageType.WARNING,\n"
+"                                          buttons=Gtk.ButtonsType.OK_CANCEL,\n"
+"                                          message_format=\"This action will cause the universe to stop 
existing.\")\n"
+"        # connect the response (of the button clicked) to the function\n"
+"        # dialog_response()\n"
+"        messagedialog.connect(\"response\", self.dialog_response)\n"
+"        # show the messagedialog\n"
+"        messagedialog.show()\n"
+"\n"
+"    def dialog_response(self, widget, response_id):\n"
+"        # if the button clicked gives response OK (-5)\n"
+"        if response_id == Gtk.ResponseType.OK:\n"
+"\t\t    print \"*boom*\"\n"
+"\t\t# if the button clicked gives response CANCEL (-6)\n"
+"        elif response_id == Gtk.ResponseType.CANCEL:\n"
+"            print \"good choice\"\n"
+"        # if the messagedialog is destroyed (by pressing ESC)\n"
+"        elif response_id == Gtk.ResponseType.DELETE_EVENT:\n"
+"            print \"dialog closed or cancelled\"\n"
+"        # finally, destroy the messagedialog\n"
+"        widget.destroy()\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def quit_cb(self, action, parameter):\n"
+"        self.quit()\n"
+"\n"
+"    def do_startup (self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"        # create a menu (a Gio.Menu)\n"
+"        menu = Gio.Menu()\n"
+"        # append a menu item with label \"Message\" and action \"app.message\"\n"
+"        menu.append(\"Message\", \"app.message\")\n"
+"        # append a menu item with label \"Quit\" and action \"app.quit\"\n"
+"        menu.append(\"Quit\", \"app.quit\")\n"
+"        # set menu as the menu for the application\n"
+"        self.set_app_menu(menu)\n"
+"\n"
+"        # a new simpleaction - for the application\n"
+"        quit_action = Gio.SimpleAction.new(\"quit\", None)\n"
+"        quit_action.connect(\"activate\", self.quit_cb)\n"
+"        self.add_action (quit_action)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
-"@@image: 'media/message-board.ogv'; md5=beb80c4538776dc2cdd26c95abea5027"
-
-#: C/message-board.c.page:7(title)
-#, fuzzy
-#| msgid "Message Board"
-msgid "Message Board (C)"
-msgstr "Taboleiro de mensaxes"
-
-#: C/message-board.c.page:10(desc)
-msgid "A simple program using WebKitGTK+ and the DOM."
-msgstr "Un programa sinxelo usando WebKitGTK+ e DOM."
 
-#: C/message-board.c.page:14(name) C/index.page:12(name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
+#: C/messagedialog.py.page:35(section/title)
+msgid "Useful methods for a MessageDialog widget"
+msgstr ""
 
-#: C/message-board.c.page:15(email) C/index.page:13(email)
-msgid "shaunm gnome org"
-msgstr "shaunm gnome org"
+#: C/messagedialog.py.page:38(item/p)
+msgid ""
+"In the constructor of MessageDialog we could set flags as <code>Gtk."
+"DialogFlags.DESTROY_WITH_PARENT</code> (to destroy the messagedialog window "
+"when its parent window is destroyed) or as <code>Gtk.DialogFlags.MODAL</"
+"code> (no interaction with other windows of the application)."
+msgstr ""
 
-#: C/message-board.c.page:16(years) C/index.page:14(years)
-msgid "2010"
-msgstr "2010"
+#: C/messagedialog.py.page:39(item/p)
+msgid ""
+"In the constructor of MessageDialog we could set type as any of <code>Gtk."
+"MessageType.INFO, Gtk.MessageType.WARNING, Gtk.MessageType.QUESTION, Gtk."
+"MessageType.ERROR, Gtk.MessageType.OTHER</code> depending on what type of "
+"message we want."
+msgstr ""
 
-#: C/message-board.c.page:21(title)
-msgid "Message Board"
-msgstr "Taboleiro de mensaxes"
+#: C/messagedialog.py.page:40(item/p)
+msgid ""
+"In the constructor of MessageDialog we could set buttons as any of <code>Gtk."
+"ButtonsType.NONE, Gtk.ButtonsType.OK, Gtk.ButtonsType.CLOSE, Gtk.ButtonsType."
+"CANCEL, Gtk.ButtonsType.YES_NO, Gtk.ButtonsType.OK_CANCEL</code>, or any "
+"button using <code>add_button()</code> as in Gtk.Dialog."
+msgstr ""
 
-#: C/message-board.c.page:26(p)
-msgid "How to display a web page with WebKit."
-msgstr "Como mostrar unha páxina web con WebKit"
+#: C/messagedialog.py.page:41(item/p)
+msgid ""
+"We could substitute the default image of the MessageDialog with another "
+"image using"
+msgstr ""
 
-#: C/message-board.c.page:27(p)
+#: C/messagedialog.py.page:42(item/code)
+#, no-wrap
 msgid ""
-"How to manipulate the contents of a web page using WebKit's DOM functions."
+"\n"
+"image = Gtk.Image()\n"
+"image.set_from_stock(Gtk.STOCK_CAPS_LOCK_WARNING, Gtk.IconSize.DIALOG)\n"
+"image.show()\n"
+"messagedialog.set_image(image)"
 msgstr ""
-"Como manipular os contidos dunha páxina web usando as funcións de DOM de "
-"WebKit."
 
-#: C/message-board.c.page:30(p)
+#: C/messagedialog.py.page:47(item/p)
 msgid ""
-"This tutorial assumes you are familiar with the C programming language and "
-"have a basic understanding of GTK+, including how to create and place "
-"widgets and how to connect callback functions to signals. See <link xref="
-"\"image-viewer.c\"/> to learn the basics of GTK+."
+"where <code>Gtk.STOCK_CAPS_LOCK_WARNING</code> is any image from <link href="
+"\"http://developer.gnome.org/gtk3/unstable/gtk3-Stock-Items.html\";>Stock "
+"Items</link>. We could also set any image as in the Image widget, as "
+"<code>image.set_from_file(\"filename.png\")</code>."
 msgstr ""
-"Este titorial asume que vostede está familiarizado co linguaxe de "
-"programación C e ten coñecementos básicos de GTK+, incluíndo como crear e "
-"dispor widgets e como conectar funcións de callback a sinais. Vexa <link "
-"xref=\"image-viewer.c\"/> para aprender o básico de GTK+."
 
-#: C/message-board.c.page:43(p)
+#: C/messagedialog.py.page:48(item/p)
 msgid ""
-"The GNOME platform includes WebKitGTK+, built on top of the powerful WebKit "
-"HTML framework. WebKit is used throughout GNOME, not just to view web pages "
-"on the Internet, but also to create rich user interfaces that can be easily "
-"styled with CSS."
+"<code>format_secondary_text(\"some secondary message\")</code> sets a "
+"secondary message. The primary text becomes bold."
 msgstr ""
-"A paltaforma GNOME inclúe WebKitGTK+, construído sobre o potente marco de "
-"traballo WebKit. WebKitGTK usase en todo GNOME, non só para ver páxinas web "
-"en Internet, senón tamén para crear interfaces de usuario enriquecidas ás "
-"que se poden engadir estilos de forma doada con CSS."
 
-#: C/message-board.c.page:48(p)
+#: C/messagedialog.py.page:58(item/p)
 msgid ""
-"In this tutorial, you will create a simple message board using WebKit. The "
-"message board will allow you to enter some text and have it added to a list "
-"of messages in HTML. Before you begin, you need to set up a project in "
-"Anjuta."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMessageDialog.html";
+"\">GtkMessageDialog</link>"
 msgstr ""
-"Neste titorial, vostede creará un taboleiro de mensaxes sinxelo usando "
-"WebKit. O taboleiro de mensaxes permitiralle inserir algún texto e engadilo "
-"a unha lista de mensaxes en HTML. Antes de comezar debe configurar un "
-"proxecto en Anjuta."
 
-#: C/message-board.c.page:54(p)
+#: C/messagedialog.py.page:62(item/p)
 msgid ""
-"In Anjuta, click <guiseq><gui>File</gui><gui>New</gui><gui>Project</gui></"
-"guiseq> to open the new project assistant."
+"<link href=\"http://developer.gnome.org/gio/unstable/GActionMap.html";
+"\">GActionMap</link>"
 msgstr ""
-"En Anjuta, prema <guiseq><gui>Ficheiro</gui><gui>Novo</gui><gui>Proxecto</"
-"gui></guiseq> para abrir un asistente de novo proxecto."
 
-#: C/message-board.c.page:56(p)
+#: C/messagedialog.vala.page:7(info/title)
 #, fuzzy
-#| msgid ""
-#| "Select <gui>GTK+ (simple)</gui> on the <gui>C</gui> tab, and click "
-#| "<gui>Forward</gui>."
+#| msgid "MessageDialog"
+msgctxt "text"
+msgid "MessageDialog (Vala)"
+msgstr "MessageDialog"
+
+#: C/messagedialog.vala.page:24(page/code)
+#, no-wrap
 msgid ""
-"Select <gui>GTK+ (simple)</gui> on the <gui>C</gui> tab, and click "
-"<gui>Continue</gui>."
+"\n"
+"//A window in the application\n"
+"public class Window : Gtk.ApplicationWindow {\n"
+"\tpublic Window (Application app) {\n"
+"\t\tObject (application: app, title: \"Gtk.MessageDialog Example\");\n"
+"\n"
+"\t\tvar label = new Gtk.Label (\"This application goes boom!\");\n"
+"\t\tthis.add (label);\n"
+"\n"
+"\t\tvar message_action = new SimpleAction (\"message\", null);\n"
+"\t\tmessage_action.activate.connect (message);\n"
+"\t\tthis.add_action (message_action);\n"
+"\n"
+"\t\tthis.set_default_size (400, 200);\n"
+"\t\tthis.show_all ();\n"
+"\t}\n"
+"\n"
+"\tvoid dialog_response (Gtk.Dialog dialog, int response_id) {\n"
+"\t\tswitch (response_id) {\n"
+"\t\t\tcase Gtk.ResponseType.OK:\n"
+"\t\t\t\tprint (\"*boom*\\n\");\n"
+"\t\t\t\tbreak;\n"
+"\t\t\tcase Gtk.ResponseType.CANCEL:\n"
+"\t\t\t\tprint (\"good choice\\n\");\n"
+"\t\t\t\tbreak;\n"
+"\t\t\tcase Gtk.ResponseType.DELETE_EVENT:\n"
+"\t\t\t\tprint (\"dialog closed or cancelled\\n\");\n"
+"\t\t\t\tbreak;\n"
+"\t\t}\n"
+"\t\t\tdialog.destroy();\n"
+"\t}\n"
+"\n"
+"\tvoid message (SimpleAction simple, Variant? parameter) {\n"
+"\t\tvar messagedialog = new Gtk.MessageDialog (this,\n"
+"                            Gtk.DialogFlags.MODAL,\n"
+"                            Gtk.MessageType.WARNING,\n"
+"                            Gtk.ButtonsType.OK_CANCEL,\n"
+"                            \"This action will cause the universe to stop existing.\");\n"
+"\n"
+"\t\tmessagedialog.response.connect (dialog_response);\n"
+"\t\tmessagedialog.show ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"//This is the Application\n"
+"public class Application : Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\t\tnew Window (this);\n"
+"\t}\n"
+"\n"
+"\tprotected override void startup () {\n"
+"\t\tbase.startup ();\n"
+"\n"
+"\t\tvar menu = new Menu ();\n"
+"\t\tmenu.append (\"Message\", \"win.message\");\n"
+"\t\tmenu.append (\"Quit\", \"app.quit\");\n"
+"\t\tthis.app_menu = menu;\n"
+"\n"
+"\t\tvar quit_action = new SimpleAction (\"quit\", null);\n"
+"\t\t//quit_action.activate.connect (this.quit);\n"
+"\t\tthis.add_action (quit_action);\n"
+"\t}\n"
+"\n"
+"\tpublic Application () {\n"
+"\t\tObject (application_id: \"org.example.application\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"//main function creates Application and runs it\n"
+"int main (string[] args) {\n"
+"\treturn new Application ().run (args);\n"
+"}\n"
 msgstr ""
-"Seleccione <gui>GTK+ (simple)</gui> na lapela <gui>C</gui> e prema "
-"<gui>Adiante</gui>."
 
-#: C/message-board.c.page:58(p)
+#: C/messagedialog.vala.page:30(item/p)
 #, fuzzy
 #| msgid ""
-#| "Fill out your details on the <gui>Basic information</gui> page. Use "
-#| "<input>message-board</input> for the project name. Click <gui>Forward</"
-#| "gui>."
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Fill out your details on the <gui>Basic information</gui> page. Use "
-"<input>message-board</input> for the project name. Click <gui>Continue</gui>."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ResponseType.html\";>Gtk."
+"ResponseType</link>"
 msgstr ""
-"Complete os detalles na páxina <gui>Información básica</gui>. Use "
-"<input>message-board</input> para o nome do proxecto. Prema <gui>Seguinte</"
-"gui>."
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/message-board.c.page:61(p)
+#: C/messagedialog.vala.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Disable the <gui>Use GtkBuilder for user interface</gui> option as this "
-"tutorial builds the user-interface manually."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.MessageDialog.html\";>Gtk."
+"MessageDialog</link>"
 msgstr ""
-"Desactive a opción <gui>Usar GtkBuilder para a interface de usuario</gui> xa "
-"que neste titorial construirase a interface de usuario de forma manual."
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/message-board.c.page:64(p)
+#: C/messagedialog.vala.page:32(item/p)
 #, fuzzy
 #| msgid ""
-#| "You need to tell Anjuta you're using WebKitGTK+ on this project. On the "
-#| "<gui>Project options</gui> page, select <gui>Configure external packages</"
-#| "gui>. Click <gui>Forward</gui>. On the <gui>Configure external packages</"
-#| "gui> page, check <gui>webkitgtk-3.0</gui>."
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"You need to tell Anjuta you're using WebKitGTK+ on this project. On the "
-"<gui>Project options</gui> page, select <gui>Configure external packages</"
-"gui>. Click <gui>Continue</gui>. On the <gui>Configure external packages</"
-"gui> page, check <gui>webkitgtk-3.0</gui>."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.DialogFlags.html\";>Gtk."
+"DialogFlags</link>"
 msgstr ""
-"Debe dicirlle a Anjuta que está usando WebKitGTK+ neste proxecto. Na páxina "
-"de <gui>Opcións do proxecto</gui>, seleccione <gui>Configurar paquetes "
-"externos</gui>. Prema <gui>Seguinte</gui>. Na páxina <gui>Configurar "
-"paquetes externos</gui> marque <gui>webkitgtk-3.0</gui>."
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/message-board.c.page:70(p)
+#: C/messagedialog.vala.page:33(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"After you finish the new project assistant, open the file <file>src/main.c</"
-"file> from either the <gui>Project</gui> or the <gui>File</gui> tab. Anjuta "
-"will have filled this in with some basic GTK+ code from its templates. Since "
-"you are creating a WebKit project, you first need to include the WebKit "
-"headers. After the line that includes <code>gtk/gtk.h</code>, add the "
-"following line:"
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.MessageType.html\";>Gtk."
+"MessageType</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/message-board.c.page:77(code)
-#, no-wrap
-msgid "#include &lt;webkit/webkit.h&gt;"
-msgstr "#include &lt;webkit/webkit.h&gt;"
-
-#: C/message-board.c.page:79(p)
+#: C/messagedialog.vala.page:34(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Verify that everything works by building what you have so far. Click "
-"<guiseq><gui>Build</gui><gui>Build Project</gui></guiseq> or just press "
-"<keyseq><key>Shift</key><key>F7</key></keyseq>. The first time you build, "
-"you will be asked for some configure options. Just accept the defaults and "
-"click <gui>Execute</gui>."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ButtonsType.html\";>Gtk."
+"ButtonsType</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/message-board.c.page:85(p)
-msgid ""
-"You should now be able to run the program. Click <guiseq><gui>Run</"
-"gui><gui>Execute</gui></guiseq> or just press <key>F3</key>. You should see "
-"an empty window appear."
+#: C/model-view-controller.py.page:8(info/title)
+msgctxt "text"
+msgid "The Model/View/Controller design (Python)"
 msgstr ""
-"Debería poder executar o programa. Prema <guiseq><gui>Executar</"
-"gui><gui>Executar</gui></guiseq> ou prema <key>F3</key>. Debería aparecer "
-"unha xanela baleira."
-
-#: C/message-board.c.page:91(title)
-msgid "Lay out your window and web view"
-msgstr "Dispor a súa xanela e a vista web"
 
-#: C/message-board.c.page:93(p)
-msgid ""
-"Now that you can show a window, it's time to start working with WebKit. For "
-"this tutorial, you'll create a text entry and a web view and pack them both "
-"into a window. Find the function <code>create_window</code> and replace it "
-"with the following:"
+#: C/model-view-controller.py.page:12(info/desc)
+#: C/model-view-controller.py.page:25(page/title)
+msgid "The Model/View/Controller design"
 msgstr ""
-"Agora que pode mostrar unha xanela, é hora de comezar o traballo con webkit. "
-"Para este titorial, crearemos unha entrada de texto e unha vista web e "
-"empaquetarémolas nunha xanela. Busque a función <code>create_window</code> e "
-"substitúaa co seguinte:"
 
-#: C/message-board.c.page:133(p)
-msgid ""
-"You first create a <code>GtkWindow</code> object and set its title and "
-"default size. You also connect the <code>gtk_main_quit</code> function to "
-"the <code>delete-event</code> signal. The <code>delete-event</code> signal "
-"is emitted when the window is closed. The <code>gtk_main_quit</code> "
-"function is part of GTK, and it quits the application."
-msgstr ""
-"Primeiro cree un obxecto <code>GtkWindow</code> e estabeleza o seu título e "
-"o seu tamaño predeterminado. Tamén pode conectar a función "
-"<code>gtk_main_quit</code> ao sinal <code>delete-event</code>. O sinal "
-"<code>delete-event</code> emítese cando se pecha a xanela. A función "
-"<code>gtk_main_quit</code> é parte de GTK+, e sae do aplicativo."
+#: C/model-view-controller.py.page:30(section/title)
+#: C/properties.py.page:30(section/title)
+#: C/signals-callbacks.py.page:30(section/title)
+msgid "Overview"
+msgstr "Vista xeral"
 
-#: C/message-board.c.page:139(p)
+#: C/model-view-controller.py.page:32(section/p)
 msgid ""
-"You then create a vertical box and add it to the window. A window can only "
-"hold a single child widget, so you need to use a box to add multiple "
-"widgets. The second argument to <code>gtk_box_new</code> sets the amount of "
-"padding (in pixels) between each child, and the next line puts a six-pixel "
-"border around the entire thing."
+"Both the <link xref=\"treeview_simple_liststore.py\">TreeView</link> and the "
+"<link xref=\"combobox.py\">ComboBox</link> widgets are built on the "
+"<em>Model/View/Controller</em> design. The <em>Model</em> (an implementation "
+"of <code>Gtk.TreeModel</code>, usually <code>Gtk.TreeStore</code> or "
+"<code>Gtk.ListStore</code>) stores the data; the <em>View</em> (e.g. "
+"<code>Gtk.TreeView</code>, <code>Gtk.ComboBox</code>, or <code>Gtk."
+"ComboBoxText</code>) gets change notifications and displays the content of "
+"the model. The <em>Controller</em>, finally, changes the state of the model "
+"(via some methods in the model's implementation - such as <code>append()</"
+"code> or <code>remove()</code>) and notifies the view of these changes (via "
+"signals like <code>\"changed\"</code>)."
 msgstr ""
 
-#: C/message-board.c.page:145(p)
-msgid ""
-"You next create a <code>GtkEntry</code> object and pack it into the box. The "
-"third and fourth arguments to <code>gtk_box_pack_start</code> specify that "
-"the entry shouldn't take up any extra space the box has available. The "
-"fourth argument is the amount of padding you want around the entry. In this "
-"case, you set the padding to zero, because you're allowing the box to handle "
-"all the padding."
+#: C/model-view-controller.py.page:37(section/title)
+msgid "The Model"
 msgstr ""
 
-#: C/message-board.c.page:152(p)
+#: C/model-view-controller.py.page:39(section/p)
 msgid ""
-"Before you add a web view, you have to create a scrolled window to put it "
-"inside of. The scrolled window will place scrollbars on the right and bottom "
-"when necessary, and prevent your web view from filling your entire screen. "
-"This time, you pass <code>TRUE</code> and <code>TRUE</code> to "
-"<code>gtk_box_pack_start</code> to allow the scrolled window (and thus, the "
-"web view) to use any extra space available in the box."
+"The main difference between the two main implementations of <code>Gtk."
+"TreeModel</code> is that <code>Gtk.ListStore</code> contains simple rows of "
+"data without children, whereas <code>Gtk.TreeStore</code> also contains rows "
+"of data, but each row may have child rows (which in turn can have child "
+"rows, and so on)."
 msgstr ""
 
-#: C/message-board.c.page:159(p)
+#: C/model-view-controller.py.page:41(section/p)
 msgid ""
-"Finally, you create a <code>WebKitWebView</code> and add it to the scrolled "
-"window. Then load a very basic HTML page into the web view by calling "
-"<code>webkit_web_view_load_string</code> with the following arguments:"
+"The data in the Model can be retrieved or modified using the tree iter and "
+"column index, or <code>Gtk.TreeIter</code>, or <code>Gtk.TreePath</code>."
 msgstr ""
 
-#: C/message-board.c.page:165(code)
-#, no-wrap
-msgid "WEBKIT_WEB_VIEW (view)"
-msgstr "WEBKIT_WEB_VIEW (view)"
-
-#: C/message-board.c.page:166(p)
+#: C/model-view-controller.py.page:43(section/p)
 msgid ""
-"The view itself. Because <code>view</code> is typed as a <code>GtkWidget*</"
-"code>, you have to use <code>WEBKIT_WEB_VIEW</code> to safely cast the "
-"object."
+"As with Python's built-in list object you can use <code>len()</code> to get "
+"the number of rows and use slices to retrieve or set values. Otherwise, the "
+"method <code>append()</code> returns a <code>Gtk.TreeIter</code> instance, "
+"which points to the location of the newly inserted row. You can also "
+"retrieve a <code>Gtk.TreeIter</code> by calling <code>get_iter()</code>."
 msgstr ""
-"A vista por si mesma. Xa que <code>view</code> é de tipo <code>GtkWidget*</"
-"code>, debe usar <code>WEBKIT_WEB_VIEW</code> para converter o tipo de "
-"obxecto con seguranza."
-
-#: C/message-board.c.page:171(code)
-#, no-wrap
-msgid "\"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;\""
-msgstr "\"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;\""
-
-#: C/message-board.c.page:172(p)
-msgid "The simplest HTML file you could possibly write."
-msgstr "O ficheiro HTLM máis sinxelo que pode escribir."
-
-#: C/message-board.c.page:175(code)
-#, no-wrap
-msgid "\"text/html\""
-msgstr "\"text/html\""
 
-#: C/message-board.c.page:176(p)
+#: C/model-view-controller.py.page:45(section/p)
 msgid ""
-"The MIME type of the content you provided. In this case, you're using plain "
-"HTML."
+"As <code>Gtk.ListStore</code> contains only one level, i.e. nodes do not "
+"have any child nodes, a path is essentially the index of the row you want to "
+"access. In the case of <code>Gtk.TreeStore</code>, a path is a list of "
+"indexes or a string. The string form is a list of numbers separated by a "
+"colon. Each number refers to the offset at that level. Thus, the path <code>"
+"\"0\"</code> refers to the root node and the path <code>\"2:4\"</code> "
+"refers to the fifth child of the third node."
 msgstr ""
-"O tipo MIME do contido que forneceu. Neste caso, está usando HTML plano."
-
-#: C/message-board.c.page:180(code)
-#, no-wrap
-msgid "\"UTF-8\""
-msgstr "\"UTF-8\""
 
-#: C/message-board.c.page:181(p)
-msgid ""
-"The character encoding of the content you provided. Although you only used "
-"ASCII characters, it's a good idea to specify UTF-8. UTF-8 is used as the "
-"default encoding throughout the GNOME platform."
+#: C/model-view-controller.py.page:47(section/p)
+msgid "Useful methods for a <code>Gtk.TreeModel</code>:"
 msgstr ""
-"A codificación de caracteres do contido que forneceu. Aínda que só se usen "
-"caracteres ASCII é boa idea especificar UTF-8. UTF-8 úsase como a "
-"codificación predeterminada na plataforma GNOME."
-
-#: C/message-board.c.page:186(code)
-#, no-wrap
-msgid "NULL"
-msgstr "NULL"
 
-#: C/message-board.c.page:187(p)
+#: C/model-view-controller.py.page:49(item/p)
 msgid ""
-"The base URI. You don't need it in this simple example, but you might want "
-"to provide a <sys>file:</sys> URI if you add images or other features where "
-"you want to use relative URI references."
+"<code>get_iter(path)</code> returns a <code>Gtk.TreeIter</code> instance "
+"pointing to <code>path</code>. This is expected to be a colon-separated list "
+"of numbers, or a tuple. For example, the string <code>\"10:4:0\"</code> is "
+"equivalent to the tuple <code>(10, 4, 0)</code>, as both would create a path "
+"of depth 3 pointing to the 11th child of the root node, the 5th child of "
+"that 11th child, and the 1st child of that 5th child."
 msgstr ""
-"O URI base. Non o precisa neste exemplo sinxelo, pero podería fornecer unha "
-"URI <sys>file:</sys> se quere engadir imaxes ou outras características onde "
-"queira usar preferencias relativas a URI."
 
-#: C/message-board.c.page:194(p)
+#: C/model-view-controller.py.page:50(item/p)
 msgid ""
-"Every time you add a widget, you have to call <code>gtk_widget_show</code> "
-"on it for it to be visible. If you call <code>gtk_widget_show_all</code> on "
-"a container widget like a <code>GtkBox</code>, GTK+ will automatically show "
-"all the widgets inside the container, to any depth. Sometimes you don't want "
-"to call <code>gtk_widget_show_all</code>, such as when you want to "
-"dynamically hide and show some widgets in response to events."
+"<code>iter_next(treeiter)</code> returns a <code>Gtk.TreeIter</code> "
+"instance pointing the node following treeiter at the current level or "
+"<code>None</code> if there is no next iter."
 msgstr ""
 
-#: C/message-board.c.page:202(p)
+#: C/model-view-controller.py.page:51(item/p)
 msgid ""
-"Finally, you have to call <code>gtk_widget_show_all</code> on the box. "
-"Otherwise, none of the widgets you created will be visible. (The window is "
-"shown in the <code>main</code> function with <code>gtk_widget_show</code>.)"
+"<code>iter_has_child(treeiter)</code> returns <code>True</code> if "
+"<code>treeiter</code> has children, <code>False</code> otherwise."
 msgstr ""
 
-#: C/message-board.c.page:206(p)
+#: C/model-view-controller.py.page:52(item/p)
 msgid ""
-"Build and run the message board again. You should see a window with a text "
-"entry and a web view. It doesn't do anything yet because the text entry and "
-"the web view don't know anything about each other."
+"<code>iter_children(treeiter)</code> returns a <code>Gtk.TreeIter</code> "
+"instance pointing to the first child of <code>treeiter</code> or <code>None</"
+"code> if <code>treeiter</code> has no children."
 msgstr ""
 
-#: C/message-board.c.page:212(title)
-msgid "Hook up signals"
-msgstr "Capturar sinais"
-
-#: C/message-board.c.page:214(p)
+#: C/model-view-controller.py.page:53(item/p)
 msgid ""
-"Now you want to make the message board actually <em>do</em> something when "
-"you enter text into the text entry. To do this, connect a callback function "
-"to the <code>activate</code> signal of <code>entry</code>. GTK+ emits the "
-"<code>activate</code> signal whenever the user presses <key>Enter</key> in "
-"the entry. Add the following into <code>create_window</code>, anywhere after "
-"both <code>entry</code> and <code>view</code> have been defined:"
+"<code>get_iter_first()</code> returns a <code>Gtk.TreeIter</code> instance "
+"pointing to the first iterator in the tree (the one at the path <code>\"0\"</"
+"code>) or <code>None</code> if the tree is empty."
 msgstr ""
 
-#: C/message-board.c.page:225(p)
-msgid ""
-"You then have to actually define <code>entry_activate_cb</code>. Define it "
-"as follows, anywhere above <code>create_window</code>:"
+#: C/model-view-controller.py.page:56(section/p)
+msgid "Useful methods for a <code>Gtk.ListStore</code>:"
 msgstr ""
 
-#: C/message-board.c.page:248(p)
+#: C/model-view-controller.py.page:58(item/p)
 msgid ""
-"The first thing you do is get a <code>WebKitDOMDocument</code> object that "
-"represents the HTML document displayed in <code>view</code>. The DOM classes "
-"and methods in WebKit allow you to inspect and manipulate the HTML document, "
-"and work very similarly to the DOM APIs you might already know from "
-"JavaScript."
+"<code>append(row)</code> appends a new row to this list store, where "
+"<code>row</code> can be a list of values for each column; <code>row</code> "
+"can also be omitted or <code>None</code>, and in that case an empty row will "
+"be appended. The method returns a <code>Gtk.TreeIter</code> pointing to the "
+"appended row."
 msgstr ""
 
-#: C/message-board.c.page:254(p)
+#: C/model-view-controller.py.page:59(item/p)
+#: C/model-view-controller.py.page:65(item/p)
 msgid ""
-"Once you have the document, you want to get the <code>body</code> element so "
-"that you can add <code>div</code> elements to it. The "
-"<code>webkit_dom_document_query_selector</code> function lets you find an "
-"element in the document using CSS selectors. This keeps you from having to "
-"write tedious loops to traverse the document."
+"<code>remove(iter)</code> removes <code>iter</code> from the <code>Gtk."
+"ListStore</code>, and returns <code>True</code> if the iter is valid, and "
+"<code>False</code> if the iter is not. After being removed, <code>iter</"
+"code> is set to be the next valid row."
 msgstr ""
 
-#: C/message-board.c.page:261(cite) C/message-board.c.page:273(cite)
-#: C/message-board.c.page:325(cite) C/message-board.c.page:382(cite)
-#: C/message-board.c.page:390(cite)
-msgid "shaunm"
-msgstr "shaunm"
-
-#: C/message-board.c.page:262(p)
-msgid "FIXME: Is this true? Does query_selector take CSS, CSSish, or what?"
+#: C/model-view-controller.py.page:62(section/p)
+msgid "Useful methods for a <code>Gtk.TreeStore</code>:"
 msgstr ""
 
-#: C/message-board.c.page:265(p)
+#: C/model-view-controller.py.page:64(item/p)
 msgid ""
-"Next, you create a new <code>div</code> element to hold the message. Every "
-"element you create has to be attached to a document, so the function to "
-"create an element takes the <code>WebKitDOMDocument</code> as its first "
-"arguments. You then set the text content of the element to the contents of "
-"the text entry. Because <code>gtk_entry_get_text</code> returns a "
-"<code>const gchar*</code>, you don't have to free the result."
+"<code>append(parent, row)</code> appends a new row to this tree store; "
+"<code>parent</code> must be a valid Gtk.TreeIter. If parent is not "
+"<code>None</code>, then it will append the new row after the last child of "
+"parent, otherwise it will append a row to the top level; <code>row</code> "
+"can be a list of values for each column, or it can be omitted or <code>None</"
+"code>; in this latter case an empty row will be appended. The method returns "
+"a <code>Gtk.TreeIter</code> pointing to the appended row."
+msgstr ""
+
+#: C/model-view-controller.py.page:71(section/title)
+msgid "The View: the TreeView case"
 msgstr ""
 
-#: C/message-board.c.page:274(p)
+#: C/model-view-controller.py.page:73(section/p)
 msgid ""
-"Not passing the GError**, but we should give it a quick mention and link to "
-"somewhere that explains how GError-handling works."
+"A Treeview shows the structure of children and parent items as a tree. See "
+"for instance <link xref=\"treeview_treestore.py\">this example</link>."
 msgstr ""
 
-#: C/message-board.c.page:278(p)
+#: C/model-view-controller.py.page:75(section/p)
 msgid ""
-"Finally, you append the new <code>div</code> element to the body and clear "
-"out the text entry so you can type something new. Build and run the program "
-"again and test it for yourself."
+"The <code>Gtk.TreeViewColumn</code> is used to organize the vertical columns."
 msgstr ""
 
-#: C/message-board.c.page:285(title)
-msgid "Make it look better with CSS"
-msgstr "Mellorar o aspecto con CSS"
+#: C/model-view-controller.py.page:77(section/p)
+msgid "Useful methods for a <code>Gtk.TreeView</code>:"
+msgstr ""
 
-#: C/message-board.c.page:287(p)
+#: C/model-view-controller.py.page:79(item/p)
 msgid ""
-"At this point, your program is completely functional, but not very pretty. "
-"You can style the message display with CSS, just like you can with any other "
-"HTML page. There are many ways you could attach some CSS to the page: You "
-"could add it in the initial HTML document. You could inline it in the "
-"<code>style</code> attribute of the <code>div</code> elements. You could "
-"even programmatically construct it using the DOM APIs."
+"<code>set_model(model)</code> sets the model for this tree view. If this "
+"tree view already has a model set, it will remove it before setting the new "
+"model. If model is <code>None</code>, then it will unset the old model."
 msgstr ""
 
-#: C/message-board.c.page:294(p)
+#: C/model-view-controller.py.page:80(item/p)
 msgid ""
-"In this tutorial, you'll attach the CSS using the <code>user-stylesheet-uri</"
-"code> property of the <code>WebKitWebSetting</code> object attached to your "
-"web view. In a more complete application, you would want to save and load "
-"your HTML file. Keeping the style information outside the actual HTML means "
-"that you can change the styling completely within your application, without "
-"having to change users' files. You would normally just install a file along "
-"with your application, but just to keep everything in one file for this "
-"demo, we'll use a trick called a data URI. First, define the CSS as a static "
-"string near the top of your file."
+"<code>get_model()</code> returns the model this tree view is based on, "
+"<code>None</code> if the model is unset."
 msgstr ""
 
-#: C/message-board.c.page:316(p)
+#: C/model-view-controller.py.page:81(item/p)
 msgid ""
-"All you have in this example are <code>div</code> elements inside a "
-"<code>body</code> element. If you created more complicated HTML, you could "
-"use whatever CSS is necessary. In fact, if you're comfortable with CSS, you "
-"should trying changing this to something you like better."
+"<code>append_column(column)</code> appends <code>column</code> to the list "
+"of columns."
 msgstr ""
 
-#: C/message-board.c.page:321(p)
+#: C/model-view-controller.py.page:82(item/p)
 msgid ""
-"To apply the CSS, you set the <code>user-stylesheet-uri</code> in the "
-"<code>create_window</code> function, anywhere after <code>view</code> has "
-"already been defined."
+"<code>get_selection()</code> gets the <code>Gtk.TreeSelection</code> "
+"associated with this tree view."
 msgstr ""
 
-#: C/message-board.c.page:325(p)
-msgid "g_base64_encode has bad args"
-msgstr "g_base64_encode ten argumentos non válidos"
+#: C/model-view-controller.py.page:85(section/p)
+msgid "Useful methods for a <code>Gtk.TreeViewColumn</code>:"
+msgstr ""
 
-#: C/message-board.c.page:337(p)
+#: C/model-view-controller.py.page:87(item/p)
 msgid ""
-"Also, make sure to add variable declarations for <code>tmp</code> and "
-"<code>css</code> to the top of <code>create_window</code>."
+"<code>add_attribute(renderer, attribute, value)</code> adds an attribute "
+"mapping to this column. <code>attribute</code> is the parameter on "
+"<code>renderer</code> to be set from the <code>value</code>"
 msgstr ""
 
-#: C/message-board.c.page:340(code)
-#, no-wrap
+#: C/model-view-controller.py.page:88(item/p)
 msgid ""
-"\n"
-"gchar *tmp, *css;\n"
+"<code>pack_start(renderer, expand)</code> packs <code>renderer</code> into "
+"the beginning of this column. If <code>expand</code> is <code>False</code>, "
+"then <code>renderer</code> is allocated no more space than it needs. Any "
+"unused space is divided evenly between cells for which expand is <code>True</"
+"code>."
 msgstr ""
-"\n"
-"gchar *tmp, *css;\n"
 
-#: C/message-board.c.page:344(p)
+#: C/model-view-controller.py.page:89(item/p)
 msgid ""
-"A data URI starts with <sys>data:</sys> and some information about the "
-"content type and how the data is encoded. The actual data follows after a "
-"comma, in this case encoded in Base64. Unlike other URI schemes like "
-"<sys>http:</sys>, <sys>ftp:</sys>, and <sys>file:</sys>, the <sys>data:</"
-"sys> URI scheme doesn't specify where to find a file to load. Rather, it "
-"gives the entire contents of the file."
+"<code>pack_end(renderer, expand)</code> adds <code>renderer</code> to end of "
+"this column. If <code>expand</code> is <code>False</code>, then "
+"<code>renderer</code> is allocated no more space than it needs. Any unused "
+"space is divided evenly between cells for which <code>expand</code> is "
+"<code>True</code>."
 msgstr ""
 
-#: C/message-board.c.page:351(p)
+#: C/model-view-controller.py.page:90(item/p)
 msgid ""
-"The code above first encodes your CSS definitions in Base64, then combines "
-"that with a fixed string to create a data URI. The <code>g_strconcat</code> "
-"function can take any number of string arguments and concatenate them all "
-"together, so you have to pass <code>NULL</code> as the final argument so it "
-"knows when to stop. And don't forget to free those temporary strings after "
-"you set the stylesheet property."
+"<code>set_sort_column_id(sort_column_id)</code> sets the column of the model "
+"by which this column (of the view) should be sorted. This also makes the "
+"column header clickable."
 msgstr ""
 
-#: C/message-board.c.page:358(p)
+#: C/model-view-controller.py.page:91(item/p)
 msgid ""
-"Build and run the program again. It should now work exactly the same as at "
-"the end of the last section, except the messages will be nicely styled with "
-"a border and a subtle background gradient."
+"<code>set_sort_indicator(setting)</code> sets whether a little arrow is "
+"displayed in the column header; <code>setting</code> can either be "
+"<code>True</code> (indicator is shown) or <code>False</code>."
 msgstr ""
 
-#: C/message-board.c.page:364(title)
-msgid "Learn more"
-msgstr "Aprender máis"
-
-#: C/message-board.c.page:366(p)
+#: C/model-view-controller.py.page:92(item/p)
 msgid ""
-"This tutorial showed you how to create a basic application using GTK+ and "
-"WebKit, including showing a document and manipulating its contents. To "
-"create a real application, you probably want to do a little bit more. Try "
-"adding features on your own. Here are a few ideas:"
+"<code>set_sort_order(order)</code> changes the order by which the column is "
+"sorted; <code>order</code> can either be <code>Gtk.SortType.ASCENDING</code> "
+"or <code>Gtk.SortType.DESCENDING</code>."
 msgstr ""
-"Este titorial mostroulle como crear un aplicativo sinxelo usando GTK+ e "
-"WebKit, incluindo como mostrar un documento e manipular o seu contido. Para "
-"crear un aplicativo real, probabelmente queira facer algo máis. Probe a "
-"engadir características vostede mesmo. Aquí hai algunhas ideas:"
 
-#: C/message-board.c.page:372(p)
-msgid ""
-"If you're comfortable with CSS, try changing the style of the message "
-"display. CSS is easy to get started with, but increasingly more powerful. "
-"There is a wealth of CSS tutorials on the Internet, and just about "
-"everything you can do on the web, you can do in this application."
+#: C/model-view-controller.py.page:98(section/title)
+msgid "The View: the ComboBox case"
 msgstr ""
-"Si se sinte comodo usando CSS, probe a cambiar o estilo da visualización da "
-"mensaxe. É moi doado iniciarse en CSS, pero cada vez é máis potente. Hai "
-"unha gran cantidade de titoriais de CSS en Internet, e case todo o que se "
-"pode facer nunha páxina web, pódese facer neste aplicativo."
 
-#: C/message-board.c.page:378(p)
+#: C/model-view-controller.py.page:100(section/p)
 msgid ""
-"Right now, you lose all your messages whenever you close the message board. "
-"Try saving the HTML contents after each post, and loading the saved file (if "
-"it exists) on startup."
+"A <code>Gtk.ComboBox</code> allows for the selection of an item from a "
+"dropdown menu, see for instance <link xref=\"combobox.py\">this example</"
+"link>. For a list of textual choices, one can also use the simpler <code>Gtk."
+"ComboBoxText</code>. Both <code>Gtk.ComboBox</code> and <code>Gtk."
+"ComboBoxText</code> can contain an entry."
 msgstr ""
-"Agora mesmo, tódalas mesnaxes pérdense ao pechar o cadro de mensaxes. Probe "
-"a gardar o contido HTML despois de cada envío, e a cargar o ficheiro cargado "
-"(se existe) ao inicio."
 
-#: C/message-board.c.page:382(p)
-msgid "Link to method to get HTML from DOM and to GIO APIs."
-msgstr "Ligazón ao método para obter HTML desde DOM e nas API de GIO."
+#: C/model-view-controller.py.page:102(section/p)
+msgid "Useful methods for a <code>Gtk.ComboBox</code>:"
+msgstr ""
 
-#: C/message-board.c.page:386(p)
+#: C/model-view-controller.py.page:104(item/p)
 msgid ""
-"If you keep your messages around for a long time, you'll start wondering "
-"when you posted them. Add a timestamp to each message when it's posted. "
-"You'll probably want to create some additional child <code>div</code> "
-"elements with different classes that you can style in the CSS."
+"The static method <code>new_with_entry()</code> creates a new empty "
+"<code>Gtk.ComboBox</code> with an entry; the static method "
+"<code>new_with_model(model)</code> creates a new one with the model "
+"initialized to <code>model</code>; and the static method "
+"<code>new_with_model_and_entry(model)</code> is a combination of the two."
 msgstr ""
 
-#: C/message-board.c.page:390(p)
-msgid "Link to strftime or something"
-msgstr "Ligazóns a strftime ou algo"
-
-#: C/message-board.c.page:393(p)
+#: C/model-view-controller.py.page:105(item/p)
 msgid ""
-"This program keeps messages around forever. Think about ways you could allow "
-"the user to delete messages. Perhaps you want messages to disappear "
-"automatically after they're too old, or after there are a certain number of "
-"messages before them. Or you could add a link in each message to delete it. "
-"You could even override the context menu when you right-click on a message. "
-"These features involve exploring WebKit's DOM API more."
+"<code>get_active_iter()</code> returns a <code>Gtk.TreeIter</code> pointing "
+"to the current active item. If no active item exists, <code>None</code> is "
+"returned."
 msgstr ""
-"Este programa garda as mensaxes para sempre. Pense algunha maneira para que "
-"o usuario poida borrar mensaxes. Tal vez queira que as mensaxes desapareza "
-"automaticamente cando son moi antigas ou despois de que haxa certo número de "
-"mensaxes por diante. Ou podería engadir unha ligazón en cada mensaxe para "
-"borrala. Tamén pode omitir o menú contextual cando preme co botón dereito "
-"sobe unha mensaxe. Esta características implican explorar máis da API do DOM "
-"de WebKit."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/menubutton.py.page:27(None) C/menubutton.vala.page:21(None)
-#: C/menubutton.js.page:21(None)
-#, fuzzy
-#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
-msgid "@@image: 'media/menubutton.png'; md5=1feb7b836a522c3007079d4420621d9d"
-msgstr "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
 
-#: C/menubutton.py.page:23(desc) C/menubutton.vala.page:17(desc)
-#: C/menubutton.js.page:17(desc)
-msgid "A widget that shows a menu when clicked on"
+#: C/model-view-controller.py.page:106(item/p)
+msgid ""
+"<code>set_model(model)</code> sets the model used by this combo box to be "
+"<code>model</code>, and it will unset a previously set model (if there is "
+"any). If <code>model</code> is <code>None</code>, then it will unset the "
+"model. Note that this function does not clear the cell renderers."
 msgstr ""
 
-#: C/menubutton.py.page:28(p) C/menubutton.vala.page:22(p)
-#: C/menubutton.js.page:22(p)
+#: C/model-view-controller.py.page:107(item/p)
 msgid ""
-"The GtkMenuButton widget is used to display a menu when clicked on. This "
-"menu can be provided either as a GtkMenu, or an abstract GMenuModel. The "
-"GtkMenuButton widget can hold any valid child widget. That is, it can hold "
-"almost any other standard GtkWidget. The most commonly used child is the "
-"provided GtkArrow."
+"<code>set_entry_text_column(text_column)</code> sets the model column which "
+"this combo box should use to get strings from to be <code>text_column</"
+"code>. The column <code>text_column</code> in the model of this combo box "
+"must be of type <code>str</code> (this is only relevant if this combo box "
+"has been created with the “has-entry” property set to True)."
 msgstr ""
 
-#: C/menubutton.py.page:30(p) C/menubutton.vala.page:26(p)
-#: C/menubutton.js.page:26(p)
-msgid "You need to be running GNOME 3.6 for the MenuButton to work."
+#: C/model-view-controller.py.page:108(item/p)
+msgid ""
+"<code>set_wrap_width(width)</code> sets the wrap width of this combo box to "
+"be <code>width</code>. The wrap width is basically the preferred number of "
+"columns when you want the popup to be layed out in a grid."
 msgstr ""
 
-#: C/menubutton.py.page:40(title)
-msgid "Useful methods for a MenuButton widget"
+#: C/model-view-controller.py.page:111(section/p)
+msgid "Useful methods for a <code>Gtk.ComboBoxText</code>:"
 msgstr ""
 
-#: C/menubutton.py.page:41(p)
+#: C/model-view-controller.py.page:113(item/p)
 msgid ""
-"The positioning of the menu is determined by the \"direction\" property of "
-"the menu button and the \"halign\" or \"valign\" properties of the menu. For "
-"example, when the direction is <code>Gtk.ArrowType.DOWN</code> (other "
-"option: <code>UP</code>) and the horizontal alignment is <code>Gtk.Align."
-"START</code> (other options: <code>CENTER</code> and <code>END</code>), the "
-"menu will be positioned below the button, with the starting edge (depending "
-"on the text direction) of the menu aligned with the starting edge of the "
-"button. If there is not enough space below the button, the menu is popped up "
-"above the button instead. If the alignment would move part of the menu "
-"offscreen, it is 'pushed in'."
+"The static method <code>new_with_entry()</code> creates a new empty "
+"<code>Gtk.ComboBoxText</code> with an entry."
 msgstr ""
 
-#: C/menubutton.py.page:43(p)
+#: C/model-view-controller.py.page:114(item/p)
 msgid ""
-"In the case of vertical alignment, the possible ArrowType directions are "
-"<code>LEFT</code> and <code>RIGHT</code> and the vertical alignment is again "
-"<code>START</code>, <code>CENTER</code> or <code>END</code>."
+"<code>append_text(text)</code> appends <code>text</code> to the list of "
+"strings stored in this combo box."
 msgstr ""
 
-#: C/menubutton.py.page:45(p)
+#: C/model-view-controller.py.page:115(item/p)
 msgid ""
-"<code>set_align_widget(alignment)</code> and <code>set_direction(direction)</"
-"code> can be used to set these properties."
+"<code>get_active_text()</code> returns the currently active string in this "
+"combo box, or <code>None</code> if none is selected. If this combo box "
+"contains an entry, this function will return its contents (which will not "
+"necessarily be an item from the list)."
 msgstr ""
 
-#: C/menubutton.vala.page:7(title)
-msgid "MenuButton (Vala)"
+#: C/model-view-controller.py.page:121(section/title)
+msgid "The View: the Cellrenderers"
 msgstr ""
 
-#: C/menubutton.js.page:7(title)
-#, fuzzy
-#| msgid "JavaScript"
-msgid "MenuButton (JavaScript)"
-msgstr "JavaScript"
+#: C/model-view-controller.py.page:123(section/p)
+msgid ""
+"The View makes use of <code>Gtk.CellRenderer</code>s of various types to "
+"draw the data."
+msgstr ""
 
-#: C/menubutton.js.page:12(name)
-msgid "Anna Zacchi"
+#: C/model-view-controller.py.page:125(section/p)
+msgid "Implementations of <code>Gtk.CellRenderer</code> and useful methods:"
 msgstr ""
 
-#: C/menubutton.js.page:13(email)
-msgid "azzurroverde gmail com"
+#: C/model-view-controller.py.page:127(item/p)
+msgid "<code>Gtk.CellRendererText</code> - renders text in a cell"
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/menubar.vala.page:23(None) C/menubar.py.page:28(None)
-#, fuzzy
-#| msgid "@@image: 'media/ubuntu.png'; md5=40845e4a40b335b1958da1403f01c13f"
-msgid "@@image: 'media/menubar.png'; md5=7b642aaa1628d5e43ab85ac230ac1c78"
-msgstr "@@image: 'media/ubuntu.png'; md5=40845e4a40b335b1958da1403f01c13f"
+#: C/model-view-controller.py.page:128(item/p)
+msgid ""
+"<code>Gtk.CellRendererToggle</code> - renders a toggle or radio button in a "
+"cell. Useful methods:"
+msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/menubar.vala.page:133(None) C/menubar.py.page:129(None)
-#, fuzzy
-#| msgid "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
+#: C/model-view-controller.py.page:130(item/p)
 msgid ""
-"@@image: 'media/menubar_choices.png'; md5=47cdfa12caf85ba20dd3e835bd7f893f"
-msgstr "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
+"<code>set_active(setting)</code> - activates or deactivates a cell renderer"
+msgstr ""
 
-#: C/menubar.vala.page:7(title)
-msgid "MenuBar (Vala)"
+#: C/model-view-controller.py.page:131(item/p)
+msgid "<code>get_active()</code> - returns whether the cell renderer is active"
 msgstr ""
 
-#: C/menubar.vala.page:19(desc) C/menubar.py.page:24(desc)
-msgid "A widget which holds GtkMenuItem widgets"
+#: C/model-view-controller.py.page:132(item/p)
+msgid ""
+"<code>set_radio(radio)</code> - if radio is <code>True</code>, the cell "
+"renderer renders a radio toggle (i.e. a toggle in a group of mutually-"
+"exclusive toggles); if <code>False</code>, it renders a check toggle (a "
+"standalone boolean option)"
 msgstr ""
 
-#: C/menubar.vala.page:22(title) C/menubar.py.page:27(title)
-msgid "MenuBar"
+#: C/model-view-controller.py.page:133(item/p)
+msgid ""
+"<code>get_radio()</code> - returns whether we are rendering radio toggles "
+"rather than checkboxes."
 msgstr ""
 
-#: C/menubar.vala.page:24(p) C/menubar.py.page:29(p)
-msgid "A MenuBar created using XML and GtkBuilder."
+#: C/model-view-controller.py.page:136(item/p)
+msgid "<code>Gtk.CellRendererPixbuf</code> - renders an image in a cell"
 msgstr ""
 
-#: C/menubar.vala.page:28(title) C/menubar.py.page:33(title)
-msgid "Create a MenuBar using XML"
+#: C/model-view-controller.py.page:137(item/p)
+msgid ""
+"<code>Gtk.CellRendererCombo</code> - renders text in a cell; but while "
+"<code>Gtk.CellRendererText</code> offers a simple entry to edit the text, "
+"<code>Gtk.CellRendererCombo</code> offers a <code>Gtk.ComboBox</code> widget "
+"to edit the text. It can be used with and without an associated Gtk.Entry "
+"widget, depending on the value of the “has-entry” property."
 msgstr ""
 
-#: C/menubar.vala.page:29(p) C/menubar.py.page:34(p)
-msgid "To create the menubar using XML:"
+#: C/model-view-controller.py.page:138(item/p)
+msgid ""
+"<code>Gtk.CellRendererProgress</code> - renders a numeric value as a "
+"progress bar in a cell; it can display a text on top of the progress bar"
 msgstr ""
 
-#: C/menubar.vala.page:31(p) C/menubar.py.page:36(p)
-msgid "Create <file>menubar.ui</file> using your favorite text editor."
+#: C/model-view-controller.py.page:139(item/p)
+msgid ""
+"<code>Gtk.CellRendererSpinner</code> - renders a spinning animation in a cell"
 msgstr ""
 
-#: C/menubar.vala.page:32(p) C/menubar.py.page:37(p)
-msgid "Enter the following line at the top of the file:"
+#: C/model-view-controller.py.page:140(item/p)
+msgid "<code>Gtk.CellRendererSpin</code> - renders a spin button in a cell"
 msgstr ""
 
-#: C/menubar.vala.page:36(p) C/menubar.py.page:41(p)
+#: C/model-view-controller.py.page:141(item/p)
 msgid ""
-"We want to create the interface which will contain our menubar and it's "
-"submenus. Our menubar will contain <gui>File</gui>, <gui>Edit</gui>, "
-"<gui>Choices</gui> and <gui>Help</gui> submenus. We add the following XML "
-"code to the file:"
+"<code>Gtk.CellRendererAccel</code> - renders a keyboard accelerator in a cell"
 msgstr ""
 
-#: C/menubar.vala.page:39(p)
-msgid ""
-"Now we will create the .vala file and use GtkBuilder to import the "
-"<file>menubar.ui</file> we just created."
+#: C/model-view-controller.py.page:147(section/title)
+msgid "The Controller: the Selection"
 msgstr ""
 
-#: C/menubar.vala.page:42(title) C/menubar.py.page:48(title)
-msgid "Add the MenuBar to the window using GtkBuilder"
+#: C/model-view-controller.py.page:149(section/p)
+msgid ""
+"Most applications will need to not only deal with displaying data, but also "
+"receiving input events from users. To do this, simply get a reference to a "
+"selection object and connect to the <code>\"changed\"</code> signal."
 msgstr ""
 
-#: C/menubar.vala.page:44(p)
+#: C/model-view-controller.py.page:151(section/code)
+#, no-wrap
 msgid ""
-"Now, compile the vala file, and run it. The application should look like the "
-"picture at the top of this page."
+"\n"
+"select = tree.get_selection()\n"
+"select.connect(\"changed\", on_tree_selection_changed)\n"
 msgstr ""
 
-#: C/menubar.vala.page:50(title) C/menubar.py.page:54(title)
-msgid "Add items to the menus"
+#: C/model-view-controller.py.page:156(section/p)
+msgid "Then to retrieve data for the row selected:"
 msgstr ""
 
-#: C/menubar.vala.page:51(p) C/menubar.py.page:55(p)
+#: C/model-view-controller.py.page:158(section/code)
+#, no-wrap
 msgid ""
-"We start off by adding 2 menuitems to the <gui>File</gui> menu: <gui>New</"
-"gui> and <gui>Quit</gui>. We do this by adding a <code>section</code> to the "
-"the <code>File</code> submenu with these items. The <file>menubar.ui</file> "
-"should look like this (lines 6 to 13 inclusive comprise the newly added "
-"section):"
+"\n"
+"def on_tree_selection_changed(selection):\n"
+"    model, treeiter = selection.get_selected()\n"
+"    if treeiter != None:\n"
+"        print \"You selected\", model[treeiter][0]\n"
 msgstr ""
 
-#: C/menubar.vala.page:79(p)
-msgid ""
-"Following this pattern, you can now add a <code>Copy</code> and a "
-"<code>Paste</code> item to the <code>Edit</code> submenu, and an "
-"<code>About</code> item to the <code>Help</code> submenu. We will hold off "
-"on adding items to the <link xref=\"menubar.vala#choices\">Choices submenu</"
-"link> until further in the tutorial."
+#: C/model-view-controller.py.page:165(section/p)
+msgid "Useful method for a <code>Gtk.TreeSelection</code>:"
 msgstr ""
 
-#: C/menubar.vala.page:81(p)
+#: C/model-view-controller.py.page:168(item/p)
 msgid ""
-"You do not need to recompile the vala program if you only made changes to "
-"the UI file. Just run your previously compiled application, and the UI "
-"changes will be reflected."
+"<code>set_mode(type)</code> sets the type of selection, where type is one of"
 msgstr ""
 
-#: C/menubar.vala.page:86(title) C/menubar.py.page:92(title)
-#, fuzzy
-#| msgid "Set up the actors"
-msgid "Setup actions"
-msgstr "Configurar os actores"
-
-#: C/menubar.vala.page:87(p)
-msgid "This is a three step process."
+#: C/model-view-controller.py.page:170(item/p)
+msgid "<code>Gtk.SelectionMode.NONE</code> - no selection is possible"
 msgstr ""
 
-#: C/menubar.vala.page:89(p)
+#: C/model-view-controller.py.page:171(item/p)
 msgid ""
-"First we create the ActionEntry array in the MyApplication class. An "
-"ActionEntry consists of:"
+"<code>Gtk.SelectionMode.SINGLE</code> - zero or one element may be selected"
 msgstr ""
 
-#: C/menubar.vala.page:92(p)
-msgid "the \"action name\" (mandatory)"
+#: C/model-view-controller.py.page:172(item/p)
+msgid ""
+"<code>Gtk.SelectionMode.BROWSE</code> - exactly one element is selected. In "
+"some circumstances, such as initially or during a search operation, it’s "
+"possible for no element to be selected. What is really enforced is that the "
+"user can’t deselect a currently selected element except by selecting another "
+"element."
 msgstr ""
 
-#: C/menubar.vala.page:93(p)
+#: C/model-view-controller.py.page:173(item/p)
 msgid ""
-"the callback function to connect to the \"activate\" signal of the action "
-"(if applicable)"
+"<code>Gtk.SelectionMode.MULTIPLE</code> -any number of elements may be "
+"selected. Clicks toggle the state of an item. Any number of elements may be "
+"selected. The Ctrl key may be used to enlarge the selection, and Shift key "
+"to select between the focus and the child pointed to. Some widgets may also "
+"allow Click-drag to select a range of elements."
 msgstr ""
 
-#: C/menubar.vala.page:94(p)
+#: C/model-view-controller.py.page:176(item/p)
 msgid ""
-"the type of the parameter that must be passed to the activate function for "
-"the action (if applicable)"
+"<code>get_selected()</code> returns a tuple <code>(model, treeiter)</code>, "
+"where <code>model</code> is the current model and <code>treeiter</code> a "
+"<code>Gtk.TreeIter</code> pointing to the currently selected row, or None if "
+"no rows are selected. The method does not work if the selection mode is set "
+"to <code>Gtk.SelectionMode.MULTIPLE</code>; in that case, use "
+"<code>get_selected_rows()</code> instead, which Returns a list of <code>Gtk."
+"TreePath</code> instances of all selected rows."
 msgstr ""
 
-#: C/menubar.vala.page:95(p)
-msgid "the initial state for this action (if applicable)"
+#: C/model-view-controller.py.page:182(section/title)
+#: C/properties.py.page:49(section/title)
+#: C/signals-callbacks.py.page:44(section/title)
+#: C/strings.py.page:124(section/title)
+msgid "References"
 msgstr ""
 
-#: C/menubar.vala.page:96(p)
-msgid "the callback to connect to \"change-state\" signal (if applicable)"
+#: C/model-view-controller.py.page:185(item/p)
+#: C/treeview_advanced_liststore.py.page:46(item/p)
+#: C/treeview_cellrenderertoggle.py.page:42(item/p)
+#: C/treeview_simple_liststore.py.page:44(item/p)
+#: C/treeview_treestore.py.page:42(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeModel.html";
+"\">GtkTreeModel</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/menubar.vala.page:98(code)
-#, no-wrap
+#: C/model-view-controller.py.page:186(item/p)
+#: C/treeview_advanced_liststore.py.page:45(item/p)
+#: C/treeview_cellrenderertoggle.py.page:41(item/p)
+#: C/treeview_simple_liststore.py.page:43(item/p)
+#: C/treeview_treestore.py.page:41(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"\n"
-"const ActionEntry[] actions = {\n"
-"    { \"new\", new_cb }, // {\"action name\", callback_function}\n"
-"    { \"quit\", quit_cb }\n"
-"};"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeView.html";
+"\">GtkTreeView</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/menubar.vala.page:105(p)
-msgid "Second, we create the callback functions the actions are connected to."
+#: C/model-view-controller.py.page:187(item/p)
+#: C/treeview_advanced_liststore.py.page:49(item/p)
+#: C/treeview_cellrenderertoggle.py.page:46(item/p)
+#: C/treeview_simple_liststore.py.page:47(item/p)
+#: C/treeview_treestore.py.page:45(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeViewColumn.html";
+"\">GtkTreeViewColumn</link>"
 msgstr ""
 
-#: C/menubar.vala.page:106(code)
-#, no-wrap
+#: C/model-view-controller.py.page:189(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"\n"
-"void new_cb (SimpleAction action, Variant? parameter) {\n"
-"    print (\"You clicked \\\"New\\\"\\n\");\n"
-"    //new MyWindow (this).show ();\n"
-"}\n"
-"\n"
-"void quit_cb (SimpleAction action, Variant? parameter) {\n"
-"    print (\"You clicked \\\"Quit\\\"\\n\");\n"
-"    //this.quit ();  **Bug #674090**\n"
-"}"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRenderer.html";
+"\">GtkCellRenderer</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/menubar.vala.page:117(p)
+#: C/model-view-controller.py.page:190(item/p)
 msgid ""
-"And lastly, we connect the menu items to the actions in the XML file by "
-"adding the \"action\" attribute:"
+"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/treeview.";
+"html\">The Python Gtk+ 3 Tutorial - Tree and List Widgets</link>"
 msgstr ""
 
-#: C/menubar.vala.page:132(title) C/menubar.py.page:128(title)
-msgid "Choices submenu and items with state"
+#: C/model-view-controller.py.page:191(item/p)
+msgid ""
+"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/";
+"cellrenderers.html\">The Python Gtk+ 3 Tutorial - CellRenderers</link>"
 msgstr ""
 
-#: C/menubar.vala.page:134(p)
+#: C/model-view-controller.py.page:192(item/p)
 msgid ""
-"Lines 30 to 80 inclusive of the <link xref=\"menubar.vala#xml-code\"/> "
-"demonstrate the XML code used to create the UI for <gui>Choices</gui> menu."
+"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/combobox.";
+"html\">The Python Gtk+ 3 Tutorial - ComboBox</link>"
 msgstr ""
 
-#: C/menubar.vala.page:138(title) C/menubar.py.page:119(title)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/paned.py.page:21(media)
 #, fuzzy
-#| msgid "A first Gtk application"
-msgid "Actions: Application or Window?"
-msgstr "Un primeiro aplicativo en GTK"
+#| msgid "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
+msgctxt "_"
+msgid "external ref='media/paned.png' md5='01e36d8a51ee18313616d63d2e15d993'"
+msgstr "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
 
-#: C/menubar.vala.page:139(p) C/menubar.py.page:120(p)
-msgid ""
-"Above, we created the \"new\" and \"open\" actions as part of the "
-"MyApplication class. Actions which control the application itself, such as "
-"\"quit\" should be created similarly."
+#: C/paned.py.page:7(info/title)
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "Paned (Python)"
+msgstr "Python"
+
+#: C/paned.py.page:17(info/desc)
+msgid "A widget with two adjustable panes"
 msgstr ""
 
-#: C/menubar.vala.page:142(p) C/menubar.py.page:122(p)
-msgid ""
-"Some actions, such as \"copy\" and \"paste\" deal with the window, not the "
-"application. Window actions should be created as part of the window class."
+#: C/paned.py.page:20(page/title)
+msgid "Paned"
 msgstr ""
 
-#: C/menubar.vala.page:145(p)
-msgid ""
-"The complete example files contain both application actions and window "
-"applications. The window actions are the ones usually included in the <link "
-"xref=\"gmenu.vala\">application menu</link> also. It is not good practice to "
-"include window actions in the applcation menu. For demonstration purposes, "
-"the complete example files which follow include XML in the UI file which "
-"creates the application menu which includes a \"New\" and \"Open\" item, and "
-"these are hooked up to the same actions as the menubar items of the same "
-"name."
+#: C/paned.py.page:22(page/p)
+msgid "Two images in two adjustable panes, horizontally aligned."
 msgstr ""
 
-#: C/menubar.vala.page:153(title) C/menubar.py.page:147(title)
-msgid "Complete XML UI file for this example"
+#: C/paned.py.page:28(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Paned Example\", application=app)\n"
+"        self.set_default_size(450, 350)\n"
+"\n"
+"        # a new widget with two adjustable panes,\n"
+"        # one on the left and one on the right\n"
+"        paned = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)\n"
+"\n"
+"        # two images\n"
+"        image1 = Gtk.Image()\n"
+"        image1.set_from_file(\"gnome-image.png\")\n"
+"        image2 = Gtk.Image()\n"
+"        image2.set_from_file(\"tux.png\")\n"
+"\n"
+"        # add the first image to the left pane\n"
+"        paned.add1(image1)\n"
+"        # add the second image to the right pane\n"
+"        paned.add2(image2)\n"
+"\n"
+"        # add the panes to the window\n"
+"        self.add(paned)\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/menubar.vala.page:156(title)
-msgid "Complete Vala file for this example"
+#: C/paned.py.page:32(section/title)
+msgid "Useful methods for a Paned widget"
 msgstr ""
 
-#: C/menubar.vala.page:160(title)
-msgid "Mnemonics"
+#: C/paned.py.page:33(section/p)
+msgid ""
+"To have two vertically aligned panes, use <code>Gtk.Orientation.VERTICAL</"
+"code> instead of <code>Gtk.Orientation.HORIZONTAL</code>. The method "
+"<code>add1(widget1)</code> will add the <code>widget1</code> to the top "
+"pane, and <code>add2(widget2)</code> will add the <code>widget2</code> to "
+"the bottom pane."
 msgstr ""
 
-#: C/menubar.vala.page:161(p) C/menubar.py.page:157(p)
+#: C/paned.py.page:40(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Labels may contain mnemonics. Mnemonics are underlined characters in the "
-"label, used for keyboard navigation. Mnemonics are created by placing an "
-"underscore before the mnemonic character. For example \"_File\" instead of "
-"just \"File\" in the menubar.ui label attribute."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkPaned.html";
+"\">GtkPaned</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/menubar.vala.page:162(p) C/menubar.py.page:158(p)
+#: C/paned.py.page:41(item/p)
 msgid ""
-"The mnemonics are visible when you press the <key>Alt</key> key. Pressing "
-"<keyseq><key>Alt</key><key>F</key></keyseq> will open the <gui>File</gui> "
-"menu."
+"<link href=\"http://developer.gnome.org/gtk3/stable/gtk3-Standard-";
+"Enumerations.html#GtkOrientation\">Standard Enumerations</link>"
 msgstr ""
 
-#: C/menubar.vala.page:166(title)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/photo-wall.c.page:78(media)
 #, fuzzy
-#| msgid "Selectors"
-msgid "Accelerators"
-msgstr "Selectores"
-
-#: C/menubar.vala.page:167(p) C/menubar.py.page:160(p)
+#| msgid ""
+#| "@@image: 'media/photo-wall.png'; md5=f19590d97e8ec029cda3c44b769c11cd"
+msgctxt "_"
 msgid ""
-"Accelerators can be explicitly added in the UI definitions. For example, it "
-"is common to be able to quit an application by pressing <keyseq><key>Ctrl</"
-"key><key>Q</key></keyseq> or to save a file by pressing <keyseq><key>Ctrl</"
-"key><key>S</key></keyseq>. To add an accelerator to the UI definition, you "
-"simply need add an \"accel\" attribute to the item."
-msgstr ""
+"external ref='media/photo-wall.png' md5='f19590d97e8ec029cda3c44b769c11cd'"
+msgstr "@@image: 'media/photo-wall.png'; md5=f19590d97e8ec029cda3c44b769c11cd"
 
-#: C/menubar.vala.page:168(p) C/menubar.py.page:161(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/photo-wall.c.page:81(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/photo-wall-focused.png'; "
+#| "md5=9f1ceecf3a28c1e468597b093a10cbae"
+msgctxt "_"
 msgid ""
-"<code mime=\"application/xml\"><![CDATA[<attribute name=\"accel\">&lt;"
-"Primary&gt;q</attribute>]]></code> will create the <keyseq><key>Ctrl</"
-"key><key>Q</key></keyseq> sequence when added to the <code>Quit</code> label "
-"item. Here, \"Primary\" refers to the <key>Ctrl</key> key on a PC or the "
-"<key>⌘</key> key on a Mac."
+"external ref='media/photo-wall-focused.png' "
+"md5='9f1ceecf3a28c1e468597b093a10cbae'"
 msgstr ""
+"@@image: 'media/photo-wall-focused.png'; md5=9f1ceecf3a28c1e468597b093a10cbae"
 
-#: C/menubar.vala.page:178(title) C/menubar.py.page:171(title)
-msgid "Translatable strings"
-msgstr ""
+#: C/photo-wall.c.page:6(info/title)
+#, fuzzy
+#| msgid "Photo Wall (C)"
+msgctxt "text"
+msgid "Photo Wall (C)"
+msgstr "Mural de fotos (C)"
+
+#: C/photo-wall.c.page:9(info/desc)
+msgid "A Clutter image viewer"
+msgstr "Un visor de imaxes Clutter"
+
+#: C/photo-wall.c.page:13(credit/name)
+msgid "Chris Kühl"
+msgstr "Chris Kühl"
 
-#: C/menubar.vala.page:179(p) C/menubar.py.page:172(p)
+#: C/photo-wall.c.page:22(page/title)
+msgid "Photo Wall"
+msgstr "Mural de fotos"
+
+#: C/photo-wall.c.page:25(synopsis/p)
 msgid ""
-"Since GNOME applications are being translated into <link href=\"http://l10n.";
-"gnome.org/languages/\">many languages</link>, it is important that the "
-"strings in your application are translable. To make a label translatable, "
-"simple set <code>translatable=\"yes\"</code>:"
+"For this example we will build a simple image viewer using Clutter. You will "
+"learn:"
 msgstr ""
+"Para este exemplo construirase un sinxelo visor de imaxes usando Clutter. "
+"Aprenderá:"
 
-#: C/menubar.vala.page:186(title) C/filechooserdialog.vala.page:34(title)
-#, fuzzy
-#| msgid "Reference Implementation"
-msgid "Relevant API documentation"
-msgstr "Implementación de referencia"
+#: C/photo-wall.c.page:27(item/p)
+msgid "How to size and position <code>ClutterActor</code>s"
+msgstr "Como dimensionar e posicionar varios <code>ClutterActor</code>"
+
+#: C/photo-wall.c.page:28(item/p)
+msgid "How to place an image in a <code>ClutterActor</code>"
+msgstr "Como posicionar unha imaxe nun <code>ClutterActor</code>"
+
+#: C/photo-wall.c.page:29(item/p)
+msgid "How to do simple transitions using Clutter's animation framework"
+msgstr ""
+"Como facer transicións sinxelas usando o framework de animacións Clutter."
 
-#: C/menubar.vala.page:191(link)
-msgid "Glib.ActionEntry"
+#: C/photo-wall.c.page:30(item/p)
+msgid "How to make <code>ClutterActor</code>s respond to mouse events"
 msgstr ""
+"Como facer que os <code>ClutterActor</code> respondan a eventos do rato"
 
-#: C/menubar.vala.page:192(link) C/filechooserdialog.vala.page:41(link)
-msgid "Gtk.Builder"
-msgstr ""
+#: C/photo-wall.c.page:31(item/p)
+msgid "How to get file names from a directory"
+msgstr "Como obter nomes de ficheiros dun cartafol"
 
-#: C/menubar.py.page:7(title)
-msgid "MenuBar (Python)"
-msgstr ""
+#: C/photo-wall.c.page:36(section/title)
+#: C/record-collection.js.page:34(section/title)
+msgid "Introduction"
+msgstr "Introdución"
 
-#: C/menubar.py.page:44(p)
+#: C/photo-wall.c.page:37(section/p)
 msgid ""
-"Now we will create the .py file and use GtkBuilder to import the "
-"<file>menubar.ui</file> we just created."
+"Clutter is a library for creating dynamic user interfaces using OpenGL for "
+"hardware acceleration. This example demonstates a small, but central, part "
+"of the Clutter library to create a simple but attractive image viewing "
+"program."
 msgstr ""
+"Clutter é unha biblioteca para crear interfaces de usuario dinámicas usando "
+"OpenGL para a aceleración gráfica. Este exemplo demostra unha parte pequena, "
+"porén central, da biblioteca Clutter para crear un sinxelo, máis atractivo, "
+"programa de visualización de imaxes."
 
-#: C/menubar.py.page:50(p)
+#: C/photo-wall.c.page:40(section/p)
 msgid ""
-"Now run the python application. It should look like the picture at the top "
-"of this page."
-msgstr ""
-
-#: C/menubar.py.page:58(title)
-msgid "menubar.ui"
+"To help us reach our goal we will be utilising a few other common pieces of "
+"GLib as well. Most importantly, we'll use one <code>GSList</code>, a singly-"
+"linked list, to hold our <code>ClutterActor</code>s and another one for file "
+"path names. We will also use <code>GDir</code>, a utility for working with "
+"directories, to access our image directory and gather file paths."
 msgstr ""
+"Para axudarlle a alcanzar o seu destino usaremos tamén algunhas pezas comúns "
+"de GLib. A máis importante, usaremos <code>GSList</code>, unha lista ligada "
+"para manter os nosos <code>ClutterActor</code>s e os nomes de ruta de "
+"ficheiro."
 
-#: C/menubar.py.page:87(p)
+#: C/photo-wall.c.page:53(item/p)
+#, fuzzy
+#| msgid ""
+#| "Choose <gui>Gtk+ (simple)</gui> from the <gui>C</gui> tab, click "
+#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
+#| "<file>photo-wall</file> as project name and directory."
 msgid ""
-"Following this pattern, you can now add a <code>Copy</code> and a "
-"<code>Paste</code> item to the <code>Edit</code> submenu, and an "
-"<code>About</code> item to the <code>Help</code> submenu."
+"Choose <gui>Gtk+ (simple)</gui> from the <gui>C</gui> tab, click "
+"<gui>Continue</gui>, and fill out your details on the next few pages. Use "
+"<file>photo-wall</file> as project name and directory."
 msgstr ""
+"Seleccione <gui>Gtk+ (sinmple)</gui> desde a lapela <gui>C</gui>, e prema "
+"<gui>Adiante</gui>, e complete os detalles nas seguintes páxinas. Use "
+"<file>photo-wall</file> como nome do proxecto e cartafol."
 
-#: C/menubar.py.page:94(p)
+#: C/photo-wall.c.page:56(item/p)
 msgid ""
-"We now create the actions for \"New\" and \"Quit\" connected to a callback "
-"function in the Python file; for instance we create \"new\" as:"
+"Make sure that <gui>Use GtkBuilder for user interface</gui> is disabled as "
+"we will create the UI manually in this tutorial. Check the <link xref="
+"\"guitar-tuner.c\">Guitar-Tuner</link> tutorial using the interface builder."
 msgstr ""
+"Asegúrese que <gui>Usar GtkBuilder para a interface de usuario</gui> está "
+"desactivado xa que crearemos a UI manualmente neste titorial. Comprobe o "
+"titorial <link xref=\"guitar-tuner.c\">Guitar-Tuner</link> usando o "
+"construtor de interface."
 
-#: C/menubar.py.page:95(code)
-#, no-wrap
+#: C/photo-wall.c.page:61(item/p)
 msgid ""
-"\n"
-"new_action = Gio.SimpleAction.new(\"new\", None)\n"
-"new_action.connect(\"activate\", self.new_callback)"
+"Enable <gui>Configure external packages</gui>. On the next page, select "
+"<em>clutter-1.0</em> from the list to include the Clutter library in your "
+"project."
 msgstr ""
+"Active <gui>Configurar paquetes externos</gui>. Na seguinte páxina "
+"seleccione <em>clutter-1.0</em> desde a lista para incluír a biblioteca "
+"Clutter no seu proxecto."
 
-#: C/menubar.py.page:99(p)
-msgid "And we create the callback function of \"new\" as"
-msgstr ""
+#: C/photo-wall.c.page:74(section/title)
+msgid "A look at Photo Wall"
+msgstr "Unha ollada ao Muro de fotos"
 
-#: C/menubar.py.page:100(code)
-#, no-wrap
-msgid ""
-"\n"
-"def new_callback(self, action, parameter):\n"
-"    print \"You clicked \\\"New\\\"\""
-msgstr ""
+#: C/photo-wall.c.page:75(section/p)
+msgid "Our image viewer presents the user with a wall of images."
+msgstr "O novo visor de imaxes móstralle ao usuario un muro de imaxes."
 
-#: C/menubar.py.page:104(p)
+#: C/photo-wall.c.page:79(section/p)
 msgid ""
-"Now, in the XML file, we we connect the menu items to the actions in the XML "
-"file by adding the \"action\" attribute:"
+"When an image is clicked, it is animated to fill the viewing area. When the "
+"image having focus is clicked it is returned to its original position using "
+"an animation with the same duration of 500 milliseconds."
 msgstr ""
+"Cando se fai clic sobre unha imaxe, esta anímase para ocupar todo o área de "
+"visualización. Cando se fai clic sobre unha imaxe que ten o foco volverá á "
+"súa posición orixinal usando unha animación da mesma duración de 500 "
+"milisegundos."
 
-#: C/menubar.py.page:111(p)
-msgid ""
-"Note that for an action that is relative to the application, we use the "
-"prefix <code>app.</code>; for actions that are relative to the window we use "
-"the prefix <code>win.</code>."
-msgstr ""
+#: C/photo-wall.c.page:85(section/title)
+msgid "Initial setup"
+msgstr "Configuración inicial"
 
-#: C/menubar.py.page:113(p)
+#: C/photo-wall.c.page:86(section/p)
 msgid ""
-"Finally, in the Python file, we add the action to the application or to the "
-"window - so for instance <code>app.new</code> will be added to the "
-"application in the method <code>do_startup(self)</code> as"
+"The following code segment contains many of the defines and variables we "
+"will be using in the following sections. Use this as a reference for later "
+"sections. Copy this code to the beginning of <file>src/main.c</file>:"
 msgstr ""
+"O seguinte fragmento de código contén moitas definicións e variábeis que se "
+"usarán nas seguintes seccións. Úseo como referencia para as próximas "
+"seccións. Copie este código ao principio de <file>src/main.c</file>:"
 
-#: C/menubar.py.page:114(code)
+#: C/photo-wall.c.page:89(section/code)
 #, no-wrap
 msgid ""
 "\n"
-"self.add_action(new_action)"
-msgstr ""
-
-#: C/menubar.py.page:124(p)
-msgid ""
-"The complete example files contain both application actions and window "
-"applications. The window actions are the ones usually included in the <link "
-"xref=\"gmenu.py\">application menu</link> also. It is not good practice to "
-"include window actions in the applcation menu. For demonstration purposes, "
-"the complete example files which follow include XML in the UI file which "
-"creates the application menu which includes a \"New\" and \"Open\" item, and "
-"these are hooked up to the same actions as the menubar items of the same "
-"name."
+"#include &lt;clutter/clutter.h&gt;\n"
+"\n"
+"#define STAGE_WIDTH  800\n"
+"#define STAGE_HEIGHT 600\n"
+"\n"
+"#define THUMBNAIL_SIZE 200\n"
+"#define ROW_COUNT (STAGE_HEIGHT / THUMBNAIL_SIZE)\n"
+"#define COL_COUNT (STAGE_WIDTH  / THUMBNAIL_SIZE)\n"
+"#define THUMBNAIL_COUNT (ROW_COUNT * COL_COUNT)\n"
+"\n"
+"#define ANIMATION_DURATION_MS 500\n"
+"\n"
+"#define FOCUS_DEPTH 100.0\n"
+"#define UNFOCUS_DEPTH 0.0\n"
+"\n"
+"#define IMAGE_DIR_PATH \"./berlin_images/\"\n"
+"\n"
+"static GSList *actor_list = NULL;\n"
+"static GSList *img_path_list = NULL;\n"
+"\n"
+"typedef struct Position\n"
+"{\n"
+"    float x;\n"
+"    float y;\n"
+"}\n"
+"Position;\n"
+"\n"
+"static Position origin = {0, 0};\n"
+"\n"
 msgstr ""
 
-#: C/menubar.py.page:130(p)
-msgid ""
-"Lines 30 to 80 inclusive of the <link xref=\"menubar.py#xml-code\"/> "
-"demonstrate the XML code used to create the UI for <gui>Choices</gui> menu."
-msgstr ""
+#: C/photo-wall.c.page:123(section/title)
+msgid "Jumping into the code"
+msgstr "Saltando ao código"
 
-#: C/menubar.py.page:132(p)
+#: C/photo-wall.c.page:124(section/p)
 msgid ""
-"The actions created so far are <em>stateless</em>, that is they do not "
-"retain or depend on a state given by the action itself. The actions we need "
-"to create for the Choices submenu, on the other hand, are <em>stateful</em>. "
-"An example of creation of a stateful action is:"
+"We will start by taking a look at the <code>main()</code> function as a "
+"whole. Then we'll discuss the other code sections in detail. Change the "
+"<file>src/main.c</file> to contain this <code>main()</code> function. You "
+"can delete the <code>create_window()</code> function as we don't need it in "
+"this example."
 msgstr ""
+"Comezaremos ollando a función <code>main()</code>. Logo discutiremos as "
+"outras seccións de código en detalle. Cambie o ficheiro <file>src/main.c</"
+"file> para que conte;a a función <code>main()</code>. Pode elminar a función "
+"<code>create_window()</code> xa que non a necesitamos neste exemplo."
 
-#: C/menubar.py.page:133(code)
+#: C/photo-wall.c.page:127(section/code)
 #, no-wrap
 msgid ""
 "\n"
-"shape_action = Gio.SimpleAction.new_stateful(\"shape\", GLib.VariantType.new('s'), 
GLib.Variant.new_string('line'))"
+"int\n"
+"main(int argc, char *argv[])\n"
+"{\n"
+"    ClutterColor stage_color = { 16, 16, 16, 255 };\n"
+"    ClutterActor *stage = NULL;\n"
+"\n"
+"    clutter_init(&amp;argc, &amp;argv);\n"
+"\n"
+"    stage = clutter_stage_get_default();\n"
+"    clutter_actor_set_size(stage, STAGE_WIDTH, STAGE_HEIGHT);\n"
+"    clutter_stage_set_color(CLUTTER_STAGE (stage), &amp;stage_color);\n"
+"\n"
+"    load_image_path_names();\n"
+"\n"
+"    guint row = 0;\n"
+"    guint col = 0;\n"
+"    for(row=0; row &lt; ROW_COUNT; ++row)\n"
+"    {\n"
+"        for(col=0; col &lt; COL_COUNT; ++col)\n"
+"        {\n"
+"            GSList *img_path_node = g_slist_nth(img_path_list, (row * COL_COUNT) + col);\n"
+"            ClutterActor *actor = clutter_texture_new_from_file((gchar *)(img_path_node-&gt;data), NULL);\n"
+"            initialize_actor(actor, row, col);\n"
+"            clutter_container_add_actor(CLUTTER_CONTAINER(stage), actor);\n"
+"            actor_list = g_slist_prepend(actor_list, actor);\n"
+"        }\n"
+"    }\n"
+"\n"
+"    /* Show the stage. */\n"
+"    clutter_actor_show(stage);\n"
+"\n"
+"    /* Start the clutter main loop. */\n"
+"    clutter_main();\n"
+"\n"
+"    return 0;\n"
+"}"
 msgstr ""
 
-#: C/menubar.py.page:136(p)
+#: C/photo-wall.c.page:165(item/p)
 msgid ""
-"where the variables of the method are: name, parameter type (in this case, a "
-"string - see <link href=\"http://developer.gnome.org/glib/unstable/glib-";
-"GVariantType.html\">here</link> for a complete list of character meanings), "
-"initial state (in this case, 'line' - in case of a <code>True</code> boolean "
-"value it should be <code>Glib.Variant.new_boolean(True)</code>, and so on, "
-"see <link href=\"http://developer.gnome.org/glib/unstable/glib-GVariant.html";
-"\">here</link> for a complete list)"
+"Line 4: <code>ClutterColor</code> is defined by setting the red, green, blue "
+"and transparency (alpha) values. The values range from 0-255. For "
+"transparency a value of 255 is opaque."
 msgstr ""
+"Liña 4: <code>ClutterColor</code> é definido estabelecendo o valor a "
+"vermello, verde, azul ou transparente (alfa). O rango de valores están entre "
+"0-255. Para a transparencia 255 é opaco."
 
-#: C/menubar.py.page:138(p)
+#: C/photo-wall.c.page:166(item/p)
 msgid ""
-"After creating the stateful SimpleAction we connect it to the callback "
-"function and we add it to the window (or the application, if it is the "
-"case), as before:"
+"Line 7: You must initialize Clutter. If you forget to do this, you will get "
+"very strange errors. Be warned."
 msgstr ""
+"Liña 7: Debe inicializar Clutter. Se esqueceu isto, haberá moitos erros "
+"estraños. Está avisado."
 
-#: C/menubar.py.page:140(code)
-#, no-wrap
+#: C/photo-wall.c.page:167(item/p)
 msgid ""
-"\n"
-"shape_action.connect(\"activate\", self.shape_callback)\n"
-"self.add_action(shape_action)"
+"Lines 9‒11: Here we get the default <code>ClutterStage</code> that was "
+"provided by <code>clutter_init</code>. We then set the size using the "
+"defines from the previous section and the address of the <code>ClutterColor</"
+"code> we just defined."
 msgstr ""
+"Liñas 9-11: aquí é onde se obtén o <code>ClutterStage</code> predeterminado "
+"que forneceu <code>clutter_init</code>. Entón estabelécese o tamaño usando o "
+"definido na sección anterior e os enderezos do <code>ClutterColor</code> que "
+"xa están definidas."
 
-#: C/menubar.py.page:152(title)
-msgid "Complete Python file for this example"
+#: C/photo-wall.c.page:168(note/p)
+msgid ""
+"A <code>ClutterStage</code> is the top-level <code>ClutterActor</code> onto "
+"which other <code>ClutterActor</code>s are placed."
 msgstr ""
+"Un <code>CluterStage</code> é o nivel superior dun <code>ClutterActor</code> "
+"no que se localizan outros <code>ClutterActor</code>."
 
-#: C/menubar.py.page:156(title)
-msgid "Mnemonics and Accelerators"
+#: C/photo-wall.c.page:170(item/p)
+msgid ""
+"Line 12: Here we call our function for getting the image file paths. We'll "
+"look at this in a bit."
 msgstr ""
+"Liña 12: aquí chámase á función para obter as rutas das imaxes. Isto verase "
+"en breve."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/magic-mirror.vala.page:41(None)
-msgid "@@image: 'media/magic-mirror.png'; md5=8171faea6ed3b6ddac0da084c29e4e22"
+#: C/photo-wall.c.page:171(item/p)
+msgid ""
+"Lines 14‒26: This is where we set up the <code>ClutterActor</code>s, load "
+"the images and place them into their spot in the image wall. We will look at "
+"this in detail in the next section."
 msgstr ""
-"@@image: 'media/magic-mirror.png'; md5=8171faea6ed3b6ddac0da084c29e4e22"
-
-#: C/magic-mirror.vala.page:7(title)
-#, fuzzy
-#| msgid "Magic Mirror"
-msgid "Magic Mirror (Vala)"
-msgstr "Espello máxico"
+"Liña 14-26: aquí é onde se configuran os <code>ClutterActor</code>, cárganse "
+"as imaxes e colócanse no seu sitio no mural de imaxes. Isto verase con máis "
+"detalle na seguinte sección."
 
-#: C/magic-mirror.vala.page:10(desc)
-msgid "Use your webcam as a mirror using the GStreamer framework and Gtk+"
+#: C/photo-wall.c.page:172(item/p)
+msgid ""
+"Line 29: Show the stage and <em>all its children</em>, meaning our images."
 msgstr ""
-"Use a súa cámara web como un espello usando o marco de traballo GStreamer e "
-"GTK+"
-
-#: C/magic-mirror.vala.page:14(name)
-msgid "Daniel G. Siegel"
-msgstr "Daniel G. Siegel"
+"Liña 29: mostra o escenario e <em>todos os seus fillos</em>, é dicir, as "
+"imaxes."
 
-#: C/magic-mirror.vala.page:15(email)
-msgid "dgsiegel gnome org"
-msgstr "dgsiegel gnome org"
+#: C/photo-wall.c.page:173(item/p)
+msgid "Line 32: Start the Clutter main loop."
+msgstr "Liña 32: inicia o bucle principal de Clutter."
 
-#: C/magic-mirror.vala.page:23(title)
-#, fuzzy
-#| msgid "Magic Mirror"
-msgid "4 Magic Mirror"
-msgstr "Espello máxico"
+#: C/photo-wall.c.page:178(section/title)
+msgid "Setting up our image actors"
+msgstr "Configurar os nosos actores de imaxe"
 
-#: C/magic-mirror.vala.page:26(em)
+#: C/photo-wall.c.page:179(note/p)
 msgid ""
-"Your mirror just fell off the wall and broke into a thousand pieces — but "
-"you need a mirror to shave your beard off or add some makeup! You only have "
-"15 minutes left before catching the bus to work. So what can you do?"
+"In Clutter, an actor is the most basic visual element. Basically, everything "
+"you see is an actor."
 msgstr ""
+"En Clutter, un actor é o elemento visual máis básico. Basicamente, todo o "
+"que ve é un actor."
 
-#: C/magic-mirror.vala.page:27(p)
+#: C/photo-wall.c.page:180(section/p)
 msgid ""
-"In this tutorial, we're going to make a program which lets you use your "
-"webcam as a mirror. You will learn how to:"
-msgstr ""
-
-#: C/magic-mirror.vala.page:29(p)
-msgid "Create a GTK+ application"
-msgstr "Crear un apliativo GTK+"
-
-#: C/magic-mirror.vala.page:30(p)
-msgid "Access your webcam using GStreamer and embed the result into a window"
+"In this section, we are going to take a closer look at the loop used for "
+"setting up the <code>ClutterActor</code>s that will display our images."
 msgstr ""
-"Acceda á súa cámara web usando GStreamer e incruste o resultado nunha xanela"
-
-#: C/magic-mirror.vala.page:31(p)
-msgid "Grab photos off your webcam"
-msgstr "Obter as fotos da śua cámara web"
+"Nesta sección, imos botar unha ollada máis polo miúdo ao búcle usado para "
+"configurar os <code>ClutterActor</code>s que mostrarán as nosas imaxes."
 
-#: C/magic-mirror.vala.page:33(p) C/image-viewer.vala.page:40(p)
-#: C/image-viewer.py.page:34(p) C/image-viewer.js.page:34(p)
-#: C/guitar-tuner.vala.page:35(p) C/guitar-tuner.py.page:32(p)
-#: C/guitar-tuner.cpp.page:30(p) C/guitar-tuner.c.page:32(p)
-msgid "You'll need the following to be able to follow this tutorial:"
+#: C/photo-wall.c.page:183(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"for(row=0; row &lt; ROW_COUNT; ++row)\n"
+"{\n"
+"    for(col=0; col &lt; COL_COUNT; ++col)\n"
+"    {\n"
+"        GSList *img_path_node = g_slist_nth(img_path_list, (row * COL_COUNT) + col);\n"
+"        ClutterActor *actor = clutter_texture_new_from_file((gchar *)(img_path_node-&gt;data), NULL);\n"
+"        initialize_actor(actor, row, col);\n"
+"        clutter_container_add_actor(CLUTTER_CONTAINER(stage), actor);\n"
+"        actor_list = g_slist_prepend(actor_list, actor);\n"
+"    }\n"
+"}\n"
+"\n"
 msgstr ""
 
-#: C/magic-mirror.vala.page:35(p) C/image-viewer.py.page:36(p)
-#: C/image-viewer.js.page:36(p) C/guitar-tuner.py.page:34(p)
-#: C/guitar-tuner.cpp.page:32(p) C/guitar-tuner.c.page:34(p)
-msgid "An installed copy of the <link xref=\"getting-ready\">Anjuta IDE</link>"
+#: C/photo-wall.c.page:198(item/p)
+msgid ""
+"Line 5: Here we want to get the path at the <var>n</var>th location in the "
+"<code>GSList</code> that is holding our image path names. The <var>n</var>th "
+"position is calculated based on <code>row</code> and <code>col</code>. The "
+"return value is a pointer to a <code>GSList</code> which is just a node in "
+"the list. We will use this to get the actual path in the next line. The "
+"first parameter is a pointer to the head of the list."
 msgstr ""
+"Liña 5: aquí quérese obter a ruta á localización <var>n</var>-ésima na "
+"<code>GSList</code> que contén os nomes das rutas das imaxes. A <var>n</var>-"
+"ésima posición calcúlase baseándose en <code>row</code> e <code>col</code>. "
+"O valor de retorno é un punteiro a <code>GSList</code> que é simplemente un "
+"nodo na lista. Isto usarase para obter a ruta actual na seguinte liña. O "
+"primeiro parámetro é un punteiro á cabeceira da lista."
 
-#: C/magic-mirror.vala.page:36(p)
-msgid "Installed copies of GTK, GStreamer, and a Vala compiler"
-msgstr "Copias instaladas de GTK, GStreamer e compilador de Vala"
-
-#: C/magic-mirror.vala.page:37(p)
-msgid "Basic knowledge of an object-oriented programming language"
-msgstr "Coñecemento básico dun linguaxe de programación orientado a obxectos"
-
-#: C/magic-mirror.vala.page:51(p)
+#: C/photo-wall.c.page:200(item/p)
 msgid ""
-"Choose <gui>Gtk+ (simple)</gui> from the <gui>Vala</gui> tab, click "
-"<gui>Forward</gui>, and fill out your details on the next few pages. Use "
-"<file>guitar-tuner</file> as project name and directory."
+"Line 6: This is where we actually create the <code>ClutterActor</code> and "
+"place the image into the actor. The first argument is the path which we "
+"access through our <code>GSList</code> node. The second argument is for "
+"error reporting but we are ignoring that to keep things short."
 msgstr ""
+"Liña 6: aquí é onde actualmente se crea o <code>ClutterActor</code> e "
+"localízase a imaxe no actor. O primeiro argumento é a ruta coa que se "
+"acceder ao nodo da <code>GSList</code>. O seguindo argumento é para informar "
+"dun error, pero ignórase para simplificar."
+
+#: C/photo-wall.c.page:202(item/p)
+msgid "Line 7: We'll look at this function in a later section."
+msgstr "Liña 7: esta función verase nunha sección posterior."
 
-#: C/magic-mirror.vala.page:54(p)
+#: C/photo-wall.c.page:204(item/p)
 msgid ""
-"Disable <gui>Use GtkBuilder for user interface</gui> as we will create the "
-"UI manually in this tutorial. Check the <link xref=\"guitar-tuner.vala"
-"\">Guitar-Tuner</link> tutorial using the interface builder."
+"Line 8: This adds the <code>ClutterActor</code> to the stage, which is a "
+"container. It also assumes ownership of the <code>ClutterActor</code> which "
+"is something you'll want to look into as you get deeper into GNOME "
+"development. See the <link href=\"http://library.gnome.org/devel/gobject/";
+"stable/gobject-memory.html\"><code>GObject</code> documentation</link> for "
+"the gory details."
 msgstr ""
+"Liña 8: isto engade o <code>ClutterActor</code> ao escenario, que é un "
+"contedor. Asume o propietario do <code>ClutterActor</code>, que é algo que "
+"quererá cando profundice no desenvolvemento de GNOME. Para obter máis "
+"detalles, consulte a <link href=\"http://library.gnome.org/devel/gobject/";
+"stable/gobject-memory.html\">documentación de <code>GObject</code></link>."
 
-#: C/magic-mirror.vala.page:59(p)
+#: C/photo-wall.c.page:206(item/p)
 msgid ""
-"Make sure that <gui>Configure external packages</gui> is selected. On the "
-"next page, select <em>gstreamer-0.10</em> from the list to include the "
-"<app>GStreamer</app> library into your project."
+"Line 9: This adds our <code>ClutterActor</code> to a <code>GSList</code> so "
+"that we can later iterate over the <code>ClutterActor</code>s."
 msgstr ""
+"Liña 9: isto engade o <code>ClutterActor</code> a unha <code>GSList</code> "
+"que logo se poderá iterar sobre os <code>ClutterActor</code>."
 
-#: C/magic-mirror.vala.page:63(p)
+#: C/photo-wall.c.page:207(note/p)
 msgid ""
-"Click <gui>Apply</gui> and the project will be created for you. Open "
-"<file>src/magic_mirror.vala</file> from the <gui>Project</gui> or <gui>File</"
-"gui> tabs. You should see some code which starts with the lines:"
+"Interesting to note is that we want to prepend the <code>ClutterActor</"
+"code>s rather than append so that we avoid traversing the list upon each "
+"insertion. You will often see <code>g_slist_prepend</code> followed by "
+"<code>g_slist_reverse</code> because it faster than inserting many objects "
+"at the end of the list."
 msgstr ""
+"É interesante ter en conta que prefírese antepoñer os <code>ClutterActor</"
+"code> no lugar de anexalos, o que evita atravesar a lista en cada inserción. "
+"A miúdo verá <code>g_slist_prepend</code> seguido de <code>g_slist_reverse</"
+"code>, xa que é máis rápido que inserir varios obxectos ao final da lista."
 
-#: C/magic-mirror.vala.page:72(title) C/image-viewer.vala.page:107(title)
-#: C/image-viewer.cpp.page:60(title) C/image-viewer.c.page:60(title)
-#: C/guitar-tuner.vala.page:68(title) C/guitar-tuner.cpp.page:63(title)
-#: C/guitar-tuner.c.page:65(title)
-msgid "Build the code for the first time"
-msgstr "Construír o código por primeira vez"
+#: C/photo-wall.c.page:213(section/title)
+msgid "Loading the images"
+msgstr "Cargar as imaxes"
 
-#: C/magic-mirror.vala.page:73(p)
+#: C/photo-wall.c.page:214(section/p)
 msgid ""
-"The code loads an (empty) window and shows it. More details are given below; "
-"skip this list if you understand the basics:"
+"Let's take a short break from Clutter to see how we can get the file names "
+"from our image directory."
 msgstr ""
+"Botemos unha pequena ollada a Clutter para ver como obter os nomes dos "
+"ficheiros desde o noso cartafol de imaxes."
 
-#: C/magic-mirror.vala.page:76(p) C/guitar-tuner.vala.page:73(p)
+#: C/photo-wall.c.page:215(section/code)
+#, no-wrap
 msgid ""
-"The two <code>using</code> lines import namespaces so we don't have to name "
-"them explicitly."
+"\n"
+"static void\n"
+"load_image_path_names()\n"
+"{\n"
+"    /* Ensure we can access the directory. */\n"
+"    GError *error = NULL;\n"
+"    GDir *dir = g_dir_open(IMAGE_DIR_PATH, 0, &amp;error);\n"
+"    if(error)\n"
+"    {\n"
+"        g_warning(\"g_dir_open() failed with error: %s\\n\", error-&gt;message);\n"
+"        g_clear_error(&amp;error);\n"
+"        return;\n"
+"    }\n"
+"\n"
+"    const gchar *filename = g_dir_read_name(dir);\n"
+"    while(filename)\n"
+"    {\n"
+"        if(g_str_has_suffix(filename, \".jpg\") || g_str_has_suffix(filename, \".png\"))\n"
+"        {\n"
+"            gchar *path = g_build_filename(IMAGE_DIR_PATH, filename, NULL);\n"
+"            img_path_list = g_slist_prepend(img_path_list, path);\n"
+"        }\n"
+"        filename = g_dir_read_name(dir);\n"
+"    }\n"
+"}"
 msgstr ""
 
-#: C/magic-mirror.vala.page:79(p)
+#: C/photo-wall.c.page:241(item/p)
 msgid ""
-"The constructor of the <code>Main</code> class creates a new window and sets "
-"its title. Afterwards the window is shown and a signal is connected which "
-"quits the application if the window is closed. More on signals later on."
+"Lines 5 and 12: This opens our directory or, if an error occured, returns "
+"after printing an error message."
 msgstr ""
+"Liñas 5 e 12: Isto abre o noso cartafol ou, se se produce un erro, devolve "
+"despois de imprimir unha mensaxe de erro."
 
-#: C/magic-mirror.vala.page:83(p)
+#: C/photo-wall.c.page:242(item/p)
 msgid ""
-"The static <code>main</code> function is run by default when you start a "
-"Vala application. It calls a few functions which create the Main class, set "
-"up and then run the application. The <code>Gtk.Main</code> function starts "
-"the GTK main loop, which runs the user interface and starts listening for "
-"events (like clicks and key presses)."
+"Lines 14‒23: The first line gets another file name from the <code>GDir</"
+"code> we opened earlier. If there was an image file (which we check by "
+"looking at its extension, \".png\" or \".jpg\") in the directory we proceed "
+"to prepend the image directory path to the filename and prepend that to the "
+"list we set up earlier. Lastly we attempt to get the next path name and "
+"reenter the loop if another file was found."
 msgstr ""
+"Liñas 14‒23: la primeira liña obtén outro nome de ficheiro do <code>GDir</"
+"code> aberto anteriormente. Se hai un ficheiro de imaxe (compróbase mirando "
+"se a extensión é «.png» o «.jpg») no cartafol, procédese a antepoñer a ruta "
+"do cartafol da imaxe ao nome do ficheiro e anteponse na lista creada "
+"anteriormente. Por último, inténtase obter a seguinte ruta e vólvese entrar "
+"no bucle se se atopa outro ficheiro."
+
+#: C/photo-wall.c.page:247(section/title)
+msgid "Set up the actors"
+msgstr "Configurar os actores"
 
-#: C/magic-mirror.vala.page:87(p) C/image-viewer.vala.page:127(p)
-#: C/image-viewer.cpp.page:76(p) C/image-viewer.c.page:79(p)
-#: C/guitar-tuner.cpp.page:78(p) C/guitar-tuner.c.page:84(p)
+#: C/photo-wall.c.page:248(section/p)
 msgid ""
-"This code is ready to be used, so you can compile it by clicking "
-"<guiseq><gui>Build</gui><gui>Build Project</gui></guiseq> (or press "
-"<keyseq><key>Shift</key><key>F7</key></keyseq>)."
+"We now take a look at the sizing and positioning of <code>ClutterActor</"
+"code>s and also readying the <code>ClutterActor</code> for user interaction."
 msgstr ""
+"Vote unha ollada ao tamaño e ao posicionamento dos <code>ClutterActor</code> "
+"e a como se deixa listo o <code>ClutterActor</code> para a interacción do "
+"usuario."
 
-#: C/magic-mirror.vala.page:88(p) C/image-viewer.vala.page:128(p)
+#: C/photo-wall.c.page:251(section/code)
+#, no-wrap
 msgid ""
-"Change the <gui>Configuration</gui> to <gui>Default</gui> and then press "
-"<gui>Execute</gui> to configure the build directory. You only need to do "
-"this once, for the first build."
+"\n"
+"/* This function handles setting up and placing the rectangles. */\n"
+"static void\n"
+"initialize_actor(ClutterActor *actor, guint row, guint col)\n"
+"{\n"
+"    clutter_actor_set_size(actor, THUMBNAIL_SIZE, THUMBNAIL_SIZE);\n"
+"    clutter_actor_set_position(actor, col * THUMBNAIL_SIZE, row * THUMBNAIL_SIZE);\n"
+"    clutter_actor_set_reactive(actor, TRUE);\n"
+"\n"
+"    g_signal_connect(actor,\n"
+"                     \"button-press-event\",\n"
+"                     G_CALLBACK(actor_clicked_cb),\n"
+"                     NULL);\n"
+"}"
 msgstr ""
 
-#: C/magic-mirror.vala.page:92(title)
-msgid "Access the webcam video stream with GStreamer"
-msgstr "Acceder ao fluxo de vídeo de cámara web con GStreamer"
-
-#: C/magic-mirror.vala.page:93(p)
+#: C/photo-wall.c.page:267(item/p)
 msgid ""
-"The GStreamer multimedia framework is able to handle video from webcams. "
-"Let's add GStreamer to our application and so we can access the video stream."
+"Line 7: Setting an actor reactive means that it reacts to events, such as "
+"<code>button-press-event</code> in our case. For Photo Wall, all "
+"<code>ClutterActor</code>s in the wall should initially be reactive."
 msgstr ""
-"O contorno multimedia de traballo de GStreamer é capaz de manexar vídeo "
-"desde cámara web. Engada GStreamer ao seu aplicativo e poderá acceder ao "
-"fluxo de vídeo."
+"Liña 7: configurar un actor como «reactivo» significa que reacciona aos "
+"eventos tales como <code>button-press-event</code> no noso caso. Para o "
+"mural de fotos, todos os <code>ClutterActor</code> do mural deben ser "
+"inicialmente reactivos."
 
-#: C/magic-mirror.vala.page:120(p)
+#: C/photo-wall.c.page:270(item/p)
 msgid ""
-"First we remove the window we created before because GStreamer will take "
-"care of showing the picture on screen."
+"Line 9‒12: Now we connect the <code>button-press-event</code> to the "
+"<code>actor_clicked_cb</code> callback which we will look at next."
 msgstr ""
-"Primeiro quítase a xanela creada anteriormente, xa que GStreamer encargarase "
-"de mostrar a imaxe na pantalla."
+"Liñas 9-12: agora conéctase o evento <code>button-press-evento</code> á "
+"chamada <code>actor_clicked_cb</code> que veremos máis adiante."
 
-#: C/magic-mirror.vala.page:124(p)
-msgid ""
-"Now we are creating a GStreamer element which accesses our webcam. We are "
-"using the Camerabin element, which is an all-in-one camera element and is "
-"capable of taking photos, videos, applying effects and much more. Perfect "
-"for our use case! With <code>this.camerabin.set_state (Gst.State.PLAYING)</"
-"code> we tell the GStreamer pipeline we just created to start playing. Easy, "
-"no?"
+#: C/photo-wall.c.page:273(section/p)
+msgid "At this point we've got a wall of images that are ready to be viewed."
 msgstr ""
-"Agora vaise crear un elemento de GStreamer que accede á cámara web. Vaise a "
-"usar o elemento «Camerabin», que é un elemento de cámara todo en un capaz de "
-"facer fotos, vídeos, aplicar efectos e moito máis. Perfecto para o noso caso "
-"de uso. Con <code>this.camerabin.set_state (Gst.State.PLAYING)</code> "
-"indícase á túbería de GStreamer que se acaba de crear que empece a "
-"reproducir. Sinxelo, non?"
+"Neste punto obteremos un muro de imaxes que están listas para ser mostradas."
+
+#: C/photo-wall.c.page:277(section/title)
+msgid "Reacting to the clicks"
+msgstr "Reaccionar aos clics"
 
-#: C/magic-mirror.vala.page:131(p)
+#: C/photo-wall.c.page:281(section/code)
+#, no-wrap
 msgid ""
-"Of course it is also possible to integrate the video more tighly into other "
-"windows but that is an advanced topic that includes some details of the X "
-"Window System we will omit here."
+"\n"
+"static gboolean\n"
+"actor_clicked_cb(ClutterActor *actor,\n"
+"                 ClutterEvent *event,\n"
+"                 gpointer      user_data)\n"
+"{\n"
+"    /* Flag to keep track of our state. */\n"
+"    static gboolean is_focused = FALSE;\n"
+"\n"
+"    g_slist_foreach(actor_list, foreach_set_focus_state, &amp;is_focused);\n"
+"\n"
+"    if(is_focused)\n"
+"    {\n"
+"        clutter_actor_animate(actor, CLUTTER_LINEAR, ANIMATION_DURATION_MS,\n"
+"                              \"x\",      origin.x,\n"
+"                              \"y\",      origin.y,\n"
+"                              \"depth\",  UNFOCUS_DEPTH,\n"
+"                              \"width\",  (float) THUMBNAIL_SIZE,\n"
+"                              \"height\", (float) THUMBNAIL_SIZE,\n"
+"                              NULL);\n"
+"    }\n"
+"    else\n"
+"    {\n"
+"        /*Save the current location before animating. */\n"
+"        clutter_actor_get_position(actor, &amp;origin.x, &amp;origin.y);\n"
+"        clutter_actor_set_reactive(actor, TRUE);\n"
+"        clutter_actor_animate(actor, CLUTTER_LINEAR, ANIMATION_DURATION_MS,\n"
+"                              \"x\",      (STAGE_WIDTH - STAGE_HEIGHT) / 2.0,\n"
+"                              \"y\",      0.0,\n"
+"                              \"depth\",  FOCUS_DEPTH,\n"
+"                              \"width\",  (float) STAGE_HEIGHT,\n"
+"                              \"height\", (float) STAGE_HEIGHT,\n"
+"                              NULL);\n"
+"    }\n"
+"\n"
+"    /* Toggle our flag. */\n"
+"    is_focused = !is_focused;\n"
+"\n"
+"    return TRUE;\n"
+"}"
 msgstr ""
 
-#: C/magic-mirror.vala.page:135(p)
+#: C/photo-wall.c.page:322(item/p)
 msgid ""
-"Compile and run it again. You will end up with two windows. In the next step "
-"we will integrate the video into the GTK+ window."
+"Lines 1‒4: We have to make sure our callback function matches the signature "
+"required for the <code>button_clicked_event</code> signal. For our example, "
+"we will only use the first argument, the <code>ClutterActor</code> that is "
+"actually clicked."
 msgstr ""
 
-#: C/magic-mirror.vala.page:145(p)
+#: C/photo-wall.c.page:324(note/p)
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"magic-mirror/magic-mirror.vala\">reference code</link>. There "
-"is also a more <link href=\"magic-mirror/magic-mirror-advanced.vala"
-"\">extensive implementation</link> that embeds the window into a regular Gtk."
-"Window which involves some advanced techniques, and adds buttons to start/"
-"stop the picture."
+"A few words on the arguments we are not using in this example. The "
+"<code>ClutterEvent</code> is different depending on what event is being "
+"handled. For example, a key event produces a <code>ClutterKeyEvent</code> "
+"from which you can get the key being pressed among other information. For "
+"mouse click events you get a <code>ClutterButtonEvent</code> from which you "
+"can get the <code>x</code> and <code>y</code> values. See the Clutter "
+"documentation for other <code>ClutterEvent</code> types."
 msgstr ""
-"Se ten problemas con este titorial, compare o seu código con este <link href="
-"\"magic-mirror/magic-mirror.vala\">código de referencia</link>. Tamén hai "
-"unha <link href=\"magic-mirror/magic-mirror-advanced.vala\">implementación "
-"máis ampla</link> que incrusta a xanela nunha xanela GTK regular que implica "
-"algunhas técnicas avanzadas, e engade botóns para iniciar/deter a imaxe."
-
-#: C/magic-mirror.vala.page:151(title) C/guitar-tuner.vala.page:258(title)
-msgid "Further reading"
-msgstr "Lectura complementaria"
 
-#: C/magic-mirror.vala.page:152(p)
+#: C/photo-wall.c.page:325(note/p)
 msgid ""
-"To find out more about the Vala programming language you might want to check "
-"out the <link href=\"http://live.gnome.org/Vala/Tutorial\";>Vala Tutorial</"
-"link>."
+"The <code>user_data</code> is what one uses to pass data into the the "
+"function. A pointer to any data type can be passed in. If you need multiple "
+"data to be passed into the callback, you can place the data into a struct "
+"and pass its address in."
 msgstr ""
-"Para atopar máis información sobre a linguaxe de programación Vala pode "
-"visitar <link href=\"http://live.gnome.org/Vala/Tutorial\";>o titorial de "
-"Vala</link>."
 
-#: C/magic-mirror.vala.page:157(title)
-msgid "Conclusion"
-msgstr "Conclusión"
-
-#: C/magic-mirror.vala.page:158(p)
+#: C/photo-wall.c.page:329(item/p)
 msgid ""
-"That's it, you have managed to create a full-featured webcam photo "
-"application in 15 minutes. Now you can shave your beard off or add some "
-"makeup to your beautiful face, right before having a beautiful day at your "
-"workplace, where you can impress your friends and colleagues with an awesome "
-"application you just made in 15 minutes."
+"Line 7: We set up a static flag to track which state we are in: wall mode or "
+"focus mode. We start out in wall mode so no image has focus. Thus, we set "
+"the flag to <code>FALSE</code> initially."
 msgstr ""
-"Isto é todo, acaba de crear un aplicativo completo para sacar fotos coa "
-"cámara web en menos de 15 minutos. Agora xa pode afeitar a barba, "
-"maquillarse un pouco e ordenar o seu espazo de traballo para impresionar aos "
-"seus amigos e colegas con un aplicativo feito en 15 minutos."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/linkbutton.vala.page:21(None) C/linkbutton.py.page:23(None)
-#: C/linkbutton.js.page:21(None) C/linkbutton.c.page:22(None)
-#, fuzzy
-#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
-msgid "@@image: 'media/linkbutton.png'; md5=3712eae8953e87c65a6aa74503b8e32b"
-msgstr "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
 
-#: C/linkbutton.vala.page:7(title)
-msgid "LinkButton (Vala)"
+#: C/photo-wall.c.page:330(item/p)
+msgid ""
+"Line 9: This line of code runs a custom function, "
+"<code>foreach_set_focus_state</code>, for each element in our "
+"<code>actor_list</code>, passing it the address to the <code>is_focused</"
+"code> flag. We'll see the definition of the <code>foreach_set_focus_state</"
+"code> function in the next section."
 msgstr ""
 
-#: C/linkbutton.vala.page:17(desc) C/linkbutton.c.page:17(desc)
-msgid "Create buttons bound to a URL"
+#: C/photo-wall.c.page:331(item/p)
+msgid ""
+"Lines 13‒19: Reaching this code means that one image currently has focus and "
+"we want to return to wall mode. The <code>clutter_actor_animate</code> "
+"function is used to animate a <code>ClutterActor</code>'s property or "
+"properties from the current state(s) to the specified state(s). The "
+"arguments are as follows:"
 msgstr ""
 
-#: C/linkbutton.vala.page:20(title) C/linkbutton.py.page:21(title)
-#: C/linkbutton.js.page:20(title) C/linkbutton.c.page:20(title)
-#, fuzzy
-#| msgid "Button"
-msgid "LinkButton"
-msgstr "Botón"
+#: C/photo-wall.c.page:333(item/p)
+msgid "The address of the <code>ClutterActor</code> to animate"
+msgstr "O enderezo do <code>ClutterActor</code> a animar"
 
-#: C/linkbutton.vala.page:22(p)
-msgid "This button links to GNOME live."
+#: C/photo-wall.c.page:334(item/p)
+msgid ""
+"The animation mode to use. Here we use <code>CLUTTER_LINEAR</code> so that "
+"we have a constant speed for animation."
 msgstr ""
 
-#: C/linkbutton.vala.page:29(link) C/linkbutton.js.page:31(link)
-#, fuzzy
-#| msgid "Gtk.ButtonsType"
-msgid "Gtk.LinkButton"
-msgstr "Gtk.ButtonsType"
-
-#: C/linkbutton.py.page:7(title)
-msgid "LinkButton (Python)"
+#: C/photo-wall.c.page:335(item/p)
+msgid ""
+"The duration of the animation in milliseconds. I've chosen 500 ms for this "
+"example."
 msgstr ""
 
-#: C/linkbutton.py.page:18(desc)
-msgid "A button bound to an URL"
+#: C/photo-wall.c.page:336(item/p)
+msgid ""
+"The remaining arguments are property/value pairs. Here we want to set the "
+"<code>x</code> value to the starting <code>x</code> value this "
+"<code>ClutterActor</code> was at before being brought into focus."
 msgstr ""
 
-#: C/linkbutton.py.page:24(p)
-msgid "A button that links to a web page."
+#: C/photo-wall.c.page:337(item/p)
+msgid ""
+"The last argument must always be <code>NULL</code> to indicate that there "
+"are no more properties to be set."
 msgstr ""
 
-#: C/linkbutton.py.page:35(title)
-msgid "Useful methods for a LinkButton widget"
+#: C/photo-wall.c.page:339(note/p)
+msgid ""
+"The <code>depth</code> property needs a little more explaining. We need to "
+"raise the focused image so that it doesn't slide behind other "
+"<code>ClutterActor</code>s. In this section we are returning it to the same "
+"depth as the others on the wall."
 msgstr ""
 
-#: C/linkbutton.py.page:37(p)
+#: C/photo-wall.c.page:340(note/p)
 msgid ""
-"<code>get_visited()</code> returns the 'visited' state (<code>True</code> or "
-"<code>False</code>) of the URI where the LinkButton points. The button "
-"becomes visited when it is clicked."
+"Depth also determines which <code>ClutterActor</code>s receive events. A "
+"<code>ClutterActor</code> with a higher depth value receives the click "
+"events and can choose whether the event gets sent to <code>ClutterActor</"
+"code>s under it. We'll see how that works in a few steps."
 msgstr ""
 
-#: C/linkbutton.py.page:38(p)
+#: C/photo-wall.c.page:342(item/p)
 msgid ""
-"<code>set_visited(True)</code> sets the 'visited' state of the URI where the "
-"LinkButton points as <code>True</code> (analogously for <code>False</code>)."
+"Line 24: Reaching this line of code means we are currently in the wall state "
+"and are about to give a <code>ClutterActor</code> focus. Here we save the "
+"starting position so that we can return to it later."
 msgstr ""
 
-#: C/linkbutton.py.page:39(p)
+#: C/photo-wall.c.page:343(item/p)
 msgid ""
-"Each time the button is clicked, the signal <code>\"activate-link\"</code> "
-"is emitted. For an explanation of signals and callback functions, see <link "
-"xref=\"signals-callbacks.py\">this page</link>."
+"Line 25: Setting the <code>ClutterActor</code>'s <code>reactive</code> "
+"property to <code>TRUE</code> makes this <code>ClutterActor</code> react to "
+"events. In this focused state the only <code>ClutterActor</code> that we "
+"want to receive events will be the <code>ClutterActor</code> being viewed. "
+"Clicking on the <code>ClutterActor</code> will return it to its starting "
+"position."
 msgstr ""
 
-#: C/linkbutton.py.page:47(link) C/linkbutton.c.page:33(link)
-#, fuzzy
-#| msgid "Gtk.ButtonsType"
-msgid "GtkLinkButton"
-msgstr "Gtk.ButtonsType"
-
-#: C/linkbutton.js.page:7(title)
-#, fuzzy
-#| msgid "JavaScript"
-msgid "LinkButton (JavaScript)"
-msgstr "JavaScript"
-
-#: C/linkbutton.js.page:17(desc)
-msgid "A button that links to a web page"
+#: C/photo-wall.c.page:344(item/p)
+msgid ""
+"Lines 27‒33: This is similar to the above block of code. Notice that we are "
+"setting the the depth to raise it above the other images."
 msgstr ""
 
-#: C/linkbutton.js.page:22(p)
-msgid "A button that links to live.gnome.org."
+#: C/photo-wall.c.page:345(item/p)
+msgid ""
+"Line 37: Here we toggle the <code>is_focused</code> flag to the current "
+"state."
 msgstr ""
 
-#: C/linkbutton.c.page:7(title)
-#, fuzzy
-#| msgid "Button"
-msgid "LinkButton (C)"
-msgstr "Botón"
+#: C/photo-wall.c.page:346(item/p)
+msgid ""
+"As mentioned previously, the <code>ClutterActor</code>s with higher "
+"<code>depth</code> values receive events but can allow <code>ClutterActor</"
+"code>s below them to also receive events. Returning <code>TRUE</code> will "
+"stop events from being passed down, while <code>FALSE</code> will pass "
+"events down."
+msgstr ""
 
-#: C/linkbutton.c.page:23(p)
-msgid "This button links to the GNOME live webpage."
+#: C/photo-wall.c.page:348(note/p)
+msgid ""
+"Remember, however, that to receive events the <code>ClutterActor</code>s "
+"must be set <code>reactive</code>."
 msgstr ""
 
-#: C/license.page:8(desc)
-msgid "Legal information."
+#: C/photo-wall.c.page:352(section/p)
+msgid ""
+"The following is the convenience function passed to <code>g_slist_foreach</"
+"code>."
 msgstr ""
 
-#: C/license.page:11(title)
-msgid "License"
+#: C/photo-wall.c.page:355(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"static void\n"
+"foreach_set_focus_state(gpointer data, gpointer user_data)\n"
+"{\n"
+"    ClutterActor *actor = CLUTTER_ACTOR(data);\n"
+"    gboolean is_reactive = *((gboolean*)user_data);\n"
+"\n"
+"    clutter_actor_set_reactive(actor, is_reactive);\n"
+"}"
 msgstr ""
 
-#: C/license.page:12(p)
+#: C/photo-wall.c.page:365(item/p)
 msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
+"Lines 2‒5: The signature of this function requires two <code>gpointer</"
+"code>s. The first is a pointer to the <code>ClutterActor</code> that our "
+"<code>GSList</code> holds and the other is the <code>is_focused</code> flag "
+"that we've passed in the previous section. We want to cast these and store "
+"them for easy use."
 msgstr ""
 
-#: C/license.page:20(p)
-msgid "You are free:"
+#: C/photo-wall.c.page:366(item/p)
+msgid ""
+"Line 7: Depending on which boolean value is passed in, the "
+"<code>ClutterActor</code> will be set to respond to events or not."
 msgstr ""
 
-#: C/license.page:25(em)
-msgid "To share"
+#: C/photo-wall.c.page:372(section/p)
+msgid ""
+"All of the code should now be ready to go. All you need now is some pictures "
+"to load. By default, the pictures are loaded from a <file>berlin_images</"
+"file> directory. If you want, you can change the <code>#define "
+"IMAGE_DIR_PATH</code> line near the top to refer to your photo directory, or "
+"create a <file>berlin_images</file> directory by clicking "
+"<guiseq><gui>Project</gui><gui>New Directory...</gui></guiseq> and creating "
+"a <file>berlin_images</file> directory as a subdirectory of the <file>photo-"
+"wall</file> directory. Make sure to put at least twelve images in the "
+"directory!"
 msgstr ""
+"Todo o código debería estar listo para executarse. Todo o que necesita son "
+"algunhas imaxes para cargar. De maneira predeterminada, as imaxes cárganse "
+"desde o cartafol <file>berlin_images</file>. Se quere, pode cambiar a liña "
+"<code>#define IMAGE_DIR_PATH</code> do principio para que faga referencia ao "
+"seu cartafol de fotos, ou crear un cartafol <file>berlin_images</file> "
+"premendo en <guiseq><gui>Proxecto</gui><gui>Cartafol novo…</gui></guiseq> e "
+"creando un cartafol <file>berlin_images</file> como subcartafol do cartafol "
+"<file>mural-fotos</file>. Asegúrese de poñer cando menos doce imaxes no "
+"cartafol."
 
-#: C/license.page:26(p)
-msgid "To copy, distribute and transmit the work."
+#: C/photo-wall.c.page:374(section/p)
+msgid ""
+"When you have done that, click <guiseq><gui>Build</gui><gui>Build Project</"
+"gui></guiseq> to build everything again, then <guiseq><gui>Run</"
+"gui><gui>Execute</gui></guiseq> to start the application."
 msgstr ""
+"Cando teña que facer iso, prema <guiseq><gui>Construír</gui><gui>Construír "
+"proxecto</gui></guiseq> para construír todo de novo, logo "
+"<guiseq><gui>Executar</gui><gui>Executar</gui></guiseq> para iniciar o "
+"aplicativo."
 
-#: C/license.page:29(em)
-msgid "To remix"
+#: C/photo-wall.c.page:375(section/p)
+msgid ""
+"If you haven't already done so, choose the <file>Debug/src/photo-wall</file> "
+"application in the dialog that appears. Finally, hit <gui>Run</gui> and "
+"enjoy!"
 msgstr ""
+"Se non o fixo aínda, seleccione o aplicativo <file>Debug/src/photo-wall</"
+"file> no diálogo que aparece. Finalmente, prema <gui>Executar</gui> e "
+"desfrute!"
 
-#: C/license.page:30(p)
-msgid "To adapt the work."
+#: C/photo-wall.c.page:380(section/p)
+msgid ""
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"photo-wall/photo-wall.c\">reference code</link>."
 msgstr ""
+"Se ten problemas ao executar este titorial compare o seu código con este "
+"<link href=\"photo-wall/photo-wall.c\">código de referencia</link>."
 
-#: C/license.page:33(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/progressbar.c.page:23(media) C/progressbar.vala.page:21(media)
 #, fuzzy
-#| msgid "The code has the following purpose:"
-msgid "Under the following conditions:"
-msgstr "O código ten o seguinte propósito:"
+#| msgid ""
+#| "@@image: 'media/progressbar_fill.ogv'; "
+#| "md5=287763d1d3f4a328212ea2243910f5e4"
+msgctxt "_"
+msgid ""
+"external ref='media/progressbar_fill.ogv' "
+"md5='287763d1d3f4a328212ea2243910f5e4'"
+msgstr ""
+"@@image: 'media/progressbar_fill.ogv'; md5=287763d1d3f4a328212ea2243910f5e4"
 
-#: C/license.page:38(em)
+#: C/progressbar.c.page:7(info/title)
 #, fuzzy
-#| msgid "Introduction"
-msgid "Attribution"
-msgstr "Introdución"
+#| msgid "ProgressBar (C)"
+msgctxt "text"
+msgid "ProgressBar (C)"
+msgstr "ProgressBar (C)"
 
-#: C/license.page:39(p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
+#: C/progressbar.c.page:18(info/desc) C/progressbar.vala.page:17(info/desc)
+msgid "A widget which indicates progress visually"
 msgstr ""
 
-#: C/license.page:46(em)
-msgid "Share Alike"
-msgstr ""
+#: C/progressbar.c.page:21(page/title) C/progressbar.js.page:19(page/title)
+#: C/progressbar.py.page:20(page/title) C/progressbar.vala.page:20(page/title)
+msgid "ProgressBar"
+msgstr "ProgressBar"
 
-#: C/license.page:47(p)
+#: C/progressbar.c.page:24(page/p) C/progressbar.vala.page:22(page/p)
 msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
+"This ProgressBar \"fills in\" by a fraction of the bar until it is full."
 msgstr ""
 
-#: C/license.page:53(p)
+#: C/progressbar.c.page:26(page/code)
+#, no-wrap
 msgid ""
-"For the full text of the license, see the <link href=\"http://";
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-";
-"sa/3.0/\">Commons Deed</link>."
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"static gboolean\n"
+"fill (gpointer   user_data)\n"
+"{\n"
+"  GtkWidget *progress_bar = user_data;\n"
+"\n"
+"  /*Get the current progress*/\n"
+"  gdouble fraction;\n"
+"  fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (progress_bar));\n"
+"\n"
+"  /*Increase the bar by 10% each time this function is called*/\n"
+"  fraction += 0.1;\n"
+"\n"
+"  /*Fill in the bar with the new fraction*/\n"
+"  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress_bar), fraction);\n"
+"\n"
+"  /*Ensures that the fraction stays below 1.0*/\n"
+"  if (fraction &lt; 1.0) \n"
+"    return TRUE;\n"
+"  \n"
+"  return FALSE;\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *progress_bar;\n"
+"\n"
+"  gdouble fraction = 0.0;\n"
+"\n"
+"  /*Create a window with a title, and a default size*/\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"ProgressBar Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 220, 20);\n"
+" \n"
+"  /*Create a progressbar and add it to the window*/\n"
+"  progress_bar = gtk_progress_bar_new ();\n"
+"  gtk_container_add (GTK_CONTAINER (window), progress_bar);\n"
+"\n"
+"  /*Fill in the given fraction of the bar. Has to be between 0.0-1.0 inclusive*/\n"
+"  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress_bar), fraction);\n"
+"\n"
+"  /*Use the created fill function every 500 milliseconds*/\n"
+"  g_timeout_add (500, fill, GTK_PROGRESS_BAR (progress_bar));\n"
+" \n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+" \n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+" \n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+" \n"
+"  return status;\n"
+"}\n"
 msgstr ""
 
-#: C/license.page:60(p)
+#: C/progressbar.c.page:35(item/p)
 msgid ""
-"As a special exception, the copyright holders give you permission to copy, "
-"modify, and distribute the example code contained in this documentation "
-"under the terms of your choosing, without restriction."
+"<link href=\"http://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.";
+"html#g-timeout-add\">G_Timeout</link>"
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/label.vala.page:21(None) C/label.py.page:27(None)
-#: C/label.js.page:21(None) C/label.c.page:25(None)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/progressbar.js.page:20(media) C/progressbar.py.page:21(media)
 #, fuzzy
-#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
-msgid "@@image: 'media/label.png'; md5=734975c18653d88379f983e4501c3fc0"
-msgstr "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
+#| msgid ""
+#| "@@image: 'media/progressbar.ogv'; md5=36deab3dd4b5be968828fa2ef416d612"
+msgctxt "_"
+msgid ""
+"external ref='media/progressbar.ogv' md5='36deab3dd4b5be968828fa2ef416d612'"
+msgstr "@@image: 'media/progressbar.ogv'; md5=36deab3dd4b5be968828fa2ef416d612"
 
-#: C/label.vala.page:7(title)
-msgid "Label (Vala)"
-msgstr ""
+#: C/progressbar.js.page:6(info/title)
+#, fuzzy
+#| msgid "ProgressBar (JavaScript)"
+msgctxt "text"
+msgid "ProgressBar (JavaScript)"
+msgstr "ProgressBar (JavaScript)"
 
-#: C/label.vala.page:17(desc) C/label.c.page:18(desc)
-msgid "A widget which displays text"
+#: C/progressbar.js.page:16(info/desc)
+msgid "A bar which animates to indicate progress"
 msgstr ""
 
-#: C/label.vala.page:22(p) C/label.py.page:28(p) C/label.c.page:26(p)
-msgid "A simple label"
+#: C/progressbar.js.page:24(div/p) C/progressbar.py.page:25(div/p)
+msgid "Pressing any key stops and starts this ProgressBar."
 msgstr ""
 
-#: C/label.py.page:7(title)
-#, fuzzy
-#| msgid "Python"
-msgid "Label (Python)"
-msgstr "Python"
+#: C/progressbar.js.page:31(page/p) C/progressbar.py.page:32(page/p)
+msgid "This ProgressBar is stopped and started by pressing any key."
+msgstr ""
 
-#: C/label.py.page:23(desc)
-msgid "A widget that displays a small to medium amount of text"
+#: C/progressbar.js.page:33(page/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ProgressBarExample = new Lang.Class({\n"
+"    Name: 'ProgressBar Example',\n"
+"\n"
+"    // Create the application itself\n"
+"        _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsprogressbar',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"            this._window = new Gtk.ApplicationWindow({ application: this.application,\n"
+"                                                       window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                       default_height: 20,\n"
+"                                                       default_width: 220,\n"
+"                                                       title: \"ProgressBar Example\"});\n"
+"\n"
+"        // Create the progress bar\n"
+"        this.progressBar = new Gtk.ProgressBar ();\n"
+"        this._window.add(this.progressBar);\n"
+"\n"
+"        // Start the function that pulses the bar every 100 milliseconds\n"
+"        this.sourceID = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, Lang.bind(this, this._barPulse));\n"
+"\n"
+"        // Connect a keypress event to the function that toggles the bar to start or stop pulsing\n"
+"        this._window.connect(\"key-press-event\", Lang.bind(this, this._onKeyPress));\n"
+"\n"
+"            // Show the window and all child widgets\n"
+"            this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Pulse the progressbar (unless it has been disabled by a keypress)\n"
+"    _barPulse: function() {\n"
+"        this.progressBar.pulse();\n"
+"        return true;\n"
+"    },\n"
+"\n"
+"    // Start or stop the progressbar when a key is pressed\n"
+"    _onKeyPress: function() {\n"
+"        if (this.sourceID == 0)\n"
+"            this.sourceID = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, Lang.bind(this, 
this._barPulse));\n"
+"        else {\n"
+"            GLib.source_remove(this.sourceID);\n"
+"            this.sourceID = 0;\n"
+"        }\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ProgressBarExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/label.py.page:37(p)
+#: C/progressbar.js.page:38(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Another way to obtain what we have in the example is to create the label as "
-"an instance of another class and add it to the instance of <code>MyWindow</"
-"code> in the <code>do_activate(self)</code> method:"
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/GLib.html\";>GLib</"
+"link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/progressbar.py.page:7(info/title)
+#, fuzzy
+#| msgid "ProgressBar (Python)"
+msgctxt "text"
+msgid "ProgressBar (Python)"
+msgstr "ProgressBar (Python)"
+
+#: C/progressbar.py.page:17(info/desc)
+msgid "A widget which indicates progress visually."
 msgstr ""
 
-#: C/label.py.page:38(code)
+#: C/progressbar.py.page:39(section/code)
 #, no-wrap
 msgid ""
+"from gi.repository import GLib\n"
+"from gi.repository import Gtk\n"
+"import sys\n"
 "\n"
-"# a class to define a window\n"
 "class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
 "    def __init__(self, app):\n"
-"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
-"        self.set_default_size(200, 100)\n"
+"        Gtk.Window.__init__(self, title=\"ProgressBar Example\", application=app)\n"
+"        self.set_default_size(220, 20)\n"
 "\n"
-"# a class to define a label\n"
-"class MyLabel(Gtk.Label):\n"
-"    def __init__(self):\n"
-"        Gtk.Label.__init__(self)\n"
-"        self.set_text(\"Hello GNOME!\")\n"
+"        # a progressbar\n"
+"        self.progress_bar = Gtk.ProgressBar()\n"
+"        # add the progressbar to the window\n"
+"        self.add(self.progress_bar)\n"
+"\n"
+"        # the method self.pulse is called each 100 milliseconds\n"
+"        # and self.source_id is set to be the ID of the event source\n"
+"        # (i.e. the bar changes position every 100 milliseconds)\n"
+"        self.source_id = GLib.timeout_add(100, self.pulse)\n"
+"\n"
+"    # event handler\n"
+"    # any signal from the keyboard controls if the progressbar stops/starts\n"
+"    def do_key_press_event(self, event):\n"
+"        # if the progressbar has been stopped (therefore source_id == 0 - see\n"
+"        # \"else\" below), turn it back on\n"
+"        if (self.source_id == 0):\n"
+"            self.source_id = GLib.timeout_add(100, self.pulse)\n"
+"        # if the bar is moving, remove the source with the ID of source_id\n"
+"        # from the main context (stop the bar) and set the source_id to 0\n"
+"        else:\n"
+"            GLib.source_remove(self.source_id)\n"
+"            self.source_id = 0\n"
+"        # stop the signal emission\n"
+"        return True\n"
+"\n"
+"    # source function\n"
+"    # the progressbar is in \"activity mode\" when this method is called\n"
+"    def pulse(self):\n"
+"        self.progress_bar.pulse()\n"
+"        # call the function again\n"
+"        return True\n"
 "\n"
 "class MyApplication(Gtk.Application):\n"
 "    def __init__(self):\n"
 "        Gtk.Application.__init__(self)\n"
 "\n"
-"    def do_activate(self):\n"
-"        # create an instance of MyWindow\n"
-"        win = MyWindow(self)\n"
-"        # create an instance of MyLabel\n"
-"        label = MyLabel()\n"
-"        # and add it to the window\n"
-"        win.add(label)\n"
-"        # show the window and everything on it\n"
-"        win.show_all()"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/label.py.page:68(title)
-msgid "Useful methods for a Label widget"
+#: C/progressbar.py.page:44(section/title)
+msgid "Useful methods for a ProgressBar widget"
 msgstr ""
 
-#: C/label.py.page:70(p)
+#: C/progressbar.py.page:46(item/p)
 msgid ""
-"<code>label = Gtk.Label(label=\"Hello GNOME!\")</code> could also be used "
-"create a label and set the text directly. For a general discussion of this, "
-"see <link xref=\"properties.py\">here</link>."
+"Instead of <code>pulse()</code>, that makes the bar go back and forth, if we "
+"want the ProgressBar to \"fill in\" a fraction (a <code>float</code> between "
+"<code>0.0</code> and <code>1.0</code> included) of the bar that has been "
+"completed, use <code>set_fraction(fraction)</code>."
 msgstr ""
 
-#: C/label.py.page:72(p)
+#: C/progressbar.py.page:47(item/p)
 msgid ""
-"<code>set_line_wrap(True)</code> breaks lines if the text of the label "
-"exceeds the size of the widget."
+"To set a text and show it (superimposed over the bar) use <code>set_text"
+"(\"some text\")</code> and <code>set_show_text(True)</code>. If a text is "
+"not set and <code>set_show_text(True)</code> the text will be the percentage "
+"of the work that has been completed."
 msgstr ""
 
-#: C/label.py.page:73(p)
+#: C/progressbar.py.page:55(item/p)
 msgid ""
-"<code>set_justify(Gtk.Justification.LEFT)</code> (or <code>Gtk.Justification."
-"RIGHT, Gtk.Justification.CENTER, Gtk.Justification.FILL</code>) sets the "
-"alignment of the lines in the text of the label relative to each other. The "
-"method has no effect on a single-line label."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkProgressBar.html";
+"\">GtkProgressBar</link>"
 msgstr ""
 
-#: C/label.py.page:74(p)
+#: C/progressbar.py.page:56(item/p)
 msgid ""
-"For decorated text we can use <code>set_markup(\"text\")</code>, where <code>"
-"\"text\"</code> is a text in the <link href=\"http://developer.gnome.org/";
-"pango/stable/PangoMarkupFormat.html\">Pango Markup Language</link>. An "
-"example:"
+"<link href=\"http://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.";
+"html\">GLib - The Main Event Loop</link>"
+msgstr ""
+
+#: C/progressbar.py.page:57(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gdk/stable/gdk-Keyboard-Handling";
+"\">Gdk - Key Values</link>"
 msgstr ""
 
-#: C/label.js.page:7(title)
+#: C/progressbar.vala.page:7(info/title)
 #, fuzzy
-#| msgid "JavaScript"
-msgid "Label (JavaScript)"
-msgstr "JavaScript"
+#| msgid "ProgressBar (C)"
+msgctxt "text"
+msgid "ProgressBar (Vala)"
+msgstr "ProgressBar (C)"
 
-#: C/label.js.page:17(desc)
-msgid "A label which can contain text"
+#: C/progressbar.vala.page:24(page/code)
+#, no-wrap
+msgid ""
+"public class MyApplication : Gtk.Application {\n"
+"\n"
+"\tGtk.ProgressBar progress_bar;\n"
+"\n"
+"\tprotected override void activate () {\n"
+"\t\tvar window = new Gtk.ApplicationWindow (this);\n"
+"\t\twindow.set_title (\"ProgressBar Example\");\n"
+"\t\twindow.set_default_size (220, 20);\n"
+"\n"
+"\t\tprogress_bar = new Gtk.ProgressBar ();\n"
+"\t\twindow.add (progress_bar);\n"
+"\t\twindow.show_all ();\n"
+"\n"
+"\t\tdouble fraction = 0.0;\n"
+"\t\tprogress_bar.set_fraction (fraction);\n"
+"\t\tGLib.Timeout.add (500, fill);\n"
+"\t}\n"
+"\n"
+"\tbool fill () {\n"
+"\t\tdouble fraction = progress_bar.get_fraction (); //get current progress\n"
+"\t\tfraction += 0.1; //increase by 10% each time this function is called\n"
+"\n"
+"\t\tprogress_bar.set_fraction (fraction);\n"
+"\n"
+"\t\t/* This function is only called by GLib.Timeout.add while it returns true; */\n"
+"\t\tif (fraction &lt; 1.0)\n"
+"\t\t\treturn true;\n"
+"\t\treturn false;\n"
+"\t}\n"
+"}\n"
+"\n"
+"public int main (string[] args) {\n"
+"\tvar progress_bar_application = new MyApplication ();\n"
+"\tint status =  progress_bar_application.run (args);\n"
+"\treturn status;\n"
+"}\n"
 msgstr ""
 
-#: C/label.js.page:22(p)
-msgid "A label displaying a friendly message."
+#: C/progressbar.vala.page:29(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ProgressBar.html\";>Gtk."
+"ProgressBar</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/label.c.page:7(title)
-msgid "Label (C)"
+#: C/progressbar.vala.page:30(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/glib-2.0/GLib.Timeout.html\";>GLib."
+"Timeout</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/js.page:7(title)
-msgid "JavaScript"
-msgstr "JavaScript"
+#: C/properties.py.page:8(info/title)
+#, fuzzy
+#| msgid "ProgressBar (Python)"
+msgctxt "text"
+msgid "Properties (Python)"
+msgstr "ProgressBar (Python)"
 
-#: C/js.page:16(title)
-msgid "Tutorials, code samples and platform demos in JavaScript"
+#: C/properties.py.page:12(info/desc)
+msgid "An explanation of properties, getters and setters."
 msgstr ""
 
-#: C/index.page:7(name)
-msgid "GNOME Documentation Team"
-msgstr "Equipo de documentación de GNOME"
-
-#: C/index.page:9(years)
-msgid "2010, 2011"
-msgstr "2010, 2011"
-
-#: C/index.page:27(title)
-msgid "GNOME Developer Platform Demos"
-msgstr "Demostracións da plataforma de desenvolvemento de GNOME"
-
-#: C/index.page:30(title)
-msgid "How to set up your development environment"
+#: C/properties.py.page:25(page/title)
+msgid "Properties"
 msgstr ""
 
-#: C/index.page:34(title)
-msgid "Tutorials, code samples, platform demos and more"
+#: C/properties.py.page:32(section/p)
+msgid ""
+"<em>Properties</em> describe the configuration and state of widgets, and "
+"each widget has its own particular set of properties. For example, a widget "
+"such as a button or a label has the property \"label\" which contains the "
+"text of the widget. You can specify the name and value of any number of "
+"properties as keyword arguments when creating an instance of a widget: for "
+"example, to create a label aligned to the right with the text “Hello World” "
+"and an angle of 25 degrees, you can use:"
 msgstr ""
 
-#: C/index.page:38(title)
-msgid "Get Involved"
-msgstr "Involucrarse"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/image-viewer.vala.page:48(None) C/image-viewer.py.page:41(None)
-#: C/image-viewer.js.page:42(None) C/image-viewer.cpp.page:31(None)
-#: C/image-viewer.c.page:33(None)
-msgid "@@image: 'media/image-viewer.png'; md5=7720360611243b14283b83527be968c2"
+#: C/properties.py.page:33(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"label = Gtk.Label(label=\"Hello World\", angle=25, halign=Gtk.Align.END)"
 msgstr ""
-"@@image: 'media/image-viewer.png'; md5=7720360611243b14283b83527be968c2"
-
-#: C/image-viewer.vala.page:7(title)
-#, fuzzy
-#| msgid "Image Viewer"
-msgid "Image Viewer (Vala)"
-msgstr "Visor de imaxes"
-
-#: C/image-viewer.vala.page:10(desc) C/image-viewer.c.page:10(desc)
-msgid "A little bit more than a simple \"Hello world\" Gtk application."
-msgstr "Un pouco máis que un simple aplicativo Gtk «Ola mundo»."
-
-#: C/image-viewer.vala.page:22(name)
-msgid "Philip Chimento"
-msgstr "Philip Chimento"
-
-#: C/image-viewer.vala.page:23(email)
-msgid "philip chimento gmail com"
-msgstr "philip chimento gmail com"
+"\n"
+"label = Gtk.Label(label=\"Hola mundo\", angle=25, halign=Gtk.Align.END)"
 
-#: C/image-viewer.vala.page:31(title) C/image-viewer.py.page:24(title)
-#: C/image-viewer.js.page:24(title)
-#, fuzzy
-#| msgid "Image Viewer"
-msgid "1 Image Viewer"
-msgstr "Visor de imaxes"
+#: C/properties.py.page:36(section/p)
+msgid "This is equivalent to:"
+msgstr "Isto é equivalente a:"
 
-#: C/image-viewer.vala.page:33(p)
-#, fuzzy
-#| msgid ""
-#| "In this tutorial, we're going to write a very simple GTK application that "
-#| "loads and displays an image file. You will learn how to:"
+#: C/properties.py.page:37(section/code)
+#, no-wrap
 msgid ""
-"In this tutorial you will create an application which opens and displays an "
-"image file. You will learn:"
+"\n"
+"label = Gtk.Label()\n"
+"label.set_label(\"Hello World\")\n"
+"label.set_angle(25)\n"
+"label.set_halign(Gtk.Align.END)"
 msgstr ""
-"Neste titorial, imos escribir un aplicativo GTK moi sinxelo que carga e "
-"mostra un ficheiro de imaxe. Vostede aprenderá a:"
+"\n"
+"label = Gtk.Label()\n"
+"label.set_label(\"Hola Mundo\")\n"
+"label.set_angle(25)\n"
+"label.set_halign(Gtk.Align.END)"
 
-#: C/image-viewer.vala.page:35(p)
+#: C/properties.py.page:43(section/p)
 msgid ""
-"How to set up a basic project using the <link xref=\"getting-ready\">Anjuta "
-"IDE</link>."
+"Once you have created such a label, you can get the text with the getter "
+"<code>label.get_label()</code>."
 msgstr ""
 
-#: C/image-viewer.vala.page:36(p)
+#: C/properties.py.page:45(section/p)
 msgid ""
-"How to write a <link href=\"http://developer.gnome.org/platform-overview/";
-"stable/gtk\">Gtk application</link> in Vala"
+"Instead of using getters and setters you can also get and set the properties "
+"with <code>get_property(\"prop-name\")</code> and <code>set_property(\"prop-"
+"name\", value)</code>, respectively."
 msgstr ""
 
-#: C/image-viewer.vala.page:37(p)
+#: C/properties.py.page:51(section/p)
 msgid ""
-"Some basic concepts of <link href=\"http://developer.gnome.org/gobject/";
-"stable/\">GObject</link> programming"
+"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.";
+"html\">Basics - Properties</link> in Python Gtk+ 3 Tutorial"
 msgstr ""
 
-#: C/image-viewer.vala.page:42(p) C/guitar-tuner.vala.page:37(p)
-#, fuzzy
-#| msgid "Basic knowledge of the Vala programming language"
-msgid ""
-"Basic knowledge of the <link href=\"https://live.gnome.org/Vala/Tutorial";
-"\">Vala</link> programming language."
-msgstr "Coñecemento básico da linguaxe de programación Vala"
-
-#: C/image-viewer.vala.page:43(p) C/guitar-tuner.vala.page:38(p)
+#: C/py.page:6(info/title)
 #, fuzzy
-#| msgid "An installed copy of the <em>gjs</em> interpreter"
-msgid "An installed copy of <app>Anjuta</app>."
-msgstr "Unha copia instalada do intérprete <em>gjs</em>"
+#| msgid "Python"
+msgctxt "link"
+msgid "Python"
+msgstr "Python"
 
-#: C/image-viewer.vala.page:44(p)
-msgid ""
-"You may find the <link href=\"http://valadoc.org/gtk+-3.0/\";>gtk+-3.0</link> "
-"API Reference useful, although it is not necessary to follow the tutorial."
+#: C/py.page:15(page/title)
+msgid "Tutorials, code samples and platform demos in Python"
 msgstr ""
 
-#: C/image-viewer.vala.page:57(p) C/guitar-tuner.vala.page:49(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/radiobutton.c.page:24(media) C/radiobutton.py.page:25(media)
+#: C/radiobutton.vala.page:24(media)
 #, fuzzy
 #| msgid ""
-#| "Start Anjuta and click <guiseq><gui>File</gui><gui>New</gui><gui>Project</"
-#| "gui></guiseq> to open the project wizard."
+#| "@@image: 'media/radiobutton.png'; md5=d115460280d8e41493dd98054b5822a5"
+msgctxt "_"
 msgid ""
-"Start <app>Anjuta</app> and click <gui>Create a new project</gui> or "
-"<guiseq><gui>File</gui><gui>New</gui><gui>Project</gui></guiseq> to open the "
-"project wizard."
-msgstr ""
-"Inicie Anjuta e prema <guiseq><gui>Ficheiro</gui><gui>Novo</"
-"gui><gui>Proxecto</gui></guiseq> para abrir o asistente de proxectos."
+"external ref='media/radiobutton.png' md5='d115460280d8e41493dd98054b5822a5'"
+msgstr "@@image: 'media/radiobutton.png'; md5=d115460280d8e41493dd98054b5822a5"
 
-#: C/image-viewer.vala.page:60(p)
+#: C/radiobutton.c.page:7(info/title)
 #, fuzzy
-#| msgid ""
-#| "Choose <gui>Gtk+ (Simple)</gui> from the <gui>C</gui> tab, click "
-#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
-#| "<file>guitar-tuner</file> as project name and directory."
+#| msgid "RadioButton (Vala)"
+msgctxt "text"
+msgid "RadioButton (C)"
+msgstr "RadioButton (Vala)"
+
+#: C/radiobutton.c.page:19(info/desc)
+msgid "A choice from multiple checkbuttons"
+msgstr ""
+
+#: C/radiobutton.c.page:22(page/title) C/radiobutton.js.page:20(page/title)
+#: C/radiobutton.py.page:24(page/title) C/radiobutton.vala.page:23(page/title)
+msgid "RadioButton"
+msgstr "RadioButton"
+
+#: C/radiobutton.c.page:25(page/p)
+msgid "These radiobuttons report their activity in the terminal."
+msgstr ""
+
+#: C/radiobutton.c.page:27(page/code)
+#, no-wrap
 msgid ""
-"From the <gui>Vala</gui> tab choose <gui>Gtk+ (Simple)</gui>, click "
-"<gui>Continue</gui>, and fill out your details on the next page. Use "
-"<file>image-viewer</file> as project name and directory."
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/*Signal handler for the \"toggled\" signal of the RadioButton*/\n"
+"static void\n"
+"button_toggled_cb (GtkWidget *button,\n"
+"                   gpointer   user_data)\n"
+"{\n"
+"  char *b_state;\n"
+"  const char *button_label;\n"
+"\n"
+"  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))\n"
+"          b_state = \"on\";\n"
+"  else {\n"
+"          b_state = \"off\";\n"
+"          g_print (\"\\n\");\n"
+"  }\n"
+"\n"
+"  button_label = gtk_button_get_label (GTK_BUTTON (button));\n"
+"\n"
+"  g_print (\"%s was turned %s\\n\", button_label, b_state);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *grid;\n"
+"  GtkWidget *window;\n"
+"\n"
+"  GtkWidget *button1;\n"
+"  GtkWidget *button2;\n"
+"  GtkWidget *button3;\n"
+"\n"
+"  /*Create a window with a set title and default size.\n"
+"  Also, set a border width for the amount of space to leave\n"
+"  inside the window*/\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"RadioButton Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 250, 100);\n"
+"  gtk_container_set_border_width (GTK_CONTAINER(window), 20);\n"
+"\n"
+"\n"
+"  /*Create an initial radio button*/\n"
+"  button1 = gtk_radio_button_new_with_label (NULL, \"Button 1\");\n"
+"\n"
+"  /*Create a second radio button, and add it to the same group as Button 1*/\n"
+"  button2 = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (button1), \n"
+"                                                         \"Button 2\");\n"
+"\n"
+"  /*Create a third button, and add it to the same group as Button 1*/\n"
+"  button3 = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (button1), \n"
+"                                                         \"Button 3\");\n"
+"\n"
+"\n"
+"  /*Create a grid, attach the buttons, and position them accordingly*/\n"
+"  grid = gtk_grid_new ();\n"
+"  gtk_grid_attach (GTK_GRID (grid), button1, 0, 0, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), button2, 0, 1, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), button3, 0, 2, 1, 1);\n"
+"\n"
+"  /*Be sure to set the initial state of each button*/\n"
+"  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button2), TRUE);\n"
+"  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button1), FALSE);\n"
+"  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button3), FALSE);\n"
+"\n"
+"  /*Connect the signal handlers (aka Callback functions) to the buttons*/\n"
+"  g_signal_connect (GTK_TOGGLE_BUTTON (button1), \"toggled\", \n"
+"                    G_CALLBACK (button_toggled_cb), window);\n"
+"  g_signal_connect (GTK_TOGGLE_BUTTON (button2), \"toggled\", \n"
+"                    G_CALLBACK (button_toggled_cb), window);\n"
+"  g_signal_connect (GTK_TOGGLE_BUTTON (button3), \"toggled\", \n"
+"                    G_CALLBACK (button_toggled_cb), window);\n"
+"\n"
+"  gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (grid));\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
 msgstr ""
-"Seleccione <gui>GTK+ (Simple)</gui> desde a lapela <gui>C</gui>, prema "
-"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
-"<file>guitar-tunner</file> como nome do proxecto e cartafol."
 
-#: C/image-viewer.vala.page:64(p)
+#: C/radiobutton.c.page:37(item/p) C/switch.c.page:35(item/p)
 #, fuzzy
 #| msgid ""
-#| "Make sure that <gui>Use GtkBuilder for user interface</gui> is disabled "
-#| "as we will create the UI manually in this tutorial. Check the <link xref="
-#| "\"guitar-tuner.c\">Guitar-Tuner</link> tutorial using the interface "
-#| "builder."
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Make sure that <gui>Use GtkBuilder for user interface</gui> is unchecked as "
-"we will create the UI manually in this tutorial."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkSwitch.html";
+"\">GtkSwitch</link>"
 msgstr ""
-"Asegúrese que <gui>Usar GtkBuilder para a interface de usuario</gui> está "
-"desactivado xa que crearemos a UI manualmente neste titorial. Comprobe o "
-"titorial <link xref=\"guitar-tuner.c\">Guitar-Tuner</link> usando o "
-"construtor de interface."
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image-viewer.vala.page:65(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/radiobutton.js.page:21(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/radiobuttontravel.png'; "
+#| "md5=0c5f01ee160bb42716ccf5dccbd080c0"
+msgctxt "_"
 msgid ""
-"You will learn how to use the interface builder in the <link xref=\"guitar-"
-"tuner.vala\">Guitar-Tuner</link> tutorial."
+"external ref='media/radiobuttontravel.png' "
+"md5='0c5f01ee160bb42716ccf5dccbd080c0'"
 msgstr ""
+"@@image: 'media/radiobuttontravel.png'; md5=0c5f01ee160bb42716ccf5dccbd080c0"
 
-#: C/image-viewer.vala.page:69(p)
+#: C/radiobutton.js.page:7(info/title)
 #, fuzzy
-#| msgid ""
-#| "Click <gui>Apply</gui> and the project will be created for you. Open "
-#| "<file>src/main.js</file> from the <gui>Project</gui> or <gui>File</gui> "
-#| "tabs. It contains very basic example code."
-msgid ""
-"Click <gui>Continue</gui> then <gui>Apply</gui> and the project will be "
-"created for you. Open <file>src/image_viewer.vala</file> from the "
-"<gui>Project</gui> or <gui>File</gui> tabs. You will see this code:"
+#| msgid "RadioButton (JavaScript)"
+msgctxt "text"
+msgid "RadioButton (JavaScript)"
+msgstr "RadioButton (JavaScript)"
+
+#: C/radiobutton.js.page:17(info/desc)
+msgid "Only one can be selected at a time"
 msgstr ""
-"Prema <gui>Aplicar</gui> e o proxecto será creado. Abra <file>src/main.js</"
-"file> desde a lapela <gui>Proxecto</gui> ou <gui>Ficheiros</gui>. Contén "
-"código de exemplo moi básico."
 
-#: C/image-viewer.vala.page:108(p)
+#: C/radiobutton.js.page:22(page/p)
 msgid ""
-"The code loads an (empty) window from the user interface description file "
-"and shows it. More details are given below; skip this list if you understand "
-"the basics:"
+"RadioButtons are named after old-style car radios, which had buttons for "
+"switching between channel presets. Because the radio could only be tuned to "
+"one station at a time, only one button could be pressed in at a time; if you "
+"pressed a new one, the one that was already pressed in would pop back out. "
+"That's how these buttons work, too."
 msgstr ""
 
-#: C/image-viewer.vala.page:113(p)
+#: C/radiobutton.js.page:23(page/p)
 msgid ""
-"The two <code>using</code> lines at the top import namespaces so we don't "
-"have to name them explicitly."
+"Each RadioButton needs a text label and a group. Only one button in a group "
+"can be selected at a time. You don't name each group; you just set new "
+"RadioButtons to be part of the same group as an existing one. If you create "
+"a new one outside of a group, it automatically creates a new group for it to "
+"be part of."
 msgstr ""
 
-#: C/image-viewer.vala.page:116(p)
-#, fuzzy
-#| msgid ""
-#| "The <code>create_window</code> function creates a new (empty) window and "
-#| "connects a signal to exit the application when that window is closed."
+#: C/radiobutton.js.page:40(section/code)
+#, no-wrap
 msgid ""
-"The constructor of the <code>Main</code> class creates a new (empty) window "
-"and connects a <link href=\"https://live.gnome.org/Vala/SignalsAndCallbacks";
-"\">signal</link> to exit the application when that window is closed."
+"\n"
+"const RadioButtonExample = new Lang.Class({\n"
+"    Name: 'RadioButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsradiobutton',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
 msgstr ""
-"A función <code>create_window</code> crea unha xanela (baleira) nova e "
-"conecta un sinal para saír do aplicativo péchase esa xanela."
 
-#: C/image-viewer.vala.page:117(p) C/image-viewer.c.page:69(p)
-#: C/guitar-tuner.c.page:74(p)
+#: C/radiobutton.js.page:66(section/p) C/togglebutton.js.page:66(section/p)
 msgid ""
-"Connecting signals is how you define what happens when you push a button, or "
-"when some other event happens. Here, the <code>destroy</code> function is "
-"called (and quits the app) when you close the window."
+"All the code for this sample goes in the RadioButtonExample class. The above "
+"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
+"go in."
 msgstr ""
 
-#: C/image-viewer.vala.page:121(p)
+#: C/radiobutton.js.page:67(section/code)
+#, no-wrap
 msgid ""
-"The <code>static main</code> function is run by default when you start a "
-"Vala application. It calls a few functions which create the <code>Main</"
-"code> class, set up and then run the application. The <link href=\"http://";
-"valadoc.org/gtk+-3.0/Gtk.main.html\"><code>Gtk.main</code></link> function "
-"starts the GTK <link href=\"http://en.wikipedia.org/wiki/Event_loop\";>main "
-"loop</link>, which runs the user interface and starts listening for events "
-"(like clicks and key presses)."
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 20,\n"
+"            title: \"Travel Planning\"});\n"
 msgstr ""
 
-#: C/image-viewer.vala.page:133(title) C/image-viewer.cpp.page:81(title)
-#: C/image-viewer.c.page:84(title)
-msgid "Creating the user interface"
-msgstr "Crear a interface de usuario"
+#: C/radiobutton.js.page:82(section/title)
+msgid "Creating the radiobuttons"
+msgstr "Crear os radiobuttons"
 
-#: C/image-viewer.vala.page:134(p)
+#: C/radiobutton.js.page:83(section/code)
+#, no-wrap
 msgid ""
-"Now we will bring life into the empty window. GTK organizes the user "
-"interface with <link href=\"http://www.valadoc.org/gtk+-2.0/Gtk.Container.";
-"html\"><code>Gtk.Container</code></link>s that can contain other widgets and "
-"even other containers. Here we will use the simplest available container, a "
-"<link href=\"http://unstable.valadoc.org/gtk+-2.0/Gtk.Box.html\";><code>Gtk."
-"Box</code></link>."
+"\n"
+"        // Create a label for the first group of buttons\n"
+"        this._placeLabel = new Gtk.Label ({label: \"Where would you like to travel to?\"});\n"
 msgstr ""
 
-#: C/image-viewer.vala.page:138(p)
-msgid "Add the following lines to the top of the <code>Main</code> class:"
+#: C/radiobutton.js.page:88(section/p)
+msgid ""
+"We use a <link xref=\"label.js\">Gtk.Label</link> to set each group of "
+"RadioButtons apart. Nothing will stop you from putting RadioButtons from all "
+"different groups wherever you want, so if you want people to know which ones "
+"go together you need to organize things accordingly."
 msgstr ""
 
-#: C/image-viewer.vala.page:144(p)
-msgid "Now replace the current constructor with the one below:"
+#: C/radiobutton.js.page:90(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create three radio buttons three different ways\n"
+"        this._place1 = new Gtk.RadioButton ({label: \"The Beach\"});\n"
+"\n"
+"        this._place2 = Gtk.RadioButton.new_from_widget (this._place1);\n"
+"        this._place2.set_label (\"The Moon\");\n"
+"\n"
+"        this._place3 = Gtk.RadioButton.new_with_label_from_widget (this._place1, \"Antarctica\");\n"
+"        // this._place3.set_active (true);\n"
 msgstr ""
 
-#: C/image-viewer.vala.page:170(p)
+#: C/radiobutton.js.page:101(section/p)
 msgid ""
-"The first two lines are the parts of the GUI that we will need to access "
-"from more than one method. We declare them up here so that they are "
-"accessible throughout the class instead of only in the method where they are "
-"created."
+"Here are three different ways to create RadioButtons. The first is the usual "
+"way, where we create a new Gtk.RadioButton and assign its properties at the "
+"same time. The second and third use functions which automatically handle "
+"some of the properties; new_from_widget takes a single argument, the "
+"RadioButton that you want to put this new one in the same group as. "
+"Meanwhile, new_with_label_from_widget takes that and the RadioButton's label "
+"at the same time."
 msgstr ""
 
-#: C/image-viewer.vala.page:174(p)
+#: C/radiobutton.js.page:102(section/p)
 msgid ""
-"The first lines of the constructor create the empty window. The next lines "
-"create the widgets we want to use: a button for opening up an image, the "
-"image view widget itself and the box we will use as a container."
+"The first RadioButton in a group is the one that's selected by default. Try "
+"uncommenting the last line in this sample code to see how you can set a "
+"different one to be the default selection."
 msgstr ""
 
-#: C/image-viewer.vala.page:178(p)
+#: C/radiobutton.js.page:104(section/code)
+#, no-wrap
 msgid ""
-"The calls to <link href=\"http://unstable.valadoc.org/gtk+-2.0/Gtk.Box.";
-"pack_start.html\"><code>pack_start</code></link> add the two widgets to the "
-"box and define their behaviour. The image will expand into any available "
-"space whereas the button will just be as big as needed. You will notice that "
-"we don't set explicit sizes on the widgets. In GTK this is usually not "
-"needed as it makes it much easier to have a layout that looks good in "
-"different window sizes. Next, the box is added to the window."
+"\n"
+"        // Create a label for the second group of buttons\n"
+"        this._thingLabel = new Gtk.Label ({label: \"And what would you like to bring?\" });\n"
+"\n"
+"        // Create three more radio buttons\n"
+"        this._thing1 = new Gtk.RadioButton ({label: \"Penguins\" });\n"
+"        this._thing2 = new Gtk.RadioButton ({label: \"Sunscreen\", group: this._thing1 });\n"
+"        this._thing3 = new Gtk.RadioButton ({label: \"A spacesuit\", group: this._thing1 });\n"
 msgstr ""
 
-#: C/image-viewer.vala.page:185(p)
+#: C/radiobutton.js.page:113(section/p)
 msgid ""
-"We need to define what happens when the user clicks on the button. GTK uses "
-"the concept of <em>signals</em>."
+"Here we create the label for the second group of buttons, and then create "
+"them all the same way."
 msgstr ""
 
-#: C/image-viewer.vala.page:186(p)
+#: C/radiobutton.js.page:117(section/title)
+#: C/textview.js.page:131(section/title)
+#, fuzzy
+#| msgid "Creating the user interface"
+msgid "Creating the rest of the user interface"
+msgstr "Crear a interface de usuario"
+
+#: C/radiobutton.js.page:119(section/code)
+#, no-wrap
 msgid ""
-"When the <link href=\"http://valadoc.org/gtk+-3.0/Gtk.Button.html\";>button</"
-"link> is clicked, it fires the <link href=\"http://valadoc.org/gtk+-3.0/Gtk.";
-"Button.clicked.html\"><code>clicked</code></link> signal, which we can "
-"connect to some action (defined in a <link href=\"https://live.gnome.org/";
-"Vala/SignalsAndCallbacks\">callback</link> method)."
+"\n"
+"        // Create a stock OK button\n"
+"        this._okButton = new Gtk.Button ({\n"
+"            label: 'gtk-ok',\n"
+"            use_stock: 'true',\n"
+"            halign: Gtk.Align.END });\n"
+"\n"
+"        // Connect the button to the function which handles clicking it\n"
+"        this._okButton.connect ('clicked', Lang.bind (this, this._okClicked));\n"
 msgstr ""
 
-#: C/image-viewer.vala.page:189(p)
+#: C/radiobutton.js.page:129(section/p)
 msgid ""
-"This is done using the <code>connect</code> method of the button's "
-"<code>clicked</code> signal, which in this case tells GTK to call the (yet "
-"undefined) <code>on_image_open</code> callback method when the button is "
-"clicked. We will define the <em>callback</em> in the next section."
+"This code creates a <link xref=\"button.js\">Gtk.Button</link> and binds it "
+"to a function which will show people a silly message when they click OK, "
+"depending on which RadioButtons were selected."
 msgstr ""
 
-#: C/image-viewer.vala.page:193(p)
+#: C/radiobutton.js.page:130(section/p)
 msgid ""
-"In the callback, we need to access the <code>window</code> and <code>image</"
-"code> widgets, which is why we defined them as private members at the top of "
-"our class."
+"To make sure the button's \"OK\" label shows up properly in every language "
+"that GNOME is translated into, remember to use one of Gtk's <link href="
+"\"http://developer.gnome.org/gtk/2.24/gtk-Stock-Items.html\";>stock button "
+"types</link>."
 msgstr ""
 
-#: C/image-viewer.vala.page:197(p)
+#: C/radiobutton.js.page:132(section/code)
+#, no-wrap
 msgid ""
-"The last <code>connect</code> call makes sure that the application exits "
-"when the window is closed. The code generated by Anjuta called an "
-"<code>on_destroy</code> callback method which called <link href=\"http://www.";
-"valadoc.org/gtk+-2.0/Gtk.main_quit.html\"><code>Gtk.main_quit</code></link>, "
-"but just connecting our signal to <code>main_quit</code> directly is easier. "
-"You can delete the <code>on_destroy</code> method."
+"\n"
+"        // Create a grid to put the \"place\" items in\n"
+"        this._places = new Gtk.Grid ();\n"
+"\n"
+"        // Attach the \"place\" items to the grid\n"
+"        this._places.attach (this._placeLabel, 0, 0, 1, 1);\n"
+"        this._places.attach (this._place1, 0, 1, 1, 1);\n"
+"        this._places.attach (this._place2, 0, 2, 1, 1);\n"
+"        this._places.attach (this._place3, 0, 3, 1, 1);\n"
+"\n"
+"        // Create a grid to put the \"thing\" items in\n"
+"        this._things = new Gtk.Grid ({ margin_top: 50 });\n"
+"\n"
+"        // Attach the \"thing\" items to the grid\n"
+"        this._things.attach (this._thingLabel, 0, 0, 1, 1);\n"
+"        this._things.attach (this._thing1, 0, 1, 1, 1);\n"
+"        this._things.attach (this._thing2, 0, 2, 1, 1);\n"
+"        this._things.attach (this._thing3, 0, 3, 1, 1);\n"
+"\n"
+"        // Create a grid to put everything in\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            margin_left: 40,\n"
+"            margin_right: 50 });\n"
+"\n"
+"        // Attach everything to the grid\n"
+"        this._grid.attach (this._places, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._things, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._okButton, 0, 2, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
 msgstr ""
 
-#: C/image-viewer.vala.page:204(title) C/image-viewer.cpp.page:136(title)
-#: C/image-viewer.c.page:149(title)
-msgid "Showing the image"
-msgstr "Mostrar a imaxe"
+#: C/radiobutton.js.page:166(section/p)
+msgid ""
+"We use a separate <link xref=\"grid.js\">Gtk.Grid</link> to organize each "
+"group of radio buttons. This way we can change the layout with less fuss "
+"later on. The second Grid has a margin on top, to visually separate the two "
+"sets of choices."
+msgstr ""
 
-#: C/image-viewer.vala.page:205(p)
+#: C/radiobutton.js.page:167(section/p)
 msgid ""
-"We will now define the signal handler for the <code>clicked</code> signal "
-"for the button we mentioned before. Add this code after the constructor:"
+"After we've organized them, we put them into a third, master Grid, along "
+"with the OK button. Then we attach that to the window."
 msgstr ""
 
-#: C/image-viewer.vala.page:231(p)
-msgid "This is a bit complicated, so let's break it down:"
+#: C/radiobutton.js.page:175(section/p)
+msgid ""
+"Finally, we tell the window and everything inside it to become visible when "
+"the application is run."
 msgstr ""
 
-#: C/image-viewer.vala.page:232(p)
+#: C/radiobutton.js.page:181(section/code)
+#, no-wrap
 msgid ""
-"A signal handler is a type of callback method that is called when a signal "
-"is emitted. Here the terms are used interchangeably."
+"\n"
+"    _okClicked: function () {\n"
+"\n"
+"        // Create a popup that shows a silly message\n"
+"        this._travel = new Gtk.MessageDialog ({\n"
+"            transient_for: this._window,\n"
+"            modal: true,\n"
+"            message_type: Gtk.MessageType.OTHER,\n"
+"            buttons: Gtk.ButtonsType.OK,\n"
+"            text: this._messageText() });\n"
+"\n"
+"        // Show the popup\n"
+"        this._travel.show();\n"
+"\n"
+"        // Bind the OK button to the function that closes the popup\n"
+"        this._travel.connect (\"response\", Lang.bind (this, this._clearTravelPopUp));\n"
+"\n"
+"    },\n"
 msgstr ""
 
-#: C/image-viewer.vala.page:235(p)
+#: C/radiobutton.js.page:200(section/p)
 msgid ""
-"The first argument of the callback method is always the widget that sent the "
-"signal. Sometimes other arguments related to the signal come after that, but "
-"<em>clicked</em> doesn't have any."
+"When you click OK, a <link xref=\"messagedialog.js\">Gtk.MessageDialog</"
+"link> appears. This function creates and displays the popup window, then "
+"binds its OK button to a function that closes it. What text appears in the "
+"popup depends on the _messageText() function, which returns a different "
+"value depending on which set of options you chose."
 msgstr ""
 
-#: C/image-viewer.vala.page:237(p)
+#: C/radiobutton.js.page:202(section/code)
+#, no-wrap
 msgid ""
-"In this case the <code>button</code> sent the <code>clicked</code> signal, "
-"which is connected to the <code>on_open_image</code> callback method:"
+"\n"
+"    _messageText: function() {\n"
+"\n"
+"        // Create a silly message for the popup depending on what you selected\n"
+"        var stringMessage = \"\";\n"
+"\n"
+"        if (this._place1.get_active()) {\n"
+"\n"
+"            if (this._thing1.get_active())\n"
+"                stringMessage = \"Penguins love the beach, too!\";\n"
+"\n"
+"            else if (this._thing2.get_active())\n"
+"                stringMessage = \"Make sure to put on that sunscreen!\";\n"
+"\n"
+"            else stringMessage = \"Are you going to the beach in space?\";\n"
+"\n"
+"        }\n"
+"\n"
+"        else if (this._place2.get_active()) {\n"
+"\n"
+"            if (this._thing1.get_active())\n"
+"                stringMessage = \"The penguins will take over the moon!\";\n"
+"\n"
+"            else if (this._thing2.get_active())\n"
+"                stringMessage = \"A lack of sunscreen will be the least of your problems!\";\n"
+"\n"
+"            else stringMessage = \"You'll probably want a spaceship, too!\";\n"
+"        }\n"
+"\n"
+"        else if (this._place3.get_active()) {\n"
+"\n"
+"            if (this._thing1.get_active())\n"
+"                stringMessage = \"The penguins will be happy to be back home!\";\n"
+"\n"
+"            else if (this._thing2.get_active())\n"
+"                stringMessage = \"Antarctic sunbathing may be hazardous to your health!\";\n"
+"\n"
+"            else stringMessage = \"Try bringing a parka instead!\";\n"
+"        }\n"
+"\n"
+"        return stringMessage;\n"
+"\n"
+"    },\n"
 msgstr ""
 
-#: C/image-viewer.vala.page:242(p)
+#: C/radiobutton.js.page:246(section/p)
 msgid ""
-"The <code>on_open_image</code> method takes the button that emitted the "
-"signal as an argument:"
+"The get_active() method is how we can tell which RadioButton's pressed in. "
+"This function returns a different silly message depending on which set of "
+"buttons was pressed. Its return value is used as the MessageDialog's text "
+"property."
 msgstr ""
 
-#: C/image-viewer.vala.page:248(p)
+#: C/radiobutton.js.page:248(section/code)
+#, no-wrap
 msgid ""
-"The next interesting line is where the dialog for choosing the file is "
-"created. <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.FileChooserDialog.";
-"html\"><code>FileChooserDialog</code></link>'s constructor takes the title "
-"of the dialog, the parent window of the dialog and several options like the "
-"number of buttons and their corresponding values."
+"\n"
+"    _clearTravelPopUp: function () {\n"
+"\n"
+"        this._travel.destroy();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
 msgstr ""
 
-#: C/image-viewer.vala.page:250(p)
+#: C/radiobutton.js.page:257(section/p)
 msgid ""
-"Notice that we are using <link href=\"http://unstable.valadoc.org/gtk+-3.0/";
-"Gtk.Stock.html\"><em>stock</em></link> button names from Gtk, instead of "
-"manually typing \"Cancel\" or \"Open\". The advantage of using stock names "
-"is that the button labels will already be translated into the user's "
-"language."
+"This function is called when the MessageDialog's OK button is pressed. It "
+"simply makes the popup go away."
 msgstr ""
 
-#: C/image-viewer.vala.page:254(p)
+#: C/radiobutton.js.page:259(section/code)
+#, no-wrap
 msgid ""
-"The next two lines restrict the <gui>Open</gui> dialog to only display files "
-"which can be opened by <em>GtkImage</em>. GtkImage is a widget which "
-"displays an image. A filter object is created first; we then add all kinds "
-"of files supported by <link href=\"http://www.valadoc.org/gdk-pixbuf-2.0/Gdk.";
-"Pixbuf.html\"><code>Gdk.Pixbuf</code></link> (which includes most image "
-"formats like PNG and JPEG) to the filter. Finally, we set this filter to be "
-"the <gui>Open</gui> dialog's filter."
+"\n"
+"// Run the application\n"
+"let app = new RadioButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/image-viewer.vala.page:259(p)
+#: C/radiobutton.js.page:264(section/p) C/togglebutton.js.page:143(section/p)
 msgid ""
-"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.run.html";
-"\"><code>dialog.run</code></link> displays the <gui>Open</gui> dialog. The "
-"dialog will wait for the user to choose an image; when they do, <code>dialog."
-"run</code> will return the <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
-"ResponseType.html\">ResponseType</link> value <code>ResponseType.ACCEPT</"
-"code> (it would return <code>ResponseType.CANCEL</code> if the user clicked "
-"<gui>Cancel</gui>). The <code>switch</code> statement tests for this."
+"Finally, we create a new instance of the finished RadioButtonExample class, "
+"and set the application running."
 msgstr ""
 
-#: C/image-viewer.vala.page:264(p)
+#: C/radiobutton.js.page:269(section/code)
+#, no-wrap
 msgid ""
-"Assuming that the user did click <gui>Open</gui>, the next lines get the "
-"filename of the image selected by the user, and tell the <code>GtkImage</"
-"code> widget to load and display the selected image."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const RadioButtonExample = new Lang.Class({\n"
+"    Name: 'RadioButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsradiobutton',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 20,\n"
+"            title: \"Travel Planning\"});\n"
+"\n"
+"        // Create a label for the first group of buttons\n"
+"        this._placeLabel = new Gtk.Label ({label: \"Where would you like to travel to?\"});\n"
+"\n"
+"        // Create three radio buttons three different ways\n"
+"        this._place1 = new Gtk.RadioButton ({label: \"The Beach\"});\n"
+"\n"
+"        this._place2 = Gtk.RadioButton.new_from_widget (this._place1);\n"
+"        this._place2.set_label (\"The Moon\");\n"
+"\n"
+"        this._place3 = Gtk.RadioButton.new_with_label_from_widget (this._place1, \"Antarctica\");\n"
+"        // this._place3.set_active (true);\n"
+"\n"
+"        // Create a label for the second group of buttons\n"
+"        this._thingLabel = new Gtk.Label ({label: \"And what would you like to bring?\" });\n"
+"\n"
+"        // Create three more radio buttons\n"
+"        this._thing1 = new Gtk.RadioButton ({label: \"Penguins\" });\n"
+"        this._thing2 = new Gtk.RadioButton ({label: \"Sunscreen\", group: this._thing1 });\n"
+"        this._thing3 = new Gtk.RadioButton ({label: \"A spacesuit\", group: this._thing1 });\n"
+"\n"
+"        // Create a stock OK button\n"
+"        this._okButton = new Gtk.Button ({\n"
+"            label: 'gtk-ok',\n"
+"            use_stock: 'true',\n"
+"            halign: Gtk.Align.END });\n"
+"\n"
+"        // Connect the button to the function which handles clicking it\n"
+"        this._okButton.connect ('clicked', Lang.bind (this, this._okClicked));\n"
+"\n"
+"        // Create a grid to put the \"place\" items in\n"
+"        this._places = new Gtk.Grid ();\n"
+"\n"
+"        // Attach the \"place\" items to the grid\n"
+"        this._places.attach (this._placeLabel, 0, 0, 1, 1);\n"
+"        this._places.attach (this._place1, 0, 1, 1, 1);\n"
+"        this._places.attach (this._place2, 0, 2, 1, 1);\n"
+"        this._places.attach (this._place3, 0, 3, 1, 1);\n"
+"\n"
+"        // Create a grid to put the \"thing\" items in\n"
+"        this._things = new Gtk.Grid ({ margin_top: 50 });\n"
+"\n"
+"        // Attach the \"thing\" items to the grid\n"
+"        this._things.attach (this._thingLabel, 0, 0, 1, 1);\n"
+"        this._things.attach (this._thing1, 0, 1, 1, 1);\n"
+"        this._things.attach (this._thing2, 0, 2, 1, 1);\n"
+"        this._things.attach (this._thing3, 0, 3, 1, 1);\n"
+"\n"
+"        // Create a grid to put everything in\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            margin_left: 40,\n"
+"            margin_right: 50 });\n"
+"\n"
+"        // Attach everything to the grid\n"
+"        this._grid.attach (this._places, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._things, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._okButton, 0, 2, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _okClicked: function () {\n"
+"\n"
+"        // Create a popup that shows a silly message\n"
+"        this._travel = new Gtk.MessageDialog ({\n"
+"            transient_for: this._window,\n"
+"            modal: true,\n"
+"            message_type: Gtk.MessageType.OTHER,\n"
+"            buttons: Gtk.ButtonsType.OK,\n"
+"            text: this._messageText() });\n"
+"\n"
+"        // Show the popup\n"
+"        this._travel.show();\n"
+"\n"
+"        // Bind the OK button to the function that closes the popup\n"
+"        this._travel.connect (\"response\", Lang.bind (this, this._clearTravelPopUp));\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _messageText: function() {\n"
+"\n"
+"        // Create a silly message for the popup depending on what you selected\n"
+"        var stringMessage = \"\";\n"
+"\n"
+"        if (this._place1.get_active()) {\n"
+"\n"
+"            if (this._thing1.get_active())\n"
+"                stringMessage = \"Penguins love the beach, too!\";\n"
+"\n"
+"            else if (this._thing2.get_active())\n"
+"                stringMessage = \"Make sure to put on that sunscreen!\";\n"
+"\n"
+"            else stringMessage = \"Are you going to the beach in space?\";\n"
+"\n"
+"        }\n"
+"\n"
+"        else if (this._place2.get_active()) {\n"
+"\n"
+"            if (this._thing1.get_active())\n"
+"                stringMessage = \"The penguins will take over the moon!\";\n"
+"\n"
+"            else if (this._thing2.get_active())\n"
+"                stringMessage = \"A lack of sunscreen will be the least of your problems!\";\n"
+"\n"
+"            else stringMessage = \"You'll probably want a spaceship, too!\";\n"
+"        }\n"
+"\n"
+"        else if (this._place3.get_active()) {\n"
+"\n"
+"            if (this._thing1.get_active())\n"
+"                stringMessage = \"The penguins will be happy to be back home!\";\n"
+"\n"
+"            else if (this._thing2.get_active())\n"
+"                stringMessage = \"Antarctic sunbathing may be hazardous to your health!\";\n"
+"\n"
+"            else stringMessage = \"Try bringing a parka instead!\";\n"
+"        }\n"
+"\n"
+"        return stringMessage;\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"    _clearTravelPopUp: function () {\n"
+"\n"
+"        this._travel.destroy();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new RadioButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/image-viewer.vala.page:267(p) C/image-viewer.py.page:213(p)
-#: C/image-viewer.js.page:299(p)
+#: C/radiobutton.js.page:277(item/p) C/statusbar.js.page:224(item/p)
+#: C/textview.js.page:251(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"In the final line of this method, we destroy the <gui>Open</gui> dialog "
-"because we don't need it any more."
-msgstr ""
-
-#: C/image-viewer.vala.page:268(p)
-msgid "Destroying automatically hides the dialog."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Button.html";
+"\">Gtk.Button</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image-viewer.vala.page:275(p) C/image-viewer.cpp.page:205(p)
-#: C/image-viewer.c.page:217(p) C/guitar-tuner.vala.page:248(p)
-#: C/guitar-tuner.c.page:252(p)
+#: C/radiobutton.js.page:278(item/p) C/scale.js.page:212(item/p)
+#: C/spinbutton.js.page:203(item/p) C/switch.js.page:269(item/p)
+#: C/textview.js.page:252(item/p) C/togglebutton.js.page:156(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"All of the code should now be ready to go. Click <guiseq><gui>Build</"
-"gui><gui>Build Project</gui></guiseq> to build everything again, and then "
-"<guiseq><gui>Run</gui><gui>Execute</gui></guiseq> to start the application."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html";
+"\">Gtk.Grid</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image-viewer.vala.page:277(p)
+#: C/radiobutton.js.page:279(item/p) C/scale.js.page:213(item/p)
+#: C/spinbutton.js.page:204(item/p) C/switch.js.page:271(item/p)
+#: C/textview.js.page:253(item/p)
 #, fuzzy
 #| msgid ""
-#| "If you haven't already done so, choose the <file>Debug/src/image-viewer</"
-#| "file> application in the dialog that appears. Finally, hit <gui>Run</gui> "
-#| "and enjoy!"
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"If you haven't already done so, choose the <file>src/image-viewer</file> "
-"application in the dialog that appears. Finally, hit <gui>Run</gui> and "
-"enjoy!"
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Label.html";
+"\">Gtk.Label</link>"
 msgstr ""
-"Se non o fixo aínda, seleccione o aplicativo <file>Debug/src/image-viewer</"
-"file> no diálogo que aparece. Finalmente, prema <gui>Executar</gui> e "
-"desfrute!"
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image-viewer.vala.page:283(p)
+#: C/radiobutton.js.page:280(item/p) C/textview.js.page:254(item/p)
 #, fuzzy
 #| msgid ""
-#| "If you run into problems with the tutorial, compare your code with this "
-#| "<link href=\"image-viewer/image-viewer.js\">reference code</link>."
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"image-viewer/image-viewer.vala\">reference code</link>."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.RadioButton.";
+"html\">Gtk.RadioButton</link>"
 msgstr ""
-"Se ten problemas con este titorial, compare o seu código con este <link href="
-"\"image-viewer/image-viewer.js\">código de referencia</link>."
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/image-viewer.vala.page:287(title) C/image-viewer.py.page:230(title)
-#: C/image-viewer.js.page:316(title) C/image-viewer.cpp.page:215(title)
-#: C/image-viewer.c.page:227(title) C/guitar-tuner.vala.page:264(title)
-#: C/guitar-tuner.py.page:234(title) C/guitar-tuner.cpp.page:268(title)
-#: C/guitar-tuner.c.page:262(title)
-msgid "Next steps"
-msgstr "Seguintes pasos"
+#: C/radiobutton.py.page:7(info/title)
+#, fuzzy
+#| msgid "RadioButton (Python)"
+msgctxt "text"
+msgid "RadioButton (Python)"
+msgstr "RadioButton (Python)"
 
-#: C/image-viewer.vala.page:288(p) C/image-viewer.py.page:231(p)
-#: C/image-viewer.js.page:317(p) C/image-viewer.cpp.page:216(p)
-#: C/image-viewer.c.page:228(p) C/guitar-tuner.vala.page:265(p)
-#: C/guitar-tuner.py.page:235(p) C/guitar-tuner.cpp.page:269(p)
-#: C/guitar-tuner.c.page:263(p)
-msgid "Here are some ideas for how you can extend this simple demonstration:"
-msgstr ""
-"Aquí hai algunhas ideas sobre como pode estender esta sinxela demostración:"
+#: C/radiobutton.py.page:21(info/desc)
+msgid "Mutually exclusive buttons."
+msgstr "Botóns mutuamente exclusivos."
 
-#: C/image-viewer.vala.page:290(p)
+#: C/radiobutton.py.page:26(page/p)
 msgid ""
-"Set it up so that when the window opens it is of a specific size to start "
-"off with. For example, 200 X 200 pixels."
+"Three RadioButtons. You can see in the terminal if they are turned off or on."
 msgstr ""
 
-#: C/image-viewer.vala.page:292(p) C/image-viewer.py.page:234(p)
-#: C/image-viewer.js.page:320(p) C/image-viewer.cpp.page:219(p)
-#: C/image-viewer.c.page:231(p)
+#: C/radiobutton.py.page:32(section/code)
+#, no-wrap
 msgid ""
-"Have the user select a directory rather than a file, and provide controls to "
-"cycle through all of the images in a directory."
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"RadioButton Example\", application=app)\n"
+"        self.set_default_size(250, 100)\n"
+"        self.set_border_width(20)\n"
+"\n"
+"        # a new radiobutton with a label\n"
+"        button1 = Gtk.RadioButton(label=\"Button 1\")\n"
+"        # connect the signal \"toggled\" emitted by the radiobutton\n"
+"        # with the callback function toggled_cb\n"
+"        button1.connect(\"toggled\", self.toggled_cb)\n"
+"\n"
+"        # another radiobutton, in the same group as button1\n"
+"        button2 = Gtk.RadioButton.new_from_widget(button1)\n"
+"        # with label \"Button 2\"\n"
+"        button2.set_label(\"Button 2\")\n"
+"        # connect the signal \"toggled\" emitted by the radiobutton\n"
+"        # with the callback function toggled_cb\n"
+"        button2.connect(\"toggled\", self.toggled_cb)\n"
+"        # set button2 not active by default\n"
+"        button2.set_active(False)\n"
+"\n"
+"        # another radiobutton, in the same group as button1,\n"
+"        # with label \"Button 3\"\n"
+"        button3 = Gtk.RadioButton.new_with_label_from_widget(button1, \"Button 3\")\n"
+"        # connect the signal \"toggled\" emitted by the radiobutton\n"
+"        # with the callback function toggled_cb\n"
+"        button3.connect(\"toggled\", self.toggled_cb)\n"
+"        # set button3 not active by default\n"
+"        button3.set_active(False)\n"
+"\n"
+"        # a grid to place the buttons\n"
+"        grid = Gtk.Grid.new()\n"
+"        grid.attach(button1, 0, 0, 1, 1);\n"
+"        grid.attach(button2, 0, 1, 1, 1);\n"
+"        grid.attach(button3, 0, 2, 1, 1);\n"
+"        # add the grid to the window\n"
+"        self.add(grid)\n"
+"\n"
+"    # callback function\n"
+"    def toggled_cb(self, button):\n"
+"        # a string to describe the state of the button\n"
+"        state = \"unknown\"\n"
+"        # whenever the button is turned on, state is on\n"
+"        if button.get_active():\n"
+"            state = \"on\"\n"
+"        # else state is off\n"
+"        else:\n"
+"            state = \"off\"\n"
+"        # whenever the function is called (a button is turned on or off)\n"
+"        # print on the terminal which button was turned on/off\n"
+"        print button.get_label() + \" was turned \" + state\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/image-viewer.vala.page:295(p) C/image-viewer.py.page:237(p)
-#: C/image-viewer.js.page:323(p) C/image-viewer.cpp.page:222(p)
-#: C/image-viewer.c.page:234(p)
+#: C/radiobutton.py.page:36(section/title)
+msgid "Useful methods for a RadioButton widget"
+msgstr "Métodos útiles para o widget RadioButton"
+
+#: C/radiobutton.py.page:39(section/p)
 msgid ""
-"Apply random filters and effects to the image when it is loaded and allow "
-"the user to save the modified image."
+"Instead of <code>button1 = Gtk.RadioButton(label=\"Button 1\")</code> we "
+"could create the button and label it with"
 msgstr ""
-"Aplicar filtros aleatorios e efectos á imaxe cando se carga e permitir ao "
-"usuario gardar a imaxe modificada."
 
-#: C/image-viewer.vala.page:296(p) C/image-viewer.py.page:238(p)
-#: C/image-viewer.js.page:324(p) C/image-viewer.cpp.page:223(p)
-#: C/image-viewer.c.page:235(p)
+#: C/radiobutton.py.page:40(section/code)
+#, no-wrap
 msgid ""
-"<link href=\"http://www.gegl.org/api.html\";>GEGL</link> provides powerful "
-"image manipulation capabilities."
+"\n"
+"button1 = Gtk.RadioButton()\n"
+"button1.set_label(\"Button 1\")."
 msgstr ""
-"<link href=\"http://www.gegl.org/api.html\";>GEGL</link> fornece capacidades "
-"moi potentes de manipulación de imaxes."
 
-#: C/image-viewer.vala.page:299(p) C/image-viewer.py.page:241(p)
-#: C/image-viewer.js.page:327(p) C/image-viewer.cpp.page:226(p)
-#: C/image-viewer.c.page:238(p)
+#: C/radiobutton.py.page:43(section/p)
 msgid ""
-"Allow the user to load images from network shares, scanners, and other more "
-"complicated sources."
+"For a general discussion of this, see <link xref=\"properties.py\">here</"
+"link>."
 msgstr ""
-"Permitir ao usuario cargar imaxes desde recursos de rede compartidos, "
-"escáneres e outras fontes máis complicadas."
 
-#: C/image-viewer.vala.page:300(p) C/image-viewer.py.page:242(p)
-#: C/image-viewer.js.page:328(p) C/image-viewer.cpp.page:227(p)
-#: C/image-viewer.c.page:239(p)
+#: C/radiobutton.py.page:44(section/p)
 msgid ""
-"You can use <link href=\"http://library.gnome.org/devel/gio/unstable/\";>GIO</"
-"link> to handle network file tranfers and the like, and <link href=\"http://";
-"library.gnome.org/devel/gnome-scan/unstable/\">GNOME Scan</link> to handle "
-"scanning."
+"Yet another way to create a new RadioButton with a label is <code>button1 = "
+"Gtk.RadioButton.new_with_label(None, \"Button 1\")</code> (the first "
+"arguement is the group of the radiobuttons, which we can get with "
+"<code>get_group()</code>, the second argument is the label)."
 msgstr ""
 
-#: C/image-viewer.py.page:7(title)
+#: C/radiobutton.py.page:53(item/p)
 #, fuzzy
-#| msgid "Image Viewer"
-msgid "Image Viewer (Python)"
-msgstr "Visor de imaxes"
-
-#: C/image-viewer.py.page:10(desc)
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"A little bit more than a simple \"Hello world\" application - write an image "
-"viewer in GTK."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkRadioButton.html";
+"\">GtkRadioButton</link>"
 msgstr ""
-"Algo máis que un aplicativo sinxelo «Hola mundo» - escribir un visor de "
-"imaxes en GTK."
-
-#: C/image-viewer.py.page:14(name) C/image-viewer.js.page:14(name)
-msgid "Jonh Wendell"
-msgstr "Jonh Wendell"
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/image-viewer.py.page:15(email) C/image-viewer.js.page:15(email)
-msgid "jwendell gnome org"
-msgstr "jwendell gnome org"
+#: C/radiobutton.vala.page:7(info/title)
+#, fuzzy
+#| msgid "RadioButton (Vala)"
+msgctxt "text"
+msgid "RadioButton (Vala)"
+msgstr "RadioButton (Vala)"
 
-#: C/image-viewer.py.page:27(p) C/image-viewer.js.page:27(p)
-msgid ""
-"In this tutorial, we're going to write a very simple GTK application that "
-"loads and displays an image file. You will learn how to:"
+#: C/radiobutton.vala.page:20(info/desc)
+msgid "A choice from multiple CheckButtons."
 msgstr ""
-"Neste titorial, imos escribir un aplicativo GTK moi sinxelo que carga e "
-"mostra un ficheiro de imaxe. Vostede aprenderá a:"
-
-#: C/image-viewer.py.page:29(p)
-msgid "Write a basic GTK user interface in Python"
-msgstr "Escribir unha interface de usuario básica en Python"
-
-#: C/image-viewer.py.page:30(p) C/image-viewer.js.page:30(p)
-msgid "Deal with events by connecting signals to signal handlers"
-msgstr "Xestionar eventos conectando sinais a xestores de sinais"
 
-#: C/image-viewer.py.page:31(p) C/image-viewer.js.page:31(p)
-msgid "Lay out GTK user interfaces using containers"
-msgstr "Dispoñer interfaces de usuario GTK usando contedores"
-
-#: C/image-viewer.py.page:32(p) C/image-viewer.js.page:32(p)
-msgid "Load and display image files"
-msgstr "Cargar e mostrar ficheiros de imaxe"
+#: C/radiobutton.vala.page:25(page/p)
+msgid "These RadioButtons report their activity in the terminal."
+msgstr ""
 
-#: C/image-viewer.py.page:37(p)
-msgid "Basic knowledge of the python programming language"
+#: C/radiobutton.vala.page:27(page/code)
+#, no-wrap
+msgid ""
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"RadioButton Example\");\n"
+"\n"
+"\t\tthis.border_width = 20;\n"
+"\t\tthis.set_default_size (250, 100);\n"
+"\n"
+"\t\t/* We demonstrate 3 different RadioButton creation methods */\n"
+"\n"
+"\t\t//Create a Radio Button\n"
+"\t\tvar button1 = new Gtk.RadioButton (null);\n"
+"\t\tbutton1.set_label (\"Button 1\");\n"
+"\n"
+"\t\t//Create a RadioButton with a label, and add it to the same group as button1.\n"
+"\t\tvar button2 = new Gtk.RadioButton.with_label (button1.get_group(),\"Button 2\");\n"
+"\n"
+"\t\t//Create a RadioButton with a label, adding it to button1's group.\n"
+"\t\tvar button3 = new Gtk.RadioButton.with_label_from_widget (button1, \"Button 3\");\n"
+"\n"
+"\t\t//Attach the buttons to a grid.\n"
+"\t\tvar grid = new Gtk.Grid ();\n"
+"\t\tgrid.attach (button1, 0, 0, 1, 1);\n"
+"\t\tgrid.attach (button2, 0, 1, 1, 1);\n"
+"\t\tgrid.attach (button3, 0, 2, 1, 1);\n"
+"\n"
+"\t\t//Add the button to the window.\n"
+"\t\tthis.add (grid);\n"
+"\n"
+"\t\t//Connect the signal handlers (aka. callback functions) to the buttons.\n"
+"\t\tbutton1.toggled.connect (button_toggled_cb);\n"
+"\t\tbutton2.toggled.connect (button_toggled_cb);\n"
+"\t\tbutton3.toggled.connect (button_toggled_cb);\n"
+"\t}\n"
+"\n"
+"\tvoid button_toggled_cb (Gtk.ToggleButton button)\n"
+"\t{\n"
+"\t\tvar state = \"unknown\";\n"
+"\n"
+"\t\tif (button.get_active ())\n"
+"\t\t\tstate = \"on\";\n"
+"\t\telse {\n"
+"\t\t\tstate = \"off\";\n"
+"\t\t\tprint (\"\\n\");\n"
+"\t\t}\n"
+"\t\tprint (button.get_label() + \" was turned \" + state + \"\\n\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"public class MyApplication : Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\n"
+"\t\t//Show all of the things.\n"
+"\t\tnew MyWindow (this).show_all ();\n"
+"\t}\n"
+"\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.MyApplication\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/image-viewer.py.page:51(p)
+#: C/radiobutton.vala.page:32(item/p)
 #, fuzzy
 #| msgid ""
-#| "Choose <gui>GTKmm (Simple)</gui> from the <gui>C++</gui> tab, click "
-#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
-#| "<file>image-viewer</file> as project name and directory."
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"Choose <gui>PyGTK (automake)</gui> from the <gui>Python</gui> tab, click "
-"<gui>Continue</gui>, and fill out your details on the next few pages. Use "
-"<file>image-viewer</file> as project name and directory."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.RadioButton.html\";>Gtk."
+"RadioButton</link>"
 msgstr ""
-"Seleccione <gui>GTK+ (Simple)</gui> desde a lapela <gui>C++</gui>, prema "
-"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
-"<file>image-viewer</file> como nome do proxecto e cartafol."
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/image-viewer.py.page:54(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/record-collection.js.page:64(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/record-collection.png'; "
+#| "md5=2d645997687ed5aacd36aafafc16e072"
+msgctxt "_"
 msgid ""
-"Be sure to disable <gui>Use GtkBuilder for user interface</gui> as we will "
-"build the user interface manually in this example. For an example of using "
-"the interface designer, check the <link xref=\"guitar-tuner.py\">Guitar-"
-"Tuner demo</link>."
+"external ref='media/record-collection.png' "
+"md5='2d645997687ed5aacd36aafafc16e072'"
 msgstr ""
+"@@image: 'media/record-collection.png'; md5=2d645997687ed5aacd36aafafc16e072"
 
-#: C/image-viewer.py.page:59(p)
-msgid ""
-"Click <gui>Apply</gui> and the project will be created for you. Open "
-"<file>src/image_viewer.py</file> from the <gui>Project</gui> or <gui>File</"
-"gui> tabs. It contains very basic example code."
+#: C/record-collection.js.page:7(info/title)
+#, fuzzy
+#| msgid "Record Collection (JavaScript)"
+msgctxt "text"
+msgid "Record Collection (JavaScript)"
+msgstr "Colección de música (JavaScript)"
+
+#: C/record-collection.js.page:10(info/desc)
+msgid "Create a small database application for ordering your music collection"
 msgstr ""
-"Prema <gui>Aplicar</gui> e crearase o proxecto. Abra <file>src/image_viewer."
-"py</file> desde as lapelas <gui>Proxecto</gui> ou <gui>Ficheiro</gui>. "
-"Contén un exemplo de código moi básico:"
+"Cree un pequeno aplicativo con unha base de datos para ordenar a súa "
+"colección de música"
 
-#: C/image-viewer.py.page:65(title) C/image-viewer.js.page:126(title)
-msgid "A first Gtk application"
-msgstr "Un primeiro aplicativo en GTK"
+#: C/record-collection.js.page:23(page/title)
+msgid "3 Record Collection"
+msgstr "3 Colección de gravacións"
 
-#: C/image-viewer.py.page:66(p)
-msgid "Let's see what a very basic Gtk application looks like in Python:"
-msgstr "Vexamos como é o máis básico dun aplicativo Gtk en Python:"
+#: C/record-collection.js.page:28(item/p)
+msgid "How to connect to a database using libgda"
+msgstr "Como conectar con unha base de datos usando libgda"
 
-#: C/image-viewer.py.page:90(p) C/image-viewer.js.page:137(p)
-msgid "Let's take a look at what's happening:"
-msgstr "Botemos unha ollada ao que está pasando:"
+#: C/record-collection.js.page:29(item/p)
+msgid "How to insert and browse records in a database table"
+msgstr "Como insertar e examinar rexistros nunha táboa dunha base de datos"
+
+#: C/record-collection.js.page:35(section/p)
+msgid ""
+"This demo uses the Javascript language. We are going to demonstrate how to "
+"connect and use a database from a GTK program, by using the GDA (GNOME Data "
+"Access) library. Thus you also need this library installed."
+msgstr ""
+"Esta demostración usa o linguaxe JavaScript. Vaise demostrar como conectar e "
+"usar unha base de datos desde un programa GTK, usando a biblioteca GDA "
+"(«GNOME Data Access», Acceso a datos de GNOME). Polo tanto, é preciso ter "
+"instalada tamén esta biblioteca."
+
+#: C/record-collection.js.page:38(section/p)
+msgid ""
+"GNOME Data Access (GDA) is library whose purpose is to provide universal "
+"access to different kinds and types of data sources. This goes from "
+"traditional relational database systems, to any imaginable kind of data "
+"source such as a mail server, a LDAP directory, etc. For more information, "
+"and for a full API and documentation, visit the <link href=\"http://library.";
+"gnome.org/devel/libgda/stable/\">GDA website</link>."
+msgstr ""
+"GNOME Data Access (GDA) é unha biblioteca cuxo propósito é fornecer acceso "
+"universal a diferentes tipos de orixes de datos. Isto vai desde os sistemas "
+"de bases de datos relacionais tradicionais a calquera tipo imaxinábel de "
+"orixe de datos como un servidor de correo, un directorio LDAP, ect. Para "
+"máis información e para obter a API completa e a documentación visite o "
+"<link href=\"http://library.gnome.org/devel/libgda/stable/\";>sitio web de "
+"GDA</link>."
 
-#: C/image-viewer.py.page:93(p) C/image-viewer.js.page:140(p)
+#: C/record-collection.js.page:41(section/p)
 msgid ""
-"The first line imports the Gtk namespace (that is, it includes the Gtk "
-"library). The libraries are provided by GObject Introspection (gi), which "
-"provides language bindings for many GNOME libraries."
+"Although a big part of the code is related to user interface (GUI), we are "
+"going to focus our tutorial on the database parts (we might mention other "
+"parts we think are relevant though). To know more about Javascript programs "
+"in GNOME, see the <link xref=\"image-viewer.js\">Image Viewer program</link> "
+"tutorial."
 msgstr ""
+"Aínda que a maioría do código está relacionado con interfaces de usuario "
+"(GUI), imos enforcar este titorial nas partes relacionadas coa base de datos "
+"(aínda que podemos mencionar outras partes que son relevantes). Para saber "
+"máis sobre os programas JavaScript en GNOME vexa o titorial <link xref="
+"\"image-viewer.js\">programa Visor de Imaxes</link>."
 
-#: C/image-viewer.py.page:96(p)
+#: C/record-collection.js.page:54(item/p)
 msgid ""
-"In the <code>__init__</code> method of the <code>GUI</code> class creates an "
-"(empty) <code>Gtk.Window</code>, sets its title and then connects a signal "
-"to quit the application once the window is closed. That's pretty simple "
-"overall, more on signals later."
+"Choose <gui>Generic Javascript</gui> from the <gui>JS</gui> tab, click "
+"<gui>Forward</gui>, and fill-out your details on the next few pages. Use "
+"<file>record-collection</file> as project name and directory."
 msgstr ""
+"Seleccione <gui>JavaScript xenérico</gui> desde a lapela <gui>JS</gui>, "
+"prema <gui>Adiante</gui> e complete os seus detalles nas seguintes páxinas. "
+"Use <file>record-collection</file> como nome do proxecto e cartafol."
 
-#: C/image-viewer.py.page:101(p)
+#: C/record-collection.js.page:57(item/p)
 msgid ""
-"Next, <code>destroy</code> is defined which just quits the application. It "
-"is called by the <code>destroy</code> signal connected above."
+"Click <gui>Finished</gui> and the project will be created for you. Open "
+"<file>src/main.js</file> from the <gui>Project</gui> or <gui>File</gui> "
+"tabs. It contains very basic example code."
 msgstr ""
-"A continuación, <code>destroy</code> está definido só para saír do "
-"aplicativo. É chamado pola sinal <code>destroy</code> conectada enriba."
+"Prema <gui>Rematar</gui> e o proxecto será creado. Abra <file>src/main.js</"
+"file> desde a lapela <gui>Proxecto</gui> ou <gui>Ficheiros</gui>. Contén "
+"código de exemplo moi básico."
 
-#: C/image-viewer.py.page:105(p)
-msgid "The rest of the file does initialisation for Gtk and displays the GUI."
-msgstr "O resto do ficheiro inicializa Gtk e mostra o GUI."
+#: C/record-collection.js.page:63(section/title)
+msgid "Program Structure"
+msgstr "Estrutura do programa"
 
-#: C/image-viewer.py.page:109(p)
+#: C/record-collection.js.page:65(section/p)
 msgid ""
-"This code is ready to run, so try it using <guiseq><gui>Run</"
-"gui><gui>Execute</gui></guiseq>. It should show you an empty window."
+"This demo is a simple GTK application (with a single window) capable of "
+"inserting records into a database table as well as browsing all records of "
+"the table. The table has two fields: <code>id</code>, an integer, and "
+"<code>name</code>, a varchar. The first section (on the top) of the "
+"application allows you to insert a record into the table. The last section "
+"(bottom) allows you to see all the records of that table. Its content is "
+"refreshed every time a new record is inserted and on the application startup."
 msgstr ""
+"Esta demostración é un aplicativo GTK (cunha única xanela) capaz de inserir "
+"rexistros nunha táboa de base de datos así como navegar por tódolos "
+"rexistros da toa. A táboa ten dous campos: <code>id</code>, un enteiro e "
+"<code>name</code>, un varchar. A primeira sección (na parte superior) do "
+"aplicativo permítelle inserir un rexistro na táboa. A última sección "
+"(abaixo) permítelle ver tódolos rexistros dunha táboa. Os contidos "
+"actualízanse cada vez que se insire un novo rexistro e ao iniciar o "
+"aplicativo."
 
-#: C/image-viewer.py.page:114(title) C/image-viewer.js.page:181(title)
-msgid "Signals"
-msgstr "Sinais"
+#: C/record-collection.js.page:70(section/title)
+msgid "Starting the fun"
+msgstr "Comezar a diversión"
 
-#: C/image-viewer.py.page:115(p) C/image-viewer.js.page:182(p)
-msgid ""
-"Signals are one of the key concepts in Gtk programming. Whenever something "
-"happens to an object, it emits a signal; for example, when a button is "
-"clicked it gives off the <code>clicked</code> signal. If you want your "
-"program to do something when that event occurs, you must connect a function "
-"(a \"signal handler\") to that signal. Here's an example:"
-msgstr ""
+#: C/record-collection.js.page:71(section/p)
+msgid "Let's start by examining the skeleton of the program:"
+msgstr "Comezar examinando o esqueleto do programa:"
 
-#: C/image-viewer.py.page:122(p) C/image-viewer.js.page:189(p)
+#: C/record-collection.js.page:72(section/code)
+#, no-wrap
 msgid ""
-"The last two lines create a <code>Gtk.Button</code> called <code>b</code> "
-"and connect its <code>clicked</code> signal to the <code>button_clicked</"
-"code> function, which is defined above. Every time the button is clicked, "
-"the code in the <code>button_clicked</code> function will be executed. It "
-"just prints a message here."
+"\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Gda = imports.gi.Gda;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"function Demo () {\n"
+"  this._init ();\n"
+"}\n"
+"\n"
+"Demo.prototype = {\n"
+"\n"
+"  _init: function () {\n"
+"    this.setupWindow ();\n"
+"    this.setupDatabase ();\n"
+"    this.selectData ();\n"
+"  }\n"
+"}\n"
+"\n"
+"Gtk.init (0, null);\n"
+"\n"
+"var demo = new Demo ();\n"
+"\n"
+"Gtk.main ();"
 msgstr ""
 
-#: C/image-viewer.py.page:126(title) C/image-viewer.js.page:212(title)
-msgid "Containers: Laying-out the user interface"
-msgstr "Contedores: deseñar a interface de usuario"
-
-#: C/image-viewer.py.page:127(p) C/image-viewer.js.page:213(p)
+#: C/record-collection.js.page:97(item/p)
 msgid ""
-"Widgets (controls, such as buttons and labels) can be arranged in the window "
-"by making use of <em>containers</em>. You can organize the layout by mixing "
-"different types of containers, like boxes and grids."
+"Lines 1‒4: Initial imports. Pay special attention to line 3, which tells "
+"Javascript to import the GDA library, our focus in this tutorial."
 msgstr ""
+"Liñas 1-4: importacións iniciais. Preste especial atención á liña 3, que "
+"indica que JavaScript importe a a biblioteca GDA, noso obxectivo neste "
+"titorial."
 
-#: C/image-viewer.py.page:128(p) C/image-viewer.js.page:214(p)
+#: C/record-collection.js.page:98(item/p)
 msgid ""
-"A <code>Gtk.Window</code> is itself a type of container, but you can only "
-"put one widget directly into it. We would like to have two widgets, an image "
-"and a button, so we must put a \"higher-capacity\" container inside the "
-"window to hold the other widgets. A number of <link href=\"http://library.";
-"gnome.org/devel/gtk/stable/GtkContainer.html\">container types</link> are "
-"available, but we will use a <code>Gtk.Box</code> here. A <code>Gtk.Box</"
-"code> can hold several widgets, organized horizontally or vertically. You "
-"can do more complicated layouts by putting several boxes inside another box "
-"and so on."
+"Lines 6‒17: Define our <code>Demo</code> class. Pay special attention to "
+"lines 13‒15, where we call 3 methods which will do the whole job. They will "
+"be detailed below."
 msgstr ""
+"Liñas 6-17: Define a clase <code>Demo</code>. Poña especial atención ás "
+"liñas 13-15, onde chamamos a 3 métodos que farán o traballo. Falaremos deles "
+"máis adiante."
 
-#: C/image-viewer.py.page:130(p) C/image-viewer.js.page:216(p)
-msgid ""
-"There is a graphical user interface designer called <app>Glade</app> "
-"integrated in <app>Anjuta</app> which makes UI design really easy. For this "
-"simple example, however, we will code everything manually."
-msgstr ""
+#: C/record-collection.js.page:99(item/p)
+msgid "Lines 19‒23: Start the application."
+msgstr "Liñas 19-23: Iniciar o aplicativo."
 
-#: C/image-viewer.py.page:132(p)
-msgid ""
-"Let's add the box and widgets to the window. Insert the following code into "
-"the <code>__init__</code> method, immediately after the <code>window."
-"connect_after</code> line:"
-msgstr ""
+#: C/record-collection.js.page:104(section/title)
+msgid "Designing the application"
+msgstr "Deseñar o aplicativo"
 
-#: C/image-viewer.py.page:140(p)
+#: C/record-collection.js.page:105(section/p)
 msgid ""
-"The first line creates a <code>Gtk.Box</code> called <code>box</code> and "
-"the following lines set two of its properties: the <code>orientation</code> "
-"is set to vertical (so the widgets are arranged in a column), and the "
-"<code>spacing</code> between the widgets is set to 5 pixels. The next line "
-"then adds the newly-created <code>Gtk.Box</code> to the window."
+"Let's take a look at the <code>setupWindow</code> method. It is responsible "
+"for creating the User Interface (UI). As UI is not our focus, we will "
+"explain only the relevant parts."
 msgstr ""
+"Botémoslle unha ollada ao método <code>setupWindow</code>. É o responsábel "
+"de crear a Interface de Usuario (UI). Xa que a UI non é o noso enfoque "
+"explicaremos só as partes máis relevantes."
 
-#: C/image-viewer.py.page:141(p) C/image-viewer.js.page:223(p)
+#: C/record-collection.js.page:106(section/code)
+#, no-wrap
 msgid ""
-"So far the window only contains an empty <code>Gtk.Box</code>, and if you "
-"run the program now you will see no changes at all (the <code>Gtk.Box</code> "
-"is a transparent container, so you can't see that it's there)."
+"\n"
+"  setupWindow: function () {\n"
+"    this.window = new Gtk.Window ({title: \"Data Access Demo\", height_request: 350});\n"
+"    this.window.connect (\"delete-event\", function () {\n"
+"      Gtk.main_quit();\n"
+"      return true;\n"
+"      });\n"
+"\n"
+"    // main box\n"
+"    var main_box = new Gtk.Box ({orientation: Gtk.Orientation.VERTICAL, spacing: 5});\n"
+"    this.window.add (main_box);\n"
+"\n"
+"    // first label\n"
+"    var info1 = new Gtk.Label ({label: \"&lt;b&gt;Insert a record&lt;/b&gt;\", xalign: 0, use_markup: 
true});\n"
+"    main_box.pack_start (info1, false, false, 5);\n"
+"\n"
+"    // \"insert a record\" horizontal box\n"
+"    var insert_box = new Gtk.Box ({orientation: Gtk.Orientation.HORIZONTAL, spacing: 5});\n"
+"    main_box.pack_start (insert_box, false, false, 5);\n"
+"\n"
+"    // ID field\n"
+"    insert_box.pack_start (new Gtk.Label ({label: \"ID:\"}), false, false, 5);\n"
+"    this.id_entry = new Gtk.Entry ();\n"
+"    insert_box.pack_start (this.id_entry, false, false, 5);\n"
+"\n"
+"    // Name field\n"
+"    insert_box.pack_start (new Gtk.Label ({label: \"Name:\"}), false, false, 5);\n"
+"    this.name_entry = new Gtk.Entry ({activates_default: true});\n"
+"    insert_box.pack_start (this.name_entry, true, true, 5);\n"
+"\n"
+"    // Insert button\n"
+"    var insert_button = new Gtk.Button ({label: \"Insert\", can_default: true});\n"
+"    insert_button.connect (\"clicked\", Lang.bind (this, this._insertClicked));\n"
+"    insert_box.pack_start (insert_button, false, false, 5);\n"
+"    insert_button.grab_default ();\n"
+"\n"
+"    // Browse textview\n"
+"    var info2 = new Gtk.Label ({label: \"&lt;b&gt;Browse the table&lt;/b&gt;\", xalign: 0, use_markup: 
true});\n"
+"    main_box.pack_start (info2, false, false, 5);\n"
+"    this.text = new Gtk.TextView ({editable: false});\n"
+"    var sw = new Gtk.ScrolledWindow ({shadow_type:Gtk.ShadowType.IN});\n"
+"    sw.add (this.text);\n"
+"    main_box.pack_start (sw, true, true, 5);\n"
+"\n"
+"    this.count_label = new Gtk.Label ({label: \"\", xalign: 0, use_markup: true});\n"
+"    main_box.pack_start (this.count_label, false, false, 0);\n"
+"\n"
+"    this.window.show_all ();\n"
+"  },"
 msgstr ""
 
-#: C/image-viewer.py.page:145(title) C/image-viewer.js.page:227(title)
-msgid "Packing: Adding widgets to the container"
-msgstr "Empaquetado: Engadir widgets ao contedor"
-
-#: C/image-viewer.py.page:146(p)
+#: C/record-collection.js.page:156(item/p)
 msgid ""
-"To add some widgets to the <code>Gtk.Box</code>, insert the following code "
-"directly below the <code>window.add (box)</code> line:"
+"Lines 22 and 27: Create the 2 entries (for the two fields) in which users "
+"will type something to get inserted in the database."
 msgstr ""
+"Liñas 22 e 27: crear as dúas entradas (para os dous campos) nas que o "
+"usuario escribirá algo para inserilo na base de datos."
 
-#: C/image-viewer.py.page:150(p)
+#: C/record-collection.js.page:157(item/p)
 msgid ""
-"The first line creates a new <code>Gtk.Image</code> called <code>image</"
-"code>, which will be used to display an image file. As we need that later on "
-"in the signal handler, we will define it as a class-wide variable. You need "
-"to add <code>image = 0</code> to the beginning of the <code>GUI</code> "
-"class. Then, the image widget is added (<em>packed</em>) into the <code>box</"
-"code> container using GtkBox's <link href=\"http://library.gnome.org/devel/";
-"gtk/stable/GtkBox.html#gtk-box-pack-start\"><code>pack_start</code></link> "
-"method."
+"Lines 31‒34: Create the Insert button. We connect its <code>clicked</code> "
+"signal to the <code>_insertClicked</code> private method of the class. This "
+"method is detailed below."
 msgstr ""
+"Liñas 31-34: crear o botón «Insertar». Conéctase o seu sinal <code>clicked</"
+"code> co método privado <code>_insertClicked</code> de clase. Este método "
+"detállase a continuación"
 
-#: C/image-viewer.py.page:152(p)
+#: C/record-collection.js.page:158(item/p)
 msgid ""
-"<code>pack_start</code> takes 4 arguments: the widget that is to be added to "
-"the GtkBox (<code>child</code>); whether the <code>Gtk.Box</code> should "
-"grow larger when the new widget is added (<code>expand</code>); whether the "
-"new widget should take up all of the extra space created if the <code>Gtk."
-"Box</code> gets bigger (<code>fill</code>); and how much space there should "
-"be, in pixels, between the widget and its neighbors inside the <code>Gtk."
-"Box</code> (<code>padding</code>)."
+"Line 39: Create the widget (<code>TextView</code>) where we will show the "
+"contents of the table."
 msgstr ""
+"Liña 39: Crear o widget (<code>TextView</code>) onde se mostrarán os "
+"contidos da táboa."
 
-#: C/image-viewer.py.page:153(p) C/image-viewer.js.page:234(p)
+#: C/record-collection.js.page:159(item/p)
 msgid ""
-"Gtk containers (and widgets) dynamically expand to fill the available space, "
-"if you let them. You don't position widgets by giving them a precise x,y-"
-"coordinate location in the window; rather, they are positioned relative to "
-"one another. This makes handling window resizing much easier, and widgets "
-"should automatically take a sensible size in most situations."
+"Line 44: Create the label where we will show the number of records in the "
+"table. Initially it's empty, it will be updated later."
 msgstr ""
+"Liña 44: crea a etiqueta onde se mostrará o número de rexistros existentes "
+"na táboa. Inicialmente está baleiro, actualizarase máis tarde."
+
+#: C/record-collection.js.page:164(section/title)
+msgid "Connecting to and initializing the database"
+msgstr "Conectar e inicializar a base de datos"
 
-#: C/image-viewer.py.page:154(p) C/image-viewer.js.page:235(p)
+#: C/record-collection.js.page:165(section/p)
 msgid ""
-"Also note how the widgets are organized in a hierarchy. Once packed in the "
-"<code>Gtk.Box</code>, the <code>Gtk.Image</code> is considered a <em>child</"
-"em> of the <code>Gtk.Box</code>. This allows you to treat all of the "
-"children of a widget as a group; for example, you could hide the <code>Gtk."
-"Box</code>, which would also hide all of its children at the same time."
+"The code which makes the connection to the database is in the "
+"<code>setupDatabase</code> method below:"
 msgstr ""
+"O código que fai a conexión coa base de datos está no método "
+"<code>setupDatabase</code> de embaixo:"
 
-#: C/image-viewer.py.page:155(p) C/image-viewer.js.page:236(p)
-msgid "Now insert these two lines, below the two you just added:"
-msgstr "Agora escriba estas dúas liñas, embaixo das dúas que acaba de engadir:"
-
-#: C/image-viewer.py.page:160(p)
+#: C/record-collection.js.page:168(section/code)
+#, no-wrap
 msgid ""
-"These lines are similar to the first two, but this time they create a "
-"<code>Gtk.Button</code> and add it to <code>box</code>. Notice that we are "
-"setting the <code>expand</code> argument (the second one) to <code>False</"
-"code> here, whereas it was set to <code>True</code> for the <code>Gtk.Image</"
-"code>. This will cause the image to take up all available space and the "
-"button to take only the space it needs. When you maximize the window, the "
-"button size will remain the same, but the image size will increase, taking "
-"up all of the rest of the window."
+"\n"
+"  setupDatabase: function () {\n"
+"    this.connection = new Gda.Connection ({provider: Gda.Config.get_provider(\"SQLite\"),\n"
+"                                          cnc_string:\"DB_DIR=\" + GLib.get_home_dir () + 
\";DB_NAME=gnome_demo\"});\n"
+"    this.connection.open ();\n"
+"\n"
+"    try {\n"
+"      var dm = Gda.execute_select_command (this.connection, \"select * from demo\");\n"
+"    } catch (e) {\n"
+"      Gda.execute_non_select_command (this.connection, \"create table demo (id integer, name 
varchar(100))\");\n"
+"    }\n"
+"  },"
 msgstr ""
 
-#: C/image-viewer.py.page:164(title) C/image-viewer.js.page:247(title)
+#: C/record-collection.js.page:182(item/p)
 msgid ""
-"Loading the image: Connecting to the button's <code>clicked</code> signal"
+"Lines 2‒3: Create the GDA's <code>Connection</code> object. We must supply "
+"to its constructor some properties:"
 msgstr ""
+"Liña 2-3: crear o obxecto de GDA <code>Conection</code>. Debe fornecerlle ao "
+"seu construtor algunhas propiedades:"
 
-#: C/image-viewer.py.page:165(p)
+#: C/record-collection.js.page:185(item/p)
 msgid ""
-"When the user clicks on the <gui>Open Image...</gui> button, a dialog should "
-"appear so that the user can choose a picture. Once chosen, the picture "
-"should be loaded and shown in the image widget."
+"<code>provider</code>: One of GDA's supported providers. GDA supports "
+"SQLite, MySQL, PostgreSQL, Oracle and many others. For demo purposes we will "
+"use a SQLite database, as it comes installed by default in most "
+"distributions and it is simple to use (it just uses a file as a database)."
 msgstr ""
+"<code>provider</code>: un dos fornecedores con asistencia en GDA. GDA é "
+"compatíbel con SQLite, MySQL, PostgreSQL, Oracle e moitos outros. Para os "
+"propósitos desta demostración usaremos unha base de datos SQLite, xa que ven "
+"instalada por omisión na maioría das distribucións e é moi sinxela de usar "
+"(usa un só ficheiro por base de datos)."
 
-#: C/image-viewer.py.page:166(p)
+#: C/record-collection.js.page:188(item/p)
 msgid ""
-"The first step is to connect the <code>clicked</code> signal of the button "
-"to a signal handler function, which we call <code>on_open_clicked</code>. "
-"Put this code immediately after the <code>button = Gtk.Button()</code> line "
-"where the button was created:"
+"<code>cnc_string</code>: The connection string. It may change from provider "
+"to provider. The syntax for SQLite is: <code>DB_DIR=<var>PATH</var>;"
+"DB_NAME=<var>FILENAME</var></code>. In this demo we are accessing a database "
+"called gnome_demo in the user home dir (note the call to GLib's "
+"<code>get_home_dir</code> function)."
 msgstr ""
+"<code>cnc_string</code>: A cadea de conexión. Pode cambiar dun fornecedor a "
+"outro. A sintaxe para SQLite é: <code>DB_DIR=<var>PATH</var>;"
+"DB_NAME=<var>FILENAME</var></code>. Nesta demostración accederemos a unha "
+"base de datos chamada gnome_demo no cartafol persoal do usuario (olle a "
+"chamada á función de GLib <code>get_home_dir</code>)."
 
-#: C/image-viewer.py.page:170(p)
+#: C/record-collection.js.page:192(note/p)
 msgid ""
-"This will connect the <code>clicked</code> signal to <code>on_open_clicked</"
-"code> method that we will define below."
+"If the provider is not supported by GDA, or if the connection string is "
+"missing some element, line 2 will raise an exception. So, in real life we "
+"should handle it with JavaScript's statement <code>try</code>...<code>catch</"
+"code>."
 msgstr ""
+"Se o fornecedor non é compatíbel con GDA, ou falta algún elemento na cadea "
+"de conexión, dispararase a excepción da liña 2. Polo que na vida real "
+"deberíamos xestionar as declaracións JavaScript entre bloques <code>try</"
+"code>...<code>catch</code>."
 
-#: C/image-viewer.py.page:175(title) C/image-viewer.js.page:257(title)
-msgid "Loading the image: Writing the signal's callback"
+#: C/record-collection.js.page:196(item/p)
+msgid ""
+"Line 4: Open the connection. In the SQLite provider, if the database does "
+"not exist, it will be created in this step."
 msgstr ""
+"Liña 4: Abrir a conexión. No fornecedor de SQLite, se a conexión non existe "
+"crearase neste paso."
 
-#: C/image-viewer.py.page:176(p)
+#: C/record-collection.js.page:198(item/p)
 msgid ""
-"Now we can create the <code>on_open_clicked</code> method. Insert the "
-"following into the <code>GUI</code> class code block, after the "
-"<code>__init__</code> method:"
+"Lines 6‒10: Try to do a simple select to check if the table exists (line 7). "
+"If it does not exist (because the database was just created), this command "
+"will raise an exception, which is handled by the <code>try</code>..."
+"<code>catch</code> block. If it is the case, we run the create table "
+"statement (line 9)."
 msgstr ""
+"Liñas 6-10: Tenta facer unha selección sinxela para comprobar que a táboa "
+"existe (liña 7). Se non existe (porque a base de datos foi recén creada), "
+"esta orde disparará unha excepción, que está xestionada polo bloque "
+"<code>try</code>...<code>catch</code>. Se este é o caso executarase a "
+"declaración de creación de táboa (liña 9)."
 
-#: C/image-viewer.py.page:192(p) C/image-viewer.js.page:278(p)
-#: C/image-viewer.cpp.page:172(p) C/image-viewer.c.page:186(p)
+#: C/record-collection.js.page:199(item/p)
 msgid ""
-"This is a bit more complicated than anything we've attempted so far, so "
-"let's break it down:"
+"In order to run the SQL commands above we are using global GDA functions, "
+"<code>execute_select_command</code> and <code>execute_non_select_command</"
+"code>. They are simple to use, and just require two arguments: The "
+"<code>Connection</code> object and the SQL command to be parsed."
 msgstr ""
+"Para executar ordes SQL usamos as funcións globais de GDA, "
+"<code>execute_select_command</code> e <code>execute_non_select_command</"
+"code>. Son moi sinxelas de usar, e só requiren dous argumentos: o obxecto "
+"<code>Connection</code> e a orde SQL a analizar."
+
+#: C/record-collection.js.page:203(section/p)
+msgid "At this point we have the database set up, and are ready to use it."
+msgstr "Neste punto temos a base de datos configurada e lista para usala."
+
+#: C/record-collection.js.page:207(section/title)
+msgid "Selecting"
+msgstr "Seleccionar"
 
-#: C/image-viewer.py.page:195(p)
+#: C/record-collection.js.page:208(section/p)
 msgid ""
-"The line beginning with <code>dialog</code> creates an <gui>Open</gui> "
-"dialog, which the user can use to choose files. We set three properties: the "
-"title of the dialog; the action (type) of the dialog (it's an \"open\" "
-"dialog, but we could have used <code>SAVE</code> if the intention was to "
-"save a file; and <code>transient_for</code>, which sets the parent window of "
-"the dialog."
+"After connecting to the database, our demo's constructor calls the "
+"<code>selectData</code> method. It is responsible for getting all the "
+"records in the table and showing them on the <code>TextView</code> widget. "
+"Let's take a look at it:"
 msgstr ""
+"Despois de conectarse á base de datos, o construtor da nosa demostración "
+"chama ao método <code>selectData</code>. É responsábel de obter tódolos "
+"rexistros na táboa e para mostrarllas no widget <code>TextView</code>. "
+"Votémoslle unha ollada:"
 
-#: C/image-viewer.py.page:198(p) C/image-viewer.js.page:284(p)
+#: C/record-collection.js.page:211(section/code)
+#, no-wrap
 msgid ""
-"The next two lines add <gui>Cancel</gui> and <gui>Open</gui> buttons to the "
-"dialog. The second argument of the <code>add_button</code> method is the "
-"(integer) value that is returned when the button is pressed: 0 for "
-"<gui>Cancel</gui> and 1 for <gui>Open</gui>."
+"\n"
+"  selectData: function () {\n"
+"    var dm = Gda.execute_select_command (this.connection, \"select * from demo order by 1, 2\");\n"
+"    var iter = dm.create_iter ();\n"
+"\n"
+"    var text = \"\";\n"
+"\n"
+"    while (iter.move_next ()) {\n"
+"      var id_field = Gda.value_stringify (iter.get_value_at (0));\n"
+"      var name_field = Gda.value_stringify (iter.get_value_at (1));\n"
+"\n"
+"      text += id_field + \"\\t=&gt;\\t\" + name_field + '\\n';\n"
+"    }\n"
+"\n"
+"    this.text.buffer.text = text;\n"
+"    this.count_label.label = \"&lt;i&gt;\" + dm.get_n_rows () + \" record(s)&lt;/i&gt;\";\n"
+"  },"
 msgstr ""
 
-#: C/image-viewer.py.page:199(p) C/image-viewer.js.page:285(p)
-#: C/image-viewer.cpp.page:180(p) C/image-viewer.c.page:198(p)
+#: C/record-collection.js.page:229(item/p)
 msgid ""
-"Notice that we are using <em>stock</em> button names from Gtk, instead of "
-"manually typing \"Cancel\" or \"Open\". The advantage of using stock names "
-"is that the button labels will already be translated into the user's "
-"language."
+"Line 2: The <code>SELECT</code> command. We are using the global GDA's "
+"function <code>execute_select_command</code> for that. It returns a "
+"<code>DataModel</code> object, which is later used to retrieve the rows."
 msgstr ""
+"Liña 2: A orde <code>SELECT</code>. Usamos a función global de GDA "
+"<code>execute_select_command</code> para iso. Devólve un obxecto "
+"<code>DataModel</code>, que máis tarde empregaremos para obter as filas."
 
-#: C/image-viewer.py.page:202(p) C/image-viewer.js.page:288(p)
+#: C/record-collection.js.page:230(item/p)
 msgid ""
-"<code>set_default_response</code> determines the button that will be "
-"activated if the user double-clicks a file or presses <key>Enter</key>. In "
-"our case, we are using the <gui>Open</gui> button as default (which has the "
-"value 1)."
+"Line 3: Create an <code>Iter</code> object, which is used to iterate over "
+"the <code>DataModel</code>'s records."
 msgstr ""
+"Liña 3: Crea un obxecto <code>Iter</code>, que se usa para iterar sobre os "
+"rexistros de <code>DataModel</code>."
 
-#: C/image-viewer.py.page:205(p) C/image-viewer.js.page:291(p)
+#: C/record-collection.js.page:231(item/p)
 msgid ""
-"The next three lines restrict the <gui>Open</gui> dialog to only display "
-"files which can be opened by <code>Gtk.Image</code>. A filter object is "
-"created first; we then add all kinds of files supported by <code>Gdk.Pixbuf</"
-"code> (which includes most image formats like PNG and JPEG) to the filter. "
-"Finally, we set this filter to be the <gui>Open</gui> dialog's filter."
+"Line 7: Loop through all the records, fetching them with the help of the "
+"<code>Iter</code> object. At this point, the <code>iter</code> variable "
+"contains the actual, retrieved data. Its <code>move_next</code> method "
+"returns <code>false</code> when it reaches the last record."
 msgstr ""
+"Liña 7: Iterar por tódolos rexistros e obtelos coa axuda do obxecto "
+"<code>Iter</code>. Neste punto a variábel <code>iter</code> contén os datos "
+"actualizados obtidos. O seu método <code>move_next</code> devolve "
+"<code>false</code> cando se chegue ao último rexistro."
+
+#: C/record-collection.js.page:233(item/p)
+msgid "Lines 8‒9: We do two things in each line:"
+msgstr "Liñas 8-9: fanse dúas cousas en cada liña:"
 
-#: C/image-viewer.py.page:208(p)
+#: C/record-collection.js.page:235(item/p)
 msgid ""
-"<code>dialog.run</code> displays the <gui>Open</gui> dialog. The dialog will "
-"wait for the user to choose an image; when they do, <code>dialog.run</code> "
-"will return the value <output>1</output> (it would return <output>0</output> "
-"if the user clicked <gui>Cancel</gui>). The <code>if</code> statement tests "
-"for this."
+"Use <code>Iter</code>'s method <code>get_value_at</code>, which requires "
+"only one argument: the column number to retrieve, starting at 0. As our "
+"<code>SELECT</code> command returns only two columns, we are retrieving "
+"columns 0 and 1."
 msgstr ""
+"Use o método <code>get_value_at</code> de <code>Iter</code>, que só precisa "
+"un argumento: o número de columna que recuperar, comezando por 0. Xa que a "
+"orde <code>SELECT</code> só devolve dúas columnas, se está recuperando as "
+"columnas 0 e 1."
 
-#: C/image-viewer.py.page:210(p) C/image-viewer.js.page:296(p)
+#: C/record-collection.js.page:236(item/p)
 msgid ""
-"Assuming that the user did click <gui>Open</gui>, the next line sets the "
-"<code>file</code> property of the <code>Gtk.Image</code> to the filename of "
-"the image selected by the user. The <code>Gtk.Image</code> will then load "
-"and display the chosen image."
+"The method <code>get_value_at</code> returns the field in GLib's "
+"<code>GValue</code> format. A simple way to convert this format to a string "
+"is by using GDA's global function <code>value_stringify</code>. That's what "
+"we are doing here, and we store the results in the variables <code>id_field</"
+"code> and <code>name_field</code>."
 msgstr ""
+"O método <code>get_value_at</code> devolve o campo no formato <code>GValue</"
+"code> de GLib. Unha forma sinxela de converter este formato a unha cadea é "
+"usando a función global de GDA <code>value_stringify</code>. Que é o facemos "
+"aquí, e almacenamos os resultados nas variábeis <code>id_field</code> e "
+"<code>name_field</code>."
 
-#: C/image-viewer.py.page:221(p)
+#: C/record-collection.js.page:239(item/p)
 msgid ""
-"All of the code you need should now be in place, so try running the code. "
-"That should be it; a fully-functioning image viewer (and a whistlestop tour "
-"of Python and Gtk) in not much time at all!"
+"Line 11: Concatenate the two fields to make one text line, separated by "
+"<code>\"=&gt;\"</code>, and store it in the <code>text</code> variable."
 msgstr ""
+"Liña 11: Concaténanse os dous campos para facer unha única liña de texto, "
+"separada por <code>\"=&gt;\"</code>, e almacenámolas na variábel <code>text</"
+"code>."
 
-#: C/image-viewer.py.page:226(p)
+#: C/record-collection.js.page:240(item/p)
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"image-viewer/image-viewer.py\">reference code</link>."
+"Line 14: After the loop is finished, we have all the records formatted in "
+"the <code>text</code> variable. In this line we just set the contents of the "
+"<code>TextView</code> with that variable."
 msgstr ""
+"Liña 14: Logo de que o bucle remate, temos tódolos rexistros formatados na "
+"variábel <code>text</code>. Nesta liña estabelecemos os contidos de "
+"<code>TextView</code> con dita variábel."
 
-#: C/image-viewer.js.page:7(title)
-#, fuzzy
-#| msgid "Classes in JavaScript"
-msgid "Image Viewer (JavaScript)"
-msgstr "Clases en JavaScript"
-
-#: C/image-viewer.js.page:10(desc)
+#: C/record-collection.js.page:241(item/p)
 msgid ""
-"A little bit more than a simple \"Hello world\" application - write an image "
-"viewer in GTK. Includes an introduction to the JavaScript language."
+"Line 15: Display the number of records in the table, making use of the "
+"<code>DataModel</code>'s <code>get_n_rows</code> method."
 msgstr ""
-"Un aplicativo máis completo que un simple «Ola Mundo» - escriba un visor de "
-"imaxes en GTK. Isto inclúe unha introdución ao linguaxe JavaScript."
-
-#: C/image-viewer.js.page:29(p)
-msgid "Write a basic GTK user interface in JavaScript"
-msgstr "Escribir unha interface de usuario GTK básica en JavaScript"
-
-#: C/image-viewer.js.page:37(p)
-msgid "An installed copy of the <em>gjs</em> interpreter"
-msgstr "Unha copia instalada do intérprete <em>gjs</em>"
+"Liña 15: mostrar o número de rexistros na táboa, usando o método "
+"<code>get_n_rows</code> de <code>DataModel</code> <code>get_n_rows</code>."
 
-#: C/image-viewer.js.page:38(p)
-msgid "Basic knowledge of any object-orientated programming language"
-msgstr "Coñecemento básico dunha linguaxe de programación orientada a obxectos"
+#: C/record-collection.js.page:246(section/title)
+msgid "Inserting"
+msgstr "Insertando"
 
-#: C/image-viewer.js.page:52(p)
+#: C/record-collection.js.page:247(section/p)
 msgid ""
-"Choose <gui>Generic Javascript</gui> from the <gui>JS</gui> tab, click "
-"<gui>Forward</gui>, and fill out your details on the next few pages. Use "
-"<file>image-viewer</file> as project name and directory."
+"OK, we know how to connect to a database and how to select rows from a "
+"table. Now it's time to do an <code>INSERT</code> on the table. Do you "
+"remember above, in the method <code>setupWindow</code> we connected the "
+"<gui>Insert</gui> button's <code>clicked</code> signal to the method "
+"<code>_insertClicked</code>? Let's see the implementation of this method."
 msgstr ""
-"Seleccione <gui>JavaScript xenérico</gui> desde a lapela <gui>JS</gui>, "
-"prema <gui>Adiante</gui> e complete os seus detalles nas seguintes páxinas. "
-"Use <file>image-viewer</file> como nome do proxecto e cartafol."
+"OK, sabemos como conectarse a unha base de datos e como seleccionar filas "
+"dunha táboa. Agora é tempo de facer un <code>INSERT</code> na táboa. Lembra "
+"arriba no método <code>setupWindow</code> que conectamos o sinal "
+"<code>clicked</code> do botón <gui>Insert</gui> ao método "
+"<code>_insertClicked</code>? Vexamos a implementación deste método."
 
-#: C/image-viewer.js.page:55(p)
+#: C/record-collection.js.page:250(section/code)
+#, no-wrap
 msgid ""
-"Click <gui>Apply</gui> and the project will be created for you. Open "
-"<file>src/main.js</file> from the <gui>Project</gui> or <gui>File</gui> "
-"tabs. It contains very basic example code."
+"\n"
+"  _insertClicked: function () {\n"
+"    if (!this._validateFields ())\n"
+"      return;\n"
+"\n"
+"    // Gda.execute_non_select_command (this.connection,\n"
+"    //   \"insert into demo values ('\" + this.id_entry.text + \"', '\" + this.name_entry.text + \"')\");\n"
+"\n"
+"    var b = new Gda.SqlBuilder ({stmt_type:Gda.SqlStatementType.INSERT});\n"
+"    b.set_table (\"demo\");\n"
+"    b.add_field_value_as_gvalue (\"id\", this.id_entry.text);\n"
+"    b.add_field_value_as_gvalue (\"name\", this.name_entry.text);\n"
+"    var stmt = b.get_statement ();\n"
+"    this.connection.statement_execute_non_select (stmt, null);\n"
+"\n"
+"    this._clearFields ();\n"
+"    this.selectData ();\n"
+"  },"
 msgstr ""
-"Prema <gui>Aplicar</gui> e o proxecto será creado. Abra <file>src/main.js</"
-"file> desde a lapela <gui>Proxecto</gui> ou <gui>Ficheiros</gui>. Contén "
-"código de exemplo moi básico."
-
-#: C/image-viewer.js.page:62(title)
-msgid "JavaScript basics: Hello World"
-msgstr "Primeiros pasos en JavaScript: Ola mundo"
 
-#: C/image-viewer.js.page:63(p)
+#: C/record-collection.js.page:268(section/p)
 msgid ""
-"Before we start writing the image viewer, let's find out more about the way "
-"JavaScript is used in GNOME. Of course, your very first contact with any "
-"programming language should be the Hello World program which can already be "
-"found in <file>main.js</file>:"
+"We have learned how to use GDA's convenience functions "
+"<code>execute_select_command</code> and <code>execute_non_select_command</"
+"code> to quickly execute SQL commands on the database. GDA allows one to "
+"build a SQL statement indirectly, by using its <code>SqlBuilder</code> "
+"object. What are the benefits of this? GDA will generate the SQL statement "
+"dynamically, and it will be valid for the connection provider used (it will "
+"use the same SQL dialect the provider uses). Let's study the code:"
 msgstr ""
-"Antes de comezar a escribir o visor de imaxes faremos unha introdución á "
-"forma na que JavaScript se usa en GNOME. Por suposto, o primeiro contacto "
-"con calquera linguaxe de programación debería ser un programa Ola Mundo que "
-"pode atopar <file>main.js</file>:"
-
-#: C/image-viewer.js.page:64(code)
-#, no-wrap
-msgid "print (\"Hello world!\");"
-msgstr "print (\"Ola mundo!\");"
+"Aprendemos como usar as funcións de GDA de forma conveniente "
+"<code>execute_select_command</code> e <code>execute_non_select_command</"
+"code> para executar ordes SQL de forma rápida nunha base de datos. GDA "
+"permítelle construír unha declaración SQL de forma indirecta usando o seu "
+"obxecto <code>SqlBuilder</code>. Cales son os beneficios de isto? GDA xerará "
+"a declaración SQL de forma dinámica e será válida para o fornecedor de "
+"conexión usado (usarase o mesmo dialecto SQL que o fornecedor usa). "
+"Estudiemos o código:"
 
-#: C/image-viewer.js.page:65(p)
+#: C/record-collection.js.page:272(item/p)
 msgid ""
-"This should look quite natural if you're familiar with almost any other "
-"programming language. The function <code>print</code> is called with the "
-"argument <code>\"Hello world!\"</code>, which will be printed on the screen. "
-"Note that each line of code ends with a semicolon."
+"Lines 2‒3: Check if the user filled all the fields. The code for the private "
+"method <code>_validateFields</code> is really simple and you can read it in "
+"the full demo source code."
 msgstr ""
-"Isto debería ser natural se está familiarizado con calquera outra linguaxe "
-"de programación. A función <code>printi</code> chámase co argumento "
-"<code>«Ola Mundo»</code>, que se imprimirá en pantalla. Teña en conta que "
-"cada liña de código remata con un punto e coma."
-
-#: C/image-viewer.js.page:69(title)
-msgid "Classes in JavaScript"
-msgstr "Clases en JavaScript"
-
-#: C/image-viewer.js.page:70(p)
-msgid "This is the standard way to define a class in JavaScript:"
-msgstr "Esta é a forma estándar de definir unha clase en JavaScript:"
+"Liña 2-3: compróbase que o usuario completa tódolos campos. O código do "
+"método privato <code>_validateFields</code> é realmente sinxelo e pode lelo "
+"no código fonte completo da demostración."
 
-#: C/image-viewer.js.page:93(p)
+#: C/record-collection.js.page:273(item/p)
 msgid ""
-"This defines a class called <code>MyClass</code>. Let's go through each part "
-"of the class definition:"
+"Line 5: The faster way of doing the <code>INSERT</code>. It's commented out "
+"as we want to show how to use the <code>SqlBuilder</code> object to build a "
+"SQL statement portable across databases."
 msgstr ""
-"Isto define unha clase chamada <code>MyClass</code>. Vexa cada unha das "
-"partes da definición da clase:"
+"Liña 5: A forma máis rápida é <code>INSERT</code>. Está descomentado xa que "
+"queremos ver como usar o obxecto <code>SqlBuilder</code> para construír unha "
+"declaración SQL portábel a través das bases de datos."
 
-#: C/image-viewer.js.page:96(p)
+#: C/record-collection.js.page:274(item/p)
 msgid ""
-"<code>function MyClass</code> is the constructor of the class — its name "
-"must match the class's name. You can access any member of the class by using "
-"the <code>this</code> object; here, the constructor calls the class's "
-"<code>_init</code> method."
+"Line 7: Create the <code>SqlBuilder</code> object. We must pass the type of "
+"statement we are going to build. It can be <code>SELECT</code>, "
+"<code>UPDATE</code>, <code>INSERT</code> or <code>DELETE</code>."
 msgstr ""
+"Liña 7: crea o obxecto <code>SqlBilder</code>. Debemos pasar o tipo de "
+"declaración que queremos construír. Pode ser <code>SELECT</code>, "
+"<code>UPDATE</code>, <code>INSERT</code> ou <code>DELETE</code>."
 
-#: C/image-viewer.js.page:99(p)
+#: C/record-collection.js.page:275(item/p)
 msgid ""
-"The <code>MyClass.prototype</code> block is where you define the "
-"<em>structure</em> of the class. Each class is made up of methods "
-"(functions) and fields (variables); there are three methods and two fields "
-"in this example."
+"Line 8: Set the name of the table on which the built statement will operate "
+"(it will generate <code>INSERT INTO demo</code>)"
 msgstr ""
+"Liña 8: estabelecer o nome da base de datos na que operará a sentencia "
+"construída (xerará <code>INSERT INTO demo</code>)"
 
-#: C/image-viewer.js.page:102(p)
+#: C/record-collection.js.page:276(item/p)
 msgid ""
-"The first method defined here is called <code>_init</code>, and we specify "
-"that it is a function with no arguments:"
+"Lines 9‒10: Set the fields and its values that will be part of the "
+"statement. The first argument is the field name (as in the table). The "
+"second one is the value for that field."
 msgstr ""
+"Liñas 9-10: estabelecer os campos que formarán parte da sentenza e os seus "
+"valores. O primeiro campo é o nome do campo (como aparece na táboa). O "
+"segundo é o valor deste campo."
 
-#: C/image-viewer.js.page:103(code)
-#, no-wrap
-msgid "_init: function ()"
-msgstr "_init: function ()"
-
-#: C/image-viewer.js.page:104(p)
+#: C/record-collection.js.page:277(item/p)
 msgid ""
-"We write the function inside some curly braces. Two fields are defined here, "
-"<code>propertyA</code> and <code>propertyB</code>. The first is set to a "
-"string and the second is set to an integer (10). The function doesn't return "
-"any value."
+"Line 11: Get the dynamically generated <code>Statement</code> object, which "
+"represents a SQL statement."
 msgstr ""
+"Liña 11: obter o obxecto <code>Statement</code> xerado dinamicamente, que "
+"representa unha sentenza SQL."
+
+#: C/record-collection.js.page:278(item/p)
+msgid "Line 12: Finally, execute the SQL statement (<code>INSERT</code>)."
+msgstr "Liña 12: finalmente, executar a sentenza SQL (<code>INSERT</code>)."
 
-#: C/image-viewer.js.page:107(p)
+#: C/record-collection.js.page:279(item/p)
 msgid ""
-"The next method is called <code>aMethod</code> and has two arguments, which "
-"it prints out when you call it. The final method is <code>dumpProperties</"
-"code>, and prints the fields <code>propertyA</code> and <code>propertyB</"
-"code>."
+"Line 14: Clear the id and name fields on the screen. The code for the "
+"private method <code>_clearFields</code> is really simple and you can read "
+"it in the full demo source code."
 msgstr ""
+"Liña 14: limpar os campos id e nome na pantalla. O código do método privado "
+"<code>_clearFields</code> é moi sinxelo e pode lelo no código fonte completo "
+"da demostración."
 
-#: C/image-viewer.js.page:110(p)
+#: C/record-collection.js.page:280(item/p)
 msgid ""
-"Note how the class definition (prototype) is arranged; each function "
-"definition is separated by a comma."
+"Line 15: Refresh the view on the screen by doing another <code>SELECT</code>."
 msgstr ""
-"Teña en conta como se ordena a definición da clase (prototipo); cada "
-"definición de función sepárase con unha coma."
+"Liña 15: actualizar a vista na pantalla facendo outro <code>SELECT</code>."
 
-#: C/image-viewer.js.page:114(p)
-msgid "Now that MyClass has been defined, we can play with it:"
+#: C/record-collection.js.page:282(note/p)
+msgid ""
+"You can also make use of parameters while building the statement. By using "
+"the <code>SqlBuilder</code> objects and parameters you are less subject to "
+"attacks like SQL injection. Check the <link href=\"http://library.gnome.org/";
+"devel/libgda/stable/\">GDA documentation</link> for more information about "
+"parameters."
 msgstr ""
+"Tamén pode usar parámetros mentres constrúe a sentenza. Usando obxectos e "
+"parámetros <code>SqlBuilder</code> será menos susceptíbel a ataques de "
+"inxección de SQL. Para obter información adicional sobre os parámetros, "
+"consulte a <link href=\"http://library.gnome.org/devel/libgda/stable/";
+"\">documentación de GDA</link>."
 
-#: C/image-viewer.js.page:120(p)
+#: C/record-collection.js.page:287(section/p)
 msgid ""
-"This code creates a new instance of the class called <code>o</code>, runs "
-"<code>aMethod</code>, changes <code>propertyA</code> to a different string, "
-"and then calls <code>dumpProperties</code> (which outputs the fields)."
+"All of the code you need should now be in place, so try running the code. "
+"You now have a database for your record collection!"
 msgstr ""
+"Todo o código que precisa agora está no seu lugar, polo que tente executar o "
+"código. Agora ten unha base de datos para a súa colección de rexistros!"
 
-#: C/image-viewer.js.page:121(p)
+#: C/record-collection.js.page:292(section/p)
 msgid ""
-"Save the code in the <file>main.js</file> and then run it by using "
-"<guiseq><gui>Run</gui><gui>Execute</gui></guiseq> from the menu or using the "
-"toolbar."
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"record-collection/record-collection.js\">reference code</link>."
 msgstr ""
+"Se ten problemas co titorial, compare o seu código con este <link href="
+"\"record-collection/record-collection.js\">código de referencia</link>."
 
-#: C/image-viewer.js.page:127(p)
-msgid "Let's see what a very basic Gtk application looks like in JavaScript:"
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/scale.c.page:24(media)
+#, fuzzy
+#| msgid "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
+msgctxt "_"
+msgid "external ref='media/scale2.png' md5='ae2ba0a6675f3d9cdcd961cdf32f1a5c'"
+msgstr "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
+
+#: C/scale.c.page:7(info/title)
+#, fuzzy
+#| msgid "Scale (Vala)"
+msgctxt "text"
+msgid "Scale (C)"
+msgstr "Scale (Vala)"
+
+#: C/scale.c.page:19(info/desc) C/scale.py.page:18(info/desc)
+#: C/scale.vala.page:19(info/desc)
+msgid "A slider widget for selecting a value from a range"
+msgstr "Un widget de desprazamento para seleccionar un valor dun rango"
+
+#: C/scale.c.page:22(page/title) C/scale.js.page:20(page/title)
+#: C/scale.py.page:21(page/title) C/scale.vala.page:22(page/title)
+msgid "Scale"
+msgstr "Escala"
+
+#: C/scale.c.page:25(page/p) C/scale.py.page:23(page/p)
+#: C/scale.vala.page:24(page/p)
+msgid "Slide the scales!"
+msgstr "Desprazar as escalas!"
+
+#: C/scale.c.page:27(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/* This is the callback function. \n"
+" * It is a handler function which reacts to the signal. \n"
+" * In this case, it will notify the user the value of their scale as a label.\n"
+" */\n"
+"static void\n"
+"hscale_moved (GtkRange *range,\n"
+"              gpointer  user_data)\n"
+"{\n"
+"   GtkWidget *label = user_data;\n"
+"\n"
+"   /* Get the value of the range, and convert it into a string which will be\n"
+"    * used as a new label for the horizontal scale.\n"
+"    * %.0f - stands for a double that will have 0 decimal places.\n"
+"    */\n"
+"   gdouble pos = gtk_range_get_value (range);\n"
+"   /* Note: Using g_strdup_printf returns a string that must be freed. \n"
+"    * (In which is done below)\n"
+"    */\n"
+"   gchar *str = g_strdup_printf (\"Horizontal scale is %.0f\", pos);\n"
+"   gtk_label_set_text (GTK_LABEL (label), str);\n"
+"\n"
+"   g_free(str);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* This is the second callback function. It is a handler function which \n"
+" * reacts to the signal. It does the same thing as the function above, except with\n"
+" * the vertical scale.\n"
+" */\n"
+"vscale_moved (GtkRange *range,\n"
+"              gpointer  user_data)\n"
+"{\n"
+"   GtkWidget *label = user_data;\n"
+"   \n"
+"   gdouble pos = gtk_range_get_value (range);\n"
+"   /* %.1f - stands for a double that will have 1 decimal place */\n"
+"   gchar *str = g_strdup_printf (\"Vertical scale is %.1f\", pos);\n"
+"   gtk_label_set_text (GTK_LABEL (label), str);\n"
+"\n"
+"   \n"
+"   g_free (str);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  /* Declare variables */\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *h_scale;\n"
+"  GtkWidget *v_scale;\n"
+"  GtkWidget *hlabel;\n"
+"  GtkWidget *vlabel;\n"
+"  GtkWidget *grid;\n"
+"\n"
+"  /* The Adjustment object represents a value \n"
+"   * which has an associated lower and upper bound.\n"
+"   */\n"
+"  GtkAdjustment *hadjustment;\n"
+"  GtkAdjustment *vadjustment;\n"
+"\n"
+"  /* Create a window with a title and a default size */\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Scale Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);\n"
+"  gtk_container_set_border_width (GTK_CONTAINER (window), 5);\n"
+"\n"
+"  /* Two labels to be shown in the window */\n"
+"  hlabel = gtk_label_new (\"Move the scale handle...\");\n"
+"  vlabel = gtk_label_new (\"Move the scale handle...\");\n"
+"\n"
+"   \n"
+"  /* gtk_adjustment_new takes six parameters, three of which \n"
+"   * may be difficult to understand:\n"
+"   * step increment- move the handle with the arrow keys on your keyboard to see.\n"
+"   * page increment - move the handle by clicking away from it \n"
+"   * on the scale to see.\n"
+"   * page size - not used here.\n"
+"   */\n"
+"  hadjustment = gtk_adjustment_new (0, 0, 100, 5, 10, 0);\n"
+"  vadjustment = gtk_adjustment_new (50, 0, 100, 5, 10, 0); \n"
+"\n"
+"  /* Create the Horizontal scale, making sure the \n"
+"   * digits used have no decimals.\n"
+"   */\n"
+"  h_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, hadjustment);\n"
+"  gtk_scale_set_digits (GTK_SCALE (h_scale), 0); \n"
+"\n"
+"  /* Allow it to expand horizontally (if there's space), and \n"
+"   * set the vertical alignment\n"
+"   */\n"
+"  gtk_widget_set_hexpand (h_scale, TRUE);\n"
+"  gtk_widget_set_valign (h_scale, GTK_ALIGN_START);\n"
+"  \n"
+"  /* Connecting the \"value-changed\" signal for the horizontal scale \n"
+"   * to the appropriate callback function. \n"
+"   * take note that GtkRange is part of GtkScale's Object Hierarchy.\n"
+"   */\n"
+"  g_signal_connect (h_scale, \n"
+"                    \"value-changed\", \n"
+"                    G_CALLBACK (hscale_moved), \n"
+"                    hlabel);\n"
+"\n"
+"\n"
+"\n"
+"  /* Create the Vertical scale. This time, we will see what happens \n"
+"   * when the digits arent initially set.\n"
+"   */\n"
+"  v_scale = gtk_scale_new (GTK_ORIENTATION_VERTICAL, vadjustment);\n"
+"  gtk_widget_set_vexpand (v_scale, TRUE);\n"
+"\n"
+"  /* Connecting the \"value-changed\" signal for the vertical scale to \n"
+"   * the appropriate callback function.\n"
+"   */\n"
+"  g_signal_connect (v_scale, \n"
+"                    \"value-changed\", \n"
+"                    G_CALLBACK (vscale_moved), \n"
+"                    vlabel);\n"
+"\n"
+"  /* Create a grid and arrange everything accordingly */\n"
+"  grid = gtk_grid_new ();\n"
+"  gtk_grid_set_column_spacing (GTK_GRID (grid), 10);\n"
+"  gtk_grid_set_column_homogeneous (GTK_GRID (grid), TRUE);\n"
+"  gtk_grid_attach (GTK_GRID (grid), h_scale, 0, 0, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), v_scale, 1, 0, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), hlabel, 0, 1, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), vlabel, 1, 1, 1, 1);\n"
+"  \n"
+"\n"
+"  gtk_container_add (GTK_CONTAINER (window), grid);\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
 msgstr ""
 
-#: C/image-viewer.js.page:143(p)
+#: C/scale.c.page:35(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"<code>Gtk.init</code> initializes the Gtk library; this statement is "
-"mandatory for all Gtk programs."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkScale.html";
+"\">GtkScale</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image-viewer.js.page:146(p)
+#: C/scale.c.page:36(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"The next line creates the main window by creating a new <code>Gtk.Window</"
-"code> object. You can pass several properties to the window's constructor by "
-"using the syntax <code>{property: value, property: value, ...}</code>. In "
-"this case we are setting the title of the window."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkRange.html";
+"\">GtkRange</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image-viewer.js.page:147(p)
+#: C/scale.c.page:37(item/p) C/spinbutton.c.page:38(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"The next line explicitly shows the window. In Gtk, every widget is hidden by "
-"default."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkAdjustment.html";
+"\">GtkAdjustment</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/image-viewer.js.page:148(p)
+#: C/scale.c.page:38(item/p)
 msgid ""
-"Finally, <code>Gtk.main</code> runs the main loop — in other words, it "
-"executes the program. The main loop listens for events (signals) from the "
-"user interface and then calls a signal handler which will do something "
-"useful. We'll learn more about signals shortly."
+"<link href=\"http://developer.gnome.org/glib/stable/glib-String-Utility-";
+"Functions.html#g-strdup-printf\">String Utility Functions</link>"
 msgstr ""
 
-#: C/image-viewer.js.page:151(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/scale.js.page:21(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/scalepenguins.png'; md5=2dbe6a833fec86fde71a5ddb421e2cd5"
+msgctxt "_"
 msgid ""
-"Save the code in <file>main.js</file> and run it. You will notice that the "
-"application does not quit when you close the window. This is because we "
-"haven't set up a signal handler to deal with the window's <code>destroy</"
-"code> (close) signal yet. We'll do this shortly, but for now you can just "
-"hit <keyseq><key>Ctrl</key><key>C</key></keyseq> in the terminal window to "
-"quit the program."
+"external ref='media/scalepenguins.png' md5='2dbe6a833fec86fde71a5ddb421e2cd5'"
 msgstr ""
+"@@image: 'media/scalepenguins.png'; md5=2dbe6a833fec86fde71a5ddb421e2cd5"
 
-#: C/image-viewer.js.page:156(title)
-msgid "Adding classes"
-msgstr "Engadir clases"
+#: C/scale.js.page:7(info/title)
+#, fuzzy
+#| msgid "Scale (JavaScript)"
+msgctxt "text"
+msgid "Scale (JavaScript)"
+msgstr "Scale (JavaScript)"
+
+#: C/scale.js.page:17(info/desc)
+msgid "A slider which corresponds to a numerical value"
+msgstr "Un desprazador que corresponde co valor numérico"
 
-#: C/image-viewer.js.page:157(p)
+#: C/scale.js.page:22(page/p)
 msgid ""
-"The proper way of doing Gtk programming is by using classes. Let's rewrite "
-"the simple code you just wrote using classes:"
+"A Scale is a horizontal or vertical slider, that represents a value inside a "
+"numerical range. When you create a new Scale, you set what its default "
+"position is, what the numbers at the top and bottom of the range are, and "
+"things like how much it moves up or down when you click on the Scale to "
+"either side of the knob. To keep from having to type all that in every time "
+"you create a new Scale, you can create an object called an Adjustment which "
+"keeps track of all that, then tell each new Scale to use that Adjustment."
 msgstr ""
 
-#. FIXME: Throws an error, "JS ERROR: !!!   Unhandled type int32 releasing GArgument" on Ubuntu 10.10
-#: C/image-viewer.js.page:176(p)
+#: C/scale.js.page:23(page/p)
 msgid ""
-"Notice that the program is the same; we just moved the window creation code "
-"to our own <code>ImageViewer</code> class. The class's constructor calls the "
-"<code>_init</code> method, which creates and shows the window. We then "
-"create an instance of the class before running the main loop (<code>Gtk."
-"main</code>)."
+"This scale is a simple widget that lets you adjust the size of an iceberg "
+"that penguins live on. The number of penguins on the iceberg is the product "
+"of the values of the two sliders. Try playing with them and seeing what "
+"happens."
 msgstr ""
 
-#: C/image-viewer.js.page:177(p)
+#: C/scale.js.page:40(section/code)
+#, no-wrap
 msgid ""
-"This code is modular and can be split into multiple files easily. This makes "
-"it cleaner and easier to read."
+"\n"
+"const ScaleExample = new Lang.Class({\n"
+"    Name: 'Scale Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsscale'\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
 msgstr ""
 
-#: C/image-viewer.js.page:190(p)
-msgid "The syntax for connecting any signal to a function is:"
-msgstr "A sintaxe para conectar calquera sinal a unha función é:"
-
-#: C/image-viewer.js.page:193(p)
+#: C/scale.js.page:65(section/p)
 msgid ""
-"You can find signal definitions for any object in the <link href=\"http://";
-"library.gnome.org/devel/gtk/stable/ch01.html\">GTK class reference</link>."
+"All the code for this sample goes in the ScaleExample class. The above code "
+"creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.";
+"Application.html\">Gtk.Application</link> for our widgets and window to go "
+"in."
 msgstr ""
-"Pode atopar as definicións de sinais para calquera proxecto na <link href="
-"\"http://library.gnome.org/devel/gtk/stable/ch01.html\";>clase GTK de "
-"referencia</link>."
 
-#: C/image-viewer.js.page:196(p)
+#: C/scale.js.page:66(section/code)
+#, no-wrap
 msgid ""
-"You can simplify the code by making use of an inline function definition:"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 20,\n"
+"            title: \"Birds on a Floe\"});\n"
 msgstr ""
-"Vostede pode simplificar o código facendo uso da definición en liña de "
-"funcións:"
 
-#: C/image-viewer.js.page:204(title)
-msgid "Closing the window"
-msgstr "Pechar a xanela"
+#: C/scale.js.page:81(section/title)
+msgid "Creating the scales"
+msgstr "Creando as escalas"
 
-#: C/image-viewer.js.page:205(p)
+#: C/scale.js.page:82(section/code)
+#, no-wrap
 msgid ""
-"When you close a Gtk window it's not really closed, it's hidden. This allows "
-"you to keep the window around (which is useful if you want to ask the user "
-"if they really want to close the window, for example)."
+"\n"
+"        // Create the horizontal scale\n"
+"        this._hScale = Gtk.Scale.new_with_range (Gtk.Orientation.HORIZONTAL, 0.0, 100.0, 5.0);\n"
+"        this._hScale.set_valign (Gtk.Align.START);\n"
+"        this._hScale.set_value (50);\n"
+"        this._hScale.set_digits (0);\n"
+"        // this._hScale.set_draw_value (false);\n"
 msgstr ""
-"Ao pechar unha xanela Gtk realmente non se pecha, agóchase. Isto permítelle "
-"manter unha xanela (útil se quere preguntarlle ao usuario se realmente "
-"desexa pechar a xanela, por exemplo)."
 
-#: C/image-viewer.js.page:206(p)
+#: C/scale.js.page:91(section/p)
 msgid ""
-"In our case, we really do just want to close the window. The simplest way of "
-"doing this is by connecting the <code>hide</code> signal of the GtkWindow "
-"object to a function that closes the application. Go back to the <file>image-"
-"viewer.js</file> file and add the following code to the <code>_init</code> "
-"method, on the line above <code>this.window.show</code>:"
+"The new_with_range method is one way to create a new Scale widget. The "
+"parameters it takes are a <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.Orientation.html\">Gtk.Orientation</link>, the minimum "
+"value, the maximum value, and the increment for a single step. After that we "
+"use the Scale's methods to set its starting value, and how many decimal "
+"places it runs to. We also set its vertical alignment in this case, to "
+"control where it appears in the window."
+msgstr ""
+
+#: C/scale.js.page:92(section/p)
+msgid ""
+"We can use the set_draw_value method to tell it whether or not to show the "
+"number next to the sliding scale. It's commented out in this example."
 msgstr ""
-"No noso caso, queremos pechar a xanela. A forma máis doada de facer isto é "
-"conectar o sinal <code>hide</code> do obxecto GtkWindow a unha función que "
-"peche o aplicativo. Vaia de novo ao ficheiro <file>image-viewer.js</file> e "
-"engada o seguinte código ao método <code>_init</code>, na liña superior a "
-"<code>this.window.show</code>."
 
-#: C/image-viewer.js.page:207(code)
+#: C/scale.js.page:94(section/code)
 #, no-wrap
-msgid "this.window.connect (\"hide\", Gtk.main_quit);"
-msgstr "this.window.connect (\"hide\", Gtk.main_quit);"
+msgid ""
+"\n"
+"        // Create a master adjustment to use for the vertical (or any other) scale\n"
+"        this._adjustment = new Gtk.Adjustment ({\n"
+"            value: 95,\n"
+"            lower: 0,\n"
+"            upper: 100,\n"
+"            step_increment: 5,\n"
+"            page_increment: 10 });\n"
+msgstr ""
 
-#: C/image-viewer.js.page:208(p)
+#: C/scale.js.page:104(section/p)
 msgid ""
-"This connects the <code>hide</code> signal of the window to Gtk's "
-"<code>main_quit</code> function, which ends the execution of the Gtk main "
-"loop. Once the main loop finishes, the function <code>Gtk.main</code> "
-"returns. Our program would continue to run any code written after the "
-"<code>Gtk.main ();</code> line, but since we don't have any code after that "
-"point, the program just ends."
+"An Adjustment is an object we can use to simplify things when creating a new "
+"Scale. The Adjustment's \"value\" property is what the Scale's default value "
+"is, while \"upper\" and \"lower\" make the high and low ends of the "
+"numerical range. Meanwhile, the increment values show how much the slider "
+"moves when you do things like click on it."
 msgstr ""
 
-#: C/image-viewer.js.page:218(p)
+#: C/scale.js.page:106(section/code)
+#, no-wrap
 msgid ""
-"Let's add the box and widgets to the window. Insert the following code into "
-"the <code>_init</code> method, immediately above the <code>this.window.show</"
-"code> line:"
+"\n"
+"        // Create a vertical scale using the adjustment we just made\n"
+"        this._vScale = new Gtk.Scale ({\n"
+"            orientation: Gtk.Orientation.VERTICAL,\n"
+"            adjustment: this._adjustment,\n"
+"            digits: 0,\n"
+"            // draw_value: false,\n"
+"            margin_left: 10 });\n"
 msgstr ""
 
-#: C/image-viewer.js.page:222(p)
+#: C/scale.js.page:116(section/p)
 msgid ""
-"The first line creates a <code>Gtk.Box</code> called <code>main_box</code> "
-"and sets two of its properties: the <code>orientation</code> is set to "
-"vertical (so widgets are arranged in a column), and the <code>spacing</code> "
-"between the widgets is set to 0 pixels. The next line then adds the newly-"
-"created <code>Gtk.Box</code> to the window."
+"Here we create a new Scale object using _adjustment as its \"adjustment\" "
+"property. This is a great shortcut. We still have to tell it to round off "
+"the decimal place, though. Note that the draw_value property is commented "
+"out; this is how you tell it not to show the number next to the Scale when "
+"you're creating one this way."
 msgstr ""
 
-#: C/image-viewer.js.page:228(p)
+#: C/scale.js.page:118(section/code)
+#, no-wrap
 msgid ""
-"To add some widgets to the <code>Gtk.Box</code>, insert the following code "
-"directly below the <code>this.window.add (main_box)</code> line:"
+"\n"
+"        // Create the label that shows the product of the two values\n"
+"        this._product = (this._hScale.get_value() * this._vScale.get_value());\n"
+"        this._label = new Gtk.Label ({\n"
+"            label: (String(this._product) + \" penguins on the iceberg.\"),\n"
+"            height_request: 200,\n"
+"            width_request: 200,\n"
+"            wrap: true});\n"
+"\n"
+"        // Connect the two scales to functions which recalculate the label\n"
+"        this._hScale.connect (\"value-changed\", Lang.bind (this, this._recalc));\n"
+"        this._vScale.connect (\"value-changed\", Lang.bind (this, this._recalc));\n"
 msgstr ""
 
-#: C/image-viewer.js.page:232(p)
+#: C/scale.js.page:132(section/p)
 msgid ""
-"The first line creates a new <code>Gtk.Image</code> called <code>image</"
-"code>, which will be used to display an image file. Then, the image widget "
-"is added (<em>packed</em>) into the <code>main_box</code> container using "
-"<code>Gtk.Box</code>'s <link href=\"http://library.gnome.org/devel/gtk/";
-"stable/GtkBox.html#gtk-box-pack-start\"><code>pack_start</code></link> "
-"method."
+"We can use the get_value method to find out the numerical value a Scale is "
+"set at. We can then do whatever we want with it, including multiply the two "
+"Scales' values together and have a <link xref=\"label.js\">Label</link> show "
+"us the product. We set the label's text to wrap around, because we're having "
+"it display a silly message too."
 msgstr ""
 
-#: C/image-viewer.js.page:233(p)
+#: C/scale.js.page:133(section/p)
 msgid ""
-"<code>pack_start</code> takes 4 arguments: the widget that is to be added to "
-"the <code>Gtk.Box</code> (<code>child</code>); whether the <code>Gtk.Box</"
-"code> should grow larger when the new widget is added (<code>expand</code>); "
-"whether the new widget should take up all of the extra space created if the "
-"<code>Gtk.Box</code> gets bigger (<code>fill</code>); and how much space "
-"there should be, in pixels, between the widget and its neighbors inside the "
-"<code>Gtk.Box</code> (<code>padding</code>)."
+"After we create the Label, we connect the two Scales' \"value-changed\" "
+"signals to _recalc, a function that will recalculate the number of penguins "
+"on the iceberg and come up with a new message."
 msgstr ""
 
-#: C/image-viewer.js.page:240(p)
+#: C/scale.js.page:135(section/code)
+#, no-wrap
 msgid ""
-"These lines are similar to the first two, but this time they create a "
-"<code>Gtk.Button</code> and add it to <code>main_box</code>. Notice that we "
-"are setting the <code>expand</code> argument (the second one) to "
-"<code>false</code> here, whereas it was set to <code>true</code> for the "
-"<code>Gtk.Image</code>. This will cause the image to take up all available "
-"space and the button to take only the space it needs. When you maximize the "
-"window, the button size will remain the same, but the image size will "
-"increase, taking up all of the rest of the window."
+"\n"
+"        // Create a grid to arrange things in\n"
+"        this._UIGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            margin_top: 20,\n"
+"            margin_left: 20});\n"
+"\n"
+"        // Attach everything to the grid\n"
+"        this._UIGrid.attach (this._label, 0, 0, 1, 1);\n"
+"        this._UIGrid.attach (this._hScale, 0, 1, 1, 1);\n"
+"        this._UIGrid.attach (this._vScale, 1, 0, 1, 1);\n"
 msgstr ""
 
-#: C/image-viewer.js.page:241(p)
+#: C/scale.js.page:148(section/p)
 msgid ""
-"Finally, we must change the <code>this.window.show ();</code> line to read:"
+"Here we create a <link xref=\"grid.js\">Grid</link> to put everything in, "
+"then attach all our widgets to it. Note that here and on some of the widgets "
+"themselves we're using margins to keep things neatly spaced."
 msgstr ""
 
-#: C/image-viewer.js.page:242(code)
+#: C/scale.js.page:149(section/code)
 #, no-wrap
-msgid "this.window.show_all ();"
-msgstr "this.window.show_all ();"
-
-#: C/image-viewer.js.page:243(p)
 msgid ""
-"This will show the child of the Gtk window, and all of its children, and its "
-"children's children, and so on. (Remember that Gtk widgets are all hidden by "
-"default.)"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._UIGrid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
 msgstr ""
 
-#: C/image-viewer.js.page:248(p)
+#: C/scale.js.page:157(section/p)
 msgid ""
-"When the user clicks on the <gui>Open</gui> button, a dialog should appear "
-"so that the user can choose a picture. Once chosen, the picture should be "
-"loaded and shown in the image widget."
+"Finally, we add the Grid to the window, then tell the window to show itself "
+"and all the widgets inside of it."
+msgstr ""
+
+#: C/scale.js.page:161(section/title)
+msgid "Function which handles the scales' values changing"
 msgstr ""
 
-#: C/image-viewer.js.page:249(p)
+#: C/scale.js.page:163(section/code)
+#, no-wrap
 msgid ""
-"The first step is to connect the <code>clicked</code> signal of the button "
-"to a signal handler function, which we call <code>_openClicked</code>. Put "
-"this code immediately after the <code>var open_button = new Gtk.Button</"
-"code> line where the button was created:"
+"\n"
+"    _recalc: function() {\n"
+"\n"
+"        // Figure out what the product of the two scales' values is\n"
+"        var product = (this._hScale.get_value() * this._vScale.get_value());\n"
+"\n"
+"        // Create a blank comment line in case there isn't a silly comment to make\n"
+"        var comment = \"\";\n"
+"\n"
+"        // Make a silly comment based on the number of penguins\n"
+"        if (product &gt; 9000) {\n"
+"            comment = \"It's over 9000!\";\n"
+"        }\n"
+"        else if (product &lt; 1000 &amp;&amp; product &gt; 0) {\n"
+"            comment = \"They're getting lonely.\";\n"
+"        }\n"
+"        else if (product == 0) {\n"
+"            comment = \"They're all gone ...\";\n"
+"        }\n"
+"        else comment = \"\";\n"
+"\n"
+"        // Set ._label's new text\n"
+"        this._label.set_label (String (product) + \" penguins on the iceberg. \" + comment);\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
 msgstr ""
 
-#: C/image-viewer.js.page:252(p)
+#: C/scale.js.page:191(section/p)
 msgid ""
-"We are using the <em>Lang</em> JavaScript helper here. It allows us to "
-"connect a <em>class method</em> to the signal, rather than a plain function "
-"(without a class) which we had used before for the window's <code>hide</"
-"code> signal. Don't worry about this for now, it's just a technical detail. "
-"For it to work, you also need to put the following line at the top of the "
-"file:"
+"Remember, we can get a Scale's value using its get_value method. Here we "
+"simply recalculate what the product of the two values is after one of the "
+"Scales is moved, add in a silly message depending on how many penguins are "
+"left, and change the wording on _label to show the new number and message."
 msgstr ""
 
-#: C/image-viewer.js.page:253(code)
+#: C/scale.js.page:193(section/code)
 #, no-wrap
-msgid "const Lang = imports.lang;"
-msgstr "const Lang = imports.lang;"
-
-#: C/image-viewer.js.page:258(p)
 msgid ""
-"Now we can create the <code>_openClicked()</code> method. Insert the "
-"following into the <code>ImageViewer.prototype</code> code block, after the "
-"<code>_init</code> method (and not forgetting the comma):"
+"\n"
+"// Run the application\n"
+"let app = new ScaleExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/image-viewer.js.page:281(p)
+#: C/scale.js.page:198(section/p)
 msgid ""
-"The line beginning with <code>var chooser</code> creates an <gui>Open</gui> "
-"dialog, which the user can use to choose files. We set four properties: the "
-"title of the dialog; the action (type) of the dialog (it's an \"open\" "
-"dialog, but we could have used <code>SAVE</code> if the intention was to "
-"save a file; <code>transient_for</code>, which sets the parent window of the "
-"dialog; and <code>modal</code> which, if set to <code>true</code>, prevents "
-"the user from clicking on another area of the application until the dialog "
-"is closed."
+"Finally, we create a new instance of the finished ScaleExample class, and "
+"set the application running."
 msgstr ""
 
-#: C/image-viewer.js.page:294(p)
+#: C/scale.js.page:203(section/code)
+#, no-wrap
 msgid ""
-"<code>chooser.run</code> displays the <gui>Open</gui> dialog. The dialog "
-"will wait for the user to choose an image; when they do, <code>chooser.run</"
-"code> will return the value <output>1</output> (it would return <output>0</"
-"output> if the user clicked <gui>Cancel</gui>). The <code>if</code> "
-"statement tests for this."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ScaleExample = new Lang.Class({\n"
+"    Name: 'Scale Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsscale'\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 20,\n"
+"            title: \"Birds on a Floe\"});\n"
+"\n"
+"        // Create the horizontal scale\n"
+"        this._hScale = Gtk.Scale.new_with_range (Gtk.Orientation.HORIZONTAL, 0.0, 100.0, 5.0);\n"
+"        this._hScale.set_valign (Gtk.Align.START);\n"
+"        this._hScale.set_value (50);\n"
+"        this._hScale.set_digits (0);\n"
+"        // this._hScale.set_draw_value (false);\n"
+"\n"
+"        // Create a master adjustment to use for the vertical (or any other) scale\n"
+"        this._adjustment = new Gtk.Adjustment ({\n"
+"            value: 95,\n"
+"            lower: 0,\n"
+"            upper: 100,\n"
+"            step_increment: 5,\n"
+"            page_increment: 10 });\n"
+"\n"
+"        // Create a vertical scale using the adjustment we just made\n"
+"        this._vScale = new Gtk.Scale ({\n"
+"            orientation: Gtk.Orientation.VERTICAL,\n"
+"            adjustment: this._adjustment,\n"
+"            digits: 0,\n"
+"            // draw_value: false,\n"
+"            margin_left: 10 });\n"
+"\n"
+"        // Create the label that shows the product of the two values\n"
+"        this._product = (this._hScale.get_value() * this._vScale.get_value());\n"
+"        this._label = new Gtk.Label ({\n"
+"            label: (String(this._product) + \" penguins on the iceberg.\"),\n"
+"            height_request: 200,\n"
+"            width_request: 200,\n"
+"            wrap: true});\n"
+"\n"
+"        // Connect the two scales to functions which recalculate the label\n"
+"        this._hScale.connect (\"value-changed\", Lang.bind (this, this._recalc));\n"
+"        this._vScale.connect (\"value-changed\", Lang.bind (this, this._recalc));\n"
+"\n"
+"        // Create a grid to arrange things in\n"
+"        this._UIGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            margin_top: 20,\n"
+"            margin_left: 20});\n"
+"\n"
+"        // Attach everything to the grid\n"
+"        this._UIGrid.attach (this._label, 0, 0, 1, 1);\n"
+"        this._UIGrid.attach (this._hScale, 0, 1, 1, 1);\n"
+"        this._UIGrid.attach (this._vScale, 1, 0, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._UIGrid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _recalc: function() {\n"
+"\n"
+"        // Figure out what the product of the two scales' values is\n"
+"        var product = (this._hScale.get_value() * this._vScale.get_value());\n"
+"\n"
+"        // Create a blank comment line in case there isn't a silly comment to make\n"
+"        var comment = \"\";\n"
+"\n"
+"        // Make a silly comment based on the number of penguins\n"
+"        if (product &gt; 9000) {\n"
+"            comment = \"It's over 9000!\";\n"
+"        }\n"
+"        else if (product &lt; 1000 &amp;&amp; product &gt; 0) {\n"
+"            comment = \"They're getting lonely.\";\n"
+"        }\n"
+"        else if (product == 0) {\n"
+"            comment = \"They're all gone ...\";\n"
+"        }\n"
+"        else comment = \"\";\n"
+"\n"
+"        // Set ._label's new text\n"
+"        this._label.set_label (String (product) + \" penguins on the iceberg. \" + comment);\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ScaleExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/image-viewer.js.page:307(p)
+#: C/scale.js.page:209(item/p) C/spinbutton.js.page:200(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"All of the code you need should now be in place, so try running the code. "
-"That should be it; a fully-functioning image viewer (and a whistlestop tour "
-"of JavaScript and Gtk) in not much time at all!"
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Adjustment.";
+"html\">Gtk.Adjustment</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/scale.js.page:214(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Scale.html";
+"\">Gtk.Scale</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/scale.py.page:22(media) C/scale.vala.page:23(media)
+#, fuzzy
+#| msgid "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
+msgctxt "_"
+msgid "external ref='media/scale.png' md5='462c52a53b773cb9e8c62c646bf88452'"
+msgstr "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
+
+#: C/scale.py.page:7(info/title)
+#, fuzzy
+#| msgid "Scale (Python)"
+msgctxt "text"
+msgid "Scale (Python)"
+msgstr "Scale (Python)"
 
-#: C/image-viewer.js.page:312(p)
+#: C/scale.py.page:29(section/code)
+#, no-wrap
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"image-viewer/image-viewer.js\">reference code</link>."
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Scale Example\", application=app)\n"
+"        self.set_default_size(400, 300)\n"
+"        self.set_border_width(5)\n"
+"\n"
+"        # two adjustments (initial value, min value, max value,\n"
+"        # step increment - press cursor keys to see!,\n"
+"        # page increment - click around the handle to see!,\n"
+"        # page size - not used here)\n"
+"        ad1 = Gtk.Adjustment(0, 0, 100, 5, 10, 0)\n"
+"        ad2 = Gtk.Adjustment(50, 0, 100, 5, 10, 0)\n"
+"\n"
+"        # an horizontal scale\n"
+"        self.h_scale = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL, adjustment=ad1)\n"
+"        # of integers (no digits)\n"
+"        self.h_scale.set_digits(0)\n"
+"        # that can expand horizontally if there is space in the grid (see below)\n"
+"        self.h_scale.set_hexpand(True)\n"
+"        # that is aligned at the top of the space allowed in the grid (see below)\n"
+"        self.h_scale.set_valign(Gtk.Align.START)\n"
+"\n"
+"        # we connect the signal \"value-changed\" emitted by the scale with the callback\n"
+"        # function scale_moved\n"
+"        self.h_scale.connect(\"value-changed\", self.scale_moved)\n"
+"\n"
+"        # a vertical scale\n"
+"        self.v_scale = Gtk.Scale(orientation=Gtk.Orientation.VERTICAL, adjustment=ad2)\n"
+"        # that can expand vertically if there is space in the grid (see below)\n"
+"        self.v_scale.set_vexpand(True)\n"
+"\n"
+"        # we connect the signal \"value-changed\" emitted by the scale with the callback\n"
+"        # function scale_moved\n"
+"        self.v_scale.connect(\"value-changed\", self.scale_moved)\n"
+"\n"
+"        # a label\n"
+"        self.label = Gtk.Label()\n"
+"        self.label.set_text(\"Move the scale handles...\")\n"
+"\n"
+"        # a grid to attach the widgets\n"
+"        grid = Gtk.Grid()\n"
+"        grid.set_column_spacing(10)\n"
+"        grid.set_column_homogeneous(True)\n"
+"        grid.attach(self.h_scale, 0, 0, 1, 1)\n"
+"        grid.attach_next_to(self.v_scale, self.h_scale, Gtk.PositionType.RIGHT, 1, 1)\n"
+"        grid.attach(self.label, 0, 1, 2, 1)\n"
+"\n"
+"        self.add(grid)\n"
+"\n"
+"    # any signal from the scales is signaled to the label the text of which is changed\n"
+"    def scale_moved(self, event):\n"
+"        self.label.set_text(\"Horizontal scale is \" + str(int(self.h_scale.get_value())) +\n"
+"                            \"; vertical scale is \" + str(self.v_scale.get_value()) + \".\")\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
-"Se ten problemas con este titorial, compare o seu código con este <link href="
-"\"image-viewer/image-viewer.js\">código de referencia</link>."
 
-#: C/image-viewer.cpp.page:8(desc)
-msgid "A little bit more than a simple \"Hello world\" GTKmm application."
-msgstr "Un pouco máis que un simple aplicativo Gtkmm «Ola mundo»."
+#: C/scale.py.page:33(section/title)
+msgid "Useful methods for a Scale widget"
+msgstr "Métodos útiles para o widget Scale"
 
-#: C/image-viewer.cpp.page:21(title) C/image-viewer.c.page:23(title)
-msgid "Image Viewer"
-msgstr "Visor de imaxes"
+#: C/scale.py.page:34(section/p)
+msgid ""
+"For an explanation of signals and callback functions, see <link xref="
+"\"signals-callbacks.py\">this page</link>. An example is the <code>\"value-"
+"changed\"</code> signal, emitted when the value of the scale changes."
+msgstr ""
 
-#: C/image-viewer.cpp.page:26(p)
-msgid "Some basic concepts of C++/GObject programming"
-msgstr "Algúns conceptos básicos de programación de C++/GObject"
+#: C/scale.py.page:35(section/p)
+msgid ""
+"A Gtk.Adjustment is needed to construct the Gtk.Scale. This is the "
+"representation of a value with a lower and upper bound, together with step "
+"and page increments, and a page size, and it is constructed as <code>Gtk."
+"Adjustment(value, lower, upper, step_increment, page_increment, page_size)</"
+"code> where the fields are of type <code>float</code>; <code>step_increment</"
+"code> is the increment/decrement that is obtained by using the cursor keys, "
+"<code>page_increment</code> the one that is obtained clicking on the scale "
+"itself. Note that <code>page_size</code> is not used in this case, it should "
+"be set to <code>0</code>."
+msgstr ""
 
-#: C/image-viewer.cpp.page:27(p)
-msgid "How to write a Gtk application in C++"
-msgstr "Cómo escribir un aplicativo GTK en C++"
+#: C/scale.py.page:37(item/p)
+msgid ""
+"<code>get_value()</code> retrieves the current value of the scale; "
+"<code>set_value(value)</code> sets it (if the <code>value</code>, of type "
+"<code>float</code>, is outside the minimum or maximum range, it will be "
+"clamped to fit inside them). These are methods of the class Gtk.Range."
+msgstr ""
 
-#: C/image-viewer.cpp.page:41(p)
+#: C/scale.py.page:38(item/p)
 msgid ""
-"Choose <gui>GTKmm (Simple)</gui> from the <gui>C++</gui> tab, click "
-"<gui>Forward</gui>, and fill out your details on the next few pages. Use "
-"<file>image-viewer</file> as project name and directory."
+"Use <code>set_draw_value(False)</code> to avoid displaying the current value "
+"as a string next to the slider."
 msgstr ""
-"Seleccione <gui>GTK+ (Simple)</gui> desde a lapela <gui>C++</gui>, prema "
-"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
-"<file>image-viewer</file> como nome do proxecto e cartafol."
 
-#: C/image-viewer.cpp.page:44(p)
+#: C/scale.py.page:39(item/p)
 msgid ""
-"Make sure that <gui>Use GtkBuilder for user interface</gui> is disabled as "
-"we will create the UI manually in this tutorial. Check the <link xref="
-"\"guitar-tuner.cpp\">Guitar-Tuner</link> tutorial if you want to learn how "
-"to use the interface builder."
+"To highlight the part of the scale between the origin and the current value:"
 msgstr ""
-"Asegúrese que <gui>Usar GtkBuilder para a interface de usuario</gui> está "
-"desactivado xa que crearemos a UI manualmente neste titorial. Comprobe o "
-"titorial <link xref=\"guitar-tuner.cpp\">Guitar-Tuner</link> se quere "
-"aprender como usar o construtor de interface."
 
-#: C/image-viewer.cpp.page:49(p)
+#: C/scale.py.page:40(item/code)
+#, no-wrap
 msgid ""
-"Click <gui>Apply</gui> and the project will be created for you. Open "
-"<file>src/main.cc</file> from the <gui>Project</gui> or <gui>File</gui> "
-"tabs. You should see some code which starts with the lines:"
+"\n"
+"self.h_scale.set_restrict_to_fill_level(False)\n"
+"self.h_scale.set_fill_level(self.h_scale.get_value())\n"
+"self.h_scale.set_show_fill_level(True)"
 msgstr ""
-"Prema <gui>Aplicar</gui> para crear o proxecto. Abra <file>src/main.cc</"
-"file> desde as lapelas <gui>Proxecto</gui> ou <gui>Ficheiro</gui>. Debería "
-"ver algún código que comeza coas liñas:"
 
-#: C/image-viewer.cpp.page:61(p) C/guitar-tuner.cpp.page:64(p)
+#: C/scale.py.page:44(item/p)
 msgid ""
-"This is a very basic C++ code setting up GTKmm. More details are given "
-"below; skip this list if you understand the basics:"
+"in the callback function of the \"value-changed\" signal, so to have the new "
+"filling every time the value is changed. These are methods of the class Gtk."
+"Range."
 msgstr ""
 
-#: C/image-viewer.cpp.page:64(p)
+#: C/scale.py.page:46(item/p)
 msgid ""
-"The three <code>#include</code> lines at the top include the <code>config</"
-"code> (useful autoconf build defines), <code>gtkmm</code> (user interface) "
-"and <code>iostream</code> (C++-STL) libraries. Functions from these "
-"libraries are used in the rest of the code."
+"<code>add_mark(value, position, markup)</code> adds a mark at the "
+"<code>value</code> (<code>float</code> or <code>int</code> if that is the "
+"precision of the scale), in <code>position</code> (<code>Gtk.PositionType."
+"LEFT, Gtk.PositionType.RIGHT, Gtk.PositionType.TOP, Gtk.PositionType.BOTTOM</"
+"code>) with text <code>Null</code> or <code>markup</code> in the Pango "
+"Markup Language. To clear marks, <code>clear_marks()</code>."
 msgstr ""
 
-#: C/image-viewer.cpp.page:67(p)
+#: C/scale.py.page:47(item/p)
 msgid ""
-"The <code>main</code> function creates a new (empty) window and sets the "
-"window title."
+"<code>set_digits(digits)</code> sets the precision of the scale at "
+"<code>digits</code> digits."
 msgstr ""
-"A función <code>main</code> crea unha xanela nova (e baleira) e estabelece o "
-"título da xanela."
 
-#: C/image-viewer.cpp.page:70(p)
+#: C/scale.py.page:55(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"The <code>kit::run()</code> call starts the GTKmm main loop, which runs the "
-"user interface and starts listening for events (like clicks and key "
-"presses). As we give the window as an argument to that function, the "
-"application will automatically exit when that window is closed."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkScale.html";
+"\">GtkScale</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image-viewer.cpp.page:77(p) C/image-viewer.c.page:80(p)
-#: C/guitar-tuner.cpp.page:79(p) C/guitar-tuner.c.page:85(p)
+#: C/scale.py.page:56(item/p) C/spinbutton.py.page:48(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"Press <gui>Execute</gui> on the next window that appears to configure a "
-"debug build. You only need to do this once, for the first build."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkAdjustment.html";
+"\">GtkAdjustment</link>"
 msgstr ""
-"Prema <gui>Executar</gui> na seguinte xanela que aparece para configurar a "
-"compilación de depuración. Só precisa facer isto unha vez para a primeira "
-"compilación."
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/image-viewer.cpp.page:82(p)
+#: C/scale.py.page:57(item/p) C/scrolledwindow.py.page:44(item/p)
+#: C/textview.py.page:99(item/p)
 msgid ""
-"Now we will bring life into the empty window. GTKmm organizes the user "
-"interface with <code>Gtk::Container</code>s that can contain other widgets "
-"and even other containers. Here we will use the simplest available "
-"container, a <code>Gtk::Box</code>:"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/gtk3-Standard-";
+"Enumerations.html\">Standard Enumerations</link>"
 msgstr ""
 
-#: C/image-viewer.cpp.page:115(p)
+#: C/scale.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Scale (Vala)"
+msgctxt "text"
+msgid "Scale (Vala)"
+msgstr "Scale (Vala)"
+
+#: C/scale.vala.page:26(page/code)
+#, no-wrap
 msgid ""
-"The first lines create the widgets we want to use: a button for opening up "
-"an image, the image view widget itself and the box we will use as a "
-"container."
+"/* This is the application. */\n"
+"public class MyApplication : Gtk.Application {\n"
+"\tGtk.Scale h_scale;\n"
+"\tGtk.Scale v_scale;\n"
+"\tGtk.Label label;\n"
+"\n"
+"\t/* Override the 'activate' signal of GLib.Application. */\n"
+"\tprotected override void activate () {\n"
+"\t\tvar window = new Gtk.ApplicationWindow (this);\n"
+"\t\twindow.title = \"Scale Example\";\n"
+"\t\twindow.set_default_size (400, 300);\n"
+"\t\twindow.set_border_width (5);\n"
+"\n"
+"\t\th_scale = new Gtk.Scale.with_range (Gtk.Orientation.HORIZONTAL, 0.0, 100.0, 5.0);\n"
+"\t\th_scale.set_digits (0); //number of decimal places displayed\n"
+"\t\th_scale.set_valign (Gtk.Align.START); //horizontal alignment\n"
+"\n"
+"\t\tvar adjustment = new Gtk.Adjustment (42.0, 0.0, 100.0, 5.0, 10.0, 0.0);\n"
+"\t\tv_scale = new Gtk.Scale (Gtk.Orientation.VERTICAL, adjustment);\n"
+"\t\tv_scale.set_vexpand(true);\n"
+"\n"
+"\t\tlabel = new Gtk.Label (\"Move the scale handles...\");\n"
+"\n"
+"\t\tvar grid = new Gtk.Grid ();\n"
+"\t\tgrid.set_column_spacing (10); //amount of space between columns\n"
+"\t\tgrid.set_column_homogeneous (true); //all columns same width\n"
+"\t\tgrid.attach (h_scale, 0, 0, 1, 1);\n"
+"\t\tgrid.attach_next_to (v_scale, h_scale, Gtk.PositionType.RIGHT, 1, 1);\n"
+"\t\tgrid.attach (label, 0, 1, 2, 1);\n"
+"\n"
+"\t\th_scale.value_changed.connect (scale_moved);\n"
+"\t\tv_scale.value_changed.connect (scale_moved);\n"
+"\n"
+"\t\twindow.add (grid);\n"
+"\t\twindow.show_all ();\n"
+"\t}\n"
+"\n"
+"\t/* Callback function for \"value-changed\" signal.\n"
+"\t * The paramter refers to the scale which emitted the signal.\n"
+"\t * Since we are accessing the values of not one, but two scales,\n"
+"\t * we made the ranges instance variables, and ignore the\n"
+"\t * parameter.\n"
+"\t */\n"
+"\tvoid scale_moved (Gtk.Range range) {\n"
+"\t\tlabel.set_text (\"Horizontal scale is %.1f; vertical scale is %.1f.\".printf (h_scale.get_value (), 
v_scale.get_value ()));\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main creates and runs the application. */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/image-viewer.cpp.page:118(p)
+#: C/scale.vala.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"The calls to <code>pack_start</code> add the two widgets to the box and "
-"define their behaviour. The image will expand into any available space while "
-"the button will just be as big as needed. You will notice that we don't set "
-"explicit sizes on the widgets. In GTKmm this is usually not needed as it "
-"makes it much easier to have a layout that looks good in different window "
-"sizes. Next, the box is added to the window."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Scale.html\";>Gtk.Scale</"
+"link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image-viewer.cpp.page:124(p)
+#: C/scale.vala.page:32(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"We need to define what happens when the user clicks on the button. GTKmm "
-"uses the concept of <em>signals</em>. When the button is clicked, it fires "
-"the <em>clicked</em> signal, which we can connect to some action. This is "
-"done using the <code>signal_clicked().connect</code> method which tells "
-"GTKmm to call the <code>on_open_image</code> function when the button is "
-"clicked. We will define the <em>callback</em> in the next section."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Adjustment.html\";>Gtk."
+"Adjustment</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/image-viewer.cpp.page:128(p)
+#: C/scale.vala.page:33(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"The last step is to show all widgets in the window using "
-"<code>show_all_children()</code>. This is equivalent to using the <code>show"
-"()</code> method on all our child widgets."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.PositionType.html\";>Gtk."
+"PositionType</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/image-viewer.cpp.page:137(p)
+#: C/scale.vala.page:34(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"We will now define the signal handler for the <em>clicked</em> signal or the "
-"button we mentioned before. Add this code before the <code>main</code> "
-"method."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Orientation.html\";>Gtk."
+"Orientation</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/image-viewer.cpp.page:175(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/scrolledwindow.py.page:21(media) C/scrolledwindow.vala.page:22(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/scrolledwindow.png'; md5=697bb3205d5c4fb0b4ea8db435843157"
+msgctxt "_"
 msgid ""
-"The dialog for choosing the file is created using the <code>Gtk::"
-"FileChooserDialog</code> constructor. This takes the title and type of the "
-"dialog. In our case, it is an <em>Open</em> dialog."
+"external ref='media/scrolledwindow.png' "
+"md5='697bb3205d5c4fb0b4ea8db435843157'"
 msgstr ""
+"@@image: 'media/scrolledwindow.png'; md5=697bb3205d5c4fb0b4ea8db435843157"
+
+#: C/scrolledwindow.py.page:7(info/title)
+#, fuzzy
+#| msgid "ScrolledWindow (Python)"
+msgctxt "text"
+msgid "ScrolledWindow (Python)"
+msgstr "ScrolledWindow (Python)"
+
+#: C/scrolledwindow.py.page:17(info/desc)
+#: C/scrolledwindow.vala.page:18(info/desc)
+msgid "Adds scrollbars to its child widget"
+msgstr "Engade barras de desprazamento no seu widget fillo"
 
-#: C/image-viewer.cpp.page:179(p)
+#: C/scrolledwindow.py.page:20(page/title)
+#: C/scrolledwindow.vala.page:21(page/title)
+msgid "ScrolledWindow"
+msgstr "ScrolledWindow"
+
+#: C/scrolledwindow.py.page:22(page/p) C/scrolledwindow.vala.page:23(page/p)
+msgid "An image in a scrolled window."
+msgstr "Unha imaxe dunha xanela con desprazamento."
+
+#: C/scrolledwindow.py.page:28(section/code)
+#, no-wrap
 msgid ""
-"The next two lines add an <em>Open</em> and a <em>Close</em> button to the "
-"dialog."
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"ScrolledWindow Example\", application=app)\n"
+"        self.set_default_size(200, 200)\n"
+"\n"
+"        # the scrolledwindow\n"
+"        scrolled_window = Gtk.ScrolledWindow()\n"
+"        scrolled_window.set_border_width(10)\n"
+"        # there is always the scrollbar (otherwise: AUTOMATIC - only if needed - or NEVER)\n"
+"        scrolled_window.set_policy(Gtk.PolicyType.ALWAYS, Gtk.PolicyType.ALWAYS)\n"
+"\n"
+"        # an image - slightly larger than the window...\n"
+"        image = Gtk.Image()\n"
+"        image.set_from_file(\"gnome-image.png\")\n"
+"\n"
+"        # add the image to the scrolledwindow\n"
+"        scrolled_window.add_with_viewport(image)\n"
+"\n"
+"        # add the scrolledwindow to the window\n"
+"        self.add(scrolled_window)\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/image-viewer.cpp.page:181(p)
+#: C/scrolledwindow.py.page:31(section/title)
+msgid "Useful methods for a ScrolledWindow widget"
+msgstr "Métodos útiles para o widget ScrollWindow"
+
+#: C/scrolledwindow.py.page:33(item/p)
 msgid ""
-"The second argument to the <code>add_button()</code> method is a value to "
-"identify the clicked button. We use predefined values provided by GTKmm "
-"here, too."
+"<code>set_policy(hscrollbar_policy, vscrollbar_policy)</code> where each of "
+"the arguments is one of <code>Gtk.Policy.AUTOMATIC, Gtk.Policy.ALWAYS, Gtk."
+"Policy.NEVER</code> regulates whether the horizontal and vertical scrollbars "
+"should appear: with <code>AUTOMATIC</code> they appear only if needed, "
+"<code>ALWAYS</code> and <code>NEVER</code> are self-explanatory."
 msgstr ""
 
-#: C/image-viewer.cpp.page:186(p)
+#: C/scrolledwindow.py.page:34(item/p)
 msgid ""
-"The next two lines restrict the <gui>Open</gui> dialog to only display files "
-"which can be opened by <code>Gtk::Image</code>. A filter object is created "
-"first; we then add all kinds of files supported by <code>Gdk::Pixbuf</code> "
-"(which includes most image formats like PNG and JPEG) to the filter. "
-"Finally, we set this filter to be the <gui>Open</gui> dialog's filter."
+"<code>add_with_viewport(widget)</code> is used to add the Gtk.Widget "
+"<code>widget</code> without native scrolling capabilities inside the window."
 msgstr ""
 
-#: C/image-viewer.cpp.page:187(p)
+#: C/scrolledwindow.py.page:35(item/p)
 msgid ""
-"<code>Glib::RefPtr</code> is a smart pointer used here, that makes sure that "
-"the filter is destroyed when there is no reference to it anymore."
+"<code>set_placement(window_placement)</code> sets the placement of the "
+"contents with respect to the scrollbars for the scrolled window. The options "
+"for the argument are <code>Gtk.CornerType.TOP_LEFT</code> (default: the "
+"scrollbars are on the bottom and on the right of the window), <code>Gtk."
+"CornerType.TOP_RIGHT, Gtk.CornerType.BOTTOM_LEFT, Gtk.CornerType."
+"BOTTOM_RIGHT</code>."
 msgstr ""
 
-#: C/image-viewer.cpp.page:191(p)
+#: C/scrolledwindow.py.page:36(item/p)
 msgid ""
-"<code>dialog.run</code> displays the <gui>Open</gui> dialog. The dialog will "
-"wait for the user to choose an image; when they do, <code>dialog.run</code> "
-"will return the value <code>Gtk::RESPONSE_ACCEPT</code> (it would return "
-"<code>Gtk::RESPONSE_CANCEL</code> if the user clicked <gui>Cancel</gui>). "
-"The <code>switch</code> statement tests for this."
+"<code>set_hadjustment(adjustment)</code> and <code>set_vadjustment"
+"(adjustment)</code> set the Gtk.Adjustment <code>adjustment</code>. This is "
+"the representation of a value with a lower and upper bound, together with "
+"step and page increments, and a page size, and it is constructed as "
+"<code>Gtk.Adjustment(value, lower, upper, step_increment, page_increment, "
+"page_size)</code> where the fields are of type <code>float</code>. (Note "
+"that <code>step_increment</code> is not used in this case, it can be set to "
+"<code>0</code>.)"
 msgstr ""
 
-#: C/image-viewer.cpp.page:194(p)
+#: C/scrolledwindow.py.page:43(item/p) C/textview.py.page:98(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"We hide the <gui>Open</gui> dialog because we don't need it any more. The "
-"dialog would be hidden later anyway, as it is only a local variable and is "
-"destroyed (and therefore hidden) when the scope ends."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkScrolledWindow.html";
+"\">GtkScrolledWindow</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image-viewer.cpp.page:197(p)
+#: C/scrolledwindow.vala.page:7(info/title)
+#, fuzzy
+#| msgid "ScrolledWindow (Vala)"
+msgctxt "text"
+msgid "ScrolledWindow (Vala)"
+msgstr "ScrolledWindow (Vala)"
+
+#: C/scrolledwindow.vala.page:25(page/code)
+#, no-wrap
 msgid ""
-"Assuming that the user did click <gui>Open</gui>, the next line loads the "
-"file into the <code>Gtk::Image</code> so that it is displayed."
+"/* This is the application. */\n"
+"public class MyApplication : Gtk.Application {\n"
+"\t/* Override the 'activate' signal of GLib.Application. */\n"
+"\tprotected override void activate () {\n"
+"\t\t/* Create the window of this application. */\n"
+"\t\tvar window = new Gtk.ApplicationWindow (this);\n"
+"\t\twindow.title = \"ScrolledWindow Example\";\n"
+"\t\twindow.set_default_size (200, 200);\n"
+"\n"
+"\t\tvar scrolled_window = new Gtk.ScrolledWindow (null, null);\n"
+"\t\tscrolled_window.set_border_width (10);\n"
+"\t\tscrolled_window.add_with_viewport (new Gtk.Image.from_file (\"gnome-image.png\"));\n"
+"\t\tscrolled_window.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);\n"
+"\n"
+"\t\twindow.add (scrolled_window);\n"
+"\t\twindow.show_all ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main creates and runs the application. */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/image-viewer.cpp.page:206(p) C/image-viewer.c.page:218(p)
+#: C/scrolledwindow.vala.page:30(item/p) C/textview.vala.page:36(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"If you haven't already done so, choose the <file>Debug/src/image-viewer</"
-"file> application in the dialog that appears. Finally, hit <gui>Run</gui> "
-"and enjoy!"
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ScrolledWindow.html\";>Gtk."
+"ScrolledWindow</link>"
 msgstr ""
-"Se non o fixo aínda, seleccione o aplicativo <file>Debug/src/image-viewer</"
-"file> no diálogo que aparece. Finalmente, prema <gui>Executar</gui> e "
-"desfrute!"
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image-viewer.cpp.page:211(p)
+#: C/scrolledwindow.vala.page:31(item/p) C/textview.vala.page:38(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"image-viewer/image-viewer.cc\">reference code</link>."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.PolicyType.html\";>Gtk."
+"PolicyType</link>"
 msgstr ""
-"Se ten problemas con este titorial, compare o seu código con este <link href="
-"\"image-viewer/image-viewer.cc\">código de referencia</link>."
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image-viewer.c.page:7(title)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/separator.py.page:23(media)
 #, fuzzy
-#| msgid "Image Viewer"
-msgid "Image Viewer (C)"
-msgstr "Visor de imaxes"
+#| msgid "@@image: 'media/separator.png'; md5=8769b27662ce5c77f99e9ce33751a21a"
+msgctxt "_"
+msgid ""
+"external ref='media/separator.png' md5='8769b27662ce5c77f99e9ce33751a21a'"
+msgstr "@@image: 'media/separator.png'; md5=8769b27662ce5c77f99e9ce33751a21a"
 
-#: C/image-viewer.c.page:28(p)
-msgid "Some basic concepts of C/GObject programming"
-msgstr "Algúns conceptos básicos de programación de C/GObject"
+#: C/separator.py.page:7(info/title)
+#, fuzzy
+#| msgid "Seperator (Python)"
+msgctxt "text"
+msgid "Seperator (Python)"
+msgstr "Separador (Python)"
 
-#: C/image-viewer.c.page:29(p)
-msgid "How to write a Gtk application in C"
-msgstr "Como escribir un aplicativo GTK en C"
+#: C/separator.py.page:18(info/desc)
+msgid "A separator widget"
+msgstr "Un widgets de separación"
 
-#: C/image-viewer.c.page:43(p)
-#, fuzzy
-#| msgid ""
-#| "Choose <gui>Gtk+ (Simple)</gui> from the <gui>C</gui> tab, click "
-#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
-#| "<file>image-viewer</file> as project name and directory."
-msgid ""
-"Choose <gui>Gtk+ (Simple)</gui> from the <gui>C</gui> tab, click "
-"<gui>Continue</gui>, and fill out your details on the next few pages. Use "
-"<file>image-viewer</file> as project name and directory."
-msgstr ""
-"Seleccione <gui>GTK+ (Simple)</gui> desde a lapela <gui>C</gui>, prema "
-"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
-"<file>image-viewer</file> como nome do proxecto e cartafol."
+#: C/separator.py.page:21(page/title)
+msgid "Separator"
+msgstr "Separador"
+
+#: C/separator.py.page:24(page/p)
+msgid "A horizontal and a vertical separator divide some labels."
+msgstr "Un separador horizontal ou vertical para dividir algunhas etiquetas."
 
-#: C/image-viewer.c.page:46(p)
+#: C/separator.py.page:30(section/code)
+#, no-wrap
 msgid ""
-"Make sure that <gui>Use GtkBuilder for user interface</gui> is disabled as "
-"we will create the UI manually in this tutorial. Check the <link xref="
-"\"guitar-tuner.c\">Guitar-Tuner</link> tutorial if you want to learn how to "
-"use the interface builder."
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Separator Example\", application=app)\n"
+"\n"
+"        # three labels\n"
+"        label1 = Gtk.Label()\n"
+"        label1.set_text(\"Below, a horizontal separator.\")\n"
+"\n"
+"        label2 = Gtk.Label()\n"
+"        label2.set_text(\"On the right, a vertical separator.\")\n"
+"\n"
+"        label3 = Gtk.Label()\n"
+"        label3.set_text(\"On the left, a vertical separator.\")\n"
+"\n"
+"        # a horizontal separator\n"
+"        hseparator = Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL)\n"
+"        # a vertical separator\n"
+"        vseparator = Gtk.Separator(orientation=Gtk.Orientation.VERTICAL)\n"
+"\n"
+"        # a grid to attach labels and separators\n"
+"        grid = Gtk.Grid()\n"
+"        grid.attach(label1, 0, 0, 3, 1)\n"
+"        grid.attach(hseparator, 0, 1, 3, 1)\n"
+"        grid.attach(label2, 0, 2, 1, 1)\n"
+"        grid.attach(vseparator, 1, 2, 1, 1)\n"
+"        grid.attach(label3, 2, 2, 1, 1)\n"
+"        grid.set_column_homogeneous(True)\n"
+"        # add the grid to the window\n"
+"        self.add(grid)\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"\twin = MyWindow(self)\n"
+"\twin.show_all()\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
-"Asegúrese que <gui>Usar GtkBuilder para a interface de usuario</gui> está "
-"desactivado xa que crearemos a UI manualmente neste titorial. Comprobe o "
-"titorial <link xref=\"guitar-tuner.c\">Guitar-Tuner</link> se quere aprender "
-"como usar o construtor de interface."
 
-#: C/image-viewer.c.page:61(p)
+#: C/separator.py.page:34(section/title)
+msgid "API Reference"
+msgstr "Referencia da API"
+
+#: C/separator.py.page:38(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"C is a rather verbose language, so don't be surprised that the file contains "
-"quite a lot of code. Most of it is template code. It loads an (empty) window "
-"and shows it. More details are given below; skip this list if you understand "
-"the basics:"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSeparator.html";
+"\">GtkSeparator</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image-viewer.c.page:65(p) C/guitar-tuner.c.page:70(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/set-up-gedit.js.page:24(media)
+#, fuzzy
+#| msgid "@@image: 'media/geditview.png'; md5=f1438295662d95f56fcd1d8200efaaf2"
+msgctxt "_"
 msgid ""
-"The three <code>#include</code> lines at the top include the <code>config</"
-"code> (useful autoconf build defines), <code>gtk</code> (user interface) and "
-"<code>gi18n</code> (internationalization) libraries. Functions from these "
-"libraries are used in the rest of the code."
-msgstr ""
+"external ref='media/geditview.png' md5='f1438295662d95f56fcd1d8200efaaf2'"
+msgstr "@@image: 'media/geditview.png'; md5=f1438295662d95f56fcd1d8200efaaf2"
 
-#: C/image-viewer.c.page:68(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/set-up-gedit.js.page:36(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/gediteditor.png'; md5=50db1ee8f2c545744879ee9fba5b4b24"
+msgctxt "_"
 msgid ""
-"The <code>create_window</code> function creates a new (empty) window and "
-"connects a signal to exit the application when that window is closed."
-msgstr ""
-"A función <code>create_window</code> crea unha xanela (baleira) nova e "
-"conecta un sinal para saír do aplicativo péchase esa xanela."
+"external ref='media/gediteditor.png' md5='50db1ee8f2c545744879ee9fba5b4b24'"
+msgstr "@@image: 'media/gediteditor.png'; md5=50db1ee8f2c545744879ee9fba5b4b24"
 
-#: C/image-viewer.c.page:72(p) C/guitar-tuner.c.page:77(p)
+#: C/set-up-gedit.js.page:18(page/title)
+msgid "Set up gedit for JavaScript development"
+msgstr "Configurar gedit para o desenvolvemento con JavaScript"
+
+#: C/set-up-gedit.js.page:19(page/p)
 msgid ""
-"The <code>main</code> function is run by default when you start a C "
-"application. It calls a few functions which set up and then run the "
-"application. The <code>gtk_main</code> function starts the GTK main loop, "
-"which runs the user interface and starts listening for events (like clicks "
-"and key presses)."
+"This tutorial will show you how to set up <link href=\"http://projects.gnome.";
+"org/gedit/\">gedit</link>, GNOME's basic text editor, so that it has a "
+"handful of extra features which are useful for writing JavaScript code."
 msgstr ""
 
-#: C/image-viewer.c.page:75(p) C/guitar-tuner.c.page:80(p)
+#: C/set-up-gedit.js.page:22(section/title)
+msgid "Making code clearer"
+msgstr "Facer o código máis claro"
+
+#: C/set-up-gedit.js.page:23(section/p)
 msgid ""
-"The <code>ENABLE_NLS</code> conditional definition sets up <code>gettext</"
-"code>, which is a framework for translating applications. These functions "
-"specify how translation tools should handle your app when you run them."
+"Click on <gui>Edit</gui> in gedit's menu bar, then click on "
+"<gui>Preferences</gui>. You should see something like this:"
 msgstr ""
 
-#: C/image-viewer.c.page:85(p)
-msgid ""
-"Now we will bring life into the empty window. GTK organizes the user "
-"interface with <code>GtkContainer</code>s that can contain other widgets and "
-"even other containers. Here we will use the simplest available container, a "
-"<code>GtkBox</code>:"
+#: C/set-up-gedit.js.page:25(section/p)
+msgid "Here are the options you want to make sure are turned on."
 msgstr ""
 
-#: C/image-viewer.c.page:123(p)
+#: C/set-up-gedit.js.page:27(item/p)
 msgid ""
-"The first lines create the widgets we want to use: a button for opening up "
-"an image, the image view widget itself and the box we will use as a "
-"container. The macros like <code>GTK_BOX</code> are used for dynamic type "
-"checking and casting which is needed as C doesn't support object-orientation "
-"out-of-the-box."
+"<gui>Display line numbers</gui> will help you compare the code you type in "
+"with the original, and make it easier to see which line is causing an error "
+"if there is a bug."
 msgstr ""
 
-#: C/image-viewer.c.page:128(p)
+#: C/set-up-gedit.js.page:28(item/p)
 msgid ""
-"The calls to <code>gtk_box_pack_start</code> add the two widgets to the box "
-"and define their behaviour. The image will expand into any available space "
-"while the button will just be as big as needed. You will notice that we "
-"don't set explicit sizes on the widgets. In GTK this is usually not needed "
-"as it makes it much easier to have a layout that looks good in different "
-"window sizes. Next, the box is added to the window."
+"<gui>Highlight current line</gui> makes it easier to see which line you're "
+"on, when you have to go back and forth a lot."
 msgstr ""
 
-#: C/image-viewer.c.page:134(p)
+#: C/set-up-gedit.js.page:29(item/p)
 msgid ""
-"We need to define what happens when the user clicks on the button. GTK uses "
-"the concept of <em>signals</em>. When the button is clicked, it fires the "
-"<em>clicked</em> signal, which we can connect to some action. This is done "
-"using the <code>g_signal_connect</code> function which tells GTK to call the "
-"<code>on_image_open</code> function when the button is clicked and to pass "
-"the image as an additional argument to that function. We will define the "
-"<em>callback</em> in the next section."
+"<gui>Highlight matching brackets</gui> helps you make sure you didn't leave "
+"out a bracket by accident."
 msgstr ""
 
-#: C/image-viewer.c.page:139(p)
-msgid ""
-"The last <code>g_signal_connect()</code> makes sure that the application "
-"exits when the window is closed."
+#: C/set-up-gedit.js.page:34(section/title)
+msgid "Making editing easier"
 msgstr ""
 
-#: C/image-viewer.c.page:142(p)
+#: C/set-up-gedit.js.page:35(section/p)
 msgid ""
-"As a last step, make sure to replace the <code>gtk_widget_show</code> call "
-"in the <code>main()</code> function by <code>gtk_widget_show_all()</code> to "
-"show the window and all the widgets it contains."
+"In gedit's <gui>Preferences</gui> dialog, click on the <gui>Editor</gui> "
+"tab. You should see something like this:"
 msgstr ""
 
-#: C/image-viewer.c.page:150(p)
+#: C/set-up-gedit.js.page:37(section/p)
 msgid ""
-"We will now define the signal handler for the <em>clicked</em> signal or the "
-"button we mentioned before. Add this code before the <code>create_window()</"
-"code> method."
+"Here, you want to have <gui>Enable automatic indentation</gui> turned on. "
+"This means that when you hit <key>Enter</key> the cursor stays indented as "
+"far as the last line was. This is extremely useful when writing JavaScript "
+"code, since it uses indentation to make it clearer which parts do what."
 msgstr ""
 
-#: C/image-viewer.c.page:188(p)
+#: C/set-up-gedit.js.page:38(note/p)
 msgid ""
-"The first argument of the signal is always the widget that sent the signal. "
-"Sometimes other arguments related to the signal come after that, but "
-"<em>clicked</em> doesn't have any. Next is the <code>user_data</code> "
-"argument which is a pointer to the data we passed when connecting the "
-"signal. In this case it is our <code>GtkImage</code> object."
+"If you want to share code with other people who write GNOME JavaScript "
+"applications, you'll also want to set <gui>Tab width</gui> to 4 and turn on "
+"<gui>Insert spaces instead of tabs</gui>."
 msgstr ""
 
-#: C/image-viewer.c.page:194(p)
+#: C/signals-callbacks.py.page:8(info/title)
+#, fuzzy
+#| msgid "Signals and callbacks (Python)"
+msgctxt "text"
+msgid "Signals and callbacks (Python)"
+msgstr "Sinais e contrachamadas (Python)"
+
+#: C/signals-callbacks.py.page:12(info/desc)
+msgid "An explanation of signals and callbacks in GTK+."
+msgstr "Unha explicación dos sinais e contrachamadas en GTK+"
+
+#: C/signals-callbacks.py.page:25(page/title)
+msgid "Signals and callbacks"
+msgstr "Sinais e contrachamadas"
+
+#: C/signals-callbacks.py.page:32(section/p)
 msgid ""
-"The next interesting line is where the dialog for choosing the file is "
-"created using <code>gtk_file_chooser_dialog_new</code>. The function takes "
-"the title of the dialog, the parent window of the dialog and several options "
-"like the number of buttons and their corresponding values."
+"Like most GUI toolkits, GTK+ uses an event-driven programming model. When "
+"the user is doing nothing, GTK+ sits in the main loop and waits for input. "
+"If the user performs some action - say, a mouse click - then the main loop "
+"\"wakes up\" and delivers an event to GTK+."
 msgstr ""
 
-#: C/image-viewer.c.page:201(p)
+#: C/signals-callbacks.py.page:34(section/p)
 msgid ""
-"The next two lines restrict the <gui>Open</gui> dialog to only display files "
-"which can be opened by GtkImage. A filter object is created first; we then "
-"add all kinds of files supported by <code>GdkPixbuf</code> (which includes "
-"most image formats like PNG and JPEG) to the filter. Finally, we set this "
-"filter to be the <gui>Open</gui> dialog's filter."
+"When widgets receive an event, they frequently emit one or more signals. "
+"Signals notify your program that \"something interesting happened\" by "
+"invoking functions you have connected to the signal. Such functions are "
+"commonly known as callbacks. When your callbacks are invoked, you would "
+"typically take some action. After a callback finishes, GTK+ will return to "
+"the main loop and await more user input."
 msgstr ""
 
-#: C/image-viewer.c.page:204(p)
+#: C/signals-callbacks.py.page:36(section/p)
 msgid ""
-"<code>gtk_dialog_run</code> displays the <gui>Open</gui> dialog. The dialog "
-"will wait for the user to choose an image; when they do, "
-"<code>gtk_dialog_run</code> will return the value <code>GTK_RESPONSE_ACCEPT</"
-"code> (it would return <code>GTK_RESPONSE_CANCEL</code> if the user clicked "
-"<gui>Cancel</gui>). The <code>switch</code> statement tests for this."
+"A generic example is: <code>handler_id = widget.connect(\"event\", callback, "
+"data)</code>. <code>widget</code> is an instance of a widget we created "
+"earlier. Next, the <code>event</code> we are interested in. Each widget has "
+"its own particular events which can occur. For instance, if you have a Gtk."
+"Button you usually want to connect to the \"clicked\" event: this means that "
+"when the button is clicked, the signal is issued. Another example is the "
+"<code>notify::property</code> signal: whenever a <link xref=\"properties.py"
+"\">property</link> is modified on a GObject, instead of just emitting the "
+"<code>notify</code> signal, GObject associates as a detail to this signal "
+"emission the name of the property modified. This allows clients who wish to "
+"be notified of changes to only one property to filter most events before "
+"receiving them. Thirdly, the callback argument is the name of the callback "
+"function, which contains the code which runs when signals of the specified "
+"type are issued. Finally, the optional data argument includes any data which "
+"should be passed when the signal is issued."
 msgstr ""
 
-#: C/image-viewer.c.page:206(p)
+#: C/signals-callbacks.py.page:38(section/p)
 msgid ""
-"Assuming that the user did click <gui>Open</gui>, the next line sets the "
-"<code>file</code> property of the GtkImage to the filename of the image "
-"selected by the user. The GtkImage will then load and display the chosen "
-"image."
+"The function returns a number (the <code>handler_id</code>) that identifies "
+"this particular signal-callback pair. This number is required to disconnect "
+"from a signal such that the callback function will not be called during any "
+"future or currently ongoing emissions of the signal it has been connected "
+"to, as in <code>widget.disconnect(handler_id)</code>."
 msgstr ""
 
-#: C/image-viewer.c.page:209(p)
+#: C/signals-callbacks.py.page:45(section/p)
 msgid ""
-"In the final line of this method, we destroy the <gui>Open</gui> dialog "
-"because we don't need it any more. Destroying automatically hides the dialog."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+"\">Signals</link> in GObject documentation"
 msgstr ""
 
-#: C/image-viewer.c.page:223(p)
+#: C/signals-callbacks.py.page:46(section/p)
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"image-viewer/image-viewer.c\">reference code</link>."
+"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.";
+"html\">Basics - Main loop and Signals</link> in Python Gtk+ 3 Tutorial"
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/image.vala.page:21(None) C/image.py.page:21(None)
-#: C/image.js.page:20(None) C/image.c.page:21(None)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/spinbutton.c.page:25(media) C/spinbutton.py.page:22(media)
+#: C/spinbutton.vala.page:23(media)
 #, fuzzy
 #| msgid ""
-#| "@@image: 'media/image-viewer.png'; md5=7720360611243b14283b83527be968c2"
-msgid "@@image: 'media/image.png'; md5=9416aa74d9d6a857783f7a36338e7a02"
-msgstr ""
-"@@image: 'media/image-viewer.png'; md5=7720360611243b14283b83527be968c2"
+#| "@@image: 'media/spinbutton.png'; md5=993cbb7d9bd271a329727a926195712a"
+msgctxt "_"
+msgid ""
+"external ref='media/spinbutton.png' md5='993cbb7d9bd271a329727a926195712a'"
+msgstr "@@image: 'media/spinbutton.png'; md5=993cbb7d9bd271a329727a926195712a"
 
-#: C/image.vala.page:7(title)
-msgid "Image (Vala)"
-msgstr ""
+#: C/spinbutton.c.page:7(info/title)
+#, fuzzy
+#| msgid "SpinButton (C)"
+msgctxt "text"
+msgid "SpinButton (C)"
+msgstr "SpinButton (C)"
 
-#: C/image.vala.page:17(desc) C/image.py.page:17(desc)
-#: C/image.js.page:16(desc) C/image.c.page:17(desc)
-msgid "A widget displaying an image"
-msgstr ""
+#: C/spinbutton.c.page:20(info/desc)
+msgid "Retrieve an integer or floating point number"
+msgstr "Obter un enteiro ou número de punto flotante"
 
-#: C/image.vala.page:20(title) C/image.py.page:20(title)
-#: C/image.js.page:19(title) C/image.c.page:20(title)
-msgid "Image"
-msgstr ""
+#: C/spinbutton.c.page:23(page/title) C/spinbutton.js.page:23(page/title)
+#: C/spinbutton.py.page:21(page/title) C/spinbutton.vala.page:22(page/title)
+msgid "SpinButton"
+msgstr "SpinButton"
 
-#: C/image.vala.page:22(p) C/image.py.page:22(p) C/image.js.page:21(p)
-#: C/image.c.page:22(p)
-msgid "This GtkApplication displays an image file from the current directory."
+#: C/spinbutton.c.page:26(page/p) C/spinbutton.py.page:23(page/p)
+#: C/spinbutton.vala.page:24(page/p)
+msgid "Choose a number, by entering it or by clicking on the -/+ buttons!"
+msgstr "Seleccione un número, escribíndoo ou premendo nos botóns -/+!"
+
+#: C/spinbutton.c.page:28(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/* This is the callback function. \n"
+" * It is a handler function which reacts to the signal. \n"
+" * In this case, it will notify the user the value of their spinbutton \n"
+" * as a label.\n"
+" */\n"
+"static void\n"
+"spin_clicked (GtkSpinButton *spinbutton,\n"
+"              gpointer       user_data)\n"
+"{\n"
+"   GtkWidget *label = user_data;\n"
+"   gint value = gtk_spin_button_get_value_as_int (spinbutton);\n"
+"\n"
+"   /* %d - Is used when printing integers.\n"
+"    * Note: Using g_strdup_printf returns a string that must be freed. \n"
+"    * (In which is done below)\n"
+"    */\n"
+"   gchar *str = g_strdup_printf (\"The number you selected is %d.\", value);\n"
+"   gtk_label_set_text (GTK_LABEL (label), str);\n"
+"\n"
+"   g_free(str);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  /* Declare variables */\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *label;\n"
+"  GtkWidget *grid;\n"
+"  GtkWidget *spin_button;\n"
+"  GtkAdjustment *adjustment;\n"
+"\n"
+"\n"
+"  /* Create a window with a title, a border width, and a default size */\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"SpinButton Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 210, 70);\n"
+"  gtk_container_set_border_width (GTK_CONTAINER (window), 5);\n"
+"\n"
+"  /* Create a label to be shown in the window */\n"
+"  label = gtk_label_new (\"Choose a number\");\n"
+"\n"
+"  /* Create an adjustment representing an adjustable bounded value */\n"
+"  adjustment = gtk_adjustment_new (0, 0, 100, 1, 0, 0);\n"
+"\n"
+"\n"
+"  /* Create a spin button that is to be as wide as possible */\n"
+"  spin_button = gtk_spin_button_new (adjustment, 1, 0);\n"
+"  gtk_widget_set_hexpand (spin_button, TRUE);\n"
+"  \n"
+"  /* Connecting the \"value-changed\" signal for the spinbutton \n"
+"   * to the appropriate callback function. \n"
+"   */\n"
+"  g_signal_connect (spin_button, \n"
+"                    \"value-changed\", \n"
+"                    G_CALLBACK (spin_clicked), \n"
+"                    label);\n"
+"\n"
+"\n"
+"  /* Create a grid and arrange everything accordingly */\n"
+"  grid = gtk_grid_new ();\n"
+"  gtk_grid_set_column_spacing (GTK_GRID (grid), 10);\n"
+"  gtk_grid_set_column_homogeneous (GTK_GRID (grid), TRUE);\n"
+"  gtk_grid_attach (GTK_GRID (grid), spin_button, 0, 0, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1);\n"
+"  \n"
+"\n"
+"  gtk_container_add (GTK_CONTAINER (window), grid);\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
 msgstr ""
 
-#: C/image.vala.page:23(p) C/image.js.page:22(p) C/image.c.page:23(p)
+#: C/spinbutton.c.page:36(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"If the image file isn't loaded successfully, the image will contain a "
-"\"broken image\" icon. The <file>filename.png</file> needs to be in the "
-"current directory for this code to work. Use your favorite picture!"
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkSpinButton.html";
+"\">GtkSpinButton</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/image.vala.page:32(link) C/GtkApplicationWindow.py.page:53(link)
-#: C/GtkApplicationWindow.c.page:30(link) C/grid.py.page:56(link)
-#: C/checkbutton.py.page:47(link) C/aboutdialog.py.page:46(link)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/spinbutton.js.page:24(media)
 #, fuzzy
-#| msgid "A first Gtk application"
-msgid "GtkApplicationWindow"
-msgstr "Un primeiro aplicativo en GTK"
+#| msgid ""
+#| "@@image: 'media/spinbuttonkittens.png'; "
+#| "md5=577cce8a902140aacbab73fe8a76a010"
+msgctxt "_"
+msgid ""
+"external ref='media/spinbuttonkittens.png' "
+"md5='577cce8a902140aacbab73fe8a76a010'"
+msgstr ""
+"@@image: 'media/spinbuttonkittens.png'; md5=577cce8a902140aacbab73fe8a76a010"
 
-#: C/image.py.page:7(title)
+#: C/spinbutton.js.page:7(info/title)
 #, fuzzy
-#| msgid "Python"
-msgid "Image (Python)"
-msgstr "Python"
+#| msgid "SpinButton (JavaScript)"
+msgctxt "text"
+msgid "SpinButton (JavaScript)"
+msgstr "SpinButton (JavaScript)"
+
+#: C/spinbutton.js.page:20(info/desc)
+msgid "A number entry field that has + and - buttons"
+msgstr "O campo de entrada de número que ten os botóns +  e -."
 
-#: C/image.py.page:24(p)
+#: C/spinbutton.js.page:25(page/p)
 msgid ""
-"If the image file is not loaded successfully, the image will contain a "
-"\"broken image\" icon. The <file>filename.png</file> needs to be in the "
-"current directory for this code to work."
+"A SpinButton is not related to a <link xref=\"spinner.js\">Spinner</link>. "
+"It's a text entry field which only accepts numbers, and which has plus and "
+"minus buttons to let you change the value without having to type anything in."
 msgstr ""
 
-#: C/image.py.page:35(p)
+#: C/spinbutton.js.page:26(page/p)
 msgid ""
-"Another way to obtain what we have in the example is to create the image as "
-"an instance of another class and add it to the instance of <code>MyWindow</"
-"code> in the <code>do_activate(self)</code> method:"
+"It's best used when it's obvious that only a number can be entered into it. "
+"In this example, two SpinButtons are used for the number of kittens and "
+"number of cans of tuna to give them."
 msgstr ""
 
-#: C/image.py.page:36(code)
+#: C/spinbutton.js.page:43(section/code)
 #, no-wrap
 msgid ""
 "\n"
-"# a class to create a window\n"
-"class MyWindow(Gtk.ApplicationWindow):\n"
-"    def __init__(self, app):\n"
-"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
-"        self.set_default_size(300, 300)\n"
+"const SpinButtonExample = new Lang.Class({\n"
+"    Name: 'SpinButton Example',\n"
 "\n"
-"# a class to create an image\n"
-"class MyImage(Gtk.Image):\n"
-"    def __init__(self):\n"
-"        Gtk.Image.__init__(self)\n"
-"        self.set_from_file(\"gnome-image.png\")\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsspinbutton'\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+msgstr ""
+
+#: C/spinbutton.js.page:68(section/p)
+msgid ""
+"All the code for this sample goes in the SpinButtonExample class. The above "
+"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
+"go in."
+msgstr ""
+
+#: C/spinbutton.js.page:69(section/code)
+#, no-wrap
+msgid ""
 "\n"
-"class MyApplication(Gtk.Application):\n"
-"    def __init__(self):\n"
-"        Gtk.Application.__init__(self)\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
 "\n"
-"    def do_activate(self):\n"
-"        # create an instance of MyWindow\n"
-"        win = MyWindow(self)\n"
-"        # create an instance of MyImage and add it to the window\n"
-"        win.add(MyImage())\n"
-"        # show the window and everything on it\n"
-"        win.show_all()"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 20,\n"
+"            title: \"Kitten Feeder\"});\n"
 msgstr ""
 
-#: C/image.py.page:63(title)
-msgid "Useful methods for an Image widget"
-msgstr ""
+#: C/spinbutton.js.page:84(section/title)
+msgid "Creating the SpinButtons"
+msgstr "Crear os SpinButtons"
 
-#: C/image.py.page:66(p)
+#: C/spinbutton.js.page:85(section/code)
+#, no-wrap
 msgid ""
-"To set a stock icon as image, you can use <code>set_from_stock(stock_id, "
-"size)</code> where <code>stock_id</code> is a stock icon such as <code>Gtk."
-"STOCK_ABOUT</code> (more can be found at <link href=\"http://developer.gnome.";
-"org/gtk3/unstable/gtk3-Stock-Items\">Stock Items</link>, with the caveat "
-"that they should be modified as above) and <code>size</code> is a stock icon "
-"size to be chosen from <code>Gtk.IconSize.INVALID, Gtk.IconSize.MENU, Gtk."
-"IconSize.SMALL_TOOLBAR, Gtk.IconSize.LARGE_TOOLBAR, Gtk.IconSize.BUTTON, Gtk."
-"IconSize.DND, Gtk.IconSize.DIALOG</code>."
+"\n"
+"        // Create the first spinbutton using a function\n"
+"        this._kittens = Gtk.SpinButton.new_with_range (1, 9001, 1);\n"
+"        this._kittens.connect (\"value-changed\", Lang.bind (this, this._newValue));\n"
 msgstr ""
 
-#: C/image.py.page:67(p)
+#: C/spinbutton.js.page:91(section/p)
 msgid ""
-"You can also use <code>set_from_icon_name(icon_name, size)</code>, where "
-"<code>icon_name</code> is a stock icon name such as <code>\"gtk-about\"</"
-"code> (more can be found as above) and <code>size</code> is as above."
+"We can use the new_with_range function to create a new SpinButton quickly. "
+"Its first parameter is the SpinButton's starting value, its second is the "
+"maximum value, and its third is how much to increment it when the plus or "
+"minus buttons are pressed."
 msgstr ""
 
-#: C/image.py.page:68(p)
+#: C/spinbutton.js.page:92(section/p)
 msgid ""
-"To load an image over a network use <code>set_from_pixbuf(pixbuf)</code>, "
-"where <code>pixbuf</code> is a <link href=\"http://developer.gnome.org/gdk-";
-"pixbuf/unstable//index.html\">GdkPixbuf</link>."
+"After we create the first SpinButton, we connect its value-changed signal to "
+"a function which handles what happens when the number inside either "
+"SpinButton changes."
 msgstr ""
 
-#: C/image.py.page:69(code)
+#: C/spinbutton.js.page:94(section/code)
 #, no-wrap
 msgid ""
 "\n"
-"from gi.repository import Gtk\n"
-"from gi.repository import GdkPixbuf\n"
-"import sys\n"
-"\n"
-"class MyWindow(Gtk.ApplicationWindow):\n"
-"    # create a window\n"
-"    def __init__(self, app):\n"
-"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
-"        self.set_default_size(300, 300)\n"
+"        // Create an adjustment to use for the second spinbutton\n"
+"        this._adjustment = new Gtk.Adjustment ({\n"
+"            value: 1,\n"
+"            lower: 0,\n"
+"            upper: 9001,\n"
+"            step_increment: 1,\n"
+"            page_increment: 10 });\n"
 "\n"
-"        # create a pixbuf from file filename=\"gnome-image.png\", with width=32\n"
-"        # and height=64 amd boolean preserve_aspect_ratio=False.\n"
-"        pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(\"gnome-image.png\", 64, 128, False)\n"
+"        // Create the second spinbutton\n"
+"        this._tuna = new Gtk.SpinButton ({ adjustment: this._adjustment });\n"
+"        this._tuna.connect (\"value-changed\", Lang.bind (this, this._newValue));\n"
 "\n"
-"        # create an image\n"
-"        image = Gtk.Image()\n"
-"        # set the content of the image as the pixbuf\n"
-"        image.set_from_pixbuf(pixbuf)\n"
-"        # add the image to the window\n"
-"        self.add(image)"
+"        // this._tuna.set_digits (1);\n"
+"        // this._tuna.set_wrap (true);\n"
 msgstr ""
 
-#: C/image.py.page:90(p)
+#: C/spinbutton.js.page:111(section/p)
 msgid ""
-"If <code>preserve_aspect_ratio=True</code> we can use "
-"<code>new_from_file_at_size(filename, width, height)</code>. If <code>width</"
-"code> or <code>height</code> is <code>-1</code>, it is not constrained."
+"If you want more fine-grained control over a SpinButton, or want to create a "
+"bunch of SpinButtons which all use the same parameters, you can create an "
+"object called an <link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Adjustment.html\">Adjustment</link>. Then you can use that object as a "
+"new SpinButton's adjustment property, and it sets all the values at once. "
+"Afterwards, you can change all the SpinButtons which use that adjustment by "
+"changing the Adjustment object's properties."
 msgstr ""
 
-#: C/image.py.page:91(p)
+#: C/spinbutton.js.page:112(section/p)
 msgid ""
-"For loading from an input stream, see <code>new_from_stream()</code> and "
-"<code>new_from_stream_at_scale()</code> in the documentation"
+"The commented-out lines here show things you can do to customize your "
+"SpinButton. You can set the number of digits which go after the decimal "
+"point, for example, or tell it to wrap the number around if it goes past the "
+"upper or lower bounds that you set."
 msgstr ""
 
-#: C/image.js.page:6(title)
-#, fuzzy
-#| msgid "JavaScript"
-msgid "Image (JavaScript)"
-msgstr "JavaScript"
-
-#: C/image.c.page:7(title)
-msgid "Image (C)"
+#: C/spinbutton.js.page:113(note/p)
+msgid ""
+"For the kitties' sake, please don't use set_digits to allow a decimal number "
+"of kittens."
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/helloWorld.js.page:27(None)
-#, fuzzy
-#| msgid "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
-msgid "@@image: 'media/helloWorld.png'; md5=4c88a27211dfd1b33e504c9f78602f2d"
-msgstr "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
+#: C/spinbutton.js.page:117(section/title)
+msgid "Creating the rest of the UI"
+msgstr "Crear o resto da IU"
 
-#: C/helloWorld.js.page:8(title)
-msgid "Hello World (JavaScript)"
+#: C/spinbutton.js.page:119(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the text labels to go with the spinbuttons\n"
+"        this._startLabel = new Gtk.Label ({ label: \"There are \" });\n"
+"        this._kittenLabel = new Gtk.Label ({ label: \" kitten(s), and \"});\n"
+"        this._tunaLabel = new Gtk.Label ({ label: \" can(s) of tuna.\"});\n"
+"        this.perKitten = Math.floor((this._tuna.get_value() / this._kittens.get_value()));\n"
+"        this._lastLabel = new Gtk.Label ({\n"
+"            label: \"That's \" + this.perKitten + \" can(s) of tuna per kitten.\" });\n"
 msgstr ""
 
-#: C/helloWorld.js.page:23(desc)
-#, fuzzy
-#| msgid "A little bit more than a simple \"Hello world\" Gtk application."
-msgid "A basic \"hello, world\" application"
-msgstr "Un pouco máis que un simple aplicativo Gtk «Ola mundo»."
-
-#: C/helloWorld.js.page:26(title)
-msgid "Hello World"
+#: C/spinbutton.js.page:128(section/p)
+msgid ""
+"We create each <link xref=\"label.js\">Label</link> individually, and then "
+"string them together along with the SpinButtons. The last label needs to "
+"show the number of cans of tuna per kitten, so it has a variable in the "
+"middle, which corresponds to an equation that uses the SpinButtons' "
+"get_value functions to find out what they're set at. JavaScript's Math "
+"function's floor method is used to round the number of cans of tuna per "
+"kitten down to the nearest whole number."
 msgstr ""
 
-#: C/helloWorld.js.page:29(p)
-msgid "This tutorial will demonstrate how to:"
+#: C/spinbutton.js.page:130(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create a grid to put the spinbuttons and their labels in\n"
+"        this._spinGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            margin_bottom: 20 });\n"
+"\n"
+"        // Attach everything to the grid\n"
+"        this._spinGrid.attach (this._startLabel, 0, 0, 1, 1);\n"
+"        this._spinGrid.attach (this._kittens, 1, 0, 1, 1);\n"
+"        this._spinGrid.attach (this._kittenLabel, 2, 0, 1, 1);\n"
+"        this._spinGrid.attach (this._tuna, 3, 0, 1, 1);\n"
+"        this._spinGrid.attach (this._tunaLabel, 4, 0, 1, 1);\n"
+"\n"
+"        // Create a main grid to hold it and the last label\n"
+"        this._mainGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Attach the smaller grid and the last label to the main grid\n"
+"        this._mainGrid.attach (this._spinGrid, 0, 0, 1, 1);\n"
+"        this._mainGrid.attach (this._lastLabel, 0, 1, 1, 1);\n"
 msgstr ""
 
-#: C/helloWorld.js.page:31(p)
-#, fuzzy
-#| msgid ""
-#| "A little bit more than a simple \"Hello world\" application - write an "
-#| "image viewer in GTK."
-msgid "create a small \"Hello, World\" application using JavaScript and GTK+"
+#: C/spinbutton.js.page:154(section/p)
+msgid ""
+"Here we use <link xref=\"grid.js\">Grid</link> widgets to keep everything "
+"organized. One Grid holds the labels and SpinButtons in order, while the "
+"next puts that Grid on top and the final Label on the bottom."
 msgstr ""
-"Algo máis que un aplicativo sinxelo «Hola mundo» - escribir un visor de "
-"imaxes en GTK."
 
-#: C/helloWorld.js.page:32(p)
-msgid "make the <file>.desktop</file> file"
+#: C/spinbutton.js.page:155(section/p)
+msgid ""
+"There isn't a wrong way to organize things in Grids, so long as you like how "
+"it turns out. In this case, the top Grid has a margin on the bottom to keep "
+"it evenly spaced from the bottom Label, and the bottom Label is inside a "
+"separate Grid so it will be centered relative to the Labels and SpinButtons "
+"on the top."
 msgstr ""
 
-#: C/helloWorld.js.page:33(p)
-msgid "how to set up the build system"
+#: C/spinbutton.js.page:157(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Add the main grid to the window\n"
+"        this._window.add (this._mainGrid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
 msgstr ""
 
-#: C/helloWorld.js.page:41(title)
-msgid "Create the HelloWorld program"
+#: C/spinbutton.js.page:165(section/p) C/switch.js.page:153(section/p)
+msgid ""
+"Finally, we add the larger Grid to the window, then tell the window to show "
+"itself and all the widgets inside of it."
 msgstr ""
 
-#: C/helloWorld.js.page:46(p)
-msgid "This needs to be the first line of your script:"
+#: C/spinbutton.js.page:169(section/title)
+msgid "Function which handles the SpinButtons' numerical values being adjusted"
 msgstr ""
 
-#: C/helloWorld.js.page:48(p)
+#: C/spinbutton.js.page:171(section/code)
+#, no-wrap
 msgid ""
-"It tells the script to use <link href=\"https://live.gnome.org/Gjs/\";>Gjs</"
-"link>. Gjs is a JavaScript binding for GNOME."
+"\n"
+"    _newValue: function () {\n"
+"\n"
+"        // Update the label which shows how many cans there are per kitten\n"
+"        this.perKitten = Math.floor((this._tuna.get_value() / this._kittens.get_value()))\n"
+"        this._lastLabel.set_label (\"That's \" + this.perKitten + \" can(s) of tuna per kitten.\");\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
 msgstr ""
 
-#: C/helloWorld.js.page:55(p)
+#: C/spinbutton.js.page:182(section/p)
 msgid ""
-"In order for our script to work with GNOME, we need to import GNOME "
-"libraries via GObject Introspection. Here we import the language bindings "
-"and GTK+, the library which contains the graphical widgets used to make "
-"GNOME applications."
+"Here we update the perKitten variable based on the SpinButtons' new values, "
+"and use the set_label property to refresh what _lastLabel shows. Since both "
+"SpinButtons have their value-changed signal connected to this function, "
+"every time either of the numbers changes this function will update the Label."
 msgstr ""
 
-#: C/helloWorld.js.page:91(p)
+#: C/spinbutton.js.page:184(section/code)
+#, no-wrap
 msgid ""
-"GtkApplication initializes Gtk+. It also connects the <gui>x</gui> button "
-"that's automatically generated along with the window to the \"destroy\" "
-"signal."
+"\n"
+"// Run the application\n"
+"let app = new SpinButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/helloWorld.js.page:92(p)
+#: C/spinbutton.js.page:189(section/p)
 msgid ""
-"We can start building our first window. We do this by creating a variable "
-"called <var>_window</var> and assigning it a new Gtk.ApplicationWindow."
+"Finally, we create a new instance of the finished SpinButtonExample class, "
+"and set the application running."
 msgstr ""
 
-#: C/helloWorld.js.page:93(p)
+#: C/spinbutton.js.page:194(section/code)
+#, no-wrap
 msgid ""
-"We give the window a property called <var>title</var>. The title can be any "
-"string you want it to be. To be on the safe side, it's best to stick to "
-"UTF-8 encoding."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const SpinButtonExample = new Lang.Class({\n"
+"    Name: 'SpinButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsspinbutton'\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 20,\n"
+"            title: \"Kitten Feeder\"});\n"
+"\n"
+"        // Create the first spinbutton using a function\n"
+"        this._kittens = Gtk.SpinButton.new_with_range (1, 9001, 1);\n"
+"        this._kittens.connect (\"value-changed\", Lang.bind (this, this._newValue));\n"
+"\n"
+"        // Create an adjustment to use for the second spinbutton\n"
+"        this._adjustment = new Gtk.Adjustment ({\n"
+"            value: 1,\n"
+"            lower: 0,\n"
+"            upper: 9001,\n"
+"            step_increment: 1,\n"
+"            page_increment: 10 });\n"
+"\n"
+"        // Create the second spinbutton\n"
+"        this._tuna = new Gtk.SpinButton ({ adjustment: this._adjustment });\n"
+"        this._tuna.connect (\"value-changed\", Lang.bind (this, this._newValue));\n"
+"\n"
+"        // this._tuna.set_digits (1);\n"
+"        // this._tuna.set_wrap (true);\n"
+"\n"
+"        // Create the text labels to go with the spinbuttons\n"
+"        this._startLabel = new Gtk.Label ({ label: \"There are \" });\n"
+"        this._kittenLabel = new Gtk.Label ({ label: \" kitten(s), and \"});\n"
+"        this._tunaLabel = new Gtk.Label ({ label: \" can(s) of tuna.\"});\n"
+"        this.perKitten = Math.floor((this._tuna.get_value() / this._kittens.get_value()));\n"
+"        this._lastLabel = new Gtk.Label ({\n"
+"            label: \"That's \" + this.perKitten + \" can(s) of tuna per kitten.\" });\n"
+"\n"
+"        // Create a grid to put the spinbuttons and their labels in\n"
+"        this._spinGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            margin_bottom: 20 });\n"
+"\n"
+"        // Attach everything to the grid\n"
+"        this._spinGrid.attach (this._startLabel, 0, 0, 1, 1);\n"
+"        this._spinGrid.attach (this._kittens, 1, 0, 1, 1);\n"
+"        this._spinGrid.attach (this._kittenLabel, 2, 0, 1, 1);\n"
+"        this._spinGrid.attach (this._tuna, 3, 0, 1, 1);\n"
+"        this._spinGrid.attach (this._tunaLabel, 4, 0, 1, 1);\n"
+"\n"
+"        // Create a main grid to hold it and the last label\n"
+"        this._mainGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Attach the smaller grid and the last label to the main grid\n"
+"        this._mainGrid.attach (this._spinGrid, 0, 0, 1, 1);\n"
+"        this._mainGrid.attach (this._lastLabel, 0, 1, 1, 1);\n"
+"\n"
+"        // Add the main grid to the window\n"
+"        this._window.add (this._mainGrid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _newValue: function () {\n"
+"\n"
+"        // Update the label which shows how many cans there are per kitten\n"
+"        this.perKitten = Math.floor((this._tuna.get_value() / this._kittens.get_value()))\n"
+"        this._lastLabel.set_label (\"That's \" + this.perKitten + \" can(s) of tuna per kitten.\");\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new SpinButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/helloWorld.js.page:94(p)
+#: C/spinbutton.js.page:205(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Now we have a window which has a title and a working \"close\" button. Let's "
-"add the actual \"Hello World\" text."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.SpinButton.";
+"html\">Gtk.SpinButton</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/helloWorld.js.page:97(title)
+#: C/spinbutton.py.page:7(info/title)
 #, fuzzy
-#| msgid "Closing the window"
-msgid "Label for the window"
-msgstr "Pechar a xanela"
+#| msgid "SpinButton (Python)"
+msgctxt "text"
+msgid "SpinButton (Python)"
+msgstr "SpinButton (Python)"
+
+#: C/spinbutton.py.page:18(info/desc)
+msgid "Retrieve an integer or floating-point number from the user."
+msgstr "Obtendo un enteiro ou número en punto flotante desde o usuario."
+
+#: C/spinbutton.py.page:29(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"SpinButton Example\", application=app)\n"
+"        self.set_default_size(210, 70)\n"
+"        self.set_border_width(5)\n"
+"\n"
+"        # an adjustment (initial value, min value, max value,\n"
+"        # step increment - press cursor keys or +/- buttons to see!,\n"
+"        # page increment - not used here,\n"
+"        # page size - not used here)\n"
+"        ad = Gtk.Adjustment(0, 0, 100, 1, 0, 0)\n"
+"\n"
+"        # a spin button for integers (digits=0)\n"
+"        self.spin = Gtk.SpinButton(adjustment=ad, climb_rate=1, digits=0)\n"
+"        # as wide as possible\n"
+"        self.spin.set_hexpand(True)\n"
+"\n"
+"        # we connect the signal \"value-changed\" emitted by the spinbutton with the callback\n"
+"        # function spin_selected\n"
+"        self.spin.connect(\"value-changed\", self.spin_selected)\n"
+"\n"
+"        # a label\n"
+"        self.label = Gtk.Label()\n"
+"        self.label.set_text(\"Choose a number\")\n"
+"\n"
+"        # a grid to attach the widgets\n"
+"        grid = Gtk.Grid()\n"
+"        grid.attach(self.spin, 0, 0, 1, 1)\n"
+"        grid.attach(self.label, 0, 1, 2, 1)\n"
+"\n"
+"        self.add(grid)\n"
+"\n"
+"    # callback function: the signal of the spinbutton is used to change the text of the label\n"
+"    def spin_selected(self, event):\n"
+"        self.label.set_text(\"The number you selected is \" + str(self.spin.get_value_as_int()) + \".\")\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
+
+#: C/spinbutton.py.page:33(section/title)
+msgid "Useful methods for a SpinButton widget"
+msgstr "Métodos útiles para o widget SpinButton"
+
+#: C/spinbutton.py.page:34(section/p)
+msgid ""
+"For an explanation of signals and callback functions, see <link xref="
+"\"signals-callbacks.py\">this page</link>. An example is the <code>\"value-"
+"changed\"</code> signal, emitted when the value of the spinbutton changes."
+msgstr ""
+
+#: C/spinbutton.py.page:35(section/p)
+msgid ""
+"A Gtk.Adjustment is needed to construct the Gtk.SpinButton. This is the "
+"representation of a value with a lower and upper bound, together with step "
+"and page increments, and a page size, and it is constructed as <code>Gtk."
+"Adjustment(value, lower, upper, step_increment, page_increment, page_size)</"
+"code> where the fields are of type <code>float</code>; <code>step_increment</"
+"code> is the increment/decrement that is obtained by using the cursor keys "
+"or the buttons of the spinbutton. Note that <code>page_increment</code> and "
+"<code>page_size</code> are not used in this case, and they should be set to "
+"<code>0</code>."
+msgstr ""
 
-#: C/helloWorld.js.page:103(p)
+#: C/spinbutton.py.page:37(item/p)
 msgid ""
-"A text label is one of the GTK+ widgets we can use, on account of having "
-"imported the GTK+ library. To use it, we create a new variable called label, "
-"and assign it a new Gtk.Label. Then we give it properties inside the curly "
-"braces {}. In this case, we're setting the text that the label will hold. "
-"Finally, we create and run the application:"
+"If you want the value of the spinbutton to wrap around when they exceed the "
+"maximum or the minimum, set <code>set_wrap(True)</code>. The <code>\"wrapped"
+"\"</code> signal is emitted when this happens."
 msgstr ""
 
-#: C/helloWorld.js.page:109(p)
+#: C/spinbutton.py.page:38(item/p)
 msgid ""
-"Gtk.ApplicationWindow can only hold one widget at a time. To construct more "
-"elaborate programs you need to create a holder widget like Gtk.Grid inside "
-"the window, and then add all the other widgets to it."
+"<code>set_digits(digits)</code> sets the precision to be displayed by the "
+"spinbutton, up to 20 digits."
 msgstr ""
 
-#: C/helloWorld.js.page:113(title)
-msgid "helloWorld.js"
+#: C/spinbutton.py.page:39(item/p)
+msgid ""
+"To get the value of the spinbutton as an integer, use <code>get_value_as_int"
+"()</code>."
 msgstr ""
 
-#: C/helloWorld.js.page:114(p)
-msgid "The complete file:"
+#: C/spinbutton.py.page:47(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSpinButton.html";
+"\">GtkSpinButton</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/helloWorld.js.page:118(title)
+#: C/spinbutton.vala.page:7(info/title)
 #, fuzzy
-#| msgid "Run the application"
-msgid "Running the application from terminal"
-msgstr "Executar o aplicativo"
+#| msgid "SpinButton (Vala)"
+msgctxt "text"
+msgid "SpinButton (Vala)"
+msgstr "SpinButton (Vala)"
+
+#: C/spinbutton.vala.page:19(info/desc)
+msgid "Retrieve an integer or floating point number."
+msgstr ""
 
-#: C/helloWorld.js.page:119(p)
+#: C/spinbutton.vala.page:26(page/code)
+#, no-wrap
 msgid ""
-"To run this application, first save it as helloWorld.js. Then open Terminal, "
-"go to the folder where your application is stored and run:"
+"/* This is the application. */\n"
+"public class MyApplication : Gtk.Application {\n"
+"\tGtk.Label label;\n"
+"\n"
+"\t/* Override the 'activate' signal of GLib.Application. */\n"
+"\tprotected override void activate () {\n"
+"\t\tvar window = new Gtk.ApplicationWindow (this);\n"
+"\t\twindow.title = \"SpinButton Example\";\n"
+"\t\twindow.set_default_size (210, 70);\n"
+"\t\twindow.set_border_width (5);\n"
+"\n"
+"\t\tvar spinbutton = new Gtk.SpinButton.with_range (0, 100, 1);\n"
+"\t\tspinbutton.set_hexpand (true);\n"
+"\n"
+"\t\tlabel = new Gtk.Label (\"Choose a number\");\n"
+"\n"
+"\t\tvar grid = new Gtk.Grid ();\n"
+"\t\tgrid.attach (spinbutton, 0, 0, 1, 1);\n"
+"\t\tgrid.attach (label, 0, 1, 1, 1);\n"
+"\n"
+"\t\tspinbutton.value_changed.connect (this.value_changed_cb);\n"
+"\n"
+"\t\twindow.add (grid);\n"
+"\t\twindow.show_all ();\n"
+"\t}\n"
+"\n"
+"\tvoid value_changed_cb (Gtk.SpinButton spin) {\n"
+"\t\tlabel.set_text (\"The number you selected is %.0f.\".printf (spin.get_value()));\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* main creates and runs the application. */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/helloWorld.js.page:120(input)
+#: C/spinbutton.vala.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.SpinButton.html\";>Gtk."
+"SpinButton</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/spinner.c.page:23(media) C/spinner.js.page:21(media)
+#: C/spinner.py.page:21(media) C/spinner.vala.page:21(media)
 #, fuzzy
-#| msgid "helloWorld.desktop"
-msgid "gjs helloWorld.js"
-msgstr "holaMundo.desktop"
+#| msgid "@@image: 'media/spinner.png'; md5=d04f2d81f1d72c6c2f97e8729947dfed"
+msgctxt "_"
+msgid "external ref='media/spinner.png' md5='d04f2d81f1d72c6c2f97e8729947dfed'"
+msgstr "@@image: 'media/spinner.png'; md5=d04f2d81f1d72c6c2f97e8729947dfed"
 
-#: C/helloWorld.js.page:126(title)
-msgid "The <file>.desktop.in</file> file"
+#: C/spinner.c.page:7(info/title)
+#, fuzzy
+#| msgid "Spinner (C)"
+msgctxt "text"
+msgid "Spinner (C)"
+msgstr "Spinner (C)"
+
+#: C/spinner.c.page:18(info/desc) C/spinner.js.page:17(info/desc)
+#: C/spinner.py.page:17(info/desc) C/spinner.vala.page:17(info/desc)
+msgid "A spinner animation"
+msgstr "Unha animación spinner"
+
+#: C/spinner.c.page:21(page/title) C/spinner.js.page:20(page/title)
+#: C/spinner.py.page:20(page/title) C/spinner.vala.page:20(page/title)
+msgid "Spinner"
+msgstr "Indicador de progreso"
+
+#: C/spinner.c.page:24(page/p) C/spinner.js.page:22(page/p)
+#: C/spinner.py.page:22(page/p) C/spinner.vala.page:22(page/p)
+msgid "This Spinner is stopped and started by pressing the spacebar."
 msgstr ""
 
-#: C/helloWorld.js.page:127(p)
+#: C/spinner.c.page:26(page/code)
+#, no-wrap
 msgid ""
-"Running applications from the Terminal is useful at the beginning of the "
-"application making process. To have fully working <link href=\"http://";
-"library.gnome.org/admin/system-admin-guide/stable/mimetypes-9.html.en"
-"\">application integration</link> in GNOME 3 requires a desktop launcher. "
-"For this you need to create a <file>.desktop</file> file. The <file>."
-"desktop</file> file describes the application name, the used icon and "
-"various integration bits. A deeper insight into the <file>.desktop</file> "
-"file can be found <link href=\"http://developer.gnome.org/desktop-entry-spec/";
-"\">here</link>. The <file>.desktop.in</file> file will create the <file>."
-"desktop</file>."
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+" \n"
+"\n"
+"\n"
+" /*Global variable used to indicate active state of the\n"
+"spinner. TRUE = active, FALSE = not-active. This is because \n"
+"there isn't a current function for C that does this for us*/\n"
+"gboolean active;  \n"
+" \n"
+"\n"
+"\n"
+"/*This is the callback function. It is a handler function \n"
+"which reacts to the signal. In this case, it will cause the \n"
+"spinner to start and stop according to how many times the user \n"
+"presses the spacebar.*/ \n"
+"static gboolean\n"
+"key_pressed_event (GtkWidget *widget,\n"
+"                   GdkEvent  *event,\n"
+"                   gpointer   user_data)\n"
+"{\n"
+"  GtkWidget *spinner = user_data;\n"
+"  guint keyval;\n"
+"  \n"
+"  /*Extracts the keyval from an event. And stores it in the  variable \n"
+"  \"keyval\" (we give the function the address). In this case, the \n"
+"  event is GdkEventKey, a key press event*/\n"
+"  gdk_event_get_keyval (event, &amp;keyval);  \n"
+"\n"
+"  /*Grabbing the boolean value from the spinner*/\n"
+"  g_object_get (GTK_SPINNER (spinner), \"active\", &amp;active, NULL);\n"
+"  \n"
+"  if (keyval == GDK_KEY_space) {\n"
+"     if (active) {\n"
+"         gtk_spinner_stop (GTK_SPINNER (spinner));\n"
+"     }\n"
+"     else {\n"
+"         gtk_spinner_start (GTK_SPINNER (spinner));\n"
+"     } \n"
+"  }\n"
+"  \n"
+"return TRUE;\n"
+"}\n"
+" \n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *spinner;\n"
+" \n"
+"  /*Create a window with a title, border width and a default size*/\n"
+"  window = gtk_application_window_new (app);\n"
+" \n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Spinner Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);\n"
+"  gtk_container_set_border_width (GTK_CONTAINER(window), 30);\n"
+" \n"
+"  /*Create a spinner, with extra horizontal and vertical space*/\n"
+"  spinner = gtk_spinner_new ();\n"
+"  gtk_spinner_start (GTK_SPINNER (spinner));\n"
+"  \n"
+"  gtk_container_add (GTK_CONTAINER (window), spinner);\n"
+" \n"
+"  /*Connecting the key-press-event signal to the callback*/\n"
+"  g_signal_connect (GTK_WINDOW (window), \"key-press-event\", \n"
+"                    G_CALLBACK (key_pressed_event), spinner);\n"
+" \n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+" \n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+" \n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+" \n"
+"  return status;\n"
+"}\n"
 msgstr ""
 
-#: C/helloWorld.js.page:130(p)
+#: C/spinner.c.page:34(item/p)
 msgid ""
-"Before continuing, resave <file>helloWorld.js</file> as <file>helloWorld</"
-"file>. Then run this in the command line:"
+"<link href=\"http://developer.gnome.org/gobject/stable/gobject-The-Base-";
+"Object-Type.html#g-object-get\">GObject</link>"
 msgstr ""
 
-#: C/helloWorld.js.page:131(input)
-msgid "chmod +x helloWorld"
+#: C/spinner.c.page:35(item/p) C/togglebutton.c.page:37(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkSpinner.html";
+"\">GtkSpinner</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/helloWorld.js.page:134(p)
+#: C/spinner.js.page:7(info/title)
+#, fuzzy
+#| msgid "Spinner (JavaScript)"
+msgctxt "text"
+msgid "Spinner (JavaScript)"
+msgstr "Spinner (JavaScript)"
+
+#: C/spinner.js.page:24(page/code)
+#, no-wrap
 msgid ""
-"The example shows you the minimum requirements for a <code>.desktop.in</"
-"code> file."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Gdk = imports.gi.Gdk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const SpinnerExample = new Lang.Class ({\n"
+"    Name: 'Spinner Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jsspinner',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Spinner Example\",\n"
+"            default_height: 200,\n"
+"            default_width: 200,\n"
+"            border_width: 30 });\n"
+"\n"
+"        // Create a spinner which starts spinning automatically\n"
+"        this._spinner = new Gtk.Spinner ({active: true});\n"
+"        this._window.add (this._spinner);\n"
+"\n"
+"        // Connect a keypress event to the function that makes it start or stop spinning\n"
+"        this._window.connect(\"key-press-event\", Lang.bind(this, this._onKeyPress));\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onKeyPress: function(widget, event) {\n"
+"\n"
+"        // Get the value of the key that was pressed\n"
+"        let keyval = event.get_keyval()[1];\n"
+"\n"
+"        // If it was the spacebar, toggle the spinner to start or stop\n"
+"        if (keyval == Gdk.KEY_space) {\n"
+"            if (this._spinner.active == true)\n"
+"                this._spinner.stop();\n"
+"            else\n"
+"                this._spinner.start();\n"
+"        }\n"
+"    }\n"
+"\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new SpinnerExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/helloWorld.js.page:137(p)
-msgid "Now let's go through some parts of the <code>.desktop.in</code> file."
+#: C/spinner.js.page:29(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gdk.html\";>Gdk - "
+"Key Values</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/helloWorld.js.page:139(p)
+#: C/spinner.js.page:32(item/p) C/togglebutton.js.page:157(item/p)
 #, fuzzy
-#| msgid "Run the application"
-msgid "The application name."
-msgstr "Executar o aplicativo"
-
-#: C/helloWorld.js.page:140(title)
-msgid "Comment"
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Spinner.html";
+"\">Gtk.Spinner</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/helloWorld.js.page:140(p)
+#: C/spinner.py.page:7(info/title)
 #, fuzzy
-#| msgid "Designing the application"
-msgid "A short description of the application."
-msgstr "Deseñar o aplicativo"
-
-#: C/helloWorld.js.page:141(title)
-msgid "Exec"
-msgstr ""
+#| msgid "Spinner (Python)"
+msgctxt "text"
+msgid "Spinner (Python)"
+msgstr "Spinner (Python)"
 
-#: C/helloWorld.js.page:141(p)
+#: C/spinner.py.page:29(section/code)
+#, no-wrap
 msgid ""
-"Specifies a command to execute when you choose the application from the "
-"menu. In this example exec just tells where to find the <file>helloWorld</"
-"file> file and the file takes care of the rest."
+"from gi.repository import Gtk\n"
+"from gi.repository import Gdk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Spinner Example\", application=app)\n"
+"        self.set_default_size(200, 200)\n"
+"        self.set_border_width(30)\n"
+"\n"
+"        # a spinner\n"
+"        self.spinner = Gtk.Spinner()\n"
+"        # that by default spins\n"
+"        self.spinner.start()\n"
+"        # add the spinner to the window\n"
+"        self.add(self.spinner)\n"
+"\n"
+"    # event handler\n"
+"    # a signal from the keyboard (space) controls if the spinner stops/starts\n"
+"    def do_key_press_event(self, event):\n"
+"        # keyname is the symbolic name of the key value given by the event\n"
+"        keyname = Gdk.keyval_name(event.keyval)\n"
+"        # if it is \"space\"\n"
+"        if keyname == \"space\":\n"
+"            # and the spinner is active\n"
+"            if self.spinner.get_property(\"active\"):\n"
+"                # stop the spinner\n"
+"                self.spinner.stop()\n"
+"            # if the spinner is not active\n"
+"            else:\n"
+"                # start it again\n"
+"                self.spinner.start()\n"
+"        # stop the signal emission\n"
+"        return True\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/helloWorld.js.page:142(title)
-msgid "Terminal"
+#: C/spinner.py.page:31(note/p)
+msgid ""
+"<code>Gdk.keyval_name(event.keyval)</code> converts the key value "
+"<code>event.keyval</code> into a symbolic name. The names and corresponding "
+"key values can be found <link href=\"http://git.gnome.org/browse/gtk+/tree/";
+"gdk/gdkkeysyms.h\">here</link>,but for instance <code>GDK_KEY_BackSpace</"
+"code> becomes the string <code>\"BackSpace\"</code>."
 msgstr ""
 
-#: C/helloWorld.js.page:142(p)
+#: C/spinner.py.page:40(item/p) C/togglebutton.py.page:47(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Specifies whether the command in the Exec key runs in a terminal window."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSpinner.html";
+"\">GtkSpinner</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/helloWorld.js.page:145(p)
+#: C/spinner.py.page:41(item/p)
 msgid ""
-"To put your application into the appropriate category, you need to add the "
-"necessary categories to the Categories line. More information on the "
-"different categories can be found in the <link href=\"http://standards.";
-"freedesktop.org/menu-spec/latest/apa.html\">menu specification</link>."
+"<link href=\"http://developer.gnome.org/gdk/stable/gdk-Keyboard-Handling.html";
+"\">Key Values</link>"
 msgstr ""
 
-#: C/helloWorld.js.page:146(p)
+#: C/spinner.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Spinner (Vala)"
+msgctxt "text"
+msgid "Spinner (Vala)"
+msgstr "Spinner (Vala)"
+
+#: C/spinner.vala.page:24(page/code)
+#, no-wrap
 msgid ""
-"In this example we use an existing icon. For a custom icon you need to have "
-"a .svg file of your icon, stored in <file>/usr/share/icons/hicolor/scalable/"
-"apps</file>. Write the name of your icon file to the .desktop.in file, on "
-"line 7. More information on icons in: <link href=\"http://library.gnome.org/";
-"admin/system-admin-guide/stable/themes-11.html.en\"> Installing Icons for "
-"Themes </link>, <link href=\"https://live.gnome.org/GnomeGoals/AppIcon";
-"\">Installing Icons for Themes</link> and <link href=\"http://freedesktop.";
-"org/wiki/Specifications/icon-theme-spec\">on freedesktop.org: Specifications/"
-"icon-theme-spec</link>."
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\tGtk.Widget spinner;\n"
+"\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\n"
+"\t\tObject (application: app, title: \"Spinner Example\");\n"
+"\n"
+"\t\tthis.set_default_size (200, 200);\n"
+"\t\tthis.border_width = 30;\n"
+"\n"
+"\t\tspinner = new Gtk.Spinner ();\n"
+"\n"
+"\t\tthis.add (spinner);\n"
+"\t\t(spinner as Gtk.Spinner).active = true;\n"
+"\t\tspinner.show ();\n"
+"\t}\n"
+"\n"
+"\tprotected override bool key_press_event (Gdk.EventKey event) {\n"
+"\n"
+"\t\t//print (Gdk.keyval_name(event.keyval) +\"\\n\");\n"
+"\t\tif (Gdk.keyval_name(event.keyval) == \"space\") {\n"
+"\n"
+"\t\t\tif ((spinner as Gtk.Spinner).active) {\n"
+"\t\t\t\t(spinner as Gtk.Spinner).stop ();\n"
+"\t\t\t\t//spinner.visible = false;\n"
+"\t\t\t}\n"
+"\t\t\telse {\n"
+"\t\t\t\t(spinner as Gtk.Spinner).start ();\n"
+"\t\t\t\t//spinner.visible = true;\n"
+"\t\t\t}\n"
+"\t\t}\n"
+"\t\treturn true;\n"
+"\t}\n"
+"}\n"
+"\n"
+"public class MyApplication : Gtk.Application {\n"
+"\n"
+"\tprotected override void activate () {\n"
+"\t\tMyWindow window = new MyWindow (this);\n"
+"\t\twindow.show ();\n"
+"\t}\n"
+"\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.spinner\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/helloWorld.js.page:149(title)
-msgid "The build system"
+#: C/spinner.vala.page:29(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Widget.html\";>Gtk.Widget</"
+"link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/helloWorld.js.page:150(p)
+#: C/spinner.vala.page:30(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"To make your application truly a part of the GNOME 3 system you need to "
-"install it with the help of autotools. The autotools build will install all "
-"the necessary files to all the right places."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Spinner.html\";>Gtk.Spinner</"
+"link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/helloWorld.js.page:151(p)
-msgid "For this you need to have the following files:"
+#: C/spinner.vala.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gdk-3.0/Gdk.keyval_name.html\";>Gdk."
+"keyval_name</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/helloWorld.js.page:157(p)
-msgid "After the <file>autogen.sh</file> file is ready and saved, run:"
-msgstr ""
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/statusbar.c.page:26(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/statusbar3.png'; md5=60c71604fb44656237ee66dfb39a8689"
+msgctxt "_"
+msgid ""
+"external ref='media/statusbar3.png' md5='60c71604fb44656237ee66dfb39a8689'"
+msgstr "@@image: 'media/statusbar3.png'; md5=60c71604fb44656237ee66dfb39a8689"
 
-#: C/helloWorld.js.page:158(input)
+#: C/statusbar.c.page:7(info/title)
 #, fuzzy
-#| msgid "autogen.sh"
-msgid "chmod +x autogen.sh"
-msgstr "autogen.sh"
+#| msgid "Statusbar (C)"
+msgctxt "text"
+msgid "Statusbar (C)"
+msgstr "Barra de estado (C)"
 
-#: C/helloWorld.js.page:172(title)
-msgid "README"
+#: C/statusbar.c.page:21(info/desc) C/statusbar.py.page:20(info/desc)
+#: C/statusbar.vala.page:20(info/desc)
+msgid "Report messages of minor importance to the user"
+msgstr "Mensaxe de informe de menos importancia para o usuario"
+
+#: C/statusbar.c.page:24(page/title) C/statusbar.js.page:20(page/title)
+#: C/statusbar.py.page:23(page/title) C/statusbar.vala.page:23(page/title)
+msgid "Statusbar"
+msgstr "Barra de estado"
+
+#: C/statusbar.c.page:27(page/p)
+msgid ""
+"This statusbar is used to demonstrate how messages are stacked in a last-in-"
+"first-out order. The message at the top of the stack is always the one "
+"displayed."
+msgstr ""
+"Esta barra de estado úsase para demostrar como se apilan mensaxes nunha orde "
+"«o último que entra é o primeiro que sae». A mensaxe da parte superior da "
+"pila sempre se mostrará."
+
+#: C/statusbar.c.page:29(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/*Callback function in which pushes an item onto the statusbar*/\n"
+"static void \n"
+"push_item (GtkWidget *widget,\n"
+"           gpointer   data)\n"
+"{\n"
+"  GtkWidget *status_bar = data;\n"
+"\n"
+"  /*Create a context id, which is used to uniquely identify \n"
+"   *the source of a message*/\n"
+"  guint context_id = gtk_statusbar_get_context_id (GTK_STATUSBAR (status_bar), \n"
+"                                                   \"Statusbar example\");\n"
+"\n"
+"  /*Count is used to keep track of the amount of items \n"
+"  the user is pushing/popping*/\n"
+"  static int count = 1;\n"
+"  char hold_output[20];\n"
+"  \n"
+"  /*This is a safer form of the standard sprintf () function. The output is \n"
+"  gauranteed in this case to not exceed 20 characters, and the result is stored \n"
+"  into the 'hold_output' variable*/\n"
+"  g_snprintf (hold_output, 20, \"Item %d\", count++);\n"
+"  gtk_statusbar_push (GTK_STATUSBAR (status_bar), \n"
+"                     context_id, \n"
+"                     hold_output);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/*Callback function that is used to pop an item off the statusbar*/\n"
+"static void \n"
+"pop_item (GtkWidget *widget,\n"
+"          gpointer   data )\n"
+"{\n"
+"  GtkWidget *status_bar = data;\n"
+"  guint context_id = gtk_statusbar_get_context_id (GTK_STATUSBAR (status_bar), \n"
+"                                                   \"Statusbar example\");\n"
+"\n"
+"  gtk_statusbar_pop (GTK_STATUSBAR (status_bar), context_id);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"    GtkWidget *grid;\n"
+"    GtkWidget *window;\n"
+"    GtkWidget *status_bar;\n"
+"    GtkWidget *pop_button;\n"
+"    GtkWidget *push_button;\n"
+"\n"
+"    /*Create a window with a title, border width, and a default size**/\n"
+"    window = gtk_application_window_new (app);\n"
+"    gtk_window_set_default_size (GTK_WINDOW (window), 220, 100);\n"
+"    gtk_window_set_title (GTK_WINDOW (window), \"Statusbar Example\");\n"
+"    gtk_container_set_border_width (GTK_CONTAINER(window), 10);\n"
+"    \n"
+"    /*Create the status bar, which is held in the global variable*/\n"
+"    status_bar = gtk_statusbar_new ();      \n"
+"    \n"
+"    /*Create the buttons with labels*/\n"
+"    push_button = gtk_button_new_with_label (\"push item\");\n"
+"    pop_button = gtk_button_new_with_label (\"pop last item\");\n"
+"    \n"
+"    /*Create the grid, and attach the buttons/statusbar accordingly*/\n"
+"    grid = gtk_grid_new ();\n"
+"    gtk_grid_attach (GTK_GRID (grid), push_button, 0,1,1,1);\n"
+"    gtk_grid_attach (GTK_GRID (grid), pop_button, 0,2,1,1);\n"
+"    gtk_grid_attach (GTK_GRID (grid), status_bar, 0,3,1,1);\n"
+"    \n"
+"    /*Connecting the clicked signals to the corresponding callback functions*/\n"
+"    g_signal_connect (GTK_BUTTON (push_button), \"clicked\", \n"
+"                      G_CALLBACK (push_item), status_bar);\n"
+"    g_signal_connect (GTK_BUTTON (pop_button), \"clicked\", \n"
+"                      G_CALLBACK (pop_item), status_bar);\n"
+"    \n"
+"    /*Attach the grid holding the child widgets onto the window, and show all*/\n"
+"    gtk_container_add (GTK_CONTAINER (window), grid);\n"
+"    gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
 msgstr ""
 
-#: C/helloWorld.js.page:173(p)
-msgid "Information users should read first. This file can be blank."
+#: C/statusbar.c.page:37(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkStatusbar.htmll";
+"\">GtkStatusBar</link>"
 msgstr ""
 
-#: C/helloWorld.js.page:175(p)
+#: C/statusbar.c.page:38(item/p)
 msgid ""
-"When you have the <file>helloWorld</file>, <file>helloWorld.desktop.in</"
-"file>, <file>Makefile.am</file>, <file>configure.ac</file> and <file>autogen."
-"sh</file> files with correct information and rights, the <file>README</file> "
-"file can include the following instructions:"
+"<link href=\"http://developer.gnome.org/glib/stable/glib-String-Utility-";
+"Functions.html#g-snprintf\">String Utility Functions</link>"
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/hellognome.js.page:64(None)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/statusbar.js.page:21(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/statusbar2.png'; md5=ff6f7e5b270827ca98b2d5f7087aa766"
+msgctxt "_"
 msgid ""
-"@@image: 'media/hellognomewebapp.png'; md5=948efb6148ede3bc6b47b4b0bbe4a74f"
-msgstr ""
+"external ref='media/statusbar2.png' md5='ff6f7e5b270827ca98b2d5f7087aa766'"
+msgstr "@@image: 'media/statusbar2.png'; md5=ff6f7e5b270827ca98b2d5f7087aa766"
 
-#: C/hellognome.js.page:16(desc)
+#: C/statusbar.js.page:7(info/title)
 #, fuzzy
-#| msgid "A first Gtk application"
-msgid "Your first GNOME application!"
-msgstr "Un primeiro aplicativo en GTK"
+#| msgid "Statusbar (JavaScript)"
+msgctxt "text"
+msgid "Statusbar (JavaScript)"
+msgstr "Barra de estado (JavaScript)"
 
-#: C/hellognome.js.page:19(title)
-msgid "1. Hello, GNOME!"
-msgstr ""
+#: C/statusbar.js.page:17(info/desc)
+msgid "Show notifications in a dedicated statusbar"
+msgstr "Mostrar notificacións na barra de estado adicada"
 
-#: C/hellognome.js.page:21(p)
+#: C/statusbar.js.page:22(page/p)
 msgid ""
-"This tutorial will show you how to write your first GNOME application in "
-"JavaScript. You will use JavaScript to write for GNOME the same way you "
-"would for the web. Afterwards, you will learn how to use \"native\" widgets, "
-"to write applications that look and feel like other GNOME apps."
+"This statusbar keeps track of how many times you've clicked a button. "
+"Applications like <link href=\"http://projects.gnome.org/gedit/\";>gedit</"
+"link> use statusbars to display information at a glance, and show "
+"notifications without interrupting the user."
 msgstr ""
 
-#: C/hellognome.js.page:22(p)
+#: C/statusbar.js.page:23(page/p)
 msgid ""
-"Have you gotten GNOME installed on your computer, and <link xref=\"set-up-"
-"gedit.js\">gedit</link> set up to write code with? You'll want to do these "
-"things first."
-msgstr ""
-
-#: C/hellognome.js.page:28(title)
-msgid "Let's start with a web page"
+"Messages pushed to a statusbar go on top of its stack, and can be popped off "
+"to show the next-most recent one. You can also clear away every message of a "
+"specific type all at once. This sample application demonstrates these "
+"functions."
 msgstr ""
 
-#: C/hellognome.js.page:30(p)
+#: C/statusbar.js.page:40(section/code)
+#, no-wrap
 msgid ""
-"Here's some basic HTML, CSS, and JavaScript code. Does this look familiar?"
+"\n"
+"const StatusbarExample = new Lang.Class({\n"
+"    Name: 'Statusbar Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsstatusbar',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
 msgstr ""
 
-#: C/hellognome.js.page:62(p)
+#: C/statusbar.js.page:66(section/p)
 msgid ""
-"Let's save this as <file>hellognome.html</file>, and see what it looks like "
-"when we run it!"
+"All the code for this sample goes in the StatusbarExample class. The above "
+"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
+"go in."
 msgstr ""
 
-#: C/hellognome.js.page:66(p)
+#: C/statusbar.js.page:67(section/code)
+#, no-wrap
 msgid ""
-"You <em>can</em> run the above code by opening <file>hellognome.html</file> "
-"in a web browser. But here, we're going to create a GNOME application that "
-"runs our web app inside of it, just like you see in the screenshot. You'll "
-"be able to resize and maximize the window, and click the X in the corner to "
-"close it, just like you'd expect from any other GNOME app. The difference is "
-"that this one will run our web code inside of it."
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 120,\n"
+"            default_width: 300,\n"
+"            title: \"Button Clicker\"});\n"
+"\n"
+"        // Create a paned interface\n"
+"        this._panes = new Gtk.Paned ({\n"
+"            orientation: Gtk.Orientation.VERTICAL });\n"
 msgstr ""
 
-#: C/hellognome.js.page:67(p)
+#: C/statusbar.js.page:83(section/p)
 msgid ""
-"The best part? We're going to continue to use JavaScript, to write all the "
-"parts that make our app work with GNOME. Let's look at the code, and see how "
-"it's done!"
+"The _buildUI function is where we put all the code to create the "
+"application's user interface. The first step is creating a new <link href="
+"\"GtkApplicationWindow.js.page\">Gtk.ApplicationWindow</link> to put all our "
+"widgets into. The next step is to create a vertically-oriented <link href="
+"\"paned.js.page\">Gtk.Paned</link> interface, to divide the window up into "
+"two sections. This way the statusbar looks like those used in other "
+"applications, and it stays at the bottom of the window, even if the user "
+"resizes it."
 msgstr ""
 
-#: C/hellognome.js.page:71(title)
-#, fuzzy
-#| msgid "Designing the application"
-msgid "Creating a GNOME window to frame our web app"
-msgstr "Deseñar o aplicativo"
+#: C/statusbar.js.page:87(section/title)
+msgid "Creating the buttons"
+msgstr "Crear os botóns"
 
-#: C/hellognome.js.page:73(p)
+#: C/statusbar.js.page:88(section/code)
+#, no-wrap
 msgid ""
-"First, we need to tell GNOME that this is a JavaScript application, which "
-"uses gjs. Gjs is GNOME's way of turning your JavaScript code into "
-"instructions it understands, so this line always has to go at the start of "
-"your applications."
+"\n"
+"        // Create the main button\n"
+"        this._clickMe = new Gtk.Button ({\n"
+"            label: \"Click Me!\" });\n"
+"        this._clickMe.connect (\"clicked\", Lang.bind (this, this._clicked));\n"
+"\n"
+"        // Create the back button\n"
+"        this._backButton = new Gtk.Button ({\n"
+"            label: \"gtk-go-back\",\n"
+"            use_stock: true });\n"
+"        this._backButton.connect (\"clicked\", Lang.bind (this, this._back));\n"
+"\n"
+"        // Create the clear button\n"
+"        this._clearButton = new Gtk.Button ({\n"
+"            label: \"gtk-clear\",\n"
+"            use_stock: true });\n"
+"        this._clearButton.connect (\"clicked\", Lang.bind (this, this._clear));\n"
 msgstr ""
 
-#: C/hellognome.js.page:77(p)
-msgid "After that, we need to tell GNOME which libraries we want to import."
+#: C/statusbar.js.page:106(section/p)
+msgid ""
+"This code creates the three <link href=\"button.js.page\">Gtk.Buttons</link> "
+"we'll use to push a new message to the statusbar, pop the last one off, and "
+"clear all existing messages. The \"back\" and \"clear\" buttons are <link "
+"href=\"http://developer.gnome.org/gtk/2.24/gtk-Stock-Items.html\";>stock "
+"buttons</link>, which are automatically translated into any language GNOME "
+"supports."
 msgstr ""
 
-#: C/hellognome.js.page:84(p)
+#: C/statusbar.js.page:108(section/code)
+#, no-wrap
 msgid ""
-"Just like how add-on libraries like jQuery let us do extra things with "
-"JavaScript, each of these libraries gives us new capabilities for our GNOME "
-"apps:"
+"\n"
+"        // Put the buttons in a grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"        this._grid.attach (this._backButton, 0, 0, 1, 1);\n"
+"        this._grid.attach_next_to (this._clickMe, this._backButton, Gtk.PositionType.RIGHT, 1, 1);\n"
+"        this._grid.attach_next_to (this._clearButton, this._clickMe, Gtk.PositionType.RIGHT, 1, 1);\n"
+"\n"
+"        // Put the grid in a large frame that fills most of the window\n"
+"        this._topFrame = new Gtk.Frame ({\n"
+"            border_width: 20,\n"
+"            height_request: 90,\n"
+"            width_request: 300});\n"
+"        this._topFrame.add (this._grid);\n"
 msgstr ""
 
-#: C/hellognome.js.page:86(p)
+#: C/statusbar.js.page:124(section/p)
 msgid ""
-"<file>Gtk</file> and <file>Lang</file> are basic parts of any GNOME "
-"application, which let you create windows and widgets and tie them together."
+"This code creates the <link href=\"grid.js.page\">Gtk.Grid</link> that we'll "
+"use to organize the buttons, and attaches the buttons to it in order. It "
+"then creates a <link href=\"paned.js.page\">Gtk.Frame</link> which will take "
+"up most of the window and has a large amount of padding around the buttons, "
+"and adds the Grid to the Frame. Note that we still need to put the Frame "
+"into the Paned interface, and then add it to the ApplicationWindow."
 msgstr ""
 
-#: C/hellognome.js.page:87(p)
+#: C/statusbar.js.page:128(section/title)
+msgid "Creating the statusbar"
+msgstr "Crear a barra de estado"
+
+#: C/statusbar.js.page:129(section/code)
+#, no-wrap
 msgid ""
-"<file>GLib</file> is a helper library, which lets us do things like tell "
-"GNOME where the <file>hellognome.html</file> file we created is."
+"\n"
+"        // Create the statusbar\n"
+"        this._statusbar = new Gtk.Statusbar();\n"
+"\n"
+"        // Keep track of the number of times the button has been clicked\n"
+"        this.Clicks = 0;\n"
+"        this.ContextID = this._statusbar.get_context_id (\"Number of Clicks\");\n"
+"\n"
+"        // Give the statusbar an initial message\n"
+"        this._statusbar.push (this.ContextID, \"Number of clicks: \" + this.Clicks);\n"
+"\n"
+"        // Put the statusbar in its own frame at the bottom\n"
+"        this._barFrame = new Gtk.Frame ({\n"
+"            height_request: 30 });\n"
+"        this._barFrame.add (this._statusbar);\n"
 msgstr ""
 
-#: C/hellognome.js.page:88(p)
+#: C/statusbar.js.page:145(section/p)
 msgid ""
-"And <file>Webkit</file> is a web rendering engine, which we'll use to "
-"basically create a browser window to open our HTML file with."
+"Here we create the Gtk.Statusbar, and push a message to it to start off "
+"with. Then we give it its own narrow frame at the bottom of the window."
 msgstr ""
 
-#: C/hellognome.js.page:91(p)
-#, fuzzy
-#| msgid "How to write a Gtk application in C"
-msgid "Now we create the application itself:"
-msgstr "Como escribir un aplicativo GTK en C"
-
-#: C/hellognome.js.page:96(p)
+#: C/statusbar.js.page:146(section/p)
 msgid ""
-"This will look familiar to you if you've worked with object-oriented "
-"JavaScript before. That's right; our whole application is a class called "
-"HelloGNOME. And as you can see, we've given it a property that says what its "
-"name is."
+"Every message needs to have a context id, which is an integer value you can "
+"get from the statusbar with the get_context_id() function. Its only "
+"parameter is the string value you use to describe that particular context "
+"id. Normally, you'll get a new context id for different kinds of messages, "
+"so that you can use the remove() function to remove a specific message and "
+"not just the most recent one on the stack. This is a simple example with "
+"only one kind of message, though, so we're just using one for everything."
 msgstr ""
 
-#: C/hellognome.js.page:118(p)
+#: C/statusbar.js.page:147(section/p)
 msgid ""
-"Here's some code you will more or less copy-and-paste for every JavaScript "
-"application you build. It creates a new Application, and then binds its "
-"activate and startup signals to functions that make the window show itself "
-"and build its user interface, respectively."
+"We use the push() function to push a new message onto the stack. Its first "
+"parameter is the context id, and its second is the message."
 msgstr ""
 
-#: C/hellognome.js.page:119(p)
+#: C/statusbar.js.page:148(section/code)
+#, no-wrap
 msgid ""
-"What does that mean? Well, everything in a GNOME application sends out a "
-"signal when something important happens. A button might send out the clicked "
-"signal when you click on it, for instance. Our job is to connect the signals "
-"to functions which handle them, and make the things that we want to have "
-"happen occur. We do this using each object's connect method, which takes two "
-"arguments: The signal we want to handle, and the Lang.bind function, which "
-"we have to use to tell connect which function we want to have handle the "
-"signal."
+"\n"
+"        // Assemble the frames into the paned interface\n"
+"        this._panes.pack1 (this._topFrame, true, false);\n"
+"        this._panes.pack2 (this._barFrame, false, false);\n"
+"\n"
+"        // Put the panes into the window\n"
+"        this._window.add (this._panes);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
 msgstr ""
 
-#: C/hellognome.js.page:120(p)
+#: C/statusbar.js.page:160(section/p)
 msgid ""
-"In this case, we want _onActivate to handle the activate signal, and "
-"_onStartup to handle the startup signal. _onActivate just tells the window "
-"to present itself; so basically, whenever you <keyseq><key>Alt</"
-"key><key>Tab</key></keyseq> to the application it appears, like you would "
-"expect it to. _onStartup calls _buildUI, which is the function that creates "
-"our user interface and is the next part that we will look at."
+"This code finishes up creating the window, by packing the frames into the "
+"pane, adding it to the window, and telling the window to show all child "
+"widgets."
+msgstr ""
+
+#: C/statusbar.js.page:164(section/title)
+msgid "Functions for interacting with the statusbar"
 msgstr ""
 
-#: C/hellognome.js.page:121(p)
+#: C/statusbar.js.page:165(section/code)
+#, no-wrap
 msgid ""
-"When you copy and paste the above code for your own applications, be sure to "
-"change the name to a unique one each time."
+"\n"
+"    _clicked: function() {\n"
+"\n"
+"        // Increment the number of clicks by 1\n"
+"        this.Clicks++;\n"
+"\n"
+"        // Update the statusbar with the new number of clicks\n"
+"        this._statusbar.push (this.ContextID, \"Number of clicks: \" + this.Clicks);\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _back: function () {\n"
+"\n"
+"        // If there have been any clicks, decrement by 1 and remove last statusbar update\n"
+"        if (this.Clicks &gt; 0 ) {\n"
+"            this.Clicks--;\n"
+"            this._statusbar.pop (this.ContextID);\n"
+"        };\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _clear: function () {\n"
+"\n"
+"        // Reset the number of clicks\n"
+"        this.Clicks = 0;\n"
+"\n"
+"        // Wipe out all the messages pushed to the statusbar\n"
+"        this._statusbar.remove_all (this.ContextID);\n"
+"\n"
+"        // Reset the statusbar's message\n"
+"        this._statusbar.push (this.ContextID, \"Number of clicks: \" + this.Clicks);\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
 msgstr ""
 
-#: C/hellognome.js.page:125(title)
-msgid "Designing our window's UI"
+#: C/statusbar.js.page:205(section/p)
+msgid ""
+"Here we have functions which demonstrate pushing a message onto the stack, "
+"popping the top one off of it, and clearing all messages of a particular "
+"context id. The pop() function just takes one parameter, which is the "
+"context id for the type of message you want to pop off the most recent one "
+"of. The remove_all() function works the same way, except it removes all "
+"messages of that type from the stack."
 msgstr ""
 
-#: C/hellognome.js.page:126(p)
+#: C/statusbar.js.page:206(section/code)
+#, no-wrap
 msgid ""
-"In the _buildUI function, we're going to tell GNOME about our window and the "
-"things inside it, one at a time. After that, we're going to connect "
-"everything together and put it all on display."
+"\n"
+"// Run the application\n"
+"let app = new StatusbarExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/hellognome.js.page:141(p)
+#: C/statusbar.js.page:211(section/p)
 msgid ""
-"The first object we create is an ApplicationWindow. It needs a title to go "
-"in the title bar, and its application property needs to be the application "
-"that we created, above. Beyond that, there are various ways of customizing "
-"how it looks, which the <link xref=\"GtkApplicationWindow.js"
-"\">ApplicationWindow</link> reference page will go into more detail about. "
-"As you can see here, we gave it a default height and width (measured in "
-"pixels), and told GNOME we want our window to appear in the center of the "
-"screen."
+"Finally, we create a new instance of the finished StatusbarExample class, "
+"and set the application running."
 msgstr ""
 
-#: C/hellognome.js.page:150(p)
+#: C/statusbar.js.page:216(section/code)
+#, no-wrap
 msgid ""
-"Remember how we imported Webkit right at the start? Here we're creating a "
-"new instance of a Webkit class called a WebView, which is more or less a "
-"browser window you can put inside of your app. After that, we then give it "
-"the URI that we want it to load when the application starts up."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const StatusbarExample = new Lang.Class({\n"
+"    Name: 'Statusbar Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsstatusbar',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 120,\n"
+"            default_width: 300,\n"
+"            title: \"Button Clicker\"});\n"
+"\n"
+"        // Create a paned interface\n"
+"        this._panes = new Gtk.Paned ({\n"
+"            orientation: Gtk.Orientation.VERTICAL });\n"
+"\n"
+"        // Create the main button\n"
+"        this._clickMe = new Gtk.Button ({\n"
+"            label: \"Click Me!\" });\n"
+"        this._clickMe.connect (\"clicked\", Lang.bind (this, this._clicked));\n"
+"\n"
+"        // Create the back button\n"
+"        this._backButton = new Gtk.Button ({\n"
+"            label: \"gtk-go-back\",\n"
+"            use_stock: true });\n"
+"        this._backButton.connect (\"clicked\", Lang.bind (this, this._back));\n"
+"\n"
+"        // Create the clear button\n"
+"        this._clearButton = new Gtk.Button ({\n"
+"            label: \"gtk-clear\",\n"
+"            use_stock: true });\n"
+"        this._clearButton.connect (\"clicked\", Lang.bind (this, this._clear));\n"
+"\n"
+"        // Put the buttons in a grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"        this._grid.attach (this._backButton, 0, 0, 1, 1);\n"
+"        this._grid.attach_next_to (this._clickMe, this._backButton, Gtk.PositionType.RIGHT, 1, 1);\n"
+"        this._grid.attach_next_to (this._clearButton, this._clickMe, Gtk.PositionType.RIGHT, 1, 1);\n"
+"\n"
+"        // Put the grid in a large frame that fills most of the window\n"
+"        this._topFrame = new Gtk.Frame ({\n"
+"            border_width: 20,\n"
+"            height_request: 90,\n"
+"            width_request: 300});\n"
+"        this._topFrame.add (this._grid);\n"
+"\n"
+"        // Create the statusbar\n"
+"        this._statusbar = new Gtk.Statusbar();\n"
+"\n"
+"        // Keep track of the number of times the button has been clicked\n"
+"        this.Clicks = 0;\n"
+"        this.ContextID = this._statusbar.get_context_id (\"Number of Clicks\");\n"
+"\n"
+"        // Give the statusbar an initial message\n"
+"        this._statusbar.push (this.ContextID, \"Number of clicks: \" + this.Clicks);\n"
+"\n"
+"        // Put the statusbar in its own frame at the bottom\n"
+"        this._barFrame = new Gtk.Frame ({\n"
+"            height_request: 30 });\n"
+"        this._barFrame.add (this._statusbar);\n"
+"\n"
+"        // Assemble the frames into the paned interface\n"
+"        this._panes.pack1 (this._topFrame, true, false);\n"
+"        this._panes.pack2 (this._barFrame, false, false);\n"
+"\n"
+"        // Put the panes into the window\n"
+"        this._window.add (this._panes);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _clicked: function() {\n"
+"\n"
+"        // Increment the number of clicks by 1\n"
+"        this.Clicks++;\n"
+"\n"
+"        // Update the statusbar with the new number of clicks\n"
+"        this._statusbar.push (this.ContextID, \"Number of clicks: \" + this.Clicks);\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _back: function () {\n"
+"\n"
+"        // If there have been any clicks, decrement by 1 and remove last statusbar update\n"
+"        if (this.Clicks &gt; 0 ) {\n"
+"            this.Clicks--;\n"
+"            this._statusbar.pop (this.ContextID);\n"
+"        };\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _clear: function () {\n"
+"\n"
+"        // Reset the number of clicks\n"
+"        this.Clicks = 0;\n"
+"\n"
+"        // Wipe out all the messages pushed to the statusbar\n"
+"        this._statusbar.remove_all (this.ContextID);\n"
+"\n"
+"        // Reset the statusbar's message\n"
+"        this._statusbar.push (this.ContextID, \"Number of clicks: \" + this.Clicks);\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new StatusbarExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/hellognome.js.page:151(p)
+#: C/statusbar.js.page:225(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"We <em>could</em> just give it a web URI, like <link href=\"http://gnome.org";
-"\">http://gnome.org</link>. Instead, here we use a couple of GLib helper "
-"functions to tell the WebView where our <file>hellognome.html</file> file "
-"is. GLib.get_current_dir returns the directory that our app's running in, "
-"and GLib.filename_to_uri turns our file's path and filename into a URI that "
-"the WebView's load_uri function understands. (filename_to_uri's second "
-"parameter should be null unless you know what it's used for and have a "
-"reason for changing it.)"
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Frame.html";
+"\">Gtk.Frame</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/hellognome.js.page:162(p)
+#: C/statusbar.js.page:226(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Each window can hold one, and only one, widget. Normally, we'd use a "
-"container widget like a <link xref=\"grid.js\">Grid</link> to put multiple "
-"widgets into, then use the window's add function to add the Grid to it. "
-"Here, we just need the WebView, so that's all we add to the window. After "
-"that, as the last part of the _buildUI function that creates our window, we "
-"tell the window to show itself and its contents."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Paned.html";
+"\">Gtk.Paned</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/hellognome.js.page:168(p)
+#: C/statusbar.js.page:227(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Statusbar.html";
+"\">Gtk.Statusbar</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/statusbar.py.page:24(media) C/statusbar.vala.page:24(media)
+#, fuzzy
+#| msgid "@@image: 'media/statusbar.png'; md5=eb1aca55315d6cda57b12a5f36058ba8"
+msgctxt "_"
 msgid ""
-"Finally, we create a new instance of our HelloGNOME class, and tell GNOME to "
-"run it."
-msgstr ""
+"external ref='media/statusbar.png' md5='eb1aca55315d6cda57b12a5f36058ba8'"
+msgstr "@@image: 'media/statusbar.png'; md5=eb1aca55315d6cda57b12a5f36058ba8"
 
-#: C/hellognome.js.page:172(title)
+#: C/statusbar.py.page:7(info/title)
 #, fuzzy
-#| msgid "Run the application"
-msgid "Running your GNOME application"
-msgstr "Executar o aplicativo"
+#| msgid "Statusbar (Python)"
+msgctxt "text"
+msgid "Statusbar (Python)"
+msgstr "Barra de estado (Python)"
 
-#: C/hellognome.js.page:174(p)
+#: C/statusbar.py.page:25(page/p)
 msgid ""
-"Now that we've created our first GNOME application, it's time to test it "
-"out! You don't need to compile your app or install any special software for "
-"this; GNOME has gjs built in, to let it run GNOME Shell. Just save "
-"<file>hellognome.html</file> and our actual application, <file>hellognome."
-"js</file>, to a directory you can get to with the terminal. (They usually "
-"open onto your home directory, the one that's called by your username.) "
-"After that, open a terminal, go there, and type:"
+"This statusbar tells you if you click the button or if you press any key "
+"(and which key)."
 msgstr ""
+"Esta barra de estado dille se premeu o botón ou se premeu calquera tecla (e "
+"que tecla)."
 
-#: C/hellognome.js.page:175(screen)
+#: C/statusbar.py.page:32(section/code)
 #, no-wrap
-msgid " <output style=\"prompt\">$ </output>gjs hellognome.js "
-msgstr ""
-
-#: C/hellognome.js.page:176(p)
 msgid ""
-"You should see more or less the same screenshot as before, with a button "
-"that you can click to make a short message appear."
-msgstr ""
-
-#: C/hellognome.js.page:179(p)
-msgid "You can use the terminal command"
-msgstr ""
-
-#: C/hellognome.js.page:180(screen)
-#, no-wrap
-msgid " <output style=\"prompt\">$ </output>cd <var>(directory name)</var> "
+"from gi.repository import Gtk\n"
+"from gi.repository import Gdk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"StatusBar Example\", application=app)\n"
+"        self.set_default_size(200, 100)\n"
+"\n"
+"        # a label\n"
+"        label = Gtk.Label(label=\"Press any key or \")\n"
+"\n"
+"        # a button\n"
+"        button = Gtk.Button(label=\"click me.\")\n"
+"        # connected to a callback\n"
+"        button.connect(\"clicked\", self.button_clicked_cb)\n"
+"\n"
+"        # the statusbar\n"
+"        self.statusbar = Gtk.Statusbar()\n"
+"        # its context_id - not shown in the UI but needed to uniquely identify\n"
+"        # the source of a message\n"
+"        self.context_id = self.statusbar.get_context_id(\"example\")\n"
+"        # we push a message onto the statusbar's stack\n"
+"        self.statusbar.push(self.context_id, \"Waiting for you to do something...\")\n"
+"\n"
+"        # a grid to attach the widgets\n"
+"        grid = Gtk.Grid()\n"
+"        grid.set_column_spacing(5)\n"
+"        grid.set_column_homogeneous(True)\n"
+"        grid.set_row_homogeneous(True)\n"
+"        grid.attach(label, 0, 0, 1, 1)\n"
+"        grid.attach_next_to(button, label, Gtk.PositionType.RIGHT, 1, 1)\n"
+"        grid.attach(self.statusbar, 0, 1, 2, 1)\n"
+"\n"
+"        # add the grid to the window\n"
+"        self.add(grid)\n"
+"\n"
+"    # callback function for the button clicked\n"
+"    # if the button is clicked the event is signaled to the statusbar\n"
+"    # onto which we push a new status\n"
+"    def button_clicked_cb(self, button):\n"
+"        self.statusbar.push(self.context_id, \"You clicked the button.\")\n"
+"\n"
+"    # event handler\n"
+"    def do_key_press_event(self, event):\n"
+"    # any signal from the keyboard is signaled to the statusbar\n"
+"    # onto which we push a new status with the symbolic name\n"
+"    # of the key pressed\n"
+"        self.statusbar.push(self.context_id, Gdk.keyval_name(event.keyval) +\n"
+"                                            \" key was pressed.\")\n"
+"        # stop the signal emission\n"
+"        return True\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/hellognome.js.page:181(p)
+#: C/statusbar.py.page:34(note/p)
 msgid ""
-"to navigate between directories inside the Terminal, in order to get to "
-"where you saved the files. There is also an extension for Nautilus, GNOME's "
-"file manager, which lets you right-click anywhere inside it to open a "
-"terminal window right there. Check the app you use to install new software "
-"(like Add/Remove Programs or the Software Center) for it."
+"<code>Gdk.keyval_name(event.keyval)</code> converts the key value "
+"<code>event.keyval</code> into a symbolic name. The names and corresponding "
+"key values can be found <link href=\"http://git.gnome.org/browse/gtk+/tree/";
+"gdk/gdkkeysyms.h\">here</link>, but for instance <code>GDK_KEY_BackSpace</"
+"code> becomes the string <code>\"BackSpace\"</code>."
 msgstr ""
 
-#: C/hellognome.js.page:186(title) C/03_getting_the_signal.js.page:339(title)
-#: C/02_welcome_to_the_grid.js.page:256(title)
-msgid "What's next?"
-msgstr ""
+#: C/statusbar.py.page:40(section/title)
+msgid "Useful methods for a Statusbar widget"
+msgstr "Métodos útiles para o widget Statusbar"
 
-#: C/hellognome.js.page:188(p)
+#: C/statusbar.py.page:42(item/p)
 msgid ""
-"<link xref=\"02_welcome_to_the_grid.js\">Continue on to the next tutorial</"
-"link> to learn how to build \"native\" GNOME applications that look and feel "
-"like the others, instead of a webview with HTML code inside. Or take a look "
-"at some <link xref=\"beginner.js#samples\">code samples,</link> if you'd "
-"like to see example code for each Gtk widget."
+"<code>pop(context_id)</code> removes the first message in the statusbar "
+"stack with the given <code>context_id</code>."
 msgstr ""
 
-#: C/hellognome.js.page:189(p)
+#: C/statusbar.py.page:43(item/p)
 msgid ""
-"Finally, if you want to just build GNOME applications using JavaScript "
-"libraries designed for the web, you can basically stop here and go do that! "
-"Take a look at the <link xref=\"scrolledwindow.js\">ScrolledWindow</link> "
-"code sample if you'd like to see how to make a WebView widget that can "
-"scroll to show parts of a larger web page, and check out <link xref="
-"\"beginner.js#tutorials\">the later tutorials</link> if you'd like to see "
-"how to create a .desktop file for your application, which will let it appear "
-"in your desktop's Activities menu with all your other apps."
-msgstr ""
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/guitar-tuner.vala.page:42(None) C/guitar-tuner.py.page:39(None)
-#: C/guitar-tuner.js.page:36(None) C/guitar-tuner.cpp.page:37(None)
-#: C/guitar-tuner.c.page:39(None)
-msgid "@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
+"<code>remove_all(context_id)</code> removes all the messages in the "
+"statusbar stack with the given <code>context_id</code>."
 msgstr ""
-"@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/guitar-tuner.vala.page:95(None) C/guitar-tuner.py.page:90(None)
-#: C/guitar-tuner.cpp.page:88(None) C/guitar-tuner.c.page:94(None)
+#: C/statusbar.py.page:44(item/p)
 msgid ""
-"@@image: 'media/guitar-tuner-glade.png'; md5=f6606525443ab2160f53a87a454364d0"
+"<code>remove(context_id, message_id)</code> removes the message with the "
+"given <code>message_id</code> in the statusbar stack with the given "
+"<code>context_id</code>. The <code>message_id</code> is returned by "
+"<code>push(context_id, \"the message\")</code> when pushing the message on "
+"the statusbar."
 msgstr ""
-"@@image: 'media/guitar-tuner-glade.png'; md5=f6606525443ab2160f53a87a454364d0"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/guitar-tuner.vala.page:129(None) C/guitar-tuner.py.page:133(None)
-#: C/guitar-tuner.js.page:42(None) C/guitar-tuner.cpp.page:117(None)
-#: C/guitar-tuner.c.page:139(None)
+#: C/statusbar.py.page:52(item/p)
 msgid ""
-"@@image: 'media/guitar-tuner-pipeline.png'; "
-"md5=5adc952909d92af5dae6954781b4ad5f"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkStatusbar.html";
+"\">GtkStatusbar</link>"
 msgstr ""
-"@@image: 'media/guitar-tuner-pipeline.png'; "
-"md5=5adc952909d92af5dae6954781b4ad5f"
 
-#: C/guitar-tuner.vala.page:9(desc)
-#, fuzzy
-#| msgid ""
-#| "Use Gtk+ and GStreamer to build a simple guitar tuner application for "
-#| "GNOME. Shows off how to use the interface designer."
+#: C/statusbar.py.page:53(item/p)
 msgid ""
-"Use <link href=\"http://developer.gnome.org/platform-overview/stable/gtk";
-"\">Gtk+</link> and <link href=\"http://developer.gnome.org/platform-overview/";
-"stable/gstreamer\">GStreamer</link> to build a simple guitar tuner "
-"application for GNOME. Shows off how to use the interface designer."
+"<link href=\"http://developer.gnome.org/gdk/stable/gdk-Keyboard-Handling.html";
+"\">Gdk - Key Values</link>"
 msgstr ""
-"Usar GTK+ y GStreamer para construír un sinxelo afinador de guitarra para "
-"GNOME. Mostra como usar o deseñador de interfaces."
-
-#: C/guitar-tuner.vala.page:26(title) C/guitar-tuner.py.page:23(title)
-#: C/guitar-tuner.js.page:19(title)
-#, fuzzy
-#| msgid "Guitar Tuner"
-msgid "2 Guitar Tuner"
-msgstr "Afinador de guitarra"
 
-#: C/guitar-tuner.vala.page:29(p)
+#: C/statusbar.vala.page:7(info/title)
 #, fuzzy
-#| msgid ""
-#| "In this tutorial, we're going to make a program which plays tones that "
-#| "you can use to tune a guitar. You will learn how to:"
-msgid ""
-"In this tutorial you will create an application which plays tones that you "
-"can use to tune a guitar. You will learn how to:"
-msgstr ""
-"Neste titorial faremos un programa que reproduce tonos que pode usar para "
-"afinar unha guitarra. Aprenderá como:"
-
-#: C/guitar-tuner.vala.page:31(p)
-msgid ""
-"Set up a basic project using the <link xref=\"getting-ready\">Anjuta IDE</"
-"link>."
-msgstr ""
+#| msgid "Statusbar (Vala)"
+msgctxt "text"
+msgid "Statusbar (Vala)"
+msgstr "Barra de estado (Vala)"
 
-#: C/guitar-tuner.vala.page:32(p)
-#, fuzzy
-#| msgid "Create a simple GUI with Anjuta's UI designer"
-msgid "Create a simple GUI with <app>Anjuta</app>'s UI designer."
-msgstr "Crear unha GUI sinxela co deseñador de UI de Anjuta"
+#: C/statusbar.vala.page:25(page/p)
+msgid "This statusbar tells you what's going on."
+msgstr "Esta barra de estado dille que está pasando."
 
-#: C/guitar-tuner.vala.page:33(p)
+#: C/statusbar.vala.page:27(page/code)
+#, no-wrap
 msgid ""
-"Use the <link href=\"http://developer.gnome.org/platform-overview/stable/";
-"gstreamer\">GStreamer</link> library to play sounds."
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\tGtk.Statusbar statusbar;\n"
+"\tuint context_id;\n"
+"\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"Statusbar Example\");\n"
+"\n"
+"\t\tstatusbar = new Gtk.Statusbar ();\n"
+"\t\tcontext_id = statusbar.get_context_id (\"example\");\n"
+"\t\tstatusbar.push (context_id, \"Waiting for you to do something...\");\n"
+"\n"
+"\t\t//set the default size of the window\n"
+"\t\tthis.set_default_size (200, 100);\n"
+"\t\tvar grid = new Gtk.Grid ();\n"
+"\t\tvar label = new Gtk.Label (\"Press any key or \");\n"
+"\n"
+"\t\tgrid.attach (label, 0, 0, 1, 1);\n"
+"\t\tlabel.show ();\n"
+"\n"
+"\t\tvar button = new Gtk.Button.with_label (\"click me.\");\n"
+"\t\tgrid.attach_next_to (button, label, Gtk.PositionType.RIGHT, 1, 1);\n"
+"\t\tbutton.show ();\n"
+"\n"
+"\t\tgrid.attach (statusbar, 0, 1, 2, 1);\n"
+"\t\tstatusbar.show ();\n"
+"\n"
+"\t\tgrid.set_column_spacing (5);\n"
+"\t\tgrid.set_column_homogeneous (true);\n"
+"\t\tgrid.set_row_homogeneous (true);\n"
+"\n"
+"\t\tthis.add (grid);\n"
+"\t\tgrid.show ();\n"
+"\n"
+"\t\tbutton.clicked.connect(button_clicked_cb);\n"
+"\t}\n"
+"\n"
+"\t/* Since the key-press-event is a signal received by the window, we don't need to connect\n"
+"\tthe window to a callback function.  We can just override key_press_event. */\n"
+"\tprotected override bool key_press_event (Gdk.EventKey event) {\n"
+"\t\tstatusbar.push (context_id, Gdk.keyval_name(event.keyval) + \" key was pressed.\");\n"
+"\t\treturn true;\n"
+"\t}\n"
+"\n"
+"\tvoid button_clicked_cb (Gtk.Button button) {\n"
+"\t\tstatusbar.push (context_id, \"You clicked the button.\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"public class MyApplication : Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\t\tnew MyWindow (this).show ();\n"
+"\t}\n"
+"\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.status\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:45(title)
-#, fuzzy
-#| msgid "Create a project in Anjuta"
-msgid "Create a project in <app>Anjuta</app>"
-msgstr "Cree un proxecto de Anjuta"
-
-#: C/guitar-tuner.vala.page:52(p)
+#: C/statusbar.vala.page:32(item/p)
 #, fuzzy
 #| msgid ""
-#| "Choose <gui>Gtk+ (Simple)</gui> from the <gui>C</gui> tab, click "
-#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
-#| "<file>guitar-tuner</file> as project name and directory."
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Click on the <gui>Vala</gui> tab and select <gui>Gtk+ (Simple)</gui>. Click "
-"<gui>Continue</gui>, and fill out your details on the next few pages. Use "
-"<file>guitar-tuner</file> as project name and directory."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Statusbar.html\";>Gtk."
+"Statusbar</link>"
 msgstr ""
-"Seleccione <gui>GTK+ (Simple)</gui> desde a lapela <gui>C</gui>, prema "
-"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
-"<file>guitar-tunner</file> como nome do proxecto e cartafol."
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/guitar-tuner.vala.page:55(p)
+#: C/strings.py.page:8(info/title)
 #, fuzzy
-#| msgid ""
-#| "Make sure that <gui>Configure external packages</gui> is selected. On the "
-#| "next page, select <em>gstreamer-0.10</em> from the list to include the "
-#| "GStreamer library in your project."
-msgid ""
-"Make sure that <gui>Configure external packages</gui> is switched <gui>ON</"
-"gui>. On the next page, select <link href=\"http://valadoc.org/";
-"gstreamer-0.10/index.htm\"><em>gstreamer-0.10</em></link> from the list to "
-"include the GStreamer library in your project. Click <gui>Continue</gui>"
-msgstr ""
-"Asegúrese que <gui>Configurar paquetes externos</gui> está seleccionada. Na "
-"seguinte páxina, seleccione <em>gstreamermm-0.10</em> da lista para incluír "
-"a biblioteca GStreamer no seu proxecto."
+#| msgid "Strings in Python 3"
+msgctxt "text"
+msgid "Strings (Python)"
+msgstr "Cadeas en Python 3"
 
-#: C/guitar-tuner.vala.page:59(p)
-#, fuzzy
-#| msgid ""
-#| "Click <gui>Apply</gui> and the project will be created for you. Open "
-#| "<file>src/main.c</file> from the <gui>Project</gui> or <gui>File</gui> "
-#| "tabs. You should see some code which starts with the lines:"
-msgid ""
-"Click <gui>Apply</gui> and the project will be created for you. From the "
-"<gui>Project</gui> or <gui>Files</gui> tab, open <file>src/guitar_tuner."
-"vala</file> by double-clicking on it. You should see some code which starts "
-"with the lines:"
+#: C/strings.py.page:12(info/desc)
+msgid "An explanation of how to deal with strings in Python and GTK+."
 msgstr ""
-"Prema <gui>Aplicar</gui> para crear o proxecto. Abra <file>src/main.c</file> "
-"desde as lapelas <gui>Proxecto</gui> ou <gui>Ficheiro</gui>. Debería ver "
-"algún código que comeza coas liñas:"
 
-#: C/guitar-tuner.vala.page:69(p)
-msgid ""
-"The code loads an (empty) window from the user interface description file "
-"and displays it. More details are given below; you may choose to skip this "
-"list if you understand the basics:"
+#: C/strings.py.page:25(page/title)
+msgid "Strings"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:76(p)
-msgid ""
-"The constructor of the <code>Main</code> class creates a new window by "
-"opening a GtkBuilder file (<file>src/guitar-tuner.ui</file>, defined a few "
-"lines above), connecting its signals and then displaying it in a window. "
-"This GtkBuilder file contains a description of a user interface and all of "
-"its elements. You can use Anjuta's editor to design GtkBuilder user "
-"interfaces."
-msgstr ""
+#: C/strings.py.page:30(section/title)
+msgid "Definitions"
+msgstr "Definicións"
 
-#: C/guitar-tuner.vala.page:78(p)
+#: C/strings.py.page:32(section/p)
 msgid ""
-"Connecting signals is how you define what happens when you push a button, or "
-"when some other event happens. Here, the <code>on_destroy</code> function is "
-"called (and quits the app) when you close the window."
+"Conceptionally, a <em>string</em> is a list of <em>characters</em> such as "
+"'A', 'B', 'C' or 'È'. Characters are abstract representations and their "
+"meaning depends on the language and context they are used in. The "
+"<em>Unicode standard</em> describes how characters are represented by "
+"<em>code points</em>. For example the characters above are represented with "
+"the code points U+0041, U+0042, U+0043, and U+00C9, respectively. Basically, "
+"code points are numbers in the range from 0 to 0x10FFFF."
 msgstr ""
 
-#: C/guitar-tuner.vala.page:82(p)
+#: C/strings.py.page:34(section/p)
 msgid ""
-"The static <code>main</code> function is run by default when you start a "
-"Vala application. It calls a few functions which create the Main class, set "
-"up and then run the application. The <code>Gtk.main</code> function starts "
-"the GTK main loop, which runs the user interface and starts listening for "
-"events (like clicks and key presses)."
+"The representation of a string as a list of code points is abstract. In "
+"order to convert this abstract representation into a sequence of bytes the "
+"Unicode string must be <em>encoded</em>. The simplest from of encoding is "
+"ASCII and is performed as follows:"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:86(p)
+#: C/strings.py.page:37(item/p)
 msgid ""
-"This code is ready to be used, so you can compile it by clicking "
-"<guiseq><gui>Build</gui><gui>Build Project</gui></guiseq> (or press "
-"<keyseq><key>Shift</key><key>F7</key></keyseq>). When you do this, a dialog "
-"will appear. Change the <gui>Configuration</gui> to <gui>Default</gui> and "
-"then click <gui>Execute</gui> to configure the build directory. You only "
-"need to do this once, for the first build."
+"If the code point is strictly less than 128, each byte is the same as the "
+"value of the code point."
 msgstr ""
 
-#: C/guitar-tuner.vala.page:90(title) C/guitar-tuner.py.page:85(title)
-#: C/guitar-tuner.cpp.page:83(title) C/guitar-tuner.c.page:89(title)
-msgid "Create the user interface"
-msgstr "Crear a interface de usuario"
-
-#: C/guitar-tuner.vala.page:91(p)
+#: C/strings.py.page:38(item/p)
 msgid ""
-"A description of the user interface (UI) is contained in the GtkBuilder file "
-"<file>src/guitar_tuner.ui</file> defined at the top of the class. To edit "
-"the user interface, open <file>src/guitar_tuner.ui</file> by double-clicking "
-"on it in the <gui>Project</gui> or <gui>Files</gui> section. This will "
-"switch to the interface designer. The design window is in the center; "
-"<gui>Widgets</gui> and the widget properties are on the right, and the "
-"<gui>Palette</gui> of available widgets is on the left."
+"If the code point is 128 or greater, the Unicode string can’t be represented "
+"in this encoding. (Python raises a <sys>UnicodeEncodeError</sys> exception "
+"in this case.)"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:93(p)
+#: C/strings.py.page:41(section/p)
 msgid ""
-"The layout of every UI in GTK+ is organized using boxes and tables. Let's "
-"use a vertical GtkButtonBox here to assign six GtkButtons, one for each of "
-"the six guitar strings."
+"Although ASCII encoding is simple to apply it can only encode for 128 "
+"different characters which is hardly enough. One of the most commonly used "
+"encodings that addresses this problem is UTF-8 (it can handle any Unicode "
+"code point). UTF stands for “Unicode Transformation Format”, and the ‘8’ "
+"means that 8-bit numbers are used in the encoding."
 msgstr ""
 
-#: C/guitar-tuner.vala.page:99(p)
-msgid ""
-"In the <gui>Palette</gui> tab, from the <gui>Containers</gui> section, "
-"select a <gui>Button Box</gui> (GtkButtonBox) by clicking on the icon. Then "
-"click on the design window in the center to place it into the window. A "
-"dialog will display where you can set the <gui>Number of items</gui> to "
-"<input>6</input>. Then click <gui>Create</gui>."
+#: C/strings.py.page:46(section/title)
+msgid "Strings in Python 2"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:100(p)
+#: C/strings.py.page:48(section/p)
 msgid ""
-"You can also change the <gui>Number of elements</gui> and the "
-"<gui>Orientation</gui> in the <gui>General</gui> tab on the right."
+"Python 2 comes with two different kinds of objects that can be used to "
+"represent strings, <code>str</code> and <code>unicode</code>. Instances of "
+"<code>unicode</code> are used to express Unicode strings, whereas instances "
+"of the <code>str</code> type are byte representations (the encoded string). "
+"Under the hood, Python represents Unicode strings as either 16- or 32-bit "
+"integers, depending on how the Python interpreter was compiled."
 msgstr ""
 
-#: C/guitar-tuner.vala.page:104(p)
+#: C/strings.py.page:50(section/code)
+#, fuzzy, no-wrap
+#| msgid ""
+#| "<![CDATA[\n"
+#| ">>> unicode_string = u\"Fu\\u00dfb\\u00e4lle\"\n"
+#| ">>> print unicode_string]]>\n"
+#| "Fußbälle\n"
 msgid ""
-"Now, from the <gui>Control and Display</gui> section of the <gui>Palette</"
-"gui> choose a <gui>Button</gui> (GtkButton) by clicking on it. Place it into "
-"the first section of the GtkButtonBox by clicking in the first section."
+"\n"
+"&gt;&gt;&gt; unicode_string = u\"Fu\\u00dfb\\u00e4lle\"\n"
+"&gt;&gt;&gt; print unicode_string\n"
+"Fußbälle\n"
 msgstr ""
+"<![CDATA[\n"
+">>> unicode_string = u\"Fu\\u00dfb\\u00e4lle\"\n"
+">>> print unicode_string]]>\n"
+"Fußbälle\n"
 
-#: C/guitar-tuner.vala.page:107(p)
+#: C/strings.py.page:56(section/p)
 msgid ""
-"While the button is still selected, scroll down in the <gui>General</gui> "
-"tab on the right to the <gui>Label</gui> property, and change it to <gui>E</"
-"gui>. This will be the low E guitar string."
+"Unicode strings can be converted to 8-bit strings with <code>unicode.encode()"
+"</code>. Python’s 8-bit strings have a <code>str.decode()</code> method that "
+"interprets the string using the given encoding (that is, it is the inverse "
+"of the <code>unicode.encode()</code>):"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:108(p)
+#: C/strings.py.page:58(section/code)
+#, no-wrap
 msgid ""
-"The <gui>General</gui> tab is located in the <gui>Widgets</gui> section on "
-"the right."
+"\n"
+"&gt;&gt;&gt; type(unicode_string)\n"
+"&lt;type 'unicode'&gt;\n"
+"&gt;&gt;&gt; unicode_string.encode(\"utf-8\")\n"
+"'Fu\\xc3\\x9fb\\xc3\\xa4lle'\n"
+"&gt;&gt;&gt; utf8_string = unicode_string.encode(\"utf-8\")\n"
+"&gt;&gt;&gt; type(utf8_string)\n"
+"&lt;type 'str'&gt;\n"
+"&gt;&gt;&gt; unicode_string == utf8_string.decode(\"utf-8\")\n"
+"True"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:113(p)
+#: C/strings.py.page:69(section/p)
 msgid ""
-"Click on the <gui>Signals</gui> tab in the <gui>Widgets</gui> section on the "
-"right, and look for the <code>clicked</code> signal of the button. You can "
-"use this to connect a signal handler that will be called when the button is "
-"clicked by the user. To do this, click on the signal and type "
-"<code>main_on_button_clicked</code> in the <gui>Handler</gui> column and "
-"press the <key>Enter</key>."
+"Unfortunately, Python 2.x allows you to mix <code>unicode</code> and "
+"<code>str</code> if the 8-bit string happened to contain only 7-bit (ASCII) "
+"bytes, but would get <sys>UnicodeDecodeError</sys> if it contained non-ASCII "
+"values."
 msgstr ""
 
-#: C/guitar-tuner.vala.page:116(p) C/guitar-tuner.py.page:107(p)
-#: C/guitar-tuner.c.page:111(p)
+#: C/strings.py.page:74(section/title)
+msgid "Strings in Python 3"
+msgstr "Cadeas en Python 3"
+
+#: C/strings.py.page:76(section/p)
 msgid ""
-"Repeat the above steps for the other buttons, adding the next 5 strings with "
-"the names <em>A</em>, <em>D</em>, <em>G</em>, <em>B</em>, and <em>e</em>."
+"Since Python 3.0, all strings are stored as Unicode in an instance of the "
+"<code>str</code> type. Encoded strings on the other hand are represented as "
+"binary data in the form of instances of the bytes type. Conceptionally, "
+"<code>str</code> refers to text, whereas bytes refers to data. Use "
+"<code>encode()</code> to go from <code>str</code> to <code>bytes</code>, and "
+"<code>decode()</code> to go from <code>bytes</code> to <code>str</code>."
 msgstr ""
-"Repita os pasos anteriores para o resto dos botóns, engadindo as 5 cordas "
-"restantes cos nomes <em>A</em>, <em>D</em>, <em>G</em>, <em>B</em> e <em>e</"
-"em>."
 
-#: C/guitar-tuner.vala.page:119(p) C/guitar-tuner.py.page:110(p)
-#: C/guitar-tuner.c.page:114(p)
+#: C/strings.py.page:78(section/p)
 msgid ""
-"Save the UI design (by clicking <guiseq><gui>File</gui><gui>Save</gui></"
-"guiseq>) and keep it open."
+"In addition, it is no longer possible to mix Unicode strings with encoded "
+"strings, because it will result in a <code>TypeError</code>:"
 msgstr ""
-"Garde o deseño da IU (premendo <guiseq><gui>Ficheiro</gui><gui>Gardar</gui></"
-"guiseq>) e déixeo aberto."
-
-#: C/guitar-tuner.vala.page:125(title) C/guitar-tuner.py.page:129(title)
-#: C/guitar-tuner.js.page:24(link) C/guitar-tuner.js.page:38(title)
-#: C/guitar-tuner.cpp.page:112(title) C/guitar-tuner.c.page:135(title)
-msgid "GStreamer pipelines"
-msgstr "Tuberías de GStreamer"
 
-#: C/guitar-tuner.vala.page:126(p)
-#, fuzzy
-#| msgid ""
-#| "GStreamer is GNOME's multimedia framework — you can use it for playing, "
-#| "recording, and processing video, audio, webcam streams and the like. "
-#| "Here, we'll be using it to produce single-frequency tones."
+#: C/strings.py.page:80(section/code)
+#, no-wrap
 msgid ""
-"This section will show you how to create the code to produce sounds. <link "
-"href=\"http://developer.gnome.org/platform-overview/stable/gstreamer";
-"\">GStreamer</link> is GNOME's multimedia framework — you can use it for "
-"playing, recording, and processing video, audio, webcam streams and the "
-"like. Here, we'll be using it to produce single-frequency tones."
-msgstr ""
-"GStreamer é un marco de traballo multimedia de GNOME — vostede pode usalo "
-"para reproducir, gravar e procesar vídeo, son, fluxos de cámara web e "
-"semellantes. Aquí, usarémolo para producir tonos dunha única frecuencia."
+"\n"
+"&gt;&gt;&gt; text = \"Fu\\u00dfb\\u00e4lle\"\n"
+"&gt;&gt;&gt; data = b\" sind rund\"\n"
+"&gt;&gt;&gt; text + data\n"
+"Traceback (most recent call last):\n"
+"  File \"&lt;stdin&gt;\", line 1, in &lt;module&gt;\n"
+"TypeError: Can't convert 'bytes' object to str implicitly\n"
+"&gt;&gt;&gt; text + data.decode(\"utf-8\")\n"
+"'Fußbälle sind rund'\n"
+"&gt;&gt;&gt; text.encode(\"utf-8\") + data\n"
+"b'Fu\\xc3\\x9fb\\xc3\\xa4lle sind rund'"
+msgstr ""
+
+#: C/strings.py.page:95(section/title)
+msgid "Unicode in GTK+"
+msgstr "Unicode en GTK+"
 
-#: C/guitar-tuner.vala.page:127(p)
+#: C/strings.py.page:97(section/p)
 msgid ""
-"Conceptually, GStreamer works as follows: You create a <link href=\"http://";
-"gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-intro-"
-"basics-bins.html\"><em>pipeline</em></link> containing several processing "
-"elements going from the <em>source</em> to the <em>sink</em> (output). The "
-"source can be an image file, a video, or a music file, for example, and the "
-"output could be a widget or the soundcard."
+"GTK+ uses UTF-8 encoded strings for all text. This means that if you call a "
+"method that returns a string you will always obtain an instance of the "
+"<code>str</code> type. The same applies to methods that expect one or more "
+"strings as parameter, they must be UTF-8 encoded. However, for convenience "
+"PyGObject will automatically convert any unicode instance to str if supplied "
+"as argument:"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:128(p) C/guitar-tuner.py.page:132(p)
-#: C/guitar-tuner.js.page:41(p) C/guitar-tuner.cpp.page:116(p)
-#: C/guitar-tuner.c.page:138(p)
+#: C/strings.py.page:99(section/code)
+#, no-wrap
 msgid ""
-"Between source and sink, you can apply various filters and converters to "
-"handle effects, format conversions and so on. Each element of the pipeline "
-"has properties which can be used to change its behaviour."
+"\n"
+"&gt;&gt;&gt; from gi.repository import Gtk\n"
+"&gt;&gt;&gt; label = Gtk.Label()\n"
+"&gt;&gt;&gt; unicode_string = u\"Fu\\u00dfb\\u00e4lle\"\n"
+"&gt;&gt;&gt; label.set_text(unicode_string)\n"
+"&gt;&gt;&gt; txt = label.get_text()\n"
+"&gt;&gt;&gt; type(txt)\n"
+"&lt;type 'str'&gt;"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:130(p) C/guitar-tuner.py.page:134(p)
-#: C/guitar-tuner.js.page:43(p) C/guitar-tuner.cpp.page:118(p)
-#: C/guitar-tuner.c.page:140(p)
-msgid "An example GStreamer pipeline."
-msgstr "Un exemplo de tubería de GStreamer."
+#: C/strings.py.page:108(section/p)
+msgid "Furthermore:"
+msgstr "Aínda máis:"
 
-#: C/guitar-tuner.vala.page:135(title) C/guitar-tuner.py.page:139(title)
-#: C/guitar-tuner.c.page:145(title)
-msgid "Set up the pipeline"
-msgstr "Configurar a tubería"
+#: C/strings.py.page:110(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"&gt;&gt;&gt; txt == unicode_string"
+msgstr ""
 
-#: C/guitar-tuner.vala.page:136(p)
+#: C/strings.py.page:113(section/p)
 msgid ""
-"In this example we will use a tone generator source called "
-"<code>audiotestsrc</code> and send the output to the default system sound "
-"device, <code>autoaudiosink</code>. We only need to configure the frequency "
-"of the tone generator; this is accessible through the <code>freq</code> "
-"property of <code>audiotestsrc</code>."
+"would return <code>False</code>, with the warning <code>__main__:1: "
+"UnicodeWarning: Unicode equal comparison failed to convert both arguments to "
+"Unicode - interpreting them as being unequal</code> (<code>Gtk.Label.get_text"
+"()</code> will always return a <code>str</code> instance; therefore, "
+"<code>txt</code> and <code>unicode_string</code> are not equal)."
 msgstr ""
 
-#: C/guitar-tuner.vala.page:138(p)
+#: C/strings.py.page:115(section/p)
 msgid ""
-"We need to add a line to initialize GStreamer; put the following code on the "
-"line above the <code>Gtk.init</code> call in the <code>main</code> function:"
+"This is especially important if you want to internationalize your program "
+"using <link href=\"http://docs.python.org/library/gettext.html";
+"\"><code>gettext</code></link>. You have to make sure that <code>gettext</"
+"code> will return UTF-8 encoded 8-bit strings for all languages."
 msgstr ""
 
-#: C/guitar-tuner.vala.page:140(p)
+#: C/strings.py.page:117(section/p)
 msgid ""
-"Then, copy the following function into <file>guitar_tuner.vala</file> inside "
-"our <code>Main</code> class:"
+"In general it is recommended to not use <code>unicode</code> objects in GTK+ "
+"applications at all, and only use UTF-8 encoded <code>str</code> objects "
+"since GTK+ does not fully integrate with <code>unicode</code> objects."
 msgstr ""
 
-#: C/guitar-tuner.vala.page:175(p)
+#: C/strings.py.page:119(section/p)
 msgid ""
-"The first three lines create source and sink GStreamer elements (<link href="
-"\"http://valadoc.org/gstreamer-0.10/Gst.Element.html\";><code>Gst.Element</"
-"code></link>), and a <link href=\"http://valadoc.org/gstreamer-0.10/Gst.";
-"Pipeline.html\">pipeline element</link> (which will be used as a container "
-"for the other two elements). Those are class variables so they are defined "
-"outside the method. The pipeline is given the name \"note\"; the source is "
-"named \"source\" and is set to the <code>audiotestsrc</code> source; and the "
-"sink is named \"output\" and set to the <code>autoaudiosink</code> sink "
-"(default sound card output)."
+"With Python 3.x things are much more consistent, because PyGObject will "
+"automatically encode/decode to/from UTF-8 if you pass a string to a method "
+"or a method returns a string. Strings, or text, will always be represented "
+"as instances of <code>str</code> only:"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:178(p)
+#: C/strings.py.page:126(section/p)
+msgid ""
+"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/unicode.";
+"html\">How To Deal With Strings - The Python GTK+ 3 Tutorial</link>"
+msgstr ""
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/switch.c.page:22(media) C/switch.py.page:26(media)
+#: C/switch.vala.page:25(media)
 #, fuzzy
 #| msgid ""
-#| "The call to <code>g_object_set</code> sets the <code>freq</code> property "
-#| "of the source element to <code>frequency</code>, which is passed as an "
-#| "argument to the <code>play_sound</code> function. This is just the "
-#| "frequency of the note in Hertz; some useful frequencies will be defined "
-#| "later on."
+#| "@@image: 'media/switch_off.png'; md5=211a2962708800697ad5373dcc86ad6d"
+msgctxt "_"
 msgid ""
-"The call to <link href=\"http://valadoc.org/gobject-2.0/GLib.Object.set.html";
-"\"><code>source.set</code></link> sets the <code>freq</code> property of the "
-"source element to <code>frequency</code>, which is passed in as an argument "
-"to the <code>play_sound</code> function. This is just the frequency of the "
-"note in Hertz; some useful frequencies will be defined later on."
-msgstr ""
-"A chamada a <code>g_object_set</code> estabelecer a propiedade <code>freq</"
-"code> do elemento orixe a <code>frequency</code>, a cal se pasa como un "
-"argumento á función <code>play_sound</code>. Isto só é a frecuencia da nota "
-"en Hertz, algunhas das frecuencias máis útiles definiranse máis tarde."
+"external ref='media/switch_off.png' md5='211a2962708800697ad5373dcc86ad6d'"
+msgstr "@@image: 'media/switch_off.png'; md5=211a2962708800697ad5373dcc86ad6d"
 
-#: C/guitar-tuner.vala.page:181(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/switch.c.page:23(media) C/switch.py.page:27(media)
+#: C/switch.vala.page:26(media)
+#, fuzzy
+#| msgid "@@image: 'media/switch_on.png'; md5=95e8769f758c2d95ace0fa8ecf30b29d"
+msgctxt "_"
 msgid ""
-"<link href=\"http://valadoc.org/gstreamer-0.10/Gst.Bin.add.html";
-"\"><code>pipeline.add</code></link> puts the source and sink into the "
-"pipeline. The pipeline is a <link href=\"http://valadoc.org/gstreamer-0.10/";
-"Gst.Bin.html\"><code>Gst.Bin</code></link>, which is just an element that "
-"can contain multiple other GStreamer elements. In general, you can add as "
-"many elements as you like to the pipeline by adding more calls to "
-"<code>pipeline.add</code>."
-msgstr ""
+"external ref='media/switch_on.png' md5='95e8769f758c2d95ace0fa8ecf30b29d'"
+msgstr "@@image: 'media/switch_on.png'; md5=95e8769f758c2d95ace0fa8ecf30b29d"
 
-#: C/guitar-tuner.vala.page:184(p)
-msgid ""
-"Next, <link href=\"http://valadoc.org/gstreamer-0.10/Gst.Element.link.html";
-"\"><code>sink.link</code></link> is used to connect the elements together, "
-"so the output of source (a tone) goes into the input of sink (which is then "
-"output to the sound card). <link href=\"http://www.valadoc.org/";
-"gstreamer-0.10/Gst.Element.set_state.html\"><code>pipeline.set_state</code></"
-"link> is then used to start playback, by setting the <link href=\"http://www.";
-"valadoc.org/gstreamer-0.10/Gst.State.html\">state of the pipeline</link> to "
-"playing (<code>Gst.State.PLAYING</code>)."
-msgstr ""
+#: C/switch.c.page:7(info/title)
+#, fuzzy
+#| msgid "Switch (C)"
+msgctxt "text"
+msgid "Switch (C)"
+msgstr "Interruptor (C)"
 
-#: C/guitar-tuner.vala.page:187(p)
-msgid ""
-"We don't want to play an annoying tone forever, so the last thing "
-"<code>play_sound</code> does is to add a <link href=\"http://www.valadoc.org/";
-"glib-2.0/GLib.TimeoutSource.html\"><code>TimeoutSource</code></link>. This "
-"sets a timeout for stopping the sound; it waits for 200 milliseconds before "
-"calling a signal handler defined inline that stops and destroys the "
-"pipeline. It returns <code>false</code> to remove itself from the timeout, "
-"otherwise it would continue to be called every 200 ms."
+#: C/switch.c.page:17(info/desc) C/switch.py.page:22(info/desc)
+#: C/switch.vala.page:21(info/desc)
+msgid "A \"light switch\" style toggle"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:197(title) C/guitar-tuner.c.page:120(title)
-msgid "Creating the signal handler"
-msgstr "Crear o manexador de sinais"
+#: C/switch.c.page:20(page/title) C/switch.js.page:20(page/title)
+#: C/switch.py.page:25(page/title) C/switch.vala.page:24(page/title)
+msgid "Switch"
+msgstr "Interruptor"
 
-#: C/guitar-tuner.vala.page:198(p)
+#: C/switch.c.page:24(page/p)
+msgid "This switch toggles the title of the window."
+msgstr ""
+
+#: C/switch.c.page:26(page/code)
+#, no-wrap
 msgid ""
-"In the UI designer, you made it so that all of the buttons will call the "
-"same function, <gui>on_button_clicked</gui>, when they are clicked. Actually "
-"we type <gui>main_on_button_clicked</gui> which tells the UI designer that "
-"this method is part of our <code>Main</code>. We need to add that function "
-"in the source file."
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/*Signal handler for the \"active\" signal of the Switch*/\n"
+"static void\n"
+"activate_cb (GObject    *switcher,\n"
+"             GParamSpec *pspec,\n"
+"             gpointer    user_data)\n"
+"{\n"
+"  GtkWindow *window = user_data;\n"
+"\n"
+"  if (gtk_switch_get_active (GTK_SWITCH (switcher)))\n"
+"    gtk_window_set_title (GTK_WINDOW (window), \"Switch Example\");\n"
+"  else\n"
+"    gtk_window_set_title (GTK_WINDOW (window), \"\");\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *grid;\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *label;\n"
+"  GtkWidget *switcher;\n"
+"\n"
+"  /*Create a window with a set title and default size.\n"
+"  Also, set a border width for the amount of space to leave\n"
+"  inside the window*/\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Switch Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 300, 100);\n"
+"  gtk_container_set_border_width (GTK_CONTAINER (window), 10);\n"
+"\n"
+"  /*Create a label*/\n"
+"  label = gtk_label_new (\"Title\");\n"
+"\n"
+"  /*Create a switch with a default active state*/\n"
+"  switcher = gtk_switch_new ();\n"
+"  gtk_switch_set_active (GTK_SWITCH (switcher), TRUE);\n"
+"\n"
+"  /*Create a grid and set the column spacing, attach the label and\n"
+"  switch onto the grid and position them accordingly*/\n"
+"  grid = gtk_grid_new();\n"
+"  gtk_grid_set_column_spacing (GTK_GRID (grid), 10);\n"
+"  gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), switcher, 1, 0, 1, 1);\n"
+"\n"
+"  /*Connecting the clicked signal to the callback function*/\n"
+"  g_signal_connect (GTK_SWITCH (switcher), \n"
+"                    \"notify::active\", \n"
+"                    G_CALLBACK (activate_cb), \n"
+"                    window);\n"
+"\n"
+"  gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (grid));\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:199(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/switch.js.page:21(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/switchanimals.png'; md5=513ae15dcf68e15eef30b76420b8c714"
+msgctxt "_"
 msgid ""
-"To do this, in the user interface file (guitar_tuner.ui) select one of the "
-"buttons by clicking on it, then open <file>guitar_tuner.vala</file> (by "
-"clicking on the tab in the center). Switch to the <gui>Signals</gui> tab on "
-"the right, which you used to set the signal name. Now take the row where you "
-"set the <gui>clicked</gui> signal and drag and drop it into to the source "
-"file at the beginning of the class. The following code will be added to your "
-"source file:"
+"external ref='media/switchanimals.png' md5='513ae15dcf68e15eef30b76420b8c714'"
 msgstr ""
+"@@image: 'media/switchanimals.png'; md5=513ae15dcf68e15eef30b76420b8c714"
 
-#: C/guitar-tuner.vala.page:206(p)
-msgid ""
-"You can also just type the code at the beginning of the class instead of "
-"using the drag and drop."
+#: C/switch.js.page:7(info/title)
+#, fuzzy
+#| msgid "Switch (JavaScript)"
+msgctxt "text"
+msgid "Switch (JavaScript)"
+msgstr "Switch (JavaScript)"
+
+#: C/switch.js.page:17(info/desc)
+msgid "A sliding switch that can be flipped on and off"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:207(p)
+#: C/switch.js.page:22(page/p)
 msgid ""
-"This signal handler has only one argument: the <link href=\"http://valadoc.";
-"org/gtk+-3.0/Gtk.Widget.html\"><code>Gtk.Widget</code></link> that called "
-"the function (in our case, always a <link href=\"http://valadoc.org/gtk+-3.0/";
-"Gtk.Button.html\"><code>Gtk.Button</code></link>)."
+"A Switch has two positions, on and off. This example shows how you can use "
+"multiple switches together to control which <link xref=\"image.js\">Image</"
+"link> is shown in the window. The pictures used in this example <link href="
+"\"https://live.gnome.org/TarynFox?action=AttachFile&amp;do=get&amp;";
+"target=Animal+Photos.zip\">can be downloaded here</link>."
 msgstr ""
 
-#: C/guitar-tuner.vala.page:213(title)
-msgid "Define the signal handler"
-msgstr "Definir o manexador de sinais"
-
-#: C/guitar-tuner.vala.page:214(p)
+#: C/switch.js.page:23(note/p)
 msgid ""
-"We want to play the correct sound when the user clicks a button. For this, "
-"we flesh out the signal handler which we defined above, "
-"<code>on_button_clicked</code>. We could have connected every button to a "
-"different signal handler, but that would lead to a lot of code duplication. "
-"Instead, we can use the label of the button to figure out which button was "
-"clicked:"
+"The window will contain a \"broken image\" icon instead of a picture if "
+"picture files named <file>redfox.png</file>, <file>muteswan.png</file>, "
+"<file>fruitbat.png</file>, and <file>gentoopenguin.png</file> aren't in the "
+"same directory. You can change the code and the pictures around as you like, "
+"but the Creative Commons-licensed photos used in this example were taken "
+"from the following sources and cropped to 640x425:"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:242(p)
+#: C/switch.js.page:25(item/p)
 msgid ""
-"The <code>Gtk.Button</code> that was clicked is passed as an argument "
-"(<code>sender</code>) to <code>on_button_clicked</code>. We can get the "
-"label of that button by using <code>get_child</code>, and then get the text "
-"from that label using <code>get_label</code>."
+"<link href=\"http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.jpg\";>Red fox "
+"photo</link> by Rob Lee, licensed <link href=\"http://creativecommons.org/";
+"licenses/by/2.0/deed.en\">CC-By</link>"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:243(p)
+#: C/switch.js.page:26(item/p)
 msgid ""
-"The switch statement compares the label text to the notes that we can play, "
-"and <code>play_sound</code> is called with the frequency appropriate for "
-"that note. This plays the tone; we have a working guitar tuner!"
+"<link href=\"http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-";
+"Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.jpg\">Gentoo penguin "
+"photo</link> by Ken Funakoshi, licensed <link href=\"http://creativecommons.";
+"org/licenses/by-sa/2.0/deed.en\">CC-By-SA</link>"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:249(p) C/guitar-tuner.cpp.page:251(p)
-#: C/guitar-tuner.c.page:253(p)
+#: C/switch.js.page:27(item/p)
 msgid ""
-"If you haven't already done so, choose the <file>Debug/src/guitar-tuner</"
-"file> application in the dialog that appears. Finally, hit <gui>Run</gui> "
-"and enjoy!"
+"<link href=\"http://www.flickr.com/photos/shekgraham/127431519/in/";
+"photostream/\">Fruit bat photo</link> by Shek Graham, licensed <link href="
+"\"http://creativecommons.org/licenses/by/2.0/deed.en\";>CC-By</link>"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:254(p)
+#: C/switch.js.page:28(item/p)
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"guitar-tuner/guitar-tuner.vala\">reference code</link>."
+"<link href=\"http://commons.wikimedia.org/wiki/File:Mute_Swan-";
+"Mindaugas_Urbonas.jpg\">Mute swan photo</link> by Mindaugas Urbonas, "
+"licensed <link href=\"http://creativecommons.org/licenses/by-sa/2.5/deed.en";
+"\">CC-By-SA</link>"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:259(p)
-#, fuzzy
-#| msgid ""
-#| "To find out more about the Vala programming language you might want to "
-#| "check out the <link href=\"http://live.gnome.org/Vala/Tutorial\";>Vala "
-#| "Tutorial</link>."
+#: C/switch.js.page:30(note/p)
 msgid ""
-"To find out more about the Vala programming language you might want to check "
-"out the <link href=\"http://live.gnome.org/Vala/Tutorial\";>Vala Tutorial</"
-"link> and the <link href=\"http://valadoc.org/\";>Vala API Documentation</"
-"link>"
+"Photo credits and licensing information are shown in the application's <link "
+"xref=\"aboutdialog.js\">AboutDialog</link>. Always remember to credit the "
+"original artist when using <link href=\"http://creativecommons.org";
+"\">Creative Commons-licensed works!</link>"
 msgstr ""
-"Para atopar máis información sobre a linguaxe de programación Vala pode "
-"visitar <link href=\"http://live.gnome.org/Vala/Tutorial\";>o titorial de "
-"Vala</link>."
-
-#: C/guitar-tuner.vala.page:268(p) C/guitar-tuner.py.page:238(p)
-#: C/guitar-tuner.cpp.page:272(p) C/guitar-tuner.c.page:266(p)
-msgid "Have the program automatically cycle through the notes."
-msgstr "Facer que o programa reproduza de forma cíclica as notas."
 
-#: C/guitar-tuner.vala.page:271(p) C/guitar-tuner.py.page:241(p)
-#: C/guitar-tuner.cpp.page:275(p) C/guitar-tuner.c.page:269(p)
-msgid "Make the program play recordings of real guitar strings being plucked."
+#: C/switch.js.page:47(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"const SwitchExample = new Lang.Class({\n"
+"    Name: 'Switch Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsswitch',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal creates the menu and builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._initMenus();\n"
+"        this._buildUI ();\n"
+"    },\n"
 msgstr ""
-"Facer que o programa reproduza gravacións de cordas de guitarras que se "
-"están afinando."
 
-#: C/guitar-tuner.vala.page:272(p) C/guitar-tuner.py.page:242(p)
-#: C/guitar-tuner.cpp.page:276(p) C/guitar-tuner.c.page:270(p)
+#: C/switch.js.page:74(section/p)
 msgid ""
-"To do this, you would need to set up a more complicated GStreamer pipeline "
-"which allows you to load and play back music files. You'll have to choose "
-"<link href=\"http://gstreamer.freedesktop.org/documentation/plugins.html";
-"\">decoder and demuxer</link> GStreamer elements based on the file format of "
-"your recorded sounds — MP3s use different elements to Ogg Vorbis files, for "
-"example."
+"All the code for this sample goes in the SwitchExample class. The above code "
+"creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.";
+"Application.html\">Gtk.Application</link> for our widgets and window to go "
+"in."
 msgstr ""
 
-#: C/guitar-tuner.vala.page:273(p) C/guitar-tuner.py.page:243(p)
-#: C/guitar-tuner.cpp.page:277(p) C/guitar-tuner.c.page:271(p)
+#: C/switch.js.page:76(section/code)
+#, no-wrap
 msgid ""
-"You might need to connect the elements in more complicated ways too. This "
-"could involve using <link href=\"http://gstreamer.freedesktop.org/data/doc/";
-"gstreamer/head/manual/html/chapter-intro-basics.html\">GStreamer concepts</"
-"link> that we didn't cover in this tutorial, such as <link href=\"http://";
-"gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-intro-"
-"basics-pads.html\">pads</link>. You may also find the <cmd>gst-inspect</cmd> "
-"command useful."
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 20,\n"
+"            title: \"Animal Creator\"});\n"
 msgstr ""
 
-#: C/guitar-tuner.vala.page:276(p) C/guitar-tuner.py.page:246(p)
-#: C/guitar-tuner.cpp.page:280(p) C/guitar-tuner.c.page:274(p)
-msgid "Automatically analyze notes that the user plays."
-msgstr "Analizar automaticamente as notas que toca o músico."
+#: C/switch.js.page:91(section/title)
+msgid "Creating the switches"
+msgstr "Crear os interruptores"
 
-#: C/guitar-tuner.vala.page:277(p) C/guitar-tuner.py.page:247(p)
-#: C/guitar-tuner.cpp.page:281(p) C/guitar-tuner.c.page:275(p)
+#: C/switch.js.page:92(section/code)
+#, no-wrap
 msgid ""
-"You could connect a microphone and record sounds from it using an <link href="
-"\"http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-";
-"plugins/html/gst-plugins-good-plugins-autoaudiosrc.html\">input source</"
-"link>. Perhaps some form of <link href=\"http://gstreamer.freedesktop.org/";
-"data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-"
-"plugins-plugin-spectrum.html\">spectrum analysis</link> would allow you to "
-"figure out what notes are being played?"
+"\n"
+"        // Create the image widget and set its default picture\n"
+"        this._image = new Gtk.Image ({file: \"redfox.png\"});\n"
 msgstr ""
 
-#: C/guitar-tuner.py.page:7(title)
-#, fuzzy
-#| msgid "Guitar Tuner"
-msgid "Guitar Tuner (Python)"
-msgstr "Afinador de guitarra"
-
-#: C/guitar-tuner.py.page:10(desc) C/guitar-tuner.c.page:10(desc)
+#: C/switch.js.page:97(section/p)
 msgid ""
-"Use Gtk+ and GStreamer to build a simple guitar tuner application for GNOME. "
-"Shows off how to use the interface designer."
+"We first create the <link xref=\"image.js\">Image</link> that the switches "
+"will control. Remember that a file named <file>redfox.png</file> needs to be "
+"in the same directory as this application."
 msgstr ""
-"Usar GTK+ y GStreamer para construír un sinxelo afinador de guitarra para "
-"GNOME. Mostra como usar o deseñador de interfaces."
 
-#: C/guitar-tuner.py.page:26(p) C/guitar-tuner.cpp.page:24(p)
-#: C/guitar-tuner.c.page:26(p)
+#: C/switch.js.page:99(section/code)
+#, no-wrap
 msgid ""
-"In this tutorial, we're going to make a program which plays tones that you "
-"can use to tune a guitar. You will learn how to:"
+"\n"
+"        // Create a label for the first switch\n"
+"        this._flyLabel = new Gtk.Label ({\n"
+"            label: \"Make it fly\",\n"
+"            margin_right: 30});\n"
+"\n"
+"        // Create the first switch and set its default position\n"
+"        this._flySwitch = new Gtk.Switch ({active: false});\n"
+"        this._flySwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));\n"
+"\n"
+"        // Create a label for the second switch\n"
+"        this._birdLabel = new Gtk.Label ({\n"
+"            label: \"Make it a bird\",\n"
+"            margin_right: 30});\n"
+"\n"
+"        // Create the second switch\n"
+"        this._birdSwitch = new Gtk.Switch ({active: false});\n"
+"        this._birdSwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));\n"
 msgstr ""
-"Neste titorial faremos un programa que reproduce tonos que pode usar para "
-"afinar unha guitarra. Aprenderá como:"
-
-#: C/guitar-tuner.py.page:28(p) C/guitar-tuner.cpp.page:26(p)
-#: C/guitar-tuner.c.page:28(p)
-msgid "Set up a basic project in Anjuta"
-msgstr "Configurar un proxecto básico en Anjuta"
 
-#: C/guitar-tuner.py.page:29(p) C/guitar-tuner.cpp.page:27(p)
-#: C/guitar-tuner.c.page:29(p)
-msgid "Create a simple GUI with Anjuta's UI designer"
-msgstr "Crear unha GUI sinxela co deseñador de UI de Anjuta"
-
-#: C/guitar-tuner.py.page:30(p) C/guitar-tuner.cpp.page:28(p)
-#: C/guitar-tuner.c.page:30(p)
-msgid "Use GStreamer to play sounds"
-msgstr "Usar GStreamer para reproducir sons."
-
-#: C/guitar-tuner.py.page:35(p)
-msgid "Basic knowledge of the Python programming language"
-msgstr "Coñecemento básico da linguaxe de programación Python"
-
-#: C/guitar-tuner.py.page:49(p)
-#, fuzzy
-#| msgid ""
-#| "Choose <gui>GTKmm (Simple)</gui> from the <gui>C++</gui> tab, click "
-#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
-#| "<file>guitar-tuner</file> as project name and directory."
+#: C/switch.js.page:119(section/p)
 msgid ""
-"Choose <gui>PyGTK (automake)</gui> from the <gui>Python</gui> tab, click "
-"<gui>Continue</gui>, and fill out your details on the next few pages. Use "
-"<file>guitar-tuner</file> as project name and directory."
+"We use a <link xref=\"label.js\">Label</link> to mark each Switch, and give "
+"them a bit of a margin on the right so that they aren't crammed right next "
+"to the Switches. After that we create the Switches, and set them to be "
+"switched off by default."
 msgstr ""
-"Seleccione <gui>GTKmm (Simple)</gui> desde a lapela <gui>C++</gui>, prema "
-"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
-"<file>guitar-tunner</file> como nome do proxecto e cartafol."
 
-#: C/guitar-tuner.py.page:52(p)
+#: C/switch.js.page:120(section/p)
 msgid ""
-"Click <gui>Apply</gui> and the project will be created for you. Open "
-"<file>src/guitar_tuner.py</file> from the <gui>Project</gui> or <gui>File</"
-"gui> tabs. You should see some code which starts with the lines:"
+"The signal a switch sends out when it's flipped on or off is called notify::"
+"active. After we create each switch, we connect its notify::active signal to "
+"a function called _switchFlip. If you have multiple switches that each do "
+"something different, you might want to connect them to different functions, "
+"but here they're both used for the same thing: To control what picture's "
+"displayed by _image."
 msgstr ""
-"Prema <gui>Aplicar</gui> e crearase o proxecto. Abra <file>src/guitar_tuner."
-"py</file> desde as lapelas <gui>Proxecto</gui> ou <gui>Ficheiro</gui>. "
-"Debería ver algo de código que comece coas liñas:"
 
-#: C/guitar-tuner.py.page:61(title)
-msgid "Run the code for the first time"
-msgstr "Executar o código por primeira vez"
-
-#: C/guitar-tuner.py.page:62(p)
+#: C/switch.js.page:122(section/code)
+#, no-wrap
 msgid ""
-"Most of the code in the file is template code. It loads an (empty) window "
-"from the user interface description file and shows it. More details are "
-"given below; skip this list if you understand the basics:"
+"\n"
+"        // Create a grid for the labels and switches beneath the picture\n"
+"        this._UIGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            margin_top: 20});\n"
+"\n"
+"        // Attach the labels and switches to that grid\n"
+"        this._UIGrid.attach (this._flyLabel, 0, 0, 1, 1);\n"
+"        this._UIGrid.attach (this._flySwitch, 1, 0, 1, 1);\n"
+"        this._UIGrid.attach (this._birdLabel, 0, 1, 1, 1);\n"
+"        this._UIGrid.attach (this._birdSwitch, 1, 1, 1, 1);\n"
+"\n"
+"        // Create a master grid to put both the UI and the picture into\n"
+"        this._mainGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Attach the picture and the UI grid to the master grid\n"
+"        this._mainGrid.attach (this._image, 0, 0, 1, 1);\n"
+"        this._mainGrid.attach (this._UIGrid, 0, 1, 1, 1);\n"
 msgstr ""
 
-#: C/guitar-tuner.py.page:66(p)
+#: C/switch.js.page:144(section/p)
 msgid ""
-"The <code>import</code> lines at the top include the tell Python to load the "
-"user interface and system libraries needed."
+"We create a <link xref=\"grid.js\">Grid</link> for the Labels and Switches "
+"first, so that we can organize them in a 2x2 layout with a margin between it "
+"and the Image. Then we put that Grid into a larger 2x1 Grid that has the "
+"Image on top, and the Grid with the Labels and Switches on the bottom."
 msgstr ""
 
-#: C/guitar-tuner.py.page:70(p)
+#: C/switch.js.page:145(section/code)
+#, no-wrap
 msgid ""
-"A class is declared that will be the main class for our application. In the "
-"<code>__init__</code> method the main window is loaded from the GtkBuilder "
-"file (<file>src/guitar-tuner.ui</file>) and the signals are connected."
+"\n"
+"        // Add the master grid to the window\n"
+"        this._window.add (this._mainGrid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
 msgstr ""
 
-#: C/guitar-tuner.py.page:73(p)
-msgid ""
-"Connecting signals is how you define what happens when you push a button, or "
-"when some other event happens. Here, the <code>destroy</code> method is "
-"called (and quits the app) when you close the window."
+#: C/switch.js.page:157(section/title)
+msgid "Function which handles the switches being flipped"
 msgstr ""
 
-#: C/guitar-tuner.py.page:76(p)
+#: C/switch.js.page:159(section/code)
+#, no-wrap
 msgid ""
-"The <code>main</code> function is run by default when you start a Python "
-"application. It just creates an instance of the main class and starts the "
-"main loop to bring up the window."
+"\n"
+"    _switchFlip: function() {\n"
+"\n"
+"        // Change the picture depending on which switches are flipped\n"
+"        if (this._flySwitch.get_active()) {\n"
+"\n"
+"            if (this._birdSwitch.get_active()) this._image.set_from_file (\"muteswan.png\");\n"
+"\n"
+"            else this._image.set_from_file (\"fruitbat.png\");\n"
+"        }\n"
+"\n"
+"        else {\n"
+"\n"
+"            if (this._birdSwitch.get_active()) this._image.set_from_file (\"gentoopenguin.png\");\n"
+"\n"
+"            else this._image.set_from_file (\"redfox.png\");\n"
+"\n"
+"        }\n"
+"\n"
+"    },\n"
 msgstr ""
 
-#: C/guitar-tuner.py.page:81(p)
+#: C/switch.js.page:180(section/p)
 msgid ""
-"This code is ready to be used, so you can run it by clicking "
-"<guiseq><gui>Run</gui><gui>Execute</gui></guiseq>."
+"Each time a Switch is flipped, this function checks to see which of the two "
+"Switches are active afterwards, using the Switches' built-in get_active() "
+"function. It then changes the Image accordingly. You can change the "
+"filenames around as you like, so long as you have pictures to go with them."
 msgstr ""
-"Este código está listo para o seu uso, polo que pode executalo premendo "
-"<guiseq><gui>Executar</gui><gui>Executar</gui></guiseq>."
 
-#: C/guitar-tuner.py.page:86(p)
+#: C/switch.js.page:184(section/title)
+msgid "Creating the AboutDialog"
+msgstr "Crear un AboutDialog"
+
+#: C/switch.js.page:185(section/code)
+#, no-wrap
 msgid ""
-"A description of the user interface (UI) is contained in the GtkBuilder "
-"file. To edit the user interface, open <file>src/guitar_tuner.ui</file>. "
-"This will switch to the interface designer. The design window is in the "
-"center; widgets and widgets' properties are on the right, and the palette of "
-"available widgets is on the left."
+"\n"
+"    _initMenus: function() {\n"
+"\n"
+"        // Build the application's menu so we can have an \"About\" button\n"
+"        let menu = new Gio.Menu();\n"
+"        menu.append(\"About\", 'app.about');\n"
+"        menu.append(\"Quit\",'app.quit');\n"
+"        this.application.set_app_menu(menu);\n"
+"\n"
+"        // Bind the \"About\" button to the _showAbout() function\n"
+"        let aboutAction = new Gio.SimpleAction ({ name: 'about' });\n"
+"        aboutAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showAbout();\n"
+"            }));\n"
+"        this.application.add_action(aboutAction);\n"
+"\n"
+"        // Bind the \"Quit\" button to the function that closes the window\n"
+"        let quitAction = new Gio.SimpleAction ({ name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"        this.application.add_action(quitAction);\n"
+"    },\n"
 msgstr ""
 
-#: C/guitar-tuner.py.page:88(p) C/guitar-tuner.cpp.page:86(p)
-#: C/guitar-tuner.c.page:92(p)
+#: C/switch.js.page:211(section/p)
 msgid ""
-"The layout of every UI in GTK+ is organized using boxes and tables. Let's "
-"use a vertical <gui>GtkButtonBox</gui> here to assign six <gui>GtkButtons</"
-"gui>, one for each of the six guitar strings."
+"The first step is building the <link xref=\"gmenu.js\">GMenu</link> that the "
+"\"About\" button goes into. This is the menu that appears when you click the "
+"application's name in the upper-left corner of the screen, next to the "
+"Activities menu. Our menu only has two options in it: About, and Quit."
 msgstr ""
 
-#: C/guitar-tuner.py.page:94(p) C/guitar-tuner.cpp.page:92(p)
-#: C/guitar-tuner.c.page:98(p)
+#: C/switch.js.page:213(section/code)
+#, no-wrap
 msgid ""
-"Select a <gui>GtkButtonBox</gui> from the <gui>Container</gui> section of "
-"the <gui>Palette</gui> on the right and put it into the window. In the "
-"<gui>Properties</gui> pane, set the number of elements to 6 (for the six "
-"strings) and the orientation to vertical."
+"\n"
+"    _showAbout: function () {\n"
+"\n"
+"        // String arrays of the names of the people involved in the project\n"
+"        var artists = ['Rob Lee http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.jpg', 'Ken Funakoshi 
http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.jpg', 
'Shek Graham http://www.flickr.com/photos/shekgraham/127431519/in/photostream/', 'Mindaugas Urbonas 
http://commons.wikimedia.org/wiki/File:Mute_Swan-Mindaugas_Urbonas.jpg'];\n"
+"        var authors = [\"GNOME Documentation Team\"];\n"
+"        var documenters = [\"GNOME Documentation Team\"];\n"
+"\n"
+"        // Create the About dialog\n"
+"        let aboutDialog = new Gtk.AboutDialog({\n"
+"            title: \"AboutDialog Example\",\n"
+"            program_name: \"Animal Creator\",\n"
+"            copyright: \"Copyright \\xa9 2012 GNOME Documentation Team\\n\\nRed fox photo licensed CC-By by 
Rob Lee\\nGentoo penguin photo licensed CC-By-SA by Ken Funakoshi\\nFruit bat photo licensed CC-By by Shek 
Graham\\nMute swan photo licensed CC-By-SA by Mindaugas Urbonas\\nLinks to the originals are available under 
Credits.\\n\\nHave you hugged a penguin today?\",\n"
+"            artists: artists,\n"
+"            authors: authors,\n"
+"            documenters: documenters,\n"
+"            website: \"http://developer.gnome.org\",\n";
+"            website_label: \"GNOME Developer Website\" });\n"
+"\n"
+"        // Attach the About dialog to the window\n"
+"        aboutDialog.modal = true;\n"
+"        aboutDialog.transient_for = this._window;\n"
+"\n"
+"        // Show the About dialog\n"
+"        aboutDialog.show();\n"
+"\n"
+"        // Connect the Close button to the destroy signal for the dialog\n"
+"        aboutDialog.connect('response', function() {\n"
+"            aboutDialog.destroy();\n"
+"        });\n"
+"    }\n"
+"\n"
+"});\n"
 msgstr ""
 
-#: C/guitar-tuner.py.page:98(p) C/guitar-tuner.cpp.page:96(p)
-#: C/guitar-tuner.c.page:102(p)
+#: C/switch.js.page:247(section/p)
 msgid ""
-"Now, choose a <gui>GtkButton</gui> from the palette and put it into the "
-"first part of the box."
+"An <link xref=\"aboutdialog.js\">AboutDialog</link> has a lot of different "
+"things you can set, to credit everyone who worked on the application and "
+"leave a note to whomever reads it. In this case, the copyright section "
+"contains our note and credits the original photographers, while the artists "
+"section shows you a list of the photographers with links to the original "
+"photos when you click the Credits button. The web URLs put after their names "
+"in the array turn their names into clickable links in the Credits section."
 msgstr ""
 
-#: C/guitar-tuner.py.page:101(p) C/guitar-tuner.c.page:105(p)
+#: C/switch.js.page:249(section/code)
+#, no-wrap
 msgid ""
-"While the button is still selected, change the <gui>Label</gui> property in "
-"the <gui>Widgets</gui> tab to <gui>E</gui>. This will be the low E string."
+"\n"
+"// Run the application\n"
+"let app = new SwitchExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/guitar-tuner.py.page:104(p) C/guitar-tuner.c.page:108(p)
+#: C/switch.js.page:254(section/p)
 msgid ""
-"Switch to the <gui>Signals</gui> tab (inside the <gui>Widgets</gui> tab) and "
-"look for the <code>clicked</code> signal of the button. You can use this to "
-"connect a signal handler that will be called when the button is clicked by "
-"the user. To do this, click on the signal and type <code>on_button_clicked</"
-"code> in the <gui>Handler</gui> column and press <key>Return</key>."
+"Finally, we create a new instance of the finished SwitchExample class, and "
+"set the application running."
 msgstr ""
 
-#: C/guitar-tuner.py.page:116(title)
-msgid "Write the signal handler"
-msgstr "Escribir o manexador de sinais"
-
-#: C/guitar-tuner.py.page:117(p) C/guitar-tuner.c.page:121(p)
+#: C/switch.js.page:259(section/code)
+#, no-wrap
 msgid ""
-"In the UI designer, you made it so that all of the buttons will call the "
-"same function, <gui>on_button_clicked</gui>, when they are clicked. We need "
-"to add that function in the source file."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const SwitchExample = new Lang.Class({\n"
+"    Name: 'Switch Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsswitch'\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal creates the menu and builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._initMenus();\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 20,\n"
+"            title: \"Animal Creator\"});\n"
+"\n"
+"        // Create the image widget and set its default picture\n"
+"        this._image = new Gtk.Image ({file: \"redfox.png\"});\n"
+"\n"
+"        // Create a label for the first switch\n"
+"        this._flyLabel = new Gtk.Label ({\n"
+"            label: \"Make it fly\",\n"
+"            margin_right: 30});\n"
+"\n"
+"        // Create the first switch and set its default position\n"
+"        this._flySwitch = new Gtk.Switch ({active: false});\n"
+"        this._flySwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));\n"
+"\n"
+"        // Create a label for the second switch\n"
+"        this._birdLabel = new Gtk.Label ({\n"
+"            label: \"Make it a bird\",\n"
+"            margin_right: 30});\n"
+"\n"
+"        // Create the second switch\n"
+"        this._birdSwitch = new Gtk.Switch ({active: false});\n"
+"        this._birdSwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));\n"
+"\n"
+"        // Create a grid for the labels and switches beneath the picture\n"
+"        this._UIGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            margin_top: 20});\n"
+"\n"
+"        // Attach the labels and switches to that grid\n"
+"        this._UIGrid.attach (this._flyLabel, 0, 0, 1, 1);\n"
+"        this._UIGrid.attach (this._flySwitch, 1, 0, 1, 1);\n"
+"        this._UIGrid.attach (this._birdLabel, 0, 1, 1, 1);\n"
+"        this._UIGrid.attach (this._birdSwitch, 1, 1, 1, 1);\n"
+"\n"
+"        // Create a master grid to put both the UI and the picture into\n"
+"        this._mainGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Attach the picture and the UI grid to the master grid\n"
+"        this._mainGrid.attach (this._image, 0, 0, 1, 1);\n"
+"        this._mainGrid.attach (this._UIGrid, 0, 1, 1, 1);\n"
+"\n"
+"        // Add the master grid to the window\n"
+"        this._window.add (this._mainGrid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _switchFlip: function() {\n"
+"\n"
+"        // Change the picture depending on which switches are flipped\n"
+"        if (this._flySwitch.get_active()) {\n"
+"\n"
+"            if (this._birdSwitch.get_active()) this._image.set_from_file (\"muteswan.png\");\n"
+"\n"
+"            else this._image.set_from_file (\"fruitbat.png\");\n"
+"        }\n"
+"\n"
+"        else {\n"
+"\n"
+"            if (this._birdSwitch.get_active()) this._image.set_from_file (\"gentoopenguin.png\");\n"
+"\n"
+"            else this._image.set_from_file (\"redfox.png\");\n"
+"\n"
+"        }\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _initMenus: function() {\n"
+"\n"
+"        // Build the application's menu so we can have an \"About\" button\n"
+"        let menu = new Gio.Menu();\n"
+"        menu.append(\"About\", 'app.about');\n"
+"        menu.append(\"Quit\",'app.quit');\n"
+"        this.application.set_app_menu(menu);\n"
+"\n"
+"        // Bind the \"About\" button to the _showAbout() function\n"
+"        let aboutAction = new Gio.SimpleAction ({ name: 'about' });\n"
+"        aboutAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showAbout();\n"
+"            }));\n"
+"        this.application.add_action(aboutAction);\n"
+"\n"
+"        // Bind the \"Quit\" button to the function that closes the window\n"
+"        let quitAction = new Gio.SimpleAction ({ name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"        this.application.add_action(quitAction);\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _showAbout: function () {\n"
+"\n"
+"        // String arrays of the names of the people involved in the project\n"
+"        var artists = ['Rob Lee http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.png', 'Ken Funakoshi 
http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.png', 
'Shek Graham http://www.flickr.com/photos/shekgraham/127431519/in/photostream/', 'Mindaugas Urbonas 
http://commons.wikimedia.org/wiki/File:Mute_Swan-Mindaugas_Urbonas.png'];\n"
+"        var authors = [\"GNOME Documentation Team\"];\n"
+"        var documenters = [\"GNOME Documentation Team\"];\n"
+"\n"
+"        // Create the About dialog\n"
+"        let aboutDialog = new Gtk.AboutDialog({\n"
+"            title: \"AboutDialog Example\",\n"
+"            program_name: \"Animal Creator\",\n"
+"            copyright: \"Copyright \\xa9 2012 GNOME Documentation Team\\n\\nRed fox photo licensed CC-By by 
Rob Lee\\nGentoo penguin photo licensed CC-By-SA by Ken Funakoshi\\nFruit bat photo licensed CC-By by Shek 
Graham\\nMute swan photo licensed CC-By-SA by Mindaugas Urbonas\\nLinks to the originals are available under 
Credits.\\n\\nHave you hugged a penguin today?\",\n"
+"            artists: artists,\n"
+"            authors: authors,\n"
+"            documenters: documenters,\n"
+"            website: \"http://developer.gnome.org\",\n";
+"            website_label: \"GNOME Developer Website\" });\n"
+"\n"
+"        // Attach the About dialog to the window\n"
+"        aboutDialog.modal = true;\n"
+"        aboutDialog.transient_for = this._window;\n"
+"\n"
+"        // Show the About dialog\n"
+"        aboutDialog.show();\n"
+"\n"
+"        // Connect the Close button to the destroy signal for the dialog\n"
+"        aboutDialog.connect('response', function() {\n"
+"            aboutDialog.destroy();\n"
+"        });\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new SwitchExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/guitar-tuner.py.page:118(p)
+#: C/switch.js.page:270(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"To do this, open <file>guitar_tuner.py</file> while the user interface file "
-"is still open. Switch to the <gui>Signals</gui> tab, which you already used "
-"to set the signal name. Now take the row where you set the <gui>clicked</"
-"gui> signal and drag it into to the source file inside the class. The "
-"following code will be added to your source file:"
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html";
+"\">Gtk.Image</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/guitar-tuner.py.page:124(p)
+#: C/switch.js.page:272(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"This signal handler has two arguments: the usual Python class pointer, and "
-"the <code>Gtk.Button</code> that called the function."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Switch.html";
+"\">Gtk.Switch</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/guitar-tuner.py.page:125(p) C/guitar-tuner.c.page:131(p)
-msgid ""
-"For now, we'll leave the signal handler empty while we work on writing the "
-"code to produce sounds."
+#: C/switch.py.page:7(info/title)
+#, fuzzy
+#| msgid "Switch (Python)"
+msgctxt "text"
+msgid "Switch (Python)"
+msgstr "Switch (Python)"
+
+#: C/switch.py.page:29(page/p)
+msgid "This Switch makes the title appears and disappear."
 msgstr ""
 
-#: C/guitar-tuner.py.page:130(p) C/guitar-tuner.js.page:39(p)
-#: C/guitar-tuner.c.page:136(p)
+#: C/switch.py.page:36(section/code)
+#, no-wrap
 msgid ""
-"GStreamer is GNOME's multimedia framework — you can use it for playing, "
-"recording, and processing video, audio, webcam streams and the like. Here, "
-"we'll be using it to produce single-frequency tones."
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Switch Example\", application=app)\n"
+"        self.set_default_size(300, 100)\n"
+"        self.set_border_width(10)\n"
+"\n"
+"        # a switch\n"
+"        switch = Gtk.Switch()\n"
+"        # turned on by default\n"
+"        switch.set_active(True)\n"
+"        # connect the signal notify::active emitted by the switch\n"
+"        # to the callback function activate_cb\n"
+"        switch.connect(\"notify::active\", self.activate_cb)\n"
+"\n"
+"        # a label\n"
+"        label = Gtk.Label()\n"
+"        label.set_text(\"Title\")\n"
+"\n"
+"        # a grid to allocate the widgets\n"
+"        grid = Gtk.Grid()\n"
+"        grid.set_column_spacing (10);\n"
+"        grid.attach (label, 0, 0, 1, 1);\n"
+"        grid.attach (switch, 1, 0, 1, 1);\n"
+"\n"
+"        # add the grid to the window\n"
+"        self.add(grid)\n"
+"\n"
+"    # Callback function. Since the signal is notify::active\n"
+"    # we need the argument 'active'\n"
+"    def activate_cb(self, button, active):\n"
+"        # if the button (i.e. the switch) is active, set the title\n"
+"        # of the window to \"Switch Example\"\n"
+"        if button.get_active():\n"
+"            self.set_title(\"Switch Example\")\n"
+"        # else, set it to \"\" (empty string)\n"
+"        else:\n"
+"            self.set_title(\"\")\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
-"GStreamer é un marco de traballo multimedia de GNOME — vostede pode usalo "
-"para reproducir, gravar e procesar vídeo, son, fluxos de cámara web e "
-"semellantes. Aquí, usarémolo para producir tonos dunha única frecuencia."
 
-#: C/guitar-tuner.py.page:131(p) C/guitar-tuner.js.page:40(p)
-#: C/guitar-tuner.cpp.page:115(p) C/guitar-tuner.c.page:137(p)
-msgid ""
-"Conceptually, GStreamer works as follows: You create a <em>pipeline</em> "
-"containing several processing elements going from the <em>source</em> to the "
-"<em>sink</em> (output). The source can be an image file, a video, or a music "
-"file, for example, and the output could be a widget or the soundcard."
+#: C/switch.py.page:40(section/title)
+msgid "Useful methods for a Switch widget"
 msgstr ""
 
-#: C/guitar-tuner.py.page:140(p) C/guitar-tuner.cpp.page:129(p)
-#: C/guitar-tuner.c.page:146(p)
+#: C/switch.py.page:48(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"In this simple example we will use a tone generator source called "
-"<code>audiotestsrc</code> and send the output to the default system sound "
-"device, <code>autoaudiosink</code>. We only need to configure the frequency "
-"of the tone generator; this is accessible through the <code>freq</code> "
-"property of <code>audiotestsrc</code>."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSwitch.html";
+"\">GtkSwitch</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/guitar-tuner.py.page:142(p)
-msgid ""
-"Change the import line in <file>guitar_tuner.py</file>, just at the "
-"beginning to :"
+#: C/switch.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Switch (Vala)"
+msgctxt "text"
+msgid "Switch (Vala)"
+msgstr "Switch (Vala)"
+
+#: C/switch.vala.page:28(page/p)
+msgid "This Switch toggles the title."
 msgstr ""
 
-#: C/guitar-tuner.py.page:144(p)
+#: C/switch.vala.page:30(page/code)
+#, no-wrap
 msgid ""
-"The <code>Gst</code> includes the GStreamer library. You also need to "
-"initialise GStreamer properly which is done in the <code>main()</code> "
-"method with this call added above the <code>app = GUI()</code> line:"
+"class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"Switch Example\");\n"
+"\n"
+"\t\tthis.set_default_size (300, 100);\n"
+"\t\tthis.border_width = 10;\n"
+"\n"
+"\t\tvar label = new Gtk.Label (\"Title\");\n"
+"\t\tvar switcher = new Gtk.Switch ();\n"
+"\n"
+"\t\tswitcher.set_active (true);\n"
+"\n"
+"\t\tswitcher.notify[\"active\"].connect (switcher_cb);\n"
+"\n"
+"\t\tvar grid = new Gtk.Grid ();\n"
+"\t\tgrid.set_column_spacing (10);\n"
+"\t\tgrid.attach (label, 0, 0, 1, 1);\n"
+"\t\tgrid.attach (switcher, 1, 0, 1, 1);\n"
+"\n"
+"\t\tthis.add (grid);\n"
+"\t}\n"
+"\n"
+"\tvoid switcher_cb (Object switcher, ParamSpec pspec) {\n"
+"\t\tif ((switcher as Gtk.Switch).get_active())\n"
+"\t\t\tthis.set_title (\"Switch Example\");\n"
+"\t\telse\n"
+"\t\t\tthis.set_title (\"\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"class MyApplication : Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\n"
+"\t\tvar window = new MyWindow (this);\n"
+"\t\twindow.show_all (); //show all the things\n"
+"\t}\n"
+"\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.checkbutton\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/guitar-tuner.py.page:148(p)
+#: C/switch.vala.page:35(item/p)
 #, fuzzy
 #| msgid ""
-#| "Then, copy the following function into <file>main.c</file> above the "
-#| "empty <code>on_button_clicked</code> function:"
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Then, copy the following function into the class in <file>guitar_tuner.py</"
-"file> somewhere:"
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Switch.html\";>Gtk.Switch</"
+"link>"
 msgstr ""
-"Despois, copie a seguinte función en <file>main.c</file> enriba da función "
-"<code>on_button_clicked</code> baleira:"
-
-#: C/guitar-tuner.py.page:164(p)
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/textview.c.page:26(media) C/textview.py.page:37(media)
+#: C/textview.vala.page:26(media)
+#, fuzzy
+#| msgid "@@image: 'media/textview.png'; md5=049e859ed1af2d7c93d8cb5cfd9f7792"
+msgctxt "_"
 msgid ""
-"The first three lines create source and sink GStreamer elements and a "
-"pipeline element (which will be used as a container for the other two "
-"elements). The pipeline is given the name \"note\"; the source is named "
-"\"source\" and is set to the <code>audiotestsrc</code> source; and the sink "
-"is named \"output\" and set to the <code>autoaudiosink</code> sink (default "
-"sound card output)."
+"external ref='media/textview.png' md5='049e859ed1af2d7c93d8cb5cfd9f7792'"
+msgstr "@@image: 'media/textview.png'; md5=049e859ed1af2d7c93d8cb5cfd9f7792"
+
+#: C/textview.c.page:7(info/title)
+#, fuzzy
+#| msgid "TextView (C)"
+msgctxt "text"
+msgid "TextView (C)"
+msgstr "TextView (C)"
+
+#: C/textview.c.page:17(info/desc) C/textview.vala.page:17(info/desc)
+msgid "Widget which displays a GtkTextBuffer"
+msgstr "Widget que mostra un GtkTextBuffer"
+
+#: C/textview.c.page:20(page/title) C/textview.vala.page:20(page/title)
+msgid "TextView widget"
+msgstr "Widget TextView"
+
+#: C/textview.c.page:21(note/p) C/textview.py.page:31(note/p)
+#: C/textview.vala.page:21(note/p)
+msgid "If we press \"enter\", we have a new line."
 msgstr ""
 
-#: C/guitar-tuner.py.page:167(p)
+#: C/textview.c.page:22(note/p) C/textview.vala.page:22(note/p)
 msgid ""
-"The call to <code>source.set_property</code> sets the <code>freq</code> "
-"property of the source element to <code>frequency</code>, which was passed "
-"as an argument to the <code>play_sound</code> function. This is just the "
-"frequency of the note in Hertz; some useful frequencies will be defined "
-"later on."
+"If we press \"enter\" more times then there are lines in the default sized "
+"window, then a vertical scrollbar appears."
 msgstr ""
 
-#: C/guitar-tuner.py.page:170(p)
+#: C/textview.c.page:23(note/p) C/textview.vala.page:23(note/p)
 msgid ""
-"The next two lines call <code>pipeline.add</code>, putting the source and "
-"sink into the pipeline. The pipeline can contain multiple other GStreamer "
-"elements. In general, you can add as many elements as you like to the "
-"pipeline by calling its <code>add</code> method repeatedly."
+"If we write a long sentence, the text will wrap breaking lines between words."
 msgstr ""
 
-#: C/guitar-tuner.py.page:173(p)
+#: C/textview.c.page:24(note/p)
 msgid ""
-"Next <code>pipeline.set_state</code> is used to start playback, by setting "
-"the state of the pipeline to playing (<code>Gst.State.PLAYING</code>)."
+"If we have a loooooooooooooooooooooooooooooooooooong (that was long) word, "
+"a* horizontal scrollbar will appear."
 msgstr ""
-"A seguinte <code>pipeline.set_state</code> úsase para iniciar a reprodución, "
-"estabelecendo o estado da tubería a reprodución (<code>Gst.State.PLAYING</"
-"code>)."
 
-#: C/guitar-tuner.py.page:180(title) C/guitar-tuner.c.page:195(title)
-msgid "Stopping playback"
-msgstr "Deter a reprodución"
+#: C/textview.c.page:27(page/p) C/textview.vala.page:27(page/p)
+msgid "This is an example of Gtk.TextView"
+msgstr ""
 
-#: C/guitar-tuner.py.page:181(p)
+#: C/textview.c.page:29(page/code)
+#, no-wrap
 msgid ""
-"We don't want to play an annoying tone forever, so the last thing "
-"<code>play_sound</code> does is to call <code>GObject.timeout_add</code>. "
-"This sets a timeout for stopping the sound; it waits for <code>LENGTH</code> "
-"milliseconds before calling the function <code>pipeline_stop</code>, and "
-"will keep calling it until <code>pipeline_stop</code> returns <code>False</"
-"code>."
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  /* Declare variables */\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *text_view;\n"
+"  GtkWidget *scrolled_window;\n"
+"\n"
+"  GtkTextBuffer *buffer;\n"
+"\n"
+"\n"
+"  /* Create a window with a title, and a default size */\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"TextView Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 220, 200);\n"
+"\n"
+"\n"
+"  /* The text buffer represents the text being edited */\n"
+"  buffer = gtk_text_buffer_new (NULL);\n"
+"  \n"
+"\n"
+"  /* Text view is a widget in which can display the text buffer. \n"
+"   * The line wrapping is set to break lines in between words.\n"
+"   */\n"
+"  text_view = gtk_text_view_new_with_buffer (buffer);\n"
+"  gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view), GTK_WRAP_WORD); \n"
+"\n"
+"\n"
+"  /* Create the scrolled window. Usually NULL is passed for both parameters so \n"
+"   * that it creates the horizontal/vertical adjustments automatically. Setting \n"
+"   * the scrollbar policy to automatic allows the scrollbars to only show up \n"
+"   * when needed. \n"
+"   */\n"
+"  scrolled_window = gtk_scrolled_window_new (NULL, NULL);\n"
+"  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), \n"
+"                                  GTK_POLICY_AUTOMATIC, \n"
+"                                  GTK_POLICY_AUTOMATIC); \n"
+"  /* The function directly below is used to add children to the scrolled window \n"
+"   * with scrolling capabilities (e.g text_view), otherwise, \n"
+"   * gtk_scrolled_window_add_with_viewport() would have been used\n"
+"   */\n"
+"  gtk_container_add (GTK_CONTAINER (scrolled_window), \n"
+"                                         text_view);\n"
+"  gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 5);\n"
+" \n"
+"  \n"
+"  gtk_container_add (GTK_CONTAINER (window), scrolled_window);\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
 msgstr ""
 
-#: C/guitar-tuner.py.page:182(p)
+#: C/textview.c.page:40(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Now, we'll write the <code>pipeline_stop</code> function which is called by "
-"<code>GObject.timeout_add</code>. Insert the following code <em>above</em> "
-"the <code>play_sound</code> function:"
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkContainer.html";
+"\">GtkContainer</link>"
 msgstr ""
-"Agora, escríbese o código da función <code>pipeline_stop</code>, chamada por "
-"<code>GObject.timeout_add</code>. Inserte o código seguinte <em>enriba</em> "
-"da función <code>play_sound</code>:"
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/guitar-tuner.py.page:188(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/textview.js.page:25(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/textviewpenguinchat.png'; "
+#| "md5=0dd6f6aa44aaeab7901bd90162ed4c9a"
+msgctxt "_"
 msgid ""
-"You need to define the <code>LENGTH</code> constant inside the class, so add "
-"this code at the beginning of the main class:"
+"external ref='media/textviewpenguinchat.png' "
+"md5='0dd6f6aa44aaeab7901bd90162ed4c9a'"
 msgstr ""
+"@@image: 'media/textviewpenguinchat.png'; "
+"md5=0dd6f6aa44aaeab7901bd90162ed4c9a"
 
-#: C/guitar-tuner.py.page:193(p)
-msgid ""
-"The call to <code>pipeline.set_state</code> pauses the playback of the "
-"pipeline."
-msgstr ""
+#: C/textview.js.page:7(info/title)
+#, fuzzy
+#| msgid "TextView (JavaScript)"
+msgctxt "text"
+msgid "TextView (JavaScript)"
+msgstr "TextView (JavaScript)"
 
-#: C/guitar-tuner.py.page:197(title) C/guitar-tuner.c.page:213(title)
-msgid "Define the tones"
-msgstr "Definir os tonos"
+#: C/textview.js.page:21(info/desc)
+msgid "A multiline text editor"
+msgstr "Un editor de texto multiliña"
 
-#: C/guitar-tuner.py.page:198(p)
-msgid ""
-"We want to play the correct sound when the user clicks a button. First of "
-"all, we need to know the frequencies for the six guitar strings, which are "
-"defined (at the beginning of the main class) inside a dictionary so we can "
-"easily map them to the names of the strings:"
-msgstr ""
+#: C/textview.js.page:24(page/title) C/textview.py.page:28(page/title)
+msgid "TextView"
+msgstr "TextView"
 
-#: C/guitar-tuner.py.page:211(p) C/guitar-tuner.c.page:223(p)
+#: C/textview.js.page:26(page/p)
 msgid ""
-"Now to flesh out the signal handler that we defined earlier, "
-"<code>on_button_clicked</code>. We could have connected every button to a "
-"different signal handler, but that would lead to a lot of code duplication. "
-"Instead, we can use the label of the button to figure out which button was "
-"clicked:"
+"A TextView is really (or at least usually) a nested set of three objects."
 msgstr ""
 
-#: C/guitar-tuner.py.page:219(p)
+#: C/textview.js.page:28(item/p)
 msgid ""
-"The button that was clicked is passed as an argument (<code>button</code>) "
-"to <code>on_button_clicked</code>. We can get the label of that button by "
-"using <code>button.get_child</code>, and then get the text from that label "
-"using <code>label.get_label</code>."
+"At the bottom there is a <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link>. This holds the text "
+"itself."
 msgstr ""
 
-#: C/guitar-tuner.py.page:220(p)
+#: C/textview.js.page:29(item/p)
 msgid ""
-"The label text is then used as a key for the dictionary and "
-"<code>play_sound</code> is called with the frequency appropriate for that "
-"note. This plays the tone; we have a working guitar tuner!"
+"In the middle there is the <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextView.html\">TextView</link>, which is a widget that lets "
+"you see and edit the text in the buffer. It automatically resizes itself "
+"depending on how much text there is."
 msgstr ""
 
-#: C/guitar-tuner.py.page:225(p)
+#: C/textview.js.page:30(item/p)
 msgid ""
-"All of the code should now be ready to go. Click <guiseq><gui>Run</"
-"gui><gui>Execute</gui></guiseq> to start the application. Enjoy!"
+"Since the automatic resizing can make a TextView unwieldy, you normally "
+"place it inside of a <link xref=\"scrolledwindow.js\">ScrolledWindow</link>. "
+"Despite the name, it's not an actual window in terms of having a title bar "
+"and an X button; it's a widget you put on the application you're making, "
+"which acts like a window onto a more manageable chunk of a TextView. If the "
+"text in the buffer is too big to fit, scrollbars will appear."
 msgstr ""
-"Todo o código debería estar listo. Prema <guiseq><gui>Executar</"
-"gui><gui>Executar</gui></guiseq> para iniciar o aplicativo. Góceo!"
 
-#: C/guitar-tuner.py.page:230(p)
+#: C/textview.js.page:32(page/p)
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"guitar-tuner/guitar-tuner.py\">reference code</link>."
+"If you want to change what text is displayed in the TextView, you act on the "
+"TextBuffer, since it's what actually holds the text. The same goes for if "
+"you want to see what text someone typed in. This sample application lets you "
+"talk to a (make-believe) penguin, and checks the TextBuffer to see if you "
+"typed the word \"fish\" anywhere in it."
 msgstr ""
-"Se ten problemas ao executar este titorial compare o seu código con este "
-"<link href=\"guitar-tuner/guitar-tuner.py\">código de referencia</link>."
-
-#: C/guitar-tuner.js.page:6(title)
-#, fuzzy
-#| msgid "Guitar Tuner"
-msgid "Guitar Tuner (JavaScript)"
-msgstr "Afinador de guitarra"
 
-#: C/guitar-tuner.js.page:16(desc)
-#, fuzzy
-#| msgid ""
-#| "Use Gtk+ and GStreamer to build a simple guitar tuner application for "
-#| "GNOME. Shows off how to use the interface designer."
+#: C/textview.js.page:33(note/p)
 msgid ""
-"Use Gtk+ and GStreamer to build a simple guitar tuner application for GNOME."
+"Real-life penguin populations are declining fast, because climate change is "
+"melting the ice that they live on and killing the fish that they eat. If "
+"you'd like to play a (somewhat silly) GNOME game based on this premise, take "
+"a look at <link href=\"http://pingus.seul.org/\";>Pingus</link>."
 msgstr ""
-"Usar GTK+ y GStreamer para construír un sinxelo afinador de guitarra para "
-"GNOME. Mostra como usar o deseñador de interfaces."
 
-#: C/guitar-tuner.js.page:22(p)
+#: C/textview.js.page:49(section/code)
+#, no-wrap
 msgid ""
-"In this tutorial we'll construct a small application, Guitar Tuner, using "
-"JavaScript and GTK+ and GStreamer. To do and run all the code examples "
-"yourself, you need an editor to write code in, terminal and GNOME 3. or "
-"higher installed into your computer."
-msgstr ""
-
-#: C/guitar-tuner.js.page:28(link) C/guitar-tuner.js.page:77(title)
-msgid "Buttons for the tunes"
-msgstr ""
-
-#: C/guitar-tuner.js.page:29(link) C/guitar-tuner.js.page:102(title)
-msgid "Making the sounds with GStreamer"
+"\n"
+"const TextViewExample = new Lang.Class ({\n"
+"    Name: 'TextView Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jstextview' });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
 msgstr ""
 
-#: C/guitar-tuner.js.page:30(link) C/guitar-tuner.js.page:126(title)
-msgid "Connecting buttons to playSound"
+#: C/textview.js.page:73(section/p)
+msgid ""
+"All the code for this sample goes in the TextViewExample class. The above "
+"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
+"go in."
 msgstr ""
 
-#: C/guitar-tuner.js.page:31(link) C/guitar-tuner.js.page:149(title)
-msgid "The whole program"
+#: C/textview.js.page:74(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Talk to a Penguin\",\n"
+"            default_height: 400,\n"
+"            default_width: 440,\n"
+"            border_width: 20 });\n"
 msgstr ""
 
-#: C/guitar-tuner.js.page:32(link) C/guitar-tuner.js.page:229(title)
+#: C/textview.js.page:91(section/title)
 #, fuzzy
-#| msgid "Run the application"
-msgid "Running the application form Terminal"
-msgstr "Executar o aplicativo"
+#| msgid "Creating the user interface"
+msgid "Creating the TextView"
+msgstr "Crear a interface de usuario"
 
-#: C/guitar-tuner.js.page:50(p)
+#: C/textview.js.page:92(section/code)
+#, no-wrap
 msgid ""
-"This line tells how to run the script. It needs to be the first line of the "
-"code and it needs to be executable. To get the execution rights go to "
-"terminal and run in right folder: chmod +x scriptname. Or you can use the "
-"graphical filemanager. Just go to the right folder where your code is, right "
-"click you code file, choose properties, click the permissions tab and check "
-"the box for allow executing file as a program"
+"\n"
+"        // Create a label for the penguin to talk to you\n"
+"        this._penguin = new Gtk.Label ({\n"
+"            height_request: 180,\n"
+"            width_request: 400,\n"
+"            label: \"Squaaaak?\",\n"
+"            wrap: true });\n"
 msgstr ""
 
-#: C/guitar-tuner.js.page:60(p)
+#: C/textview.js.page:101(section/p)
 msgid ""
-"In order to have a working program we need to import a few GObject "
-"Introspection -libraries to our use. For working UI, we need Gtk and for "
-"Gstreamer to work we need Gst. These are imported in the beginning so we "
-"have them at use everywhere. Also in the beginning we import a construct "
-"Mainloop to handle the timeout to be used with the tuning sounds."
+"Our first step in this example is to create the <link xref=\"label.js"
+"\">Label</link> that the penguin will use to talk to you. We set the text in "
+"it to wrap by setting its wrap property to true, but we'll use a different "
+"method on the TextView itself that allows for more fine-grained control."
 msgstr ""
 
-#: C/guitar-tuner.js.page:74(p)
+#: C/textview.js.page:103(section/code)
+#, no-wrap
 msgid ""
-"Importing Gtk and Gst is not enough, we need to initialize them in order to "
-"get them working. When Gtk and Gst are up and running we need to create the "
-"window for the application. Later we are going to put all the buttons for "
-"making sounds inside this window. In order to get the window showing, we "
-"need to tell it to show and we need also to run the code with the Gtk.main()"
+"\n"
+"        // Create a textview for you to talk to the penguin\n"
+"        this.buffer = new Gtk.TextBuffer();\n"
+"        this._textView = new Gtk.TextView ({\n"
+"            buffer: this.buffer,\n"
+"            editable: true,\n"
+"            wrap_mode: Gtk.WrapMode.WORD });\n"
 msgstr ""
 
-#: C/guitar-tuner.js.page:98(p)
+#: C/textview.js.page:112(section/p)
 msgid ""
-"Because Gtk.Window can only contain a single widget, we need to create "
-"something under it to be able to add all the necessary buttons inside it. In "
-"this example we use Buttonbox. After creating the Buttonbox we create "
-"buttons with necessary labels. After we have the buttons we need to add them "
-"to the Buttonbox and the Buttonbox must be added to the Gtk.Window and "
-"everything in the Buttonbox must be shown."
+"Our first step is to create a TextBuffer to put the words into. After that "
+"we create the TextView, and tell it to use the TextBuffer we created as its "
+"buffer. We also set it to be editable, since we want to be able to type new "
+"things in."
 msgstr ""
 
-#: C/guitar-tuner.js.page:99(p)
+#: C/textview.js.page:113(section/p)
 msgid ""
-"After this stage you should have a window appearing to your screen showing 6 "
-"buttons. Right now the buttons don't do anything and we shall address that "
-"issue later. Before we can connect the button signals to something we need "
-"to code that something first."
+"The wrap_mode property lets you select from four different <link href="
+"\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.WrapMode.html";
+"\">WrapModes</link>. Gtk.WrapMode.CHAR, for instance, starts wrapping around "
+"in the middle of a word if you keep typing when it gets to the edge. Most "
+"people are probably used to Gtk.WrapMode.WORD, which will automatically put "
+"the word you're typing on the next line if it gets to be too long."
 msgstr ""
 
-#: C/guitar-tuner.js.page:122(p)
+#: C/textview.js.page:115(section/code)
+#, no-wrap
 msgid ""
-"The first thing we need to do is decide what tunes we want to make when we "
-"push a button. The frequencies list takes care of that. After that we get to "
-"actually making the sounds with the function playSound. For function "
-"playSound we give as an input a frequency (that we just defined in the "
-"frequencies variable). First thing we need to construct is a pipeline, a "
-"source and a sink. For the source we set the frequency. To the pipeline we "
-"add both the source and the sink and then we tell it to keep playing. As a "
-"last thing we use the const Mainloop to get the pipeline to pause after a "
-"500ms."
+"\n"
+"        // Create a \"scrolled window\" to put your textview in so it will scroll\n"
+"        this._scrolled = new Gtk.ScrolledWindow ({\n"
+"            hscrollbar_policy: Gtk.PolicyType.AUTOMATIC,\n"
+"            vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,\n"
+"            shadow_type: Gtk.ShadowType.ETCHED_IN,\n"
+"            height_request: 180,\n"
+"            width_request: 400, });\n"
+"\n"
+"        // Put the textview into the scrolled window\n"
+"        this._scrolled.add_with_viewport (this._textView);\n"
 msgstr ""
 
-#: C/guitar-tuner.js.page:123(p)
+#: C/textview.js.page:127(section/p)
 msgid ""
-"Now we have the method of playing a tune when clicking a button. Next well "
-"make the conncetions between pushing a button and playing the correct sound "
-"from that button."
+"Here we create a <link xref=\"scrolledwindow.js\">ScrolledWindow</link>, and "
+"set it to automatically scroll if it gets to be too big horizontally or "
+"vertically. We also give it a nice-looking ETCHED_IN border. After that, we "
+"put our TextView inside, and tell the ScrolledWindow to give us a viewport "
+"onto it."
 msgstr ""
 
-#: C/guitar-tuner.js.page:146(p)
+#: C/textview.js.page:133(section/code)
+#, no-wrap
 msgid ""
-"The method of connecting button clicks to playSound with the correct tune is "
-"by using the connect method of the button widget. So we choose a button to "
-"be connected and type E.connect(\"clicked\", function(){playSound"
-"(frequencies.E);}); The connect tells that when pushing E, something should "
-"happen. The \"clicked\" tells the type of something happening to E and then "
-"in the function(){}; we the playSound happen with the correct tune that "
-"should be associated to the button."
+"\n"
+"        // Create a grid to organize them in\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Put the label and textview in the grid one on top of the other\n"
+"        this._grid.attach (this._penguin, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._scrolled, 0, 1, 1, 1);\n"
 msgstr ""
 
-#: C/guitar-tuner.js.page:150(p)
+#: C/textview.js.page:143(section/p)
 msgid ""
-"So this is what all the parts combined looks like. When running this code, "
-"you should be able to tune your guitar(if you have correctly calibrated "
-"speakers)."
+"The first <link xref=\"grid.js\">Grid</link> we create only has the Label "
+"and the ScrolledWindow inside it."
 msgstr ""
 
-#: C/guitar-tuner.js.page:230(p)
+#: C/textview.js.page:145(section/code)
+#, no-wrap
 msgid ""
-"To run this application open Terminal, go to the folder where your "
-"application is stored and then run"
+"\n"
+"        // Create a button to send your message to the penguin\n"
+"        this._send = new Gtk.Button ({\n"
+"            halign: Gtk.Align.END,\n"
+"            margin_top: 20,\n"
+"            label: \"Send\" });\n"
+"        this._send.connect ('clicked', Lang.bind (this, this._chat));\n"
+"\n"
+"        // Create a grid that will have the other grid on top and the button on bottom\n"
+"        this._mainGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Add the other grid and the button to the main grid\n"
+"        this._mainGrid.attach (this._grid, 0, 0, 1, 1);\n"
+"        this._mainGrid.attach (this._send, 0, 1, 1, 1);\n"
 msgstr ""
 
-#: C/guitar-tuner.js.page:230(input)
-msgid "GJS_PATH=`pwd` gjs guitarTuner.js"
+#: C/textview.js.page:162(section/p)
+msgid ""
+"We create a <link xref=\"button.js\">Button</link> to send your message to "
+"the penguin, and a new Grid that has the other one on top and the Button on "
+"the bottom. The Button has a margin on top, so that it isn't squished up "
+"against the ScrolledWindow."
 msgstr ""
 
-#: C/guitar-tuner.js.page:235(p)
-#, fuzzy
-#| msgid ""
-#| "If you run into problems with the tutorial, compare your code with this "
-#| "<link href=\"guitar-tuner/guitar-tuner.c\">reference code</link>."
+#: C/textview.js.page:164(section/code)
+#, no-wrap
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"guitar-tuner/guitar-tuner.js\">reference code</link>."
+"\n"
+"        // Attach the main grid to the window\n"
+"        this._window.add (this._mainGrid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
 msgstr ""
-"Se ten problemas ao executar este titorial compare o seu código con este "
-"<link href=\"guitar-tuner/guitar-tuner.c\">código de referencia</link>."
 
-#: C/guitar-tuner.cpp.page:8(desc)
-#, fuzzy
-#| msgid ""
-#| "Use Gtkmm and GStreamermm to build a simple guitar tuner application for "
-#| "GNOME. Shows off how to use the interface designer."
+#: C/textview.js.page:173(section/p)
 msgid ""
-"Use GTKmm and GStreamermm to build a simple guitar tuner application for "
-"GNOME. Shows off how to use the interface designer."
+"Finally, we attach the main Grid to the window, then we tell the window and "
+"everything inside it to become visible when the application is run."
 msgstr ""
-"Usar GTKmm y GStreamer para construír un sinxelo afinador de guitarra para "
-"GNOME. Mostra como usar o deseñador de interfaces."
 
-#: C/guitar-tuner.cpp.page:21(title) C/guitar-tuner.c.page:23(title)
-msgid "Guitar Tuner"
-msgstr "Afinador de guitarra"
-
-#: C/guitar-tuner.cpp.page:33(p)
-msgid "Basic knowledge of the C++ programming language"
-msgstr "Coñecemento básico da linguaxe de programación C++"
-
-#: C/guitar-tuner.cpp.page:47(p)
-msgid ""
-"Choose <gui>GTKmm (Simple)</gui> from the <gui>C++</gui> tab, click "
-"<gui>Forward</gui>, and fill out your details on the next few pages. Use "
-"<file>guitar-tuner</file> as project name and directory."
+#: C/textview.js.page:178(section/title)
+msgid "Function which handles the penguin's response"
 msgstr ""
-"Seleccione <gui>GTKmm (Simple)</gui> desde a lapela <gui>C++</gui>, prema "
-"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
-"<file>guitar-tunner</file> como nome do proxecto e cartafol."
 
-#: C/guitar-tuner.cpp.page:50(p)
+#: C/textview.js.page:179(section/code)
+#, no-wrap
 msgid ""
-"Make sure that <gui>Configure external packages</gui> is selected. On the "
-"next page, select <em>gstreamermm-0.10</em> from the list to include the "
-"GStreamermm library in your project."
+"\n"
+"    _chat: function () {\n"
+"\n"
+"        // Create a random number to determine what the penguin says\n"
+"        this.number = Math.floor ((Math.random() * 3) + 1);\n"
+"\n"
+"        // Did you actually say anything?\n"
+"        if (this.buffer.text) {\n"
+"\n"
+"            // Did you mention fish?\n"
+"            if (this.buffer.text.match (/fish/gi)) {\n"
+"\n"
+"                // Have the penguin squaak about fish\n"
+"                if (this.number == 1)\n"
+"                    this._penguin.set_label (\"FISH!\");\n"
+"\n"
+"                else if (this.number == 2)\n"
+"                    this._penguin.set_label (\"Fish fish fish fish. Fish!\");\n"
+"\n"
+"                else\n"
+"                    this._penguin.set_label (\"Fish? Fish fish fish. Fish fish. FISH!\");\n"
+"\n"
+"            }\n"
+"\n"
+"            // I guess you didn't mention fish\n"
+"            else {\n"
+"\n"
+"                // Have the penguin talk about penguinny stuff\n"
+"                if (this.number == 1)\n"
+"                    this._penguin.set_label (\"SQUAAK!\");\n"
+"\n"
+"                else if (this.number == 2)\n"
+"                    this._penguin.set_label (\"Ork ork ork ork squaak. Squaak squaak! *waves 
flippers*\");\n"
+"\n"
+"                else\n"
+"                    this._penguin.set_label (\"Ork ork ork ork ork?\");\n"
+"\n"
+"            }\n"
+"\n"
+"        }\n"
+"\n"
+"        // Clear the buffer\n"
+"        this.buffer.text = \"\";\n"
+"\n"
+"        // Give focus back to the textview so you don't have to click it again\n"
+"        this._textView.has_focus = true;\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:54(p)
+#: C/textview.js.page:230(section/p)
 msgid ""
-"Click <gui>Finished</gui> and the project will be created for you. Open "
-"<file>src/main.cc</file> from the <gui>Project</gui> or <gui>File</gui> "
-"tabs. You should see some code which starts with the lines:"
+"Here we use some basic JavaScript functions to have the penguins say "
+"something random. Penguins like fish, though, so if you mention fish we want "
+"the penguin to respond to that. To do that, we use the JavaScript String "
+"object's match method on <file>this.buffer.text</file>, which returns the "
+"contents of our TextBuffer."
 msgstr ""
-"Prema <gui>Rematar</gui> para crear o proxecto. Abra <file>src/main.cc</"
-"file> desde as lapelas <gui>Proxecto</gui> ou <gui>Ficheiro</gui>. Debería "
-"ver algún código que comeza coas liñas:"
 
-#: C/guitar-tuner.cpp.page:68(p)
+#: C/textview.js.page:231(section/p)
 msgid ""
-"The three <code>#include</code> lines at the top include the <code>config</"
-"code> (useful autoconf build defines), <code>gtkmm</code> (user interface) "
-"and <code>iostream</code> (STL). Functions from these libraries are used in "
-"the rest of the code."
+"Since we want to clear out the TextBuffer after each time you click Send, we "
+"set <file>this.buffer.text</file> to contain an empty string afterwards. "
+"Then we return focus to our TextView, so that you can keep typing without "
+"having to click on it beforehand."
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:71(p)
+#: C/textview.js.page:233(section/code)
+#, no-wrap
 msgid ""
-"The <code>main</code> function creates a new window by opening a GtkBuilder "
-"file (<file>src/guitar-tuner.ui</file>, defined a few lines above) and then "
-"displaying it in a window. The GtkBuilder file contains a description of a "
-"user interface and all of its elements. You can use Anjuta's editor to "
-"design GtkBuilder user interfaces."
+"\n"
+"// Run the application\n"
+"let app = new TextViewExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:74(p)
+#: C/textview.js.page:238(section/p)
 msgid ""
-"Afterwards it calls a few functions which set up and then run the "
-"application. The <code>kit.run</code> function starts the GTKmm main loop, "
-"which runs the user interface and starts listening for events (like clicks "
-"and key presses)."
+"Finally, we create a new instance of the finished TextViewExample class, and "
+"set the application running."
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:84(p) C/guitar-tuner.c.page:90(p)
+#: C/textview.js.page:243(section/code)
+#, no-wrap
 msgid ""
-"A description of the user interface (UI) is contained in the GtkBuilder "
-"file. To edit the user interface, open <file>src/guitar_tuner.ui</file>. "
-"This will switch to the interface designer. The design window is in the "
-"center; widgets and widgets' properties are on the left, and the palette of "
-"available widgets is on the right."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const TextViewExample = new Lang.Class ({\n"
+"    Name: 'TextView Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jstextview' });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Talk to a Penguin\",\n"
+"            default_height: 400,\n"
+"            default_width: 440,\n"
+"            border_width: 20 });\n"
+"\n"
+"        // Create a label for the penguin to talk to you\n"
+"        this._penguin = new Gtk.Label ({\n"
+"            height_request: 180,\n"
+"            width_request: 400,\n"
+"            label: \"Squaaaak?\",\n"
+"            wrap: true });\n"
+"\n"
+"        // Create a textview for you to talk to the penguin\n"
+"        this.buffer = new Gtk.TextBuffer();\n"
+"        this._textView = new Gtk.TextView ({\n"
+"            buffer: this.buffer,\n"
+"            editable: true,\n"
+"            wrap_mode: Gtk.WrapMode.WORD });\n"
+"\n"
+"        // Create a \"scrolled window\" to put your textview in so it will scroll\n"
+"        this._scrolled = new Gtk.ScrolledWindow ({\n"
+"            hscrollbar_policy: Gtk.PolicyType.AUTOMATIC,\n"
+"            vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,\n"
+"            shadow_type: Gtk.ShadowType.ETCHED_IN,\n"
+"            height_request: 180,\n"
+"            width_request: 400, });\n"
+"\n"
+"        // Put the textview into the scrolled window\n"
+"        this._scrolled.add_with_viewport (this._textView);\n"
+"\n"
+"        // Create a grid to organize them in\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Put the label and textview in the grid one on top of the other\n"
+"        this._grid.attach (this._penguin, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._scrolled, 0, 1, 1, 1);\n"
+"\n"
+"        // Create a button to send your message to the penguin\n"
+"        this._send = new Gtk.Button ({\n"
+"            halign: Gtk.Align.END,\n"
+"            margin_top: 20,\n"
+"            label: \"Send\" });\n"
+"        this._send.connect ('clicked', Lang.bind (this, this._chat));\n"
+"\n"
+"        // Create a grid that will have the other grid on top and the button on bottom\n"
+"        this._mainGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Add the other grid and the button to the main grid\n"
+"        this._mainGrid.attach (this._grid, 0, 0, 1, 1);\n"
+"        this._mainGrid.attach (this._send, 0, 1, 1, 1);\n"
+"\n"
+"        // Attach the main grid to the window\n"
+"        this._window.add (this._mainGrid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _chat: function () {\n"
+"\n"
+"        // Create a random number to determine what the penguin says\n"
+"        this.number = Math.floor ((Math.random() * 3) + 1);\n"
+"\n"
+"        // Did you actually say anything?\n"
+"        if (this.buffer.text) {\n"
+"\n"
+"            // Did you mention fish?\n"
+"            if (this.buffer.text.match (/fish/gi)) {\n"
+"\n"
+"                // Have the penguin squaak about fish\n"
+"                if (this.number == 1)\n"
+"                    this._penguin.set_label (\"FISH!\");\n"
+"\n"
+"                else if (this.number == 2)\n"
+"                    this._penguin.set_label (\"Fish fish fish fish. Fish!\");\n"
+"\n"
+"                else\n"
+"                    this._penguin.set_label (\"Fish? Fish fish fish. Fish fish. FISH!\");\n"
+"\n"
+"            }\n"
+"\n"
+"            // I guess you didn't mention fish\n"
+"            else {\n"
+"\n"
+"                // Have the penguin talk about penguinny stuff\n"
+"                if (this.number == 1)\n"
+"                    this._penguin.set_label (\"SQUAAK!\");\n"
+"\n"
+"                else if (this.number == 2)\n"
+"                    this._penguin.set_label (\"Ork ork ork ork squaak. Squaak squaak! *waves 
flippers*\");\n"
+"\n"
+"                else\n"
+"                    this._penguin.set_label (\"Ork ork ork ork ork?\");\n"
+"\n"
+"            }\n"
+"\n"
+"        }\n"
+"\n"
+"        // Clear the buffer\n"
+"        this.buffer.text = \"\";\n"
+"\n"
+"        // Give focus back to the textview so you don't have to click it again\n"
+"        this._textView.has_focus = true;\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new TextViewExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:99(p)
+#: C/textview.js.page:255(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"While the button is still selected, change the <gui>Label</gui> property in "
-"the <gui>Widgets</gui> tab to <gui>E</gui>. This will be the low E string. "
-"Also change the <gui>Name</gui> property to <gui>button_E</gui>. This is the "
-"name we will refer to the widget later in code."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.";
+"ScrolledWindow.html\">Gtk.ScrolledWindow</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/guitar-tuner.cpp.page:103(p)
+#: C/textview.js.page:256(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Repeat the above steps for the other buttons, adding the next 5 strings with "
-"the labels <em>A</em>, <em>D</em>, <em>G</em>, <em>B</em>, and <em>e</em> "
-"and the names <em>button_A</em>, etc."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextBuffer.";
+"html\">Gtk.TextBuffer</link>"
 msgstr ""
-"Repita os pasos anteriores para o resto de botóns, engadindo as 5 cordas "
-"restantes coas etiquetas <em>A</em>, <em>D</em>, <em>G</em>, <em>B</em> e "
-"<em>e</em> e os nomes <em>botón_A</em>, etc."
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/guitar-tuner.cpp.page:106(p)
+#: C/textview.js.page:257(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Save the UI design (by clicking <guiseq><gui>File</gui><gui>Save</gui></"
-"guiseq>) and close the file."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextView.html";
+"\">Gtk.TextView</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/guitar-tuner.cpp.page:113(p)
-msgid ""
-"GStreamer is GNOME's multimedia framework — you can use it for playing, "
-"recording, and processing video, audio, webcam streams and the like. Here, "
-"we'll be using it to produce single-frequency tones. GStreamermm is the C++ "
-"binding to GStreamer which we will use here."
+#: C/textview.py.page:7(info/title)
+#, fuzzy
+#| msgid "TextView (Python)"
+msgctxt "text"
+msgid "TextView (Python)"
+msgstr "TextView (Python)"
+
+#: C/textview.py.page:25(info/desc)
+msgid "Widget that displays a GtkTextBuffer"
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:123(title)
-msgid "Using GStreamermm"
-msgstr "Usar GStreamermm"
+#: C/textview.py.page:30(note/p)
+msgid "This is an example of Gtk.TextView."
+msgstr ""
 
-#: C/guitar-tuner.cpp.page:124(p)
+#: C/textview.py.page:32(note/p)
 msgid ""
-"To use GStreamermm, it has to be initialised. We do that by adding the "
-"following line of code next to the <code>Gtk::Main kit(argc, argv);</code> "
-"line in <file>main.cc</file>:"
+"But we can also have a new line if we write a long sentence (the text will "
+"wrap breaking lines between words)."
 msgstr ""
-"Para usar GStreamermm, débese inicializar. Isto faise engadindo a seguinte "
-"liña de código xunto á liña <code>Gtk::Main kit(argc, argv);</code> en "
-"<file>main.cc</file>:"
 
-#: C/guitar-tuner.cpp.page:126(code)
-#, no-wrap
-msgid "\tGst::init (argc, argv);"
-msgstr "\tGst::init (argc, argv);"
+#: C/textview.py.page:33(note/p)
+msgid "If we have a loooooooooooooooooooooooooooooooooooong"
+msgstr "Se temos un loooooooooooooooooooooooooooooooonga"
+
+#: C/textview.py.page:34(note/p)
+msgid "(that was long)"
+msgstr "(foi demasiado longo)"
 
-#: C/guitar-tuner.cpp.page:127(p)
+#: C/textview.py.page:35(note/p)
+msgid "word, an horizontal scrollbar will appear."
+msgstr "palabra, aparecerá unha barra de desprazamento horizontal."
+
+#: C/textview.py.page:44(section/code)
+#, no-wrap
 msgid ""
-"While we are on it, also make sure that the <file>gstreamermm.h</file> is "
-"included in <file>main.cc</file> properly."
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"TextView Example\", application=app)\n"
+"        self.set_default_size(300, 450)\n"
+"\n"
+"        # a scrollbar for the child widget (that is going to be the textview)\n"
+"        scrolled_window = Gtk.ScrolledWindow()\n"
+"        scrolled_window.set_border_width(5)\n"
+"        # we scroll only if needed\n"
+"        scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)\n"
+"\n"
+"        # a text buffer (stores text)\n"
+"        buffer1 = Gtk.TextBuffer()\n"
+"\n"
+"        # a textview (displays the buffer)\n"
+"        textview = Gtk.TextView(buffer=buffer1)\n"
+"        # wrap the text, if needed, breaking lines in between words\n"
+"        textview.set_wrap_mode(Gtk.WrapMode.WORD)\n"
+"\n"
+"        # textview is scrolled\n"
+"        scrolled_window.add(textview)\n"
+"\n"
+"        self.add(scrolled_window)\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:131(p)
+#: C/textview.py.page:48(section/title)
+msgid "Useful methods for a TextView widget"
+msgstr "Métodos útiles para o widget TextView"
+
+#: C/textview.py.page:50(section/p)
 msgid ""
-"To simplify the handling of the pipeline we will define a helper class "
-"<code>Sound</code>. We do that in <file>main.cc</file> in order to keep this "
-"example simple, whereas you might usually want to use a separate file:"
+"A <code>Gtk.TextView</code> displays the text stored in a <code>Gtk."
+"TextBuffer</code>. However, most text manipulation is accomplished with "
+"iterators, represented by a <code>Gtk.TextIter</code> - a position between "
+"two characters in the text buffer. Iterators are not valid indefinitely; "
+"whenever the buffer is modified in a way that affects the contents of the "
+"buffer, all outstanding iterators become invalid. Because of this, iterators "
+"can’t be used to preserve positions across buffer modifications. To preserve "
+"a position, we use a <code>Gtk.TextMark</code>, that can be set visible with "
+"<code>visible(True)</code>. A text buffer contains two built-in marks; an "
+"\"insert\" mark (the position of the cursor) and the \"selection_bound\" "
+"mark."
 msgstr ""
-"Para simplificar a xestión da tubería definiremos unha clase axudante "
-"<code>Sound</code>. Farémolo no ficheiro <file>main.cc</file> para manter "
-"este exemplo o máis simple posíbel, aínda que normalmente debería facerse "
-"nun ficheiro separado:"
 
-#: C/guitar-tuner.cpp.page:178(p)
-msgid "The code has the following purpose:"
-msgstr "O código ten o seguinte propósito:"
+#: C/textview.py.page:51(section/p)
+msgid "Methods for a TextView widget:"
+msgstr "Métodos para o widget TextView:"
 
-#: C/guitar-tuner.cpp.page:181(p)
+#: C/textview.py.page:53(item/p)
 msgid ""
-"In the constructor, source and sink GStreamer elements (<code>Gst::Element</"
-"code>) are created, and a pipeline element (which will be used as a "
-"container for the other two elements). The pipeline is given the name \"note"
-"\"; the source is named \"source\" and is set to the <code>audiotestsrc</"
-"code> source; and the sink is named \"output\" and set to the "
-"<code>autoaudiosink</code> sink (default sound card output). After the "
-"elements have been added to the pipeline and linked together, the pipeline "
-"is ready to run."
+"The TextView widget is by default editable. If you prefer otherwise, use "
+"<code>set_editable(False)</code>. If the buffer has no editable text, it "
+"might be a good idea to use <code>set_cursor_visible(False)</code> as well."
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:184(p)
+#: C/textview.py.page:54(item/p)
 msgid ""
-"<code>start_playing</code> sets the source element to play a particular "
-"frequency and then starts the pipeline so the sound actually starts playing. "
-"As we don't want to have the annoying sound for ages, a timeout is set up to "
-"stop the pipeline after 200 ms by calling <code>stop_playing</code>."
+"The justification of the text is set with <code>set_justification(Gtk."
+"Justification.JUSTIFICATION)</code> where <code>JUSTIFICATION</code> is one "
+"of <code>LEFT, RIGHT, CENTER, FILL</code>."
 msgstr ""
-"<code>start_playing</code> estabelece o elemento orixe para reproducir unha "
-"frecuencia particular e logo iniciar unha tubería ao son que comece a "
-"reproducirse. Xa que non queremos un son estridente por anos estabeleceremos "
-"un temporizador de 200 ms para deter a reprodución chamando a "
-"<code>stop_playing</code>."
 
-#: C/guitar-tuner.cpp.page:189(p)
+#: C/textview.py.page:55(item/p)
 msgid ""
-"In <code>stop_playing</code> which is called when the timeout has elapsed, "
-"the pipeline is stopped and as such there isn't any sound output anymore. As "
-"GStreamermm uses reference counting through the <code>Glib::RefPtr</code> "
-"object, the memory is automatically freed once the <code>Sound</code> class "
-"is destroyed."
+"The line wrapping of the text is set with <code>set_wrap_mode(Gtk.WrapMode."
+"WRAP)</code> where <code>WRAP</code> is one of <code>NONE</code> (the text "
+"area is made wider), <code>CHAR</code> (break lines anywhere the cursor can "
+"appear), <code>WORD</code> (break lines between words), <code>WORD_CHAR</"
+"code> (break lines between words, but if that is not enough between "
+"characters)."
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:197(title)
-msgid "Connecting the signals"
-msgstr "Conectar os sinais"
-
-#: C/guitar-tuner.cpp.page:198(p)
-msgid ""
-"We want to play the correct sound when the user clicks a button. That means "
-"that we have to connect to the signal that is fired when the user clicks the "
-"button. We also want to provide information to the called function which "
-"tone to play. GTKmm makes that quite easy as we can easily bind information "
-"with the <em>sigc</em> library."
+#: C/textview.py.page:57(section/p)
+msgid "Methods for a TextBuffer widget:"
 msgstr ""
-"Queremos reproducir o son correcto cando o usuario prema un botón. Isto "
-"significa que temos que conectar o sinal que se dispara cando o usuario "
-"preme o botón. Tamén queremos fornecer información da función que se chamou "
-"a reprodución do tono. GTKmm fai isto moi doado a que podemos ligar de forma "
-"sinxela a información coa biblioteca <em>sigc</em>."
 
-#: C/guitar-tuner.cpp.page:203(p)
+#: C/textview.py.page:59(item/p)
 msgid ""
-"The function that is called when the user clicks a button can be pretty "
-"simple, as all the interesting stuff is done in the helper class now:"
+"<code>get_insert()</code> returns the <code>Gtk.TextMark</code> that "
+"represents the cursor, that is the insertion point."
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:212(p)
+#: C/textview.py.page:60(item/p)
 msgid ""
-"It only calls the helper class we defined before to play the correct "
-"frequencies. With some more clever code we would also have been able to "
-"directly connect to the class without using the function but we will leave "
-"that to use as an exercise."
+"<code>get_selection_bound()</code> returns the <code>Gtk.TextMark</code> "
+"that represents the selection bound."
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:216(p)
+#: C/textview.py.page:61(item/p)
 msgid ""
-"The code to set up the signals should be added to the <code>main()</code> "
-"function just after the <code>builder-&gt;get_widget(\"main_window\", "
-"main_win);</code> line:"
+"<code>set_text(\"some text\", length)</code> where <code>length</code> is a "
+"positive integer or <code>-1</code>, sets the content of the buffer as the "
+"first <code>length</code> characters of the <code>\"some text\"</code> text. "
+"If <code>length</code> is omitted or <code>-1</code>, the text is inserted "
+"completely. The content of the buffer, if there is any, is destroyed."
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:228(p)
+#: C/textview.py.page:62(item/p)
 msgid ""
-"At first we create an instance of our helper class that we want to use now "
-"and declare a variable for the button we want to connect to."
+"<code>insert(iter, \"some text\", length)</code> where <code>iter</code> is "
+"a text iterator and <code>length</code> is a positive integer or <code>-1</"
+"code>, inserts in the buffer at <code>iter</code> the first <code>length</"
+"code> characters of the <code>\"some text\"</code> text. If <code>length</"
+"code> is omitted or <code>-1</code>, the text is inserted completely."
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:232(p)
+#: C/textview.py.page:63(item/p)
 msgid ""
-"Next, we receive the button object from the user interface that was created "
-"out of the user interface file. Remember that <em>button_E</em> is the name "
-"we gave to the first button."
+"<code>insert_at_cursor(\"some text\", length)</code> does the same as "
+"<code>insert(iter, \"some text\", length)</code>, with the current cursor "
+"taken as <code>iter</code>."
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:236(p)
+#: C/textview.py.page:64(item/p)
 msgid ""
-"Finally we connect the <em>clicked</em> signal. This isn't fully "
-"straightforward because this is done in a fully type-safe way and we "
-"actually want to pass the frequency and our helper class to the signal "
-"handler. <code>sigc::ptr_fun(&amp;on_button_clicked)</code> creates a "
-"<em>slot</em> for the <code>on_button_clicked</code> method we defined "
-"above. With <code>sigc::bind</code> we are able to pass additional arguments "
-"to the slot and in this case we pass the frequency (as double) and our "
-"helper class."
+"<code>create_mark(\"mark_name\", iter, left_gravity)</code> where "
+"<code>iter</code> is a <code>Gtk.TextIter</code> and <code>left_gravity</"
+"code> is a boolean, creates a <code>Gtk.TextMark</code> at the position of "
+"<code>iter</code>. If <code>\"mark_name\"</code> is <code>None</code>, the "
+"mark is anonymous; otherwise, the mark can be retrieved by name using "
+"<code>get_mark()</code>. If a mark has left gravity, and text is inserted at "
+"the mark’s current location, the mark will be moved to the left of the newly-"
+"inserted text. If <code>left_gravity</code> is omitted, it defaults to "
+"<code>False</code>."
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:243(p)
+#: C/textview.py.page:66(item/p)
 msgid ""
-"Now that we have set up the <em>E</em> button we also need to connect the "
-"other buttons according to their frequencies: 440 for A, 587.33 for D, "
-"783.99 for G, 987.77 for B and 1318.5 for the high E. This is done in the "
-"same way, just passing a different frequency to the handler."
+"To specify that some text in the buffer should have specific formatting, you "
+"must define a tag to hold that formatting information, and then apply that "
+"tag to the region of text using <code>create_tag(\"tag name\", property)</"
+"code> and <code>apply_tag(tag, start_iter, end_iter)</code> as in, for "
+"instance:"
 msgstr ""
 
-#: C/guitar-tuner.cpp.page:250(p)
+#: C/textview.py.page:67(item/code)
+#, no-wrap
 msgid ""
-"All of the code should now be ready to go. Click <guiseq><gui>Build</"
-"gui><gui>Build Project</gui></guiseq> to build everything again, and then "
-"<guiseq><gui>Run</gui><gui>Run</gui></guiseq> to start the application."
+"\n"
+"tag = textbuffer.create_tag(\"orange_bg\", background=\"orange\")\n"
+"textbuffer.apply_tag(tag, start_iter, end_iter)"
 msgstr ""
+"\n"
+"tag = textbuffer.create_tag(\"orange_bg\", background=\"orange\")\n"
+"textbuffer.apply_tag(tag, start_iter, end_iter)"
 
-#: C/guitar-tuner.cpp.page:256(p)
-msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"guitar-tuner/guitar-tuner.cc\">reference code</link>."
+#: C/textview.py.page:70(item/p)
+msgid "The following are some of the common styles applied to text:"
 msgstr ""
-"Se ten problemas ao executar este titorial compare o seu código con este "
-"<link href=\"guitar-tuner/guitar-tuner.cc\">código de referencia</link>."
 
-#: C/guitar-tuner.cpp.page:260(title)
-msgid "Further Reading"
-msgstr "Lectura complementaria"
+#: C/textview.py.page:72(item/p)
+msgid "Background colour (\"background\" property)"
+msgstr "Cor de fondo (propiedade \"background\")"
 
-#: C/guitar-tuner.cpp.page:261(p)
-msgid ""
-"Many of the things shown above are explained in detail in the <link href="
-"\"http://library.gnome.org/devel/gtkmm-tutorial/stable/\";>GTKmm book</link> "
-"which also covers a lot more key concept for using the full power of GTKmm. "
-"You might also be interested in the <link href=\"http://library.gnome.org/";
-"devel/gstreamermm/\">GStreamermm reference documentation</link>."
-msgstr ""
+#: C/textview.py.page:73(item/p)
+msgid "Foreground colour (\"foreground\" property)"
+msgstr "Cor de primeiro plano (propiedade \"foreground\")"
 
-#: C/guitar-tuner.c.page:7(title)
-#, fuzzy
-#| msgid "Guitar Tuner"
-msgid "Guitar Tuner (C)"
-msgstr "Afinador de guitarra"
+#: C/textview.py.page:74(item/p)
+msgid "Underline (\"underline\" property)"
+msgstr "Subliñado (propiedade \"underline\")"
 
-#: C/guitar-tuner.c.page:35(p)
-msgid "Basic knowledge of the C programming language"
-msgstr "Coñecemento básico da linguaxe de programación C"
+#: C/textview.py.page:75(item/p)
+msgid "Bold (\"weight\" property)"
+msgstr "Negriña (propiedade \"weight\")"
 
-#: C/guitar-tuner.c.page:49(p)
-#, fuzzy
-#| msgid ""
-#| "Choose <gui>Gtk+ (Simple)</gui> from the <gui>C</gui> tab, click "
-#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
-#| "<file>guitar-tuner</file> as project name and directory."
-msgid ""
-"Choose <gui>Gtk+ (Simple)</gui> from the <gui>C</gui> tab, click "
-"<gui>Continue</gui>, and fill out your details on the next few pages. Use "
-"<file>guitar-tuner</file> as project name and directory."
+#: C/textview.py.page:76(item/p)
+msgid "Italics (\"style\" property)"
 msgstr ""
-"Seleccione <gui>GTK+ (Simple)</gui> desde a lapela <gui>C</gui>, prema "
-"<gui>Adiante</gui> e complete os detalles nas seguintes páxinas. Use "
-"<file>guitar-tunner</file> como nome do proxecto e cartafol."
 
-#: C/guitar-tuner.c.page:52(p)
-#, fuzzy
-#| msgid ""
-#| "Make sure that <gui>Configure external packages</gui> is selected. On the "
-#| "next page, select <em>gstreamer-0.10</em> from the list to include the "
-#| "GStreamer library in your project."
-msgid ""
-"Make sure that <gui>Configure external packages</gui> is switched <gui>ON</"
-"gui>. On the next page, select <em>gstreamer-0.10</em> from the list to "
-"include the GStreamer library in your project."
+#: C/textview.py.page:77(item/p)
+msgid "Strikethrough (\"strikethrough\" property)"
 msgstr ""
-"Asegúrese que <gui>Configurar paquetes externos</gui> está seleccionada. Na "
-"seguinte páxina, seleccione <em>gstreamermm-0.10</em> da lista para incluír "
-"a biblioteca GStreamer no seu proxecto."
 
-#: C/guitar-tuner.c.page:66(p)
-msgid ""
-"C is a rather verbose language, so don't be surprised that the file contains "
-"quite a lot of code. Most of it is template code. It loads an (empty) window "
-"from the user interface description file and shows it. More details are "
-"given below; skip this list if you understand the basics:"
+#: C/textview.py.page:78(item/p)
+msgid "Justification (\"justification\" property)"
 msgstr ""
 
-#: C/guitar-tuner.c.page:73(p)
-msgid ""
-"The <code>create_window</code> function creates a new window by opening a "
-"GtkBuilder file (<file>src/guitar-tuner.ui</file>, defined a few lines "
-"above), connecting its signals and then displaying it in a window. The "
-"GtkBuilder file contains a description of a user interface and all of its "
-"elements. You can use Anjuta's editor to design GtkBuilder user interfaces."
+#: C/textview.py.page:79(item/p)
+msgid "Size (\"size\" and \"size-points\" properties)"
+msgstr ""
+
+#: C/textview.py.page:80(item/p)
+msgid "Text wrapping (\"wrap-mode\" property)"
 msgstr ""
 
-#: C/guitar-tuner.c.page:122(p)
+#: C/textview.py.page:82(item/p)
 msgid ""
-"To do this, open <file>main.c</file> while the user interface file is still "
-"open. Switch to the <gui>Signals</gui> tab, which you already used to set "
-"the signal name. Now take the row where you set the <gui>clicked</gui> "
-"signal and drag it into to the source file at a position that is outside any "
-"function. The following code will be added to your source file:"
+"You can also delete particular tags later using <code>remove_tag()</code> or "
+"delete all tags in a given region by calling <code>remove_all_tags()</code>."
 msgstr ""
 
-#: C/guitar-tuner.c.page:130(p)
+#: C/textview.py.page:84(section/p)
+msgid "Methods for a TextIter widget"
+msgstr "Métodos para o widget TextIter"
+
+#: C/textview.py.page:86(item/p)
 msgid ""
-"This signal handler has two arguments: a pointer to the <code>GtkWidget</"
-"code> that called the function (in our case, always a <code>GtkButton</"
-"code>), and a pointer to some \"user data\" that you can define, but which "
-"we won't be using here. (You can set the user data by calling "
-"<code>gtk_builder_connect_signals</code>; it is normally used to pass a "
-"pointer to a data structure that you might need to access inside the signal "
-"handler.)"
+"<code>forward_search(needle, flags, limit)</code> searches forward for "
+"<code>needle</code>. The search will not continue past the <code>Gtk."
+"TextIter</code> limit. The <code>flags</code> can be set to one of the "
+"following, or any combination of it by concatenating them with the bitwise-"
+"OR operator <code>|</code>: <code>0</code> (the match must be exact); "
+"<code>Gtk.TextSearchFlags.VISIBLE_ONLY</code> (the match may have invisible "
+"text interspersed in needle); <code>Gtk.TextSearchFlags.TEXT_ONLY</code> "
+"(the match may have pixbufs or child widgets mixed inside the matched "
+"range); <code>Gtk.TextSearchFlags.CASE_INSENSITIVE</code> (the text will be "
+"matched regardless of what case it is in). The method returns a tuple "
+"containing a <code>Gtk.TextIter</code> pointing to the start and to the "
+"first character after the match; if no match is found, <code>None</code> is "
+"returned."
 msgstr ""
 
-#: C/guitar-tuner.c.page:148(p)
+#: C/textview.py.page:87(item/p)
 msgid ""
-"Insert the following line into <file>main.c</file>, just below the <code><!"
-"[CDATA[#include <gtk/gtk.h>]]></code> line:"
+"<code>backward_search(needle, flags, limit)</code> does the same as "
+"<code>forward_search()</code>, but moving backwards."
 msgstr ""
-"Inserte a seguinte lia en <file>main.c</file>, xusto a continuación da liña "
-"<code><![CDATA[#include <gtk/gtk.h>]]></code>:"
 
-#: C/guitar-tuner.c.page:150(p)
+#: C/textview.py.page:95(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"This includes the GStreamer library. You also need to add a line to "
-"initialize GStreamer; put the following code on the line above the "
-"<code>gtk_init</code> call in the <code>main</code> function:"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTextView.html";
+"\">GtkTextView</link>"
 msgstr ""
-"Isto inclúe a biblioteca GSTreamer. Tamén precisa unha liña para inicializar "
-"GStreamer; poña a seguinte liña de código antes da chamada <code>gtk_init</"
-"code> na función <code>main</code>:"
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/guitar-tuner.c.page:152(p)
+#: C/textview.py.page:96(item/p)
 msgid ""
-"Then, copy the following function into <file>main.c</file> above the empty "
-"<code>on_button_clicked</code> function:"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTextBuffer.html";
+"\">GtkTextBuffer</link>"
 msgstr ""
-"Despois, copie a seguinte función en <file>main.c</file> enriba da función "
-"<code>on_button_clicked</code> baleira:"
 
-#: C/guitar-tuner.c.page:179(p)
+#: C/textview.py.page:97(item/p)
 msgid ""
-"The first five lines create source and sink GStreamer elements "
-"(<code>GstElement</code>), and a pipeline element (which will be used as a "
-"container for the other two elements). The pipeline is given the name \"note"
-"\"; the source is named \"source\" and is set to the <code>audiotestsrc</"
-"code> source; and the sink is named \"output\" and set to the "
-"<code>autoaudiosink</code> sink (default sound card output)."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTextTag.html";
+"\">GtkTextTag</link>"
 msgstr ""
 
-#: C/guitar-tuner.c.page:182(p)
+#: C/textview.vala.page:7(info/title)
+#, fuzzy
+#| msgid "TextView (Vala)"
+msgctxt "text"
+msgid "TextView (Vala)"
+msgstr "TextView (Vala)"
+
+#: C/textview.vala.page:24(note/p)
 msgid ""
-"The call to <code>g_object_set</code> sets the <code>freq</code> property of "
-"the source element to <code>frequency</code>, which is passed as an argument "
-"to the <code>play_sound</code> function. This is just the frequency of the "
-"note in Hertz; some useful frequencies will be defined later on."
+"If we have a loooooooooooooooooooooooooooooooooooong word, a horizontal "
+"scrollbar will appear."
 msgstr ""
-"A chamada a <code>g_object_set</code> estabelecer a propiedade <code>freq</"
-"code> do elemento orixe a <code>frequency</code>, a cal se pasa como un "
-"argumento á función <code>play_sound</code>. Isto só é a frecuencia da nota "
-"en Hertz, algunhas das frecuencias máis útiles definiranse máis tarde."
 
-#: C/guitar-tuner.c.page:185(p)
+#: C/textview.vala.page:29(page/code)
+#, no-wrap
 msgid ""
-"<code>gst_bin_add_many</code> puts the source and sink into the pipeline. "
-"The pipeline is a <code>GstBin</code>, which is just an element that can "
-"contain multiple other GStreamer elements. In general, you can add as many "
-"elements as you like to the pipeline by adding more arguments to "
-"<code>gst_bin_add_many</code>."
+"/* This is the application. */\n"
+"public class MyApplication : Gtk.Application {\n"
+"\t/* Override the 'activate' signal of GLib.Application. */\n"
+"\tprotected override void activate () {\n"
+"\t\t/* Create the window of this applicationt. */\n"
+"\t\tnew MyWindow (this).show_all ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* This is the window. */\n"
+"class MyWindow: Gtk.ApplicationWindow {\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"TextView Example\");\n"
+"\t\tthis.set_default_size (220, 200);\n"
+"\n"
+"\t\tvar buffer = new Gtk.TextBuffer (null); //stores text to be displayed\n"
+"\t\tvar textview = new Gtk.TextView.with_buffer (buffer); //displays TextBuffer\n"
+"\t\ttextview.set_wrap_mode (Gtk.WrapMode.WORD); //sets line wrapping\n"
+"\n"
+"\t\tvar scrolled_window = new Gtk.ScrolledWindow (null, null);\n"
+"\t\tscrolled_window.set_policy (Gtk.PolicyType.AUTOMATIC,\n"
+"\t\t                            Gtk.PolicyType.AUTOMATIC);\n"
+"\n"
+"\t\tscrolled_window.add (textview);\n"
+"\t\tscrolled_window.set_border_width (5);\n"
+"\n"
+"\t\tthis.add (scrolled_window);\n"
+"\t}\n"
+"}\n"
+"/* main creates and runs the application. */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/guitar-tuner.c.page:188(p)
+#: C/textview.vala.page:34(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Next, <code>gst_element_link</code> is used to connect the elements "
-"together, so the output of <code>source</code> (a tone) goes into the input "
-"of <code>sink</code> (which is then output to the sound card). "
-"<code>gst_element_set_state</code> is then used to start playback, by "
-"setting the state of the pipeline to playing (<code>GST_STATE_PLAYING</"
-"code>)."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TextBuffer.html\";>Gtk."
+"TextBuffer</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/guitar-tuner.c.page:196(p)
+#: C/textview.vala.page:35(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"We don't want to play an annoying tone forever, so the last thing "
-"<code>play_sound</code> does is to call <code>g_timeout_add</code>. This "
-"sets a timeout for stopping the sound; it waits for <code>LENGTH</code> "
-"milliseconds before calling the function <code>pipeline_stop</code>, and "
-"will keep calling it until <code>pipeline_stop</code> returns <code>FALSE</"
-"code>."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TextView.html\";>Gtk."
+"TextView</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/guitar-tuner.c.page:197(p)
+#: C/textview.vala.page:37(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WrapMode.html\";>Gtk."
+"WrapMode</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/togglebutton.c.page:26(media) C/togglebutton.js.page:21(media)
+#: C/togglebutton.py.page:24(media) C/togglebutton.vala.page:24(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/togglebutton.png'; md5=791e062613d4f9bd5936390b0aa18448"
+msgctxt "_"
 msgid ""
-"Now, we'll write the <code>pipeline_stop</code> function which is called by "
-"<code>g_timeout_add</code>. Insert the following code <em>above</em> the "
-"<code>play_sound</code> function:"
+"external ref='media/togglebutton.png' md5='791e062613d4f9bd5936390b0aa18448'"
+msgstr ""
+"@@image: 'media/togglebutton.png'; md5=791e062613d4f9bd5936390b0aa18448"
+
+#: C/togglebutton.c.page:7(info/title)
+#, fuzzy
+#| msgid "ToggleButton (C)"
+msgctxt "text"
+msgid "ToggleButton (C)"
+msgstr "ToggleButton (C)"
+
+#: C/togglebutton.c.page:21(info/desc) C/togglebutton.py.page:20(info/desc)
+#: C/togglebutton.vala.page:20(info/desc)
+msgid "A button which retains state"
+msgstr "Un botón que mantén o seu estado"
+
+#: C/togglebutton.c.page:24(page/title) C/togglebutton.js.page:20(page/title)
+#: C/togglebutton.py.page:23(page/title)
+#: C/togglebutton.vala.page:23(page/title)
+msgid "ToggleButton"
+msgstr "ToggleButton"
+
+#: C/togglebutton.c.page:27(page/p) C/togglebutton.py.page:25(page/p)
+#: C/togglebutton.vala.page:25(page/p)
+msgid "When this ToggleButton is in an active state, the spinner spins."
+msgstr "Cando este ToggleButton está no estado activo, o spinner xira."
+
+#: C/togglebutton.c.page:29(page/code)
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/*This is the callback function. It is a handler function \n"
+"which reacts to the signal. In this case, it will cause the \n"
+"spinner to start and stop according to how many times the user \n"
+"presses the button.*/\n"
+"static void\n"
+"button_toggled_cb (GtkWidget *button,\n"
+"                   gpointer   user_data)\n"
+"{\n"
+"  GtkWidget *spinner = user_data;\n"
+"\n"
+"  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button)))\n"
+"          gtk_spinner_start (GTK_SPINNER (spinner));\n"
+"  else {\n"
+"          gtk_spinner_stop (GTK_SPINNER (spinner));\n"
+"  }\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *button;\n"
+"  GtkWidget *grid;\n"
+"  GtkWidget *spinner;\n"
+"\n"
+"  /*Create a window with a title, border width and a default size*/\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"ToggleButton Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 300, 300);\n"
+"  gtk_container_set_border_width(GTK_CONTAINER(window), 30);\n"
+"\n"
+"  /*Create a togglebutton with a label*/\n"
+"  button = gtk_toggle_button_new_with_label (\"Start/Stop\");\n"
+"\n"
+"  /*Create a spinner, with extra horizontal and vertical space*/\n"
+"  spinner = gtk_spinner_new ();\n"
+"  gtk_widget_set_hexpand (spinner, TRUE);\n"
+"  gtk_widget_set_vexpand (spinner, TRUE);\n"
+"\n"
+"  /*Create a grid and set the row spacing, attach the togglebutton \n"
+"  and spinner onto the grid and position them accordingly*/\n"
+"  grid = gtk_grid_new();\n"
+"  gtk_grid_set_row_homogeneous (GTK_GRID (grid), FALSE);\n"
+"  gtk_grid_set_row_spacing (GTK_GRID (grid), 15);\n"
+"  gtk_grid_attach (GTK_GRID (grid), spinner, 0, 0, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), button, 0, 1, 1, 1);\n"
+"  \n"
+"  gtk_container_add (GTK_CONTAINER (window), grid);\n"
+"\n"
+"  /*Connecting the toggled signal to the callback*/\n"
+"  g_signal_connect (GTK_TOGGLE_BUTTON (button), \"toggled\", \n"
+"                    G_CALLBACK (button_toggled_cb), spinner);\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
 msgstr ""
-"Agora, escríbese o código da función <code>pipeline_stop</code>, chamada por "
-"<code>g_timeout_add</code>. Inserte o código seguinte <em>enriba</em> da "
-"función <code>play_sound</code>:"
 
-#: C/guitar-tuner.c.page:209(p)
+#: C/togglebutton.c.page:38(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"The call to <code>gst_element_set_state</code> pauses the playback of the "
-"pipeline and <code>g_object_unref</code> unreferences the pipeline, "
-"destroying it and freeing its memory."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkToggleButton.html";
+"\">GtkTogglebutton</link>"
 msgstr ""
-"A chamada <code>gst_element_set_state</code> pausa a reprodución da tubería "
-"e <code>g_object_unref</code> desreferencia a tubería, destrúea e libera a "
-"súa memoria."
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
+
+#: C/togglebutton.js.page:7(info/title)
+#, fuzzy
+#| msgid "ToggleButton (JavaScript)"
+msgctxt "text"
+msgid "ToggleButton (JavaScript)"
+msgstr "ToggleButton (JavaScript)"
+
+#: C/togglebutton.js.page:17(info/desc)
+msgid "Stays pressed until you click it again"
+msgstr "Mantense premido até que prema de novo sobre él"
 
-#: C/guitar-tuner.c.page:214(p)
+#: C/togglebutton.js.page:22(page/p)
 msgid ""
-"We want to play the correct sound when the user clicks a button. First of "
-"all, we need to know the frequencies for the six guitar strings, which are "
-"defined (at the top of <file>main.c</file>) as follows:"
+"A ToggleButton is like a normal <link xref=\"button.js\">Button</link>, "
+"except that it stays pressed in when you click it. You can use it like an on/"
+"off switch, to control things like the <link xref=\"spinner.js\">Spinner</"
+"link> in this example."
 msgstr ""
-"Quérese reproducir o son correcto cando un usuario preme un botón. En "
-"primeiro lugar, precísase coñecer as frecuencias das seis cordas da "
-"guitarra, que están definidas (ao principio de <file>main.c</file>) da "
-"seguinte maneira:"
 
-#: C/guitar-tuner.c.page:246(p)
+#: C/togglebutton.js.page:23(page/p)
 msgid ""
-"A pointer to the <code>GtkButton</code> that was clicked is passed as an "
-"argument (<code>button</code>) to <code>on_button_clicked</code>. We can get "
-"the label of that button by using <code>gtk_bin_get_child</code>, and then "
-"get the text from that label using <code>gtk_label_get_label</code>."
+"A ToggleButton's get_active method returns true if it's pressed in, and "
+"false if it's not. Its set_active method is used if you want to change its "
+"state without needing to click on it. When it changes state from pressed in "
+"to popped out and vice-versa, it sends out the \"toggled\" signal, which you "
+"can connect to a function to do something."
 msgstr ""
 
-#: C/guitar-tuner.c.page:247(p)
+#: C/togglebutton.js.page:40(section/code)
+#, no-wrap
 msgid ""
-"The label text is then compared to the notes that we have using "
-"<code>g_str_equal</code>, and <code>play_sound</code> is called with the "
-"frequency appropriate for that note. This plays the tone; we have a working "
-"guitar tuner!"
+"\n"
+"const ToggleButtonExample = new Lang.Class({\n"
+"    Name: 'ToggleButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jstogglebutton',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
 msgstr ""
 
-#: C/guitar-tuner.c.page:258(p)
+#: C/togglebutton.js.page:67(section/code)
+#, no-wrap
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"guitar-tuner/guitar-tuner.c\">reference code</link>."
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 300,\n"
+"            default_width: 300,\n"
+"            border_width: 30,\n"
+"            title: \"ToggleButton Example\"});\n"
 msgstr ""
-"Se ten problemas ao executar este titorial compare o seu código con este "
-"<link href=\"guitar-tuner/guitar-tuner.c\">código de referencia</link>."
 
-#: C/GtkApplicationWindow.vala.page:7(title)
+#: C/togglebutton.js.page:84(section/title)
 #, fuzzy
-#| msgid "A first Gtk application"
-msgid "ApplicationWindow (Vala)"
-msgstr "Un primeiro aplicativo en GTK"
-
-#: C/GtkApplicationWindow.vala.page:17(desc)
-#: C/GtkApplicationWindow.py.page:22(desc)
-#: C/GtkApplicationWindow.js.page:17(desc)
-msgid "GtkWindow subclass with GtkApplication support"
-msgstr ""
-
-#: C/GtkApplicationWindow.vala.page:20(title)
-#: C/GtkApplicationWindow.py.page:25(title)
-#: C/GtkApplicationWindow.js.page:20(title)
-#: C/GtkApplicationWindow.c.page:20(title)
-msgid "ApplicationWindow"
-msgstr ""
+#| msgid "Creating the signal handler"
+msgid "Creating the ToggleButton and other widgets"
+msgstr "Crear o manexador de sinais"
 
-#: C/GtkApplicationWindow.vala.page:22(p) C/GtkApplicationWindow.py.page:27(p)
-msgid "The simplest GtkApplication Window which can support Menus."
+#: C/togglebutton.js.page:85(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the spinner that the button stops and starts\n"
+"        this._spinner = new Gtk.Spinner ({hexpand: true, vexpand: true});\n"
 msgstr ""
 
-#: C/GtkApplicationWindow.py.page:7(title)
-#, fuzzy
-#| msgid "A first Gtk application"
-msgid "ApplicationWindow (Python)"
-msgstr "Un primeiro aplicativo en GTK"
-
-#: C/GtkApplicationWindow.py.page:38(title)
-#, fuzzy
-#| msgid "A first Gtk application"
-msgid "Useful methods for a Gtk.ApplicationWindow widget"
-msgstr "Un primeiro aplicativo en GTK"
-
-#: C/GtkApplicationWindow.js.page:7(title)
-#, fuzzy
-#| msgid "A first Gtk application"
-msgid "ApplicationWindow (JavaScript)"
-msgstr "Un primeiro aplicativo en GTK"
-
-#: C/GtkApplicationWindow.js.page:22(p)
-msgid "A simple GtkApplicationWindow which can support Menus."
+#: C/togglebutton.js.page:90(section/p)
+msgid ""
+"We want this <link xref=\"spinner.js\">Spinner</link> to expand vertically "
+"and horizontally, to take up as much space as possible inside the window."
 msgstr ""
 
-#: C/GtkApplicationWindow.c.page:7(title)
-#, fuzzy
-#| msgid "A first Gtk application"
-msgid "ApplicationWindow (C)"
-msgstr "Un primeiro aplicativo en GTK"
-
-#: C/GtkApplicationWindow.c.page:17(desc)
-msgid "A toplevel window which can contain other widgets, and support GMenu"
+#: C/togglebutton.js.page:92(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the togglebutton that starts and stops the spinner\n"
+"        this._toggleButton = new Gtk.ToggleButton ({label: \"Start/Stop\"});\n"
+"        this._toggleButton.connect ('toggled', Lang.bind (this, this._onToggle));\n"
 msgstr ""
 
-#: C/GtkApplicationWindow.c.page:22(p)
-msgid "A minimal GtkApplication with a GtkApplicationWindow"
+#: C/togglebutton.js.page:98(section/p)
+msgid ""
+"Creating a ToggleButton is a lot like creating a normal <link xref=\"button."
+"js\">Button</link>. The biggest difference is that you're handling a "
+"\"toggled\" signal instead of a \"clicked\" signal. This code binds the "
+"_onToggle function to that signal, so that it's called whenever our "
+"ToggleButton is toggled."
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/grid.vala.page:23(None) C/grid.js.page:25(None) C/grid.c.page:22(None)
-#, fuzzy
-#| msgid "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
-msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
-msgstr "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
-
-#: C/grid.vala.page:7(title)
-msgid "Grid (Vala)"
+#: C/togglebutton.js.page:100(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Create a grid and put everything in it\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            row_homogeneous: false,\n"
+"            row_spacing: 15});\n"
+"        this._grid.attach (this._spinner, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._toggleButton, 0, 1, 1, 1);\n"
 msgstr ""
 
-#: C/grid.vala.page:19(desc) C/grid.py.page:24(desc) C/grid.js.page:21(desc)
-#: C/grid.c.page:17(desc)
-msgid "Pack widgets in rows and columns"
+#: C/togglebutton.js.page:108(section/p)
+msgid ""
+"Here we create a simple <link xref=\"grid.js\">Grid</link> to organize "
+"everything in, then attach the Spinner and ToggleButton to it."
 msgstr ""
 
-#: C/grid.vala.page:22(title)
-msgid "Grid widget"
+#: C/togglebutton.js.page:110(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
 msgstr ""
 
-#: C/grid.vala.page:24(p) C/grid.c.page:23(p)
-msgid "A button widget connected to a progress bar."
+#: C/togglebutton.js.page:118(section/p)
+msgid ""
+"Now we add the Grid to the Window, and tell the Window to show itself and "
+"its child widgets when the application is started."
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/grid.py.page:29(None)
-#, fuzzy
-#| msgid "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
-msgid "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
-msgstr "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
-
-#: C/grid.py.page:7(title)
-#, fuzzy
-#| msgid "Python"
-msgid "Grid (Python)"
-msgstr "Python"
-
-#: C/grid.py.page:30(p)
-msgid "Some labels in a grid."
+#: C/togglebutton.js.page:122(section/title)
+msgid "Making something happen when the ToggleButton is toggled"
 msgstr ""
 
-#: C/grid.py.page:40(title)
-msgid "Useful methods for a Grid widget"
+#: C/togglebutton.js.page:124(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"    _onToggle: function() {\n"
+"\n"
+"        // Start or stop the spinner\n"
+"        if (this._toggleButton.get_active ())\n"
+"            this._spinner.start ();\n"
+"        else this._spinner.stop ();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
 msgstr ""
 
-#: C/grid.py.page:43(p)
+#: C/togglebutton.js.page:136(section/p)
 msgid ""
-"To attach a widget <code>child</code> in position <code>left, top</code> in "
-"a slot of given <code>width, height</code> use <code>attach(child, top, "
-"left, width, height)</code>. If a widget <code>sibling</code> is already in "
-"place, we can also use <code>attach_next_to(child, sibling, side, width, "
-"height)</code>, where <code>side</code> is one of <code>Gtk.PositionType."
-"LEFT, Gtk.PositionType.RIGHT, Gtk.PositionType.TOP, Gtk.PositionType.BOTTOM</"
-"code>."
+"Whenever someone toggles the button, this function checks what its state is "
+"afterwards using get_active and starts or stops the spinner accordingly. We "
+"want it to spin only while the button is pressed in, so if get_active "
+"returns true we start the spinner. Otherwise, we tell it to stop."
 msgstr ""
 
-#: C/grid.py.page:44(p)
+#: C/togglebutton.js.page:138(section/code)
+#, no-wrap
 msgid ""
-"<code>insert_row(position)</code> and <code>insert_column(position)</code> "
-"do exactly what they say; children which are attached at or below this "
-"position are moved one row down, and children which span across this "
-"position are grown to span the new row. <code>insert_next_to(sibling, side)</"
-"code> inserts a row or column at the specified position. The new row or "
-"column is placed next to <code>sibling</code>, on the side determined by "
-"<code>side</code>; if side is <code>Gtk.PositionType.TOP</code> or <code>Gtk."
-"PositionType.BOTTOM</code>, a row is inserted, if side is <code>Gtk."
-"PositionType.LEFT</code> of <code>Gtk.PositionType.RIGHT</code>, a column is "
-"inserted."
+"\n"
+"// Run the application\n"
+"let app = new ToggleButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/grid.py.page:45(p)
+#: C/togglebutton.js.page:148(section/code)
+#, no-wrap
 msgid ""
-"<code>set_row_homogeneous(True)</code> and <code>set_column_homogeneous(True)"
-"</code> ensure that (respectively) every row or every column has the same "
-"width or height."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ToggleButtonExample = new Lang.Class({\n"
+"    Name: 'ToggleButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jstogglebutton',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 300,\n"
+"            default_width: 300,\n"
+"            border_width: 30,\n"
+"            title: \"ToggleButton Example\"});\n"
+"\n"
+"        // Create the spinner that the button stops and starts\n"
+"        this._spinner = new Gtk.Spinner ({hexpand: true, vexpand: true});\n"
+"\n"
+"        // Create the togglebutton that starts and stops the spinner\n"
+"        this._toggleButton = new Gtk.ToggleButton ({label: \"Start/Stop\"});\n"
+"        this._toggleButton.connect ('toggled', Lang.bind (this, this._onToggle));\n"
+"\n"
+"        // Create a grid and put everything in it\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            row_homogeneous: false,\n"
+"            row_spacing: 15});\n"
+"        this._grid.attach (this._spinner, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._toggleButton, 0, 1, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onToggle: function() {\n"
+"\n"
+"        // Start or stop the spinner\n"
+"        if (this._toggleButton.get_active ())\n"
+"            this._spinner.start ();\n"
+"        else this._spinner.stop ();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ToggleButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/grid.py.page:46(p)
+#: C/togglebutton.js.page:158(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"<code>set_row_spacing(spacing)</code> and <code>set_column_spacing(spacing)</"
-"code> force a spacing between (respectively) rows or columns. The value of "
-"<code>spacing</code> can be between <code>0</code>, which is the default "
-"value, and <code>32767</code>"
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ToggleButton.";
+"html\">Gtk.ToggleButton</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/grid.js.page:7(title)
+#: C/togglebutton.py.page:7(info/title)
 #, fuzzy
-#| msgid "JavaScript"
-msgid "Grid (JavaScript)"
-msgstr "JavaScript"
+#| msgid "ToggleButton (Python)"
+msgctxt "text"
+msgid "ToggleButton (Python)"
+msgstr "ToggleButton (Python)"
 
-#: C/grid.js.page:26(p)
+#: C/togglebutton.py.page:32(section/code)
+#, no-wrap
 msgid ""
-"A button widget connected to a progress bar, inside of a grid which handles "
-"the layout."
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"ToggleButton Example\", application=app)\n"
+"        self.set_default_size(300, 300)\n"
+"        self.set_border_width(30)\n"
+"\n"
+"        # a spinner animation\n"
+"        self.spinner = Gtk.Spinner()\n"
+"        # with extra horizontal space\n"
+"        self.spinner.set_hexpand(True)\n"
+"        # with extra vertical space\n"
+"        self.spinner.set_vexpand(True)\n"
+"\n"
+"        # a togglebutton\n"
+"        button = Gtk.ToggleButton.new_with_label(\"Start/Stop\")\n"
+"        # connect the signal \"toggled\" emitted by the togglebutton\n"
+"        # when its state is changed to the callback function toggled_cb\n"
+"        button.connect(\"toggled\", self.toggled_cb)\n"
+"\n"
+"        # a grid to allocate the widgets\n"
+"        grid = Gtk.Grid()\n"
+"        grid.set_row_homogeneous(False);\n"
+"        grid.set_row_spacing(15);\n"
+"        grid.attach(self.spinner, 0, 0, 1, 1);\n"
+"        grid.attach(button, 0, 1, 1, 1);\n"
+"\n"
+"        # add the grid to the window\n"
+"        self.add(grid)\n"
+"\n"
+"    # callback function for the signal \"toggled\"\n"
+"    def toggled_cb(self, button):\n"
+"        # if the togglebutton is active, start the spinner\n"
+"        if button.get_active():\n"
+"            self.spinner.start()\n"
+"        # else, stop it\n"
+"        else:\n"
+"            self.spinner.stop()\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/grid.c.page:7(title)
-msgid "Grid (C)"
+#: C/togglebutton.py.page:37(section/title)
+msgid "Useful methods for a ToggleButton widget"
+msgstr "Métodos útiles para o widget ToggleButton"
+
+#: C/togglebutton.py.page:46(item/p) C/toolbar.py.page:57(item/p)
+#: C/toolbar_builder.py.page:195(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkWidget.html";
+"\">GtkWidget</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/grid.c.page:34(link) C/buttonbox.py.page:49(link)
-#: C/button.py.page:52(link) C/button.c.page:35(link)
+#: C/togglebutton.vala.page:7(info/title)
 #, fuzzy
-#| msgid "Button"
-msgid "GtkButton"
-msgstr "Botón"
+#| msgid "ToggleButton (Vala)"
+msgctxt "text"
+msgid "ToggleButton (Vala)"
+msgstr "ToggleButton (Vala)"
+
+#: C/togglebutton.vala.page:27(page/code)
+#, no-wrap
+msgid ""
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\tGtk.Spinner spinner;\n"
+"\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"ToggleButton Example\");\n"
+"\n"
+"\t\tthis.set_default_size (300, 300);\n"
+"\t\tthis.border_width = 30;\n"
+"\n"
+"\t\t/*Spinner*/\n"
+"\t\tspinner = new Gtk.Spinner ();\n"
+"\t\tspinner.set_hexpand (true);\n"
+"\t\tspinner.set_vexpand (true);\n"
+"\n"
+"\t\t/*ToggleButton*/\n"
+"\t\tvar togglebutton = new Gtk.ToggleButton.with_label (\"Start/Stop\");\n"
+"\t\ttogglebutton.toggled.connect (toggled_cb);\n"
+"\n"
+"\t\t/*Grid*/\n"
+"\t\tvar grid = new Gtk.Grid ();\n"
+"\t\tgrid.set_row_homogeneous (false);\n"
+"\t\tgrid.set_row_spacing (15);\n"
+"\t\tgrid.attach (spinner, 0, 0, 1, 1);\n"
+"\t\tgrid.attach (togglebutton, 0, 1, 1, 1);\n"
+"\n"
+"\t\tthis.add (grid);\n"
+"\t}\n"
+"\n"
+"\tvoid toggled_cb (Gtk.ToggleButton button) {\n"
+"\t\tif (button.get_active()) {\n"
+"\t\t\tspinner.start ();\n"
+"\t\t}\n"
+"\t\telse {\n"
+"\t\t\tspinner.stop ();\n"
+"\t\t}\n"
+"\t}\n"
+"}\n"
+"\n"
+"public class MyApplication : Gtk.Application {\n"
+"\n"
+"\tprotected override void activate () {\n"
+"\n"
+"\t\t//Show all the things\n"
+"\t\tnew MyWindow (this).show_all ();\n"
+"\t}\n"
+"\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"org.example.spinner\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/gmenu.vala.page:27(None)
+#: C/togglebutton.vala.page:32(item/p)
 #, fuzzy
-#| msgid "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
-msgid "@@image: 'media/gmenu.vala.png'; md5=7a9f381fc3ed5bf8d1c50d2acb095400"
-msgstr "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
-
-#: C/gmenu.vala.page:7(title)
-msgid "GMenu (Vala)"
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ToggleButton.html\";>Gtk."
+"ToggleButton</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/gmenu.vala.page:13(name) C/aboutdialog.vala.page:14(name)
-msgid "Ryan Lortie"
-msgstr ""
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/toolbar.js.page:21(media) C/toolbar.py.page:23(media)
+#: C/toolbar.vala.page:23(media) C/toolbar_builder.py.page:36(media)
+#: C/toolbar_builder.vala.page:24(media)
+#, fuzzy
+#| msgid "@@image: 'media/toolbar.png'; md5=f0350855eedf6343952b72d6d906f738"
+msgctxt "_"
+msgid "external ref='media/toolbar.png' md5='f0350855eedf6343952b72d6d906f738'"
+msgstr "@@image: 'media/toolbar.png'; md5=f0350855eedf6343952b72d6d906f738"
 
-#: C/gmenu.vala.page:14(email) C/aboutdialog.vala.page:15(email)
-msgid "desrt desrt ca"
-msgstr ""
+#: C/toolbar.js.page:7(info/title)
+#, fuzzy
+#| msgid "Toolbar (JavaScript)"
+msgctxt "text"
+msgid "Toolbar (JavaScript)"
+msgstr "Barra de ferramentas (JavaScript)"
 
-#: C/gmenu.vala.page:23(desc) C/gmenu.js.page:17(desc) C/gmenu.c.page:17(desc)
-msgid "A simple implementation of GMenuModel"
-msgstr ""
+#: C/toolbar.js.page:17(info/desc)
+msgid "A bar of tools"
+msgstr "Unha barra de ferramentas"
 
-#: C/gmenu.vala.page:29(em)
-msgid "You need to be running Gtk+-3.4 or later for this to work"
-msgstr ""
+#: C/toolbar.js.page:20(page/title) C/toolbar.py.page:21(page/title)
+#: C/toolbar.vala.page:21(page/title)
+msgid "Toolbar"
+msgstr "Barra de ferramentas"
 
-#: C/gmenu.vala.page:32(p)
+#: C/toolbar.js.page:22(page/p) C/toolbar.vala.page:24(page/p)
 msgid ""
-"This program will not compile with the quit action connected until <link "
-"href=\"https://bugzilla.gnome.org/show_bug.cgi?id=674090\";>Bug #674090</"
-"link> is fixed. Therefore, the problematic line has been commented out."
+"Toolbar can contain either text or stock icons. In this sample we use stock "
+"icons. This example has fullscreen functionality."
 msgstr ""
 
-#: C/gmenu.vala.page:34(p) C/gmenu.py.page:28(p) C/gmenu.js.page:22(p)
-#: C/gmenu.c.page:22(p)
-msgid "A GtkApplication with a simple GMenu and SimpleActions"
+#: C/toolbar.js.page:23(page/p) C/toolbar.vala.page:25(page/p)
+msgid ""
+"This example uses SimpleActions (window and app). App actions can easily be "
+"added the the app menu."
 msgstr ""
 
-#: C/gmenu.vala.page:43(link)
-msgid "Menu"
+#: C/toolbar.js.page:25(page/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gdk = imports.gi.Gdk;\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const Application = new Lang.Class({\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.myapp',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"       //connect to 'activate' and 'startup' signals to the callback functions\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"       this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    //create the UI (in this case it's just the ApplicationWindow\n"
+"    _buildUI: function() {\n"
+"        this._window = new Gtk.ApplicationWindow({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"Toolbar Example\",\n"
+"                                                   default_height: 200,\n"
+"                                                   default_width: 400 });\n"
+"\n"
+"        this._grid = new Gtk.Grid();\n"
+"        this._window.add(this._grid);\n"
+"        this._grid.show();\n"
+"\n"
+"        this._createToolbar();\n"
+"        this._toolbar.set_hexpand(true);\n"
+"        this._grid.attach(this._toolbar, 0, 0, 1, 1);\n"
+"\n"
+"        //show the  toolbar and window\n"
+"        this._toolbar.show();\n"
+"        this._window.show();\n"
+"    },\n"
+"\n"
+"    //callback function for 'activate' signal\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    //callback function for 'startup' signal\n"
+"    _onStartup: function() {\n"
+"        this._initMenus();\n"
+"        this._buildUI();\n"
+"    },\n"
+"\n"
+"    //create the toolbar, its toolbuttons and their actions\n"
+"    _createToolbar: function() {\n"
+"\n"
+"        this._toolbar = new Gtk.Toolbar();\n"
+"        this._toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR);\n"
+"\n"
+"        //create the \"New\" ToolButton and its SimpleAction.\n"
+"        //Using actions allows you to add them to the app menu\n"
+"        //without duplicating code.\n"
+"        let newAction = new Gio.SimpleAction({ name: 'new'});\n"
+"        newAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._newCB();\n"
+"            }));\n"
+"        this.application.add_action(newAction);//note: this action is added to the app\n"
+"\n"
+"        this._newButton = new Gtk.ToolButton.new_from_stock(Gtk.STOCK_NEW);\n"
+"        this._newButton.is_important = true;\n"
+"        this._toolbar.add(this._newButton);\n"
+"        this._newButton.show();\n"
+"        this._newButton.action_name = \"app.new\";\n"
+"\n"
+"        //create the \"Open\" ToolButton and its SimpleAction\n"
+"        let openAction = new Gio.SimpleAction({ name: 'open'});\n"
+"        openAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._openCB();\n"
+"            }));\n"
+"        this.application.add_action(openAction);\n"
+"\n"
+"        this._openButton = new Gtk.ToolButton.new_from_stock(Gtk.STOCK_OPEN);\n"
+"        this._openButton.is_important = true;\n"
+"        this._toolbar.add(this._openButton);\n"
+"        this._openButton.show();\n"
+"        this._openButton.action_name = \"app.open\";\n"
+"\n"
+"        //create the \"Undo\" ToolButton and its SimpleAction\n"
+"        let undoAction = new Gio.SimpleAction({ name: 'undo'});\n"
+"        undoAction.connect('activate', Lang.bind (this,\n"
+"            function() {\n"
+"                this._undoCB();\n"
+"            }));\n"
+"        this._window.add_action(undoAction);//note this action is added to the window\n"
+"\n"
+"        this._undoButton = new Gtk.ToolButton.new_from_stock(Gtk.STOCK_UNDO);\n"
+"        this._undoButton.is_important = true;\n"
+"        this._toolbar.add(this._undoButton);\n"
+"        this._undoButton.show();\n"
+"        this._undoButton.action_name = \"win.undo\";\n"
+"\n"
+"        //create the \"Fullscreen\" ToolButton and its SimpleAction\n"
+"        let fullscreenToggleAction = new Gio.SimpleAction ({ name: 'fullscreenToggle' });\n"
+"        fullscreenToggleAction.connect ('activate', Lang.bind (this,\n"
+"            function () {\n"
+"                this._fullscreenToggleCB();\n"
+"            }));\n"
+"        this._window.add_action(fullscreenToggleAction);\n"
+"\n"
+"        this._fullscreenButton = new Gtk.ToolButton.new_from_stock(Gtk.STOCK_FULLSCREEN);\n"
+"        this._fullscreenButton.is_important = true;\n"
+"        this._toolbar.add(this._fullscreenButton);\n"
+"        this._fullscreenButton.show();\n"
+"        this._fullscreenButton.action_name = \"win.fullscreenToggle\";\n"
+"\n"
+"        //create the \"leaveFullscreen\" ToolButton, and set the action name to \"win.fullscreenToggle\"\n"
+"        this._leaveFullscreenButton = new Gtk.ToolButton.new_from_stock(Gtk.STOCK_LEAVE_FULLSCREEN);\n"
+"        this._leaveFullscreenButton.is_important = true;\n"
+"        this._toolbar.add(this._leaveFullscreenButton);\n"
+"        this._leaveFullscreenButton.action_name = \"win.fullscreenToggle\";\n"
+"    },\n"
+"\n"
+"    _initMenus: function () {\n"
+"        let menu = new Gio.Menu();\n"
+"        menu.append(\"New\", 'app.new');\n"
+"        menu.append(\"Open\", 'app.open');\n"
+"        menu.append(\"Quit\", 'app.quit');\n"
+"\n"
+"        this.application.set_app_menu(menu);\n"
+"\n"
+"        let quitAction = new Gio.SimpleAction({name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"        this.application.add_action(quitAction);\n"
+"    },\n"
+"\n"
+"    _newCB: function() {\n"
+"        print(\"You clicked 'New'.\");\n"
+"    },\n"
+"\n"
+"    _openCB: function() {\n"
+"        print(\"You clicked 'Open'.\");\n"
+"    },\n"
+"\n"
+"    _undoCB:function () {\n"
+"        print (\"You clicked 'Undo'.\");\n"
+"    },\n"
+"\n"
+"    _fullscreenToggleCB: function() {\n"
+"        if ((this._window.get_window().get_state() &amp; Gdk.WindowState.FULLSCREEN) != 0 ) {\n"
+"              this._window.unfullscreen();\n"
+"              this._leaveFullscreenButton.hide();\n"
+"              this._fullscreenButton.show();\n"
+"        }\n"
+"        else {\n"
+"             this._window.fullscreen();\n"
+"             this._fullscreenButton.hide();\n"
+"             this._leaveFullscreenButton.show();\n"
+"        }\n"
+"    }\n"
+"});\n"
+"\n"
+"//run the application\n"
+"let app = new Application();\n"
+"app.application.run(ARGV);\n"
 msgstr ""
 
-#: C/gmenu.vala.page:44(link)
-msgid "append"
+#: C/toolbar.js.page:30(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Window.html";
+"\">Gtk.Window</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/gmenu.vala.page:45(link)
-msgid "SimpleAction"
-msgstr "SimpleAction"
-
-#: C/gmenu.vala.page:46(link)
-msgid "add_action"
+#: C/toolbar.js.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Toolbar.html";
+"\">Gtk.Toolbar</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/gmenu.py.page:27(None)
+#: C/toolbar.js.page:32(item/p)
 #, fuzzy
-#| msgid "@@image: 'media/fedora.png'; md5=19add55f4349fd9e90f3a50b344ba626"
-msgid "@@image: 'media/gmenu.py.png'; md5=52c68b34d5d566f37e9f803dedb6353a"
-msgstr "@@image: 'media/fedora.png'; md5=19add55f4349fd9e90f3a50b344ba626"
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ToolButton.";
+"html\">Gtk.ToolButton</link>"
+msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/gmenu.py.page:7(title)
+#: C/toolbar.js.page:33(item/p)
 #, fuzzy
-#| msgid "Python"
-msgid "GMenu (Python)"
-msgstr "Python"
-
-#: C/gmenu.py.page:23(desc)
-msgid "A simple implementation of GMenu"
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.html\";>Gtk "
+"Stock items</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/gmenu.py.page:29(em) C/gmenu.c.page:23(em) C/aboutdialog.vala.page:31(em)
-#: C/aboutdialog.c.page:26(em)
-msgid "You need to be running Gtk3.4 or later for this to work"
+#: C/toolbar.js.page:34(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gdk.WindowState.";
+"html\">Gdk.WindowState</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/gmenu.py.page:40(title)
-msgid "Useful methods for a GSimpleAction and a GMenu"
-msgstr ""
+#: C/toolbar.py.page:7(info/title)
+#, fuzzy
+#| msgid "Toolbar (Python)"
+msgctxt "text"
+msgid "Toolbar (Python)"
+msgstr "Barra de ferramentas (Python)"
 
-#: C/gmenu.py.page:42(p)
-msgid "Useful methods for a GSimpleAction:"
-msgstr ""
+#: C/toolbar.py.page:18(info/desc) C/toolbar_builder.py.page:31(info/desc)
+msgid "A bar of buttons and other widgets"
+msgstr "Unha barra de botóns e outros widgets"
 
-#: C/gmenu.py.page:44(p)
-msgid ""
-"To create a new action that is <em>stateless</em>, that is, an action that "
-"do not retain or depend on a state given by the action itself, use"
+#: C/toolbar.py.page:24(page/p)
+msgid "An example of toolbar with buttons (from stock icons)."
 msgstr ""
 
-#: C/gmenu.py.page:45(code)
+#: C/toolbar.py.page:31(section/code)
 #, no-wrap
 msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import Gdk\n"
+"from gi.repository import Gio\n"
+"import sys\n"
 "\n"
-"action = Gio.SimpleAction.new(\"name\", parameter_type)"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Toolbar Example\", application=app)\n"
+"        self.set_default_size(400, 200)\n"
+"\n"
+"        # a grid to attach the toolbar\n"
+"        grid = Gtk.Grid()\n"
+"\n"
+"        # a toolbar created in the method create_toolbar (see below)\n"
+"        toolbar = self.create_toolbar()\n"
+"        # with extra horizontal space\n"
+"        toolbar.set_hexpand(True)\n"
+"        # show the toolbar\n"
+"        toolbar.show()\n"
+"\n"
+"        # attach the toolbar to the grid\n"
+"        grid.attach(toolbar, 0, 0, 1, 1)\n"
+"\n"
+"        # add the grid to the window\n"
+"        self.add(grid)\n"
+"\n"
+"        # create the actions that control the window and connect their signal to a\n"
+"        # callback method (see below):\n"
+"\n"
+"        # undo\n"
+"        undo_action = Gio.SimpleAction.new(\"undo\", None)\n"
+"        undo_action.connect(\"activate\", self.undo_callback)\n"
+"        self.add_action(undo_action)\n"
+"\n"
+"        # fullscreen\n"
+"        fullscreen_action = Gio.SimpleAction.new(\"fullscreen\", None)\n"
+"        fullscreen_action.connect(\"activate\", self.fullscreen_callback)\n"
+"        self.add_action(fullscreen_action)\n"
+"\n"
+"    # a method to create the toolbar\n"
+"    def create_toolbar(self):\n"
+"        # a toolbar\n"
+"        toolbar = Gtk.Toolbar()\n"
+"\n"
+"        # which is the primary toolbar of the application\n"
+"        toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR);\n"
+"\n"
+"        # create a button for the \"new\" action, with a stock image\n"
+"        new_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_NEW)\n"
+"        # label is shown\n"
+"        new_button.set_is_important(True)\n"
+"        # insert the button at position in the toolbar\n"
+"        toolbar.insert(new_button, 0)\n"
+"        # show the button\n"
+"        new_button.show()\n"
+"        # set the name of the action associated with the button.\n"
+"        # The action controls the application (app)\n"
+"        new_button.set_action_name(\"app.new\")\n"
+"\n"
+"        # button for the \"open\" action\n"
+"        open_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_OPEN)\n"
+"        open_button.set_is_important(True)\n"
+"        toolbar.insert(open_button, 1)\n"
+"        open_button.show()\n"
+"        open_button.set_action_name(\"app.open\")\n"
+"\n"
+"        # button for the \"undo\" action\n"
+"        undo_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_UNDO)\n"
+"        undo_button.set_is_important(True)\n"
+"        toolbar.insert(undo_button, 2)\n"
+"        undo_button.show()\n"
+"        undo_button.set_action_name(\"win.undo\")\n"
+"\n"
+"        # button for the \"fullscreen/leave fullscreen\" action\n"
+"        self.fullscreen_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_FULLSCREEN)\n"
+"        self.fullscreen_button.set_is_important(True)\n"
+"        toolbar.insert(self.fullscreen_button, 3)\n"
+"        self.fullscreen_button.set_action_name(\"win.fullscreen\")\n"
+"\n"
+"        # return the complete toolbar\n"
+"        return toolbar\n"
+"\n"
+"    # callback method for undo\n"
+"    def undo_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"Undo\\\".\"\n"
+"\n"
+"    # callback method for fullscreen / leave fullscreen\n"
+"    def fullscreen_callback(self, action, parameter):\n"
+"        # check if the state is the same as Gdk.WindowState.FULLSCREEN, which is a bit flag\n"
+"        is_fullscreen = self.get_window().get_state() &amp; Gdk.WindowState.FULLSCREEN != 0\n"
+"        if not is_fullscreen:\n"
+"            self.fullscreen_button.set_stock_id(Gtk.STOCK_LEAVE_FULLSCREEN)\n"
+"            self.fullscreen()\n"
+"        else:\n"
+"            self.fullscreen_button.set_stock_id(Gtk.STOCK_FULLSCREEN)\n"
+"            self.unfullscreen()\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"        # create the actions that control the window and connect their signal to a\n"
+"        # callback method (see below):\n"
+"\n"
+"        # new\n"
+"        new_action = Gio.SimpleAction.new(\"new\", None)\n"
+"        new_action.connect(\"activate\", self.new_callback)\n"
+"        app.add_action(new_action)\n"
+"\n"
+"        # open\n"
+"        open_action = Gio.SimpleAction.new(\"open\", None)\n"
+"        open_action.connect(\"activate\", self.open_callback)\n"
+"        app.add_action(open_action)\n"
+"\n"
+"    # callback method for new\n"
+"    def new_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"New\\\".\"\n"
+"\n"
+"    # callback method for open\n"
+"    def open_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"Open\\\".\"\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/gmenu.py.page:47(p)
-msgid ""
-"where <code>\"name\"</code> is the name of the action and "
-"<code>parameter_type</code> is the type of the parameters that the action "
-"receives when being activated. This can be <code>None</code>, or <code>GLib."
-"VariantType.new('s')</code> if the parameter is of type <code>str</code>, or "
-"instead of <code>'s'</code> a character as described <link href=\"http://";
-"developer.gnome.org/glib/unstable/glib-GVariantType.html\">here</link>. To "
-"create a new <em>stateful</em> (i.e. not stateless) action, use"
-msgstr ""
+#: C/toolbar.py.page:35(section/title)
+#, fuzzy
+#| msgid "Menu, combo box and toolbar widgets"
+msgid "Useful methods for a Toolbar widget"
+msgstr "Widgets de menú, caixa combinada e barra de ferramentas"
 
-#: C/gmenu.py.page:48(code)
-#, no-wrap
+#: C/toolbar.py.page:38(item/p)
 msgid ""
-"\n"
-"action = Gio.SimpleAction.new_stateful(\"name\", parameter_type, initial_state)"
+"Use <code>insert(tool_item, position)</code> to insert the <code>tool_item</"
+"code> at <code>position</code>. If <code>position</code> is negative, the "
+"item is appended at the end of the toolbar."
 msgstr ""
 
-#: C/gmenu.py.page:50(p)
+#: C/toolbar.py.page:39(item/p)
 msgid ""
-"where <code>initial_state</code> is defined as a GVariant - for instance "
-"<code>Glib.Variant.new_string('start')</code>; for a list of possiblities "
-"see <link href=\"http://developer.gnome.org/glib/unstable/glib-GVariant.html";
-"\">here</link>."
+"<code>get_item_index(tool_item)</code> retrieves the position of "
+"<code>tool_item</code> on the toolbar."
 msgstr ""
 
-#: C/gmenu.py.page:51(p)
+#: C/toolbar.py.page:40(item/p)
 msgid ""
-"<code>set_enabled(True)</code> sets the action as enabled; an action must be "
-"enabled in order to be activated or in order to have its state changed from "
-"outside callers. This should only be called by the implementor of the "
-"action. Users of the action should not attempt to modify its enabled flag."
+"<code>get_n_items()</code> returns the number of items on the toolbar; "
+"<code>get_nth_item(position)</code> returns the item in position "
+"<code>position</code>."
 msgstr ""
 
-#: C/gmenu.py.page:52(p)
+#: C/toolbar.py.page:41(item/p)
 msgid ""
-"<code>set_state(state)</code>, where <code>state</code> is a GVariant, sets "
-"the state of the action, updating the 'state' property to the given value. "
-"This should only be called by the implementor of the action; users of the "
-"action should instead call <code>change_state(state)</code> (where "
-"<code>state</code> is as above) to request the change."
+"If the toolbar does not have room for all the menu items, and "
+"<code>set_show_arrow(True)</code>, the items that do not have room are shown "
+"through an overflow menu."
 msgstr ""
 
-#: C/gmenu.py.page:55(p)
-msgid "Useful methods for a GMenu:"
+#: C/toolbar.py.page:42(item/p)
+msgid ""
+"<code>set_icon_size(icon_size)</code> sets the size of icons in the toolbar; "
+"<code>icon_size</code> can be one of <code>Gtk.IconSize.INVALID, Gtk."
+"IconSize.MENU, Gtk.IconSize.SMALL_TOOLBAR, Gtk.IconSize.LARGE_TOOLBAR, Gtk."
+"IconSize.BUTTON, Gtk.IconSize.DND, Gtk.IconSize.DIALOG</code>. This should "
+"be used only for special-purpose toolbars, normal application toolbars "
+"should respect user preferences for the size of icons. <code>unset_icon_size"
+"()</code> unsets the preferences set with <code>set_icon_size(icon_size)</"
+"code>, so that user preferences are used to determine the icon size."
 msgstr ""
 
-#: C/gmenu.py.page:57(p)
+#: C/toolbar.py.page:43(item/p)
 msgid ""
-"To insert an item in the menu in position <code>position</code>, use "
-"<code>insert(position, label, detailed_action)</code>, where <code>label</"
-"code> is the label that will appear in the menu and <code>detailed_action</"
-"code> is a string composed of the name of the action to which we prepend the "
-"prefix <code>app.</code>. A more detailed discussion of this can be found in "
-"<link xref=\"menubar.py#win-app\"/>."
+"<code>set_style(style)</code>, where <code>style</code> is one of <code>Gtk."
+"ToolbarStyle.ICONS, Gtk.ToolbarStyle.TEXT, Gtk.ToolbarStyle.BOTH, Gtk."
+"ToolbarStyle.BOTH_HORIZ</code>, sets if the toolbar shows only icons, only "
+"text, or both (vertically stacked or alongside each other). To let user "
+"preferences determine the toolbar style, and unset a toolbar style so set, "
+"use <code>unset_style()</code>."
 msgstr ""
 
-#: C/gmenu.py.page:58(p)
+#: C/toolbar.py.page:52(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"To append or prepend an item in the menu use respectively <code>append"
-"(label, detailed_action)</code> and <code>prepend(label, detailed_action)</"
-"code>."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToolbar.html";
+"\">GtkToolbar</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/gmenu.py.page:59(p)
+#: C/toolbar.py.page:53(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"Another way of adding items to the menu is to create them as "
-"<code>GMenuItem</code>s and use <code>insert_item(position, item)</code>, "
-"<code>append_item(item)</code>, or <code>prepend_item(item)</code>; so for "
-"instance we might have:"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToolButton.html";
+"\">GtkToolButton</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/gmenu.py.page:60(code)
-#, no-wrap
+#: C/toolbar.py.page:54(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"\n"
-"about = Gio.MenuItem.new(\"About\", \"app.about\")\n"
-"menu.append_item(about)"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToolItem.html";
+"\">GtkToolItem</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/gmenu.py.page:64(p)
+#: C/toolbar.py.page:56(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"We can also add a whole subsection in a menu using <code>insert_section"
-"(position, label, section)</code>, <code>append_section(label, section)</"
-"code>, or <code>prepend_section(label, section)</code>, where <code>label</"
-"code> is the title of the subsection."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkActionable.html";
+"\">GtkActionable</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/gmenu.py.page:65(p)
+#: C/toolbar.py.page:58(item/p) C/toolbar_builder.py.page:196(item/p)
 msgid ""
-"To add a submenu that will expand and collapse, use <code>insert_submenu"
-"(position, label, section)</code>, <code>append_submenu(label, section)</"
-"code>, or <code>prepend_submenu(label, section)</code>, where <code>label</"
-"code> is the title of the subsection."
+"<link href=\"http://developer.gnome.org/gdk3/unstable/gdk3-Event-Structures.";
+"html#GdkEventWindowState\">Event Structures</link>"
 msgstr ""
 
-#: C/gmenu.py.page:66(p)
-msgid "To remove an item from the menu, use <code>remove(postion)</code>."
+#: C/toolbar.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Toolbar (Vala)"
+msgctxt "text"
+msgid "Toolbar (Vala)"
+msgstr "Barra de ferramentas (Vala)"
+
+#: C/toolbar.vala.page:18(info/desc) C/toolbar_builder.vala.page:19(info/desc)
+msgid "A bar of buttons"
+msgstr "Unha barra de botóns"
+
+#: C/toolbar.vala.page:27(page/code)
+#, no-wrap
+msgid ""
+"/* This is the Window */\n"
+"class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\t/* Instance variables belonging to the window */\n"
+"\tGtk.Toolbar toolbar;\n"
+"\tGtk.ToolButton new_button;\n"
+"\tGtk.ToolButton open_button;\n"
+"\tGtk.ToolButton undo_button;\n"
+"\tGtk.ToolButton fullscreen_button;\n"
+"\tGtk.ToolButton leave_fullscreen_button;\n"
+"\n"
+"\t/* Contstructor */\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"Toolbar Example\");\n"
+"\n"
+"\t\tthis.set_default_size (400, 200);\n"
+"\t\tvar grid = new Gtk.Grid ();\n"
+"\t\tthis.add (grid);\n"
+"\t\tgrid.show ();\n"
+"\n"
+"\t\tcreate_toolbar ();\n"
+"\t\ttoolbar.set_hexpand (true);\n"
+"\t\tgrid.attach (toolbar, 0, 0, 1, 1);\n"
+"\t\ttoolbar.show ();\n"
+"\n"
+"\t\t/* create the \"undo\" window action action */\n"
+"\t\tvar undo_action = new SimpleAction (\"undo\", null);\n"
+"\t\tundo_action.activate.connect (undo_callback);\n"
+"\t\tthis.add_action (undo_action);\n"
+"\n"
+"\t\t/* create the \"fullscreen\" window action */\n"
+"\t\tvar fullscreen_action = new SimpleAction (\"fullscreen\", null);\n"
+"\t\tfullscreen_action.activate.connect (fullscreen_callback);\n"
+"\t\tthis.add_action (fullscreen_action);\n"
+"\t}\n"
+"\n"
+"\t/* This function creates the toolbar, its  ToolButtons,\n"
+"\t * and assigns the actions names to the ToolButtons.*/\n"
+"\tvoid create_toolbar () {\n"
+"\t\ttoolbar = new Gtk.Toolbar ();\n"
+"\t\ttoolbar.get_style_context ().add_class (Gtk.STYLE_CLASS_PRIMARY_TOOLBAR);\n"
+"\n"
+"\t\tnew_button = new Gtk.ToolButton.from_stock (Gtk.Stock.NEW);\n"
+"\t\tnew_button.is_important = true; //decides whether to show the label\n"
+"\t\ttoolbar.add (new_button);\n"
+"\t\tnew_button.show ();\n"
+"\t\tnew_button.action_name = \"app.new\";\n"
+"\n"
+"\t\topen_button = new Gtk.ToolButton.from_stock (Gtk.Stock.OPEN);\n"
+"\t\topen_button.is_important = true;\n"
+"\t\ttoolbar.add (open_button);\n"
+"\t\topen_button.show ();\n"
+"\t\topen_button.action_name = \"app.open\";\n"
+"\n"
+"\t\tundo_button = new Gtk.ToolButton.from_stock (Gtk.Stock.UNDO);\n"
+"\t\tundo_button.is_important = true;\n"
+"\t\ttoolbar.add (undo_button);\n"
+"\t\tundo_button.show ();\n"
+"\t\tundo_button.action_name = \"win.undo\";\n"
+"\n"
+"\t\tfullscreen_button = new Gtk.ToolButton.from_stock (Gtk.Stock.FULLSCREEN);\n"
+"\t\tfullscreen_button.is_important = true;\n"
+"\t\ttoolbar.add (fullscreen_button);\n"
+"\t\tfullscreen_button.show ();\n"
+"\t\tfullscreen_button.action_name = \"win.fullscreen\";\n"
+"\n"
+"\t\tleave_fullscreen_button = new Gtk.ToolButton.from_stock (Gtk.Stock.LEAVE_FULLSCREEN)\n"
+";\n"
+"\t\tleave_fullscreen_button.is_important = true;\n"
+"\t\ttoolbar.add (leave_fullscreen_button);\n"
+"\n"
+"\t\tleave_fullscreen_button.action_name = \"win.fullscreen\";\n"
+"\t}\n"
+"\n"
+"\tvoid undo_callback (SimpleAction simple, Variant? parameter) {\n"
+"\t\t\tprint (\"You clicked \\\"Undo\\\".\\n\");\n"
+"\t}\n"
+"\n"
+"\tvoid fullscreen_callback (SimpleAction simple, Variant? parameter) {\n"
+"\t\tif ((this.get_window ().get_state () &amp; Gdk.WindowState.FULLSCREEN) != 0) {\n"
+"\t\t\tthis.unfullscreen ();\n"
+"\t\t\tleave_fullscreen_button.hide ();\n"
+"\t\t\tfullscreen_button.show ();\n"
+"\t\t}\n"
+"\t\telse {\n"
+"\t\t\tthis.fullscreen ();\n"
+"\t\t\tfullscreen_button.hide ();\n"
+"\t\t\tleave_fullscreen_button.show ();\n"
+"\t\t}\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* This is the application */\n"
+"class MyApplication : Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\t\tnew MyWindow (this).show ();\n"
+"\t}\n"
+"\n"
+"\tprotected override void startup () {\n"
+"\t\tbase.startup ();\n"
+"\n"
+"\t\t/* Create the \"new\" action and add it to the app*/\n"
+"\t\tvar new_action = new SimpleAction (\"new\", null);\n"
+"\t\tnew_action.activate.connect (new_callback);\n"
+"\t\tthis.add_action (new_action);\n"
+"\n"
+"\t\t/* Create the \"open\" action, and add it to the app */\n"
+"\t\tvar open_action = new SimpleAction (\"open\", null);\n"
+"\t\topen_action.activate.connect (open_callback);\n"
+"\t\tthis.add_action (open_action);\n"
+"\n"
+"\t\t/* You could also add the action to the app menu\n"
+"\t\t * if you wanted to.\n"
+"\t\t */\n"
+"\t\t//var menu = new Menu ();\n"
+"\t\t//menu.append (\"New\", \"app.new\");\n"
+"\t\t//this.app_menu = menu;\n"
+"\t}\n"
+"\n"
+"\tvoid new_callback (SimpleAction action, Variant? parameter) {\n"
+"\t\tprint (\"You clicked \\\"New\\\".\\n\");\n"
+"\t}\n"
+"\n"
+"\tvoid open_callback (SimpleAction action, Variant? parameter) {\n"
+"\t\t\tprint (\"You clicked \\\"Open\\\".\\n\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* The main function creates the application and runs it. */\n"
+"int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/gmenu.py.page:67(p)
-msgid "To set a label for the menu, use <code>set_label(label)</code>."
+#: C/toolbar.vala.page:33(item/p) C/toolbar_builder.vala.page:150(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Toolbar.html\";>Gtk.Toolbar</"
+"link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/gmenu.py.page:78(link)
-msgid "GVariantType"
+#: C/toolbar.vala.page:34(item/p) C/toolbar_builder.vala.page:151(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ToolButton.html\";>Gtk."
+"Toolbutton</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/gmenu.py.page:79(link)
-msgid "GVariant"
+#: C/toolbar.vala.page:35(item/p) C/toolbar_builder.vala.page:152(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Stock.html\";>Gtk.Stock</"
+"link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/toolbar_builder.py.page:48(media) C/toolbar_builder.vala.page:32(media)
+#, fuzzy
+#| msgid "@@image: 'media/glade_ui.png'; md5=baea74fe213bc12ea934f64f6977215a"
+msgctxt "_"
+msgid ""
+"external ref='media/glade_ui.png' md5='baea74fe213bc12ea934f64f6977215a'"
+msgstr "@@image: 'media/glade_ui.png'; md5=baea74fe213bc12ea934f64f6977215a"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/gmenu.js.page:21(None)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/toolbar_builder.py.page:54(media) C/toolbar_builder.vala.page:38(media)
 #, fuzzy
 #| msgid ""
-#| "@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
-msgid "@@image: 'media/gmenu.js.png'; md5=16b8bee122197771ec8498dac42f196b"
+#| "@@image: 'media/glade_select_toolbar.png'; "
+#| "md5=f7b5b224050b2e387eb04362fc99df00"
+msgctxt "_"
+msgid ""
+"external ref='media/glade_select_toolbar.png' "
+"md5='f7b5b224050b2e387eb04362fc99df00'"
 msgstr ""
-"@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
+"@@image: 'media/glade_select_toolbar.png'; "
+"md5=f7b5b224050b2e387eb04362fc99df00"
 
-#: C/gmenu.js.page:7(title)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/toolbar_builder.py.page:60(media) C/toolbar_builder.vala.page:44(media)
 #, fuzzy
-#| msgid "JavaScript"
-msgid "GMenu (JavaScript)"
-msgstr "JavaScript"
+#| msgid ""
+#| "@@image: 'media/glade_toolbar_general.png'; "
+#| "md5=e31daba6e8a3e526aca89d5f1622edaa"
+msgctxt "_"
+msgid ""
+"external ref='media/glade_toolbar_general.png' "
+"md5='e31daba6e8a3e526aca89d5f1622edaa'"
+msgstr ""
+"@@image: 'media/glade_toolbar_general.png'; "
+"md5=e31daba6e8a3e526aca89d5f1622edaa"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/gmenu.c.page:21(None)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/toolbar_builder.py.page:66(media) C/toolbar_builder.vala.page:50(media)
 #, fuzzy
-#| msgid "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
-msgid "@@image: 'media/gmenu.c.png'; md5=f305fc3cae8d16d72b734ee53b559e33"
-msgstr "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
-
-#: C/gmenu.c.page:7(title)
-msgid "GMenu (C)"
+#| msgid ""
+#| "@@image: 'media/glade_toolbar_common.png'; "
+#| "md5=d5ec6cc0218ca98e195dbd033feb9ac5"
+msgctxt "_"
+msgid ""
+"external ref='media/glade_toolbar_common.png' "
+"md5='d5ec6cc0218ca98e195dbd033feb9ac5'"
 msgstr ""
+"@@image: 'media/glade_toolbar_common.png'; "
+"md5=d5ec6cc0218ca98e195dbd033feb9ac5"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/getting-ready.page:39(None)
-msgid "@@image: 'media/ubuntu.png'; md5=40845e4a40b335b1958da1403f01c13f"
-msgstr "@@image: 'media/ubuntu.png'; md5=40845e4a40b335b1958da1403f01c13f"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/getting-ready.page:44(None)
-msgid "@@image: 'media/fedora.png'; md5=19add55f4349fd9e90f3a50b344ba626"
-msgstr "@@image: 'media/fedora.png'; md5=19add55f4349fd9e90f3a50b344ba626"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/getting-ready.page:49(None)
-msgid "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
-msgstr "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
-
-#: C/getting-ready.page:6(title)
-msgid "Install GNOME development tools"
-msgstr "Instalar as ferramentas de desenvolvemento de GNOME"
-
-#: C/getting-ready.page:16(title)
-msgid "Getting ready for GNOME development"
-msgstr "Prepárese para desenvolver en GNOME"
-
-#: C/getting-ready.page:19(title)
-msgid "Install the required tools"
-msgstr "Instalar as ferramentas necesarias"
-
-#: C/getting-ready.page:20(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/toolbar_builder.py.page:72(media) C/toolbar_builder.vala.page:56(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/glade_toolbar_edit.png'; "
+#| "md5=feb1e2b7040d24a4d030f94cf07c81fd"
+msgctxt "_"
 msgid ""
-"Before you can start coding you will have to install the required tools for "
-"GNOME development on your computer. This shouldn't take you more than ten "
-"minutes."
+"external ref='media/glade_toolbar_edit.png' "
+"md5='feb1e2b7040d24a4d030f94cf07c81fd'"
 msgstr ""
-"Antes de comezar a escribir código debe instalar as ferramentas requiridas "
-"para o desenvolvemento de GNOME no seu computador. Isto non debería levar "
-"máis de 10 minutos."
-
-#: C/getting-ready.page:25(title)
-msgid "Automatic installation"
-msgstr "Instalación automática"
+"@@image: 'media/glade_toolbar_edit.png'; md5=feb1e2b7040d24a4d030f94cf07c81fd"
 
-#: C/getting-ready.page:26(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/toolbar_builder.py.page:131(media) C/toolbar_builder.vala.page:115(media)
 #, fuzzy
 #| msgid ""
-#| "On an up-to-date distribution you should be able to simply install the "
-#| "required packages by clicking on <link href=\"gnome-devtools.catalog"
-#| "\">Install now</link>."
+#| "@@image: 'media/glade_toolbar_editor.png'; "
+#| "md5=8af65241e5ca47d5494a7b36640e6f1c"
+msgctxt "_"
 msgid ""
-"On an up-to-date distribution you should be able to simply install the "
-"required packages by clicking on <link href=\"media/gnome-devtools.catalog"
-"\">Install now</link>."
+"external ref='media/glade_toolbar_editor.png' "
+"md5='8af65241e5ca47d5494a7b36640e6f1c'"
 msgstr ""
-"Nunha distribución anovada debería poder instalar de forma sinxela os "
-"paquetes requiridos premendo en <link href=\"gnome-devtools.catalog"
-"\">Instalar agora</link>."
-
-#: C/getting-ready.page:31(title)
-msgid "Manual installation"
-msgstr "Instalación manual"
+"@@image: 'media/glade_toolbar_editor.png'; "
+"md5=8af65241e5ca47d5494a7b36640e6f1c"
 
-#: C/getting-ready.page:32(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/toolbar_builder.py.page:140(media) C/toolbar_builder.vala.page:124(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/glade_visible_no.png'; "
+#| "md5=dc6c025aa825f4d772fbd283d6330026"
+msgctxt "_"
 msgid ""
-"If you prefer manual installation you can find the instructions for the "
-"various distributions in the <link href=\"http://live.gnome.org/";
-"DeveloperTools/Installation\">GNOME wiki</link>. Click on the image to go "
-"directly to the installation page for your distribution:"
+"external ref='media/glade_visible_no.png' "
+"md5='dc6c025aa825f4d772fbd283d6330026'"
 msgstr ""
-"Se prefire a instalación manual pode atopar as instrucións para varias "
-"distribucións no <link href=\"http://live.gnome.org/DeveloperTools/";
-"Installation\">wiki de GNOME</link>. Prema sobre a imaxe para ir diretamente "
-"á páxina de instalación da súa distribución:"
-
-#: C/getting-ready.page:39(media)
-msgid "Ubuntu"
-msgstr "Ubuntu"
-
-#: C/getting-ready.page:44(media)
-msgid "Fedora"
-msgstr "Fedora"
-
-#: C/getting-ready.page:49(media)
-msgid "OpenSuSE"
-msgstr "OpenSuSE"
+"@@image: 'media/glade_visible_no.png'; md5=dc6c025aa825f4d772fbd283d6330026"
 
-#: C/getting-ready.page:52(link)
-msgid "Others"
-msgstr "Otras"
+#: C/toolbar_builder.py.page:7(info/title)
+#, fuzzy
+#| msgid "Toolbar created using Glade (Vala)"
+msgctxt "text"
+msgid "Toolbar created using Glade (Python)"
+msgstr "Barra de ferramentas creada empregando Glade (Vala)"
 
-#: C/getting-ready.page:59(title)
-msgid "Required versions"
-msgstr "Versiones necesarias"
+#: C/toolbar_builder.py.page:34(page/title)
+#: C/toolbar_builder.vala.page:22(page/title)
+msgid "Toolbar created using Glade"
+msgstr "Barra de ferramentas creada empregando Glade"
 
-#: C/getting-ready.page:60(p)
+#: C/toolbar_builder.py.page:37(page/p)
 msgid ""
-"The guides assume that you have at least the following versions of the tools "
-"installed:"
+"This example is similar to <link xref=\"toolbar.py\"/>, except we use Glade "
+"to create the toolbar in an XML .ui file."
 msgstr ""
-"As guías asumen que ten instaladas, cando menos, as seguintes versións das "
-"ferramentas."
+"Este exemplo é similar a <link xref=\"toolbar.py\"/>, agás que usa Glade "
+"para crear a barra de ferrametnas nun ficheiro .ui XML."
 
-#: C/getting-ready.page:63(p)
-msgid "Anjuta - 3.0"
-msgstr "Anjuta - 3.0"
+#: C/toolbar_builder.py.page:42(section/title)
+msgid "Creating the toolbar with Glade"
+msgstr "Crear unha barra de ferramentas con Glade"
 
-#: C/getting-ready.page:64(p)
-msgid "Devhelp - 3.0"
-msgstr "Devhelp - 3.0"
+#: C/toolbar_builder.py.page:43(section/p)
+#: C/toolbar_builder.vala.page:27(page/p)
+msgid ""
+"To create the toolbar using the <link href=\"http://glade.gnome.org/\";>Glade "
+"Interface Designer</link>:"
+msgstr ""
 
-#: C/getting-ready.page:65(p)
-msgid "Glade - 3.10"
-msgstr "Glade - 3.10"
+#: C/toolbar_builder.py.page:47(item/p) C/toolbar_builder.vala.page:31(item/p)
+msgid "Open Glade, and save the file as <file>toolbar_builder.ui</file>"
+msgstr ""
 
-#: C/getting-ready.page:67(p)
+#: C/toolbar_builder.py.page:48(item/p) C/toolbar_builder.vala.page:32(item/p)
 msgid ""
-"Of course, any newer version will also work. Now, we wish you a lot of fun "
-"with the <link xref=\"index\">Demos</link>."
+"<media type=\"image\" src=\"media/glade_ui.png\" width=\"900\"> Screenshot "
+"of Glade ui </media>"
 msgstr ""
-"Por suposto, calquera versión máis moderna tamén funcionará. Agora desexamos "
-"que goce coas <link xref=\"index\">demostracións</link>."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/fontchooserwidget.py.page:23(None)
-#, fuzzy
-#| msgid "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
+#: C/toolbar_builder.py.page:53(item/p) C/toolbar_builder.vala.page:37(item/p)
 msgid ""
-"@@image: 'media/fontchooserwidget.png'; md5=9161245e307b432ae1313e9a9941edae"
-msgstr "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
-
-#: C/fontchooserwidget.py.page:7(title)
-msgid "FontChooserWidget (Python)"
+"Under <gui>Containers</gui> on the left hand side, right click on the "
+"toolbar icon and select <gui>Add widget as toplevel</gui>."
 msgstr ""
 
-#: C/fontchooserwidget.py.page:18(desc)
-msgid "A widget to choose a font"
+#: C/toolbar_builder.py.page:54(item/p) C/toolbar_builder.vala.page:38(item/p)
+msgid ""
+"<media type=\"image\" src=\"media/glade_select_toolbar.png\"> Screenshot of "
+"toolbar icon in Glade ui </media>"
 msgstr ""
 
-#: C/fontchooserwidget.py.page:21(title)
-msgid "FontChooserWidget"
+#: C/toolbar_builder.py.page:59(item/p) C/toolbar_builder.vala.page:43(item/p)
+msgid ""
+"Under the <gui>General</gui> tab on the bottom right, change the <gui>Name</"
+"gui> to <input>toolbar</input> and <gui>Show Arrow</gui> to <gui>No</gui>."
 msgstr ""
 
-#: C/fontchooserwidget.py.page:24(p)
-msgid "A FontChooserWidget with a callback function."
+#: C/toolbar_builder.py.page:60(item/p) C/toolbar_builder.vala.page:44(item/p)
+msgid ""
+"<media type=\"image\" src=\"media/glade_toolbar_general.png\"> Screenshot of "
+"General tab </media>"
 msgstr ""
 
-#: C/fontchooserwidget.py.page:33(title)
-msgid "Useful methods for a FontChooserWidget"
+#: C/toolbar_builder.py.page:65(item/p) C/toolbar_builder.vala.page:49(item/p)
+msgid ""
+"Under the <gui>Common</gui> tab, set <gui>Horizontal Expand</gui> to "
+"<gui>Yes</gui>."
 msgstr ""
 
-#: C/fontchooserwidget.py.page:36(p)
+#: C/toolbar_builder.py.page:66(item/p) C/toolbar_builder.vala.page:50(item/p)
 msgid ""
-"To set the font which is initially selected, use <code>set_font(font)</code> "
-"(where <code>font</code> is the font name) or <code>set_font_desc(font)</"
-"code> (where <code>font</code> is the PangoFontDescription)."
+"<media type=\"image\" src=\"media/glade_toolbar_common.png\"> Screenshot of "
+"Common tab </media>"
 msgstr ""
 
-#: C/fontchooserwidget.py.page:37(p)
+#: C/toolbar_builder.py.page:71(item/p) C/toolbar_builder.vala.page:55(item/p)
 msgid ""
-"To get the selected font use <code>get_font()</code> or <code>get_font_desc()"
-"</code>."
+"Right click on the toolbar in the top right and select <gui>Edit</gui>. The "
+"<gui>Tool Bar Editor</gui> window will appear."
 msgstr ""
+"Prema co botón dereito sobre a barra de ferramentas na parte superior "
+"dereita e seleccione <gui>Editar</gui>. A xanela <gui>Editor da barra de "
+"ferramentas</gui> aparecerá."
 
-#: C/fontchooserwidget.py.page:38(p)
+#: C/toolbar_builder.py.page:72(item/p) C/toolbar_builder.vala.page:56(item/p)
+#, fuzzy
+#| msgid "Screenshot of where to right click to edit toolbar."
 msgid ""
-"To change the text which is shown in the preview area, use "
-"<code>set_preview_text()</code>."
+"<media type=\"image\" src=\"media/glade_toolbar_edit.png\"> Screenshot of "
+"where to right click to edit toolbar. </media>"
 msgstr ""
+"Captura de pantalla onde facer clic dereito para editar a barra de "
+"ferramentas."
 
-#: C/fontchooserwidget.py.page:45(link)
-msgid "GtkFontChooserWidget"
+#: C/toolbar_builder.py.page:77(item/p) C/toolbar_builder.vala.page:61(item/p)
+msgid ""
+"We want to add 5 ToolButtons: New, Open, Undo, Fullscreen and Leave "
+"Fullscreen. First, we will add the New ToolButton."
 msgstr ""
+"Queremos engadir 5 ToolButtons: Novo, Abrir, Desfacer, Pantalla completa e "
+"Saír da pantalla completa. Primeiro, precisamos engadir o ToolButton Novo."
 
-#: C/filechooserdialog.vala.page:7(title)
-msgid "FileChooserDialog (Vala)"
-msgstr ""
+#: C/toolbar_builder.py.page:80(item/p) C/toolbar_builder.vala.page:64(item/p)
+msgid "Under <gui>Hierarchy</gui> tab, click <gui>Add</gui>."
+msgstr "Baixo a lapela <gui>Xerarquía</gui>, prema <gui>Engadir</gui>."
 
-#: C/filechooserdialog.vala.page:20(desc)
-msgid "A dialog suitable for \"Open\" and \"Save\" commands."
+#: C/toolbar_builder.py.page:81(item/p) C/toolbar_builder.vala.page:65(item/p)
+msgid "Change the name of the ToolItem to <input>new_button</input>."
+msgstr "Cambie o nome do TollItem a <input>new_button</input>."
+
+#: C/toolbar_builder.py.page:82(item/p) C/toolbar_builder.vala.page:66(item/p)
+msgid ""
+"Scroll down and set <gui>Is important</gui> to <gui>Yes</gui>. This will "
+"cause the label of the ToolButton to be shown, when you view the toolbar."
 msgstr ""
 
-#: C/filechooserdialog.vala.page:23(title)
-#: C/filechooserdialog.vala.page:40(link)
-#: C/filechooserdialog.py.page:23(title)
-#, fuzzy
-#| msgid "MessageDialog"
-msgid "FileChooserDialog"
-msgstr "MessageDialog"
+#: C/toolbar_builder.py.page:83(item/p) C/toolbar_builder.vala.page:67(item/p)
+msgid "Enter the <gui>action name</gui>: <input>app.new</input>."
+msgstr "Escriba o <gui>nome da acción</gui>: <input>app.new</input>."
 
-#: C/filechooserdialog.vala.page:25(title)
-msgid "Overview of the example"
-msgstr ""
+#: C/toolbar_builder.py.page:84(item/p) C/toolbar_builder.vala.page:68(item/p)
+msgid "Change the <gui>Label</gui> to <input>New</input>."
+msgstr "Cambie a <gui>Etiqueta</gui> a <input>Nova</input>."
 
-#: C/filechooserdialog.vala.page:26(p)
+#: C/toolbar_builder.py.page:85(item/p) C/toolbar_builder.vala.page:69(item/p)
 msgid ""
-"This example demonstrates how the FileChooserDialog can be used. It is "
-"incorporated into a very simple text editor application. All the <link xref="
-"\"menubar.vala#win-app\">actions</link>, including the \"open\", \"save\" "
-"and \"save-as\" commands can be found in the <link xref=\"gmenu.vala\">app-"
-"menu</link>. Here, the app-menu is created using an XML UI file, which is "
-"then imported into the application using Gtk.Builder."
+"Select the <gui>New</gui> Stock Id from the drop down menu, or type "
+"<input>gtk-new</input>."
 msgstr ""
+"Seleccione o Id de inventario <gui>New</gui> desde o menú despregábel, ou o "
+"tipo <input>gtk-new</input>."
 
-#: C/filechooserdialog.vala.page:28(title)
-msgid "XML UI file which creates the app-menu"
+#: C/toolbar_builder.py.page:87(item/p) C/toolbar_builder.vala.page:71(item/p)
+msgid ""
+"Repeat the above steps for the remaining ToolButtons, with the following "
+"properties:"
 msgstr ""
+"Repita os pasos de arriba cos TollButtons que faltan, coas seguintes "
+"propiedades:"
+
+#: C/toolbar_builder.py.page:94(td/p) C/toolbar_builder.vala.page:78(td/p)
+msgid "Is important"
+msgstr "É importante"
 
-#: C/filechooserdialog.vala.page:31(title)
+#: C/toolbar_builder.py.page:95(td/p) C/toolbar_builder.vala.page:79(td/p)
 #, fuzzy
-#| msgid "Sample Vala code"
-msgid "Vala Code"
-msgstr "Exemplo de código en Vala"
+#| msgid "action name"
+msgid "Action name"
+msgstr "nome da acción"
 
-#: C/filechooserdialog.vala.page:39(link)
-msgid "FileChooser"
-msgstr ""
+#: C/toolbar_builder.py.page:97(td/p) C/toolbar_builder.vala.page:81(td/p)
+msgid "Stock Id"
+msgstr "ID de inventario"
 
-#: C/filechooserdialog.vala.page:42(link)
-msgid "GLib.ActionEntry"
-msgstr ""
+#: C/toolbar_builder.py.page:102(td/p) C/toolbar_builder.vala.page:86(td/p)
+msgid "open_button"
+msgstr "open_button"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/filechooserdialog.py.page:24(None)
-#, fuzzy
-#| msgid ""
-#| "@@image: 'media/messagedialog.png'; md5=7cca8bbffdce01233e13624bbfb7e294"
-msgid ""
-"@@image: 'media/filechooserdialog_save.png'; "
-"md5=3a7a3b71b9d3a36066857843b68ff27f"
-msgstr ""
-"@@image: 'media/messagedialog.png'; md5=7cca8bbffdce01233e13624bbfb7e294"
+#: C/toolbar_builder.py.page:103(td/p) C/toolbar_builder.py.page:110(td/p)
+#: C/toolbar_builder.py.page:117(td/p) C/toolbar_builder.py.page:124(td/p)
+#: C/toolbar_builder.vala.page:87(td/p) C/toolbar_builder.vala.page:94(td/p)
+#: C/toolbar_builder.vala.page:101(td/p) C/toolbar_builder.vala.page:108(td/p)
+msgid "Yes"
+msgstr "Si"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/filechooserdialog.py.page:26(None)
-#, fuzzy
-#| msgid ""
-#| "@@image: 'media/messagedialog.png'; md5=7cca8bbffdce01233e13624bbfb7e294"
-msgid ""
-"@@image: 'media/filechooserdialog_menu.png'; "
-"md5=8a75f04127a70eba0ed68a9eb1d3bbca"
-msgstr ""
-"@@image: 'media/messagedialog.png'; md5=7cca8bbffdce01233e13624bbfb7e294"
+#: C/toolbar_builder.py.page:104(td/p) C/toolbar_builder.vala.page:88(td/p)
+msgid "app.open"
+msgstr "app.open"
+
+#: C/toolbar_builder.py.page:105(td/p) C/toolbar_builder.vala.page:89(td/p)
+msgid "Open"
+msgstr "Open"
+
+#: C/toolbar_builder.py.page:106(td/p) C/toolbar_builder.vala.page:90(td/p)
+msgid "gtk-open"
+msgstr "gtk-open"
+
+#: C/toolbar_builder.py.page:109(td/p) C/toolbar_builder.vala.page:93(td/p)
+msgid "undo_button"
+msgstr "undo_button"
+
+#: C/toolbar_builder.py.page:111(td/p) C/toolbar_builder.vala.page:95(td/p)
+msgid "win.undo"
+msgstr "win.undo"
+
+#: C/toolbar_builder.py.page:112(td/p) C/toolbar_builder.vala.page:96(td/p)
+msgid "Undo"
+msgstr "Desfacer"
+
+#: C/toolbar_builder.py.page:113(td/p) C/toolbar_builder.vala.page:97(td/p)
+msgid "gtk-undo"
+msgstr "gtk-undo"
+
+#: C/toolbar_builder.py.page:116(td/p) C/toolbar_builder.vala.page:100(td/p)
+msgid "fullscreen_button"
+msgstr "fullscreen_button"
 
-#: C/filechooserdialog.py.page:7(title)
-msgid "FileChooserDialog (Python)"
-msgstr ""
+#: C/toolbar_builder.py.page:118(td/p) C/toolbar_builder.py.page:125(td/p)
+#: C/toolbar_builder.vala.page:102(td/p) C/toolbar_builder.vala.page:109(td/p)
+msgid "win.fullscreen"
+msgstr "win.fullscreen"
 
-#: C/filechooserdialog.py.page:20(desc)
-msgid "A dialog suitable for \"Open\" and \"Save\" commands"
-msgstr ""
+#: C/toolbar_builder.py.page:119(td/p) C/toolbar_builder.vala.page:103(td/p)
+msgid "Fullscreen"
+msgstr "Pantalla completa"
 
-#: C/filechooserdialog.py.page:25(p)
-msgid ""
-"This FileChooserDialog saves a text document, which can be opened or written "
-"from scratch in a TextView (see below)."
-msgstr ""
+#: C/toolbar_builder.py.page:120(td/p) C/toolbar_builder.vala.page:104(td/p)
+msgid "gtk-fullscreen"
+msgstr "gtk-fullscreen"
 
-#: C/filechooserdialog.py.page:27(p)
-msgid "It is also possible to call a FileChooserDialog to open a new document."
-msgstr ""
+#: C/toolbar_builder.py.page:123(td/p) C/toolbar_builder.vala.page:107(td/p)
+msgid "leave_fullscreen_button"
+msgstr "leave_fullscreen_button"
 
-#: C/filechooserdialog.py.page:32(title)
-msgid "Steps to recreate the example"
-msgstr ""
+#: C/toolbar_builder.py.page:126(td/p) C/toolbar_builder.vala.page:110(td/p)
+msgid "Leave Fullscreen"
+msgstr "Saír do modo de pantalla completa"
 
-#: C/filechooserdialog.py.page:34(p)
-msgid ""
-"Create a file .ui to describe an app-menu with items \"New\", \"Open\", "
-"\"Save\", \"Save as\", and \"Quit\". This can be done with Glade or in a "
-"text editor. See <link xref=\"#xml\"/>"
-msgstr ""
+#: C/toolbar_builder.py.page:127(td/p) C/toolbar_builder.vala.page:111(td/p)
+msgid "gtk-leave-fullscreen"
+msgstr "gtk-leave-fullscreen"
+
+#: C/toolbar_builder.py.page:136(item/p)
+#: C/toolbar_builder.vala.page:120(item/p)
+msgid "Close the <gui>Tool Bar Editor</gui>."
+msgstr "Pechar o <gui>Editor de barra de ferramentas</gui>."
 
-#: C/filechooserdialog.py.page:35(p)
+#: C/toolbar_builder.py.page:139(item/p)
 msgid ""
-"Create a Python program for a Gtk.TextView with a Gtk.Buffer <code>self."
-"buffer</code>, and a <code>self.file</code> which will be a Gio.File and we "
-"set initially as <code>None</code>."
+"When our program will first start, we do not want the <gui>Leave Fullscreen</"
+"gui> ToolButton to be visible, since the application will not be in "
+"fullscreen mode. You can set this in the <gui>Common</gui> tab, by clicking "
+"the <gui>Visible</gui> property to <gui>No</gui>. The ToolButton will still "
+"appear in the interface designer, but will behave correctly when the file is "
+"loaded into your program code. Note that the method <code>show_all()</code> "
+"would override this setting - so in the code we have to use <code>show()</"
+"code> separately on all the elements."
 msgstr ""
 
-#: C/filechooserdialog.py.page:36(p)
+#: C/toolbar_builder.py.page:140(item/p)
+#: C/toolbar_builder.vala.page:124(item/p)
 msgid ""
-"In this program, create also the actions corresponding to the items in the "
-"app-menu, connect them to callback functions, and import the menu in the "
-"<code>do_startup()</code> method with a Gtk.Builder."
+"<media type=\"image\" src=\"media/glade_visible_no.png\"> Setting the "
+"visible property to No </media>"
 msgstr ""
 
-#: C/filechooserdialog.py.page:37(p)
+#: C/toolbar_builder.py.page:145(item/p)
+#: C/toolbar_builder.vala.page:129(item/p)
+msgid "Save your work, and close Glade."
+msgstr "Garde o seu traballo e saia de Glade."
+
+#: C/toolbar_builder.py.page:148(item/p)
+#: C/toolbar_builder.vala.page:132(item/p)
 msgid ""
-"\"New\" and \"Quit\" actions and callback functions are quite "
-"straightforward, see <link xref=\"#code\"/>."
+"The XML file created by Glade is shown below. This is the description of the "
+"toolbar. At the time of this writing, the option to add the class Gtk."
+"STYLE_CLASS_PRIMARY_TOOLBAR in the Glade Interface did not exist. We can "
+"manually add this to the XML file. To do this, add the following XML code at "
+"line 9 of <file>toolbar_builder.ui</file>:"
 msgstr ""
 
-#: C/filechooserdialog.py.page:38(p)
+#: C/toolbar_builder.py.page:149(item/code)
+#: C/toolbar_builder.vala.page:133(item/code)
+#, no-wrap
 msgid ""
-"\"Open\" callback should create and open a Gtk.FileChooserDialog for \"Open"
-"\", connected with another callback function for each of the two \"Open\" "
-"and \"Cancel\" buttons of the FileChooserDialog."
+"\n"
+"  &lt;style&gt;\n"
+"     &lt;class name=\"primary-toolbar\"/&gt;\n"
+"  &lt;/style&gt;\n"
+"  "
 msgstr ""
 
-#: C/filechooserdialog.py.page:39(p)
+#: C/toolbar_builder.py.page:154(item/p)
+#: C/toolbar_builder.vala.page:138(item/p)
 msgid ""
-"\"Save as\" works basically as \"Open\", but the callback function of the "
-"\"Save\" button depends on a more complex method <code>save_to_file()</code>."
+"If you do not add this, the program will still work fine. The resulting "
+"toolbar will however look slightly different then the screenshot at the top "
+"of this page."
 msgstr ""
+"Se non engade isto, o programa funcionará igual. Porén barra de ferramentas "
+"resultante semellará un pouco diferente á captura de pantalla da parte "
+"superior desta páxina."
 
-#: C/filechooserdialog.py.page:40(p)
+#: C/toolbar_builder.py.page:157(section/code)
+#: C/toolbar_builder.vala.page:141(page/code)
+#, no-wrap
 msgid ""
-"\"Save\" can be reduced to the case where the file is <code>None</code>, "
-"that is the case where <code>self.file</code> is a new file, which in turn "
-"is the case \"Save as\"; and to the case where the file is not <code>None</"
-"code>, which in turn is reduced to <code>save_to_file()</code>."
+"&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n"
+"&lt;interface&gt;\n"
+"  &lt;!-- interface-requires gtk+ 3.0 --&gt;\n"
+"  &lt;object class=\"GtkToolbar\" id=\"toolbar\"&gt;\n"
+"    &lt;property name=\"visible\"&gt;True&lt;/property&gt;\n"
+"    &lt;property name=\"can_focus\"&gt;False&lt;/property&gt;\n"
+"    &lt;property name=\"hexpand\"&gt;True&lt;/property&gt;\n"
+"    &lt;property name=\"show_arrow\"&gt;False&lt;/property&gt;\n"
+"    &lt;child&gt;\n"
+"      &lt;object class=\"GtkToolButton\" id=\"new_button\"&gt;\n"
+"        &lt;property name=\"use_action_appearance\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"visible\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"can_focus\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"use_action_appearance\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"is_important\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"action_name\"&gt;app.new&lt;/property&gt;\n"
+"        &lt;property name=\"label\" translatable=\"yes\"&gt;New&lt;/property&gt;\n"
+"        &lt;property name=\"use_underline\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"stock_id\"&gt;gtk-new&lt;/property&gt;\n"
+"      &lt;/object&gt;\n"
+"      &lt;packing&gt;\n"
+"        &lt;property name=\"expand\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"homogeneous\"&gt;True&lt;/property&gt;\n"
+"      &lt;/packing&gt;\n"
+"    &lt;/child&gt;\n"
+"    &lt;child&gt;\n"
+"      &lt;object class=\"GtkToolButton\" id=\"open_button\"&gt;\n"
+"        &lt;property name=\"use_action_appearance\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"visible\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"can_focus\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"use_action_appearance\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"is_important\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"action_name\"&gt;app.open&lt;/property&gt;\n"
+"        &lt;property name=\"label\" translatable=\"yes\"&gt;Open&lt;/property&gt;\n"
+"        &lt;property name=\"use_underline\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"stock_id\"&gt;gtk-open&lt;/property&gt;\n"
+"      &lt;/object&gt;\n"
+"      &lt;packing&gt;\n"
+"        &lt;property name=\"expand\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"homogeneous\"&gt;True&lt;/property&gt;\n"
+"      &lt;/packing&gt;\n"
+"    &lt;/child&gt;\n"
+"    &lt;child&gt;\n"
+"      &lt;object class=\"GtkToolButton\" id=\"undo_button\"&gt;\n"
+"        &lt;property name=\"use_action_appearance\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"visible\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"can_focus\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"use_action_appearance\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"is_important\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"action_name\"&gt;win.undo&lt;/property&gt;\n"
+"        &lt;property name=\"label\" translatable=\"yes\"&gt;Undo&lt;/property&gt;\n"
+"        &lt;property name=\"use_underline\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"stock_id\"&gt;gtk-undo&lt;/property&gt;\n"
+"      &lt;/object&gt;\n"
+"      &lt;packing&gt;\n"
+"        &lt;property name=\"expand\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"homogeneous\"&gt;True&lt;/property&gt;\n"
+"      &lt;/packing&gt;\n"
+"    &lt;/child&gt;\n"
+"    &lt;child&gt;\n"
+"      &lt;object class=\"GtkToolButton\" id=\"fullscreen_button\"&gt;\n"
+"        &lt;property name=\"use_action_appearance\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"visible\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"can_focus\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"use_action_appearance\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"is_important\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"action_name\"&gt;win.fullscreen&lt;/property&gt;\n"
+"        &lt;property name=\"label\" translatable=\"yes\"&gt;Fullscreen&lt;/property&gt;\n"
+"        &lt;property name=\"use_underline\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"stock_id\"&gt;gtk-fullscreen&lt;/property&gt;\n"
+"      &lt;/object&gt;\n"
+"      &lt;packing&gt;\n"
+"        &lt;property name=\"expand\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"homogeneous\"&gt;True&lt;/property&gt;\n"
+"      &lt;/packing&gt;\n"
+"    &lt;/child&gt;\n"
+"    &lt;child&gt;\n"
+"      &lt;object class=\"GtkToolButton\" id=\"leave_fullscreen_button\"&gt;\n"
+"        &lt;property name=\"use_action_appearance\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"can_focus\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"use_action_appearance\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"is_important\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"action_name\"&gt;win.fullscreen&lt;/property&gt;\n"
+"        &lt;property name=\"label\" translatable=\"yes\"&gt;Leave Fullscreen&lt;/property&gt;\n"
+"        &lt;property name=\"use_underline\"&gt;True&lt;/property&gt;\n"
+"        &lt;property name=\"stock_id\"&gt;gtk-leave-fullscreen&lt;/property&gt;\n"
+"      &lt;/object&gt;\n"
+"      &lt;packing&gt;\n"
+"        &lt;property name=\"expand\"&gt;False&lt;/property&gt;\n"
+"        &lt;property name=\"homogeneous\"&gt;True&lt;/property&gt;\n"
+"      &lt;/packing&gt;\n"
+"    &lt;/child&gt;\n"
+"  &lt;/object&gt;\n"
+"&lt;/interface&gt;\n"
+msgstr ""
+
+#: C/toolbar_builder.py.page:164(section/p)
+#: C/toolbar_builder.vala.page:143(page/p)
+msgid ""
+"We now create the code below, which adds the toolbar from the file we just "
+"created."
 msgstr ""
+"Agora crearemos o código de embaixo, que engade a barra de ferrametnas desde "
+"o ficheiro que creamos."
 
-#: C/filechooserdialog.py.page:41(p)
+#: C/toolbar_builder.py.page:165(section/code)
+#, no-wrap
 msgid ""
-"Finally, the method <code>save_to_file()</code>: see <link xref=\"#code\"/>, "
-"lines 146 - 175."
+"from gi.repository import Gtk\n"
+"from gi.repository import Gdk\n"
+"from gi.repository import Gio\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Toolbar Example\", application=app)\n"
+"        self.set_default_size(400, 200)\n"
+"\n"
+"        # a grid to attach the toolbar (see below)\n"
+"        grid = Gtk.Grid()\n"
+"        self.add(grid)\n"
+"        # we have to show the grid (and therefore the toolbar) with show(),\n"
+"        # as show_all() would show also the buttons in the toolbar that we want to\n"
+"        # be hidden (such as the leave_fullscreen button)\n"
+"        grid.show()\n"
+"\n"
+"        # a builder to add the UI designed with Glade to the grid:\n"
+"        builder = Gtk.Builder()\n"
+"        # get the file (if it is there)\n"
+"        try:\n"
+"            builder.add_from_file(\"toolbar_builder.ui\")\n"
+"        except:\n"
+"            print \"file not found\"\n"
+"            sys.exit()\n"
+"        # and attach it to the grid\n"
+"        grid.attach(builder.get_object(\"toolbar\"), 0, 0, 1, 1)\n"
+"\n"
+"        # two buttons that will be used later in a method\n"
+"        self.fullscreen_button = builder.get_object(\"fullscreen_button\")\n"
+"        self.leave_fullscreen_button = builder.get_object(\"leave_fullscreen_button\")\n"
+"\n"
+"        # create the actions that control the window, connect their signal to a\n"
+"        # callback method (see below), add the action to the window:\n"
+"\n"
+"        # undo\n"
+"        undo_action = Gio.SimpleAction.new(\"undo\", None)\n"
+"        undo_action.connect(\"activate\", self.undo_callback)\n"
+"        self.add_action(undo_action)\n"
+"\n"
+"        # and fullscreen\n"
+"        fullscreen_action = Gio.SimpleAction.new(\"fullscreen\", None)\n"
+"        fullscreen_action.connect(\"activate\", self.fullscreen_callback)\n"
+"        self.add_action(fullscreen_action)\n"
+"\n"
+"    # callback for undo\n"
+"    def undo_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"Undo\\\".\"\n"
+"\n"
+"    # callback for fullscreen\n"
+"    def fullscreen_callback(self, action, parameter):\n"
+"        # check if the state is the same as Gdk.WindowState.FULLSCREEN, which is a bit flag\n"
+"        is_fullscreen = self.get_window().get_state() &amp; Gdk.WindowState.FULLSCREEN != 0\n"
+"        if is_fullscreen:\n"
+"            self.unfullscreen()\n"
+"            self.leave_fullscreen_button.hide()\n"
+"            self.fullscreen_button.show()\n"
+"        else:\n"
+"            self.fullscreen()\n"
+"            self.fullscreen_button.hide()\n"
+"            self.leave_fullscreen_button.show()\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        # show the window - with show() not show_all() because that would show also\n"
+"        # the leave_fullscreen button\n"
+"        win.show()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"        # actions that control the application: create, connect their signal to a\n"
+"        # callback method (see below), add the action to the application\n"
+"\n"
+"        # new\n"
+"        new_action = Gio.SimpleAction.new(\"new\", None)\n"
+"        new_action.connect(\"activate\", self.new_callback)\n"
+"        app.add_action(new_action)\n"
+"\n"
+"        # open\n"
+"        open_action = Gio.SimpleAction.new(\"open\", None)\n"
+"        open_action.connect(\"activate\", self.open_callback)\n"
+"        app.add_action(open_action)\n"
+"\n"
+"    # callback for new\n"
+"    def new_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"New\\\".\"\n"
+"\n"
+"    # callback for open\n"
+"    def open_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"Open\\\".\"\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/filechooserdialog.py.page:46(title)
-msgid "XML file which creates the app-menu"
-msgstr ""
+#: C/toolbar_builder.py.page:170(section/title)
+msgid "Useful methods for Gtk.Builder"
+msgstr "Métodos útiles para Gtk.Builder"
 
-#: C/filechooserdialog.py.page:56(title)
-msgid "Useful methods for a FileChooserDialog"
+#: C/toolbar_builder.py.page:171(section/p)
+msgid ""
+"For the useful methods for a Toolbar widget, see <link xref=\"toolbar.py\"/>"
 msgstr ""
+"Para os métodos útiles para o widget Toolbar, vexa <link xref=\"toolbar.py\"/"
+">"
 
-#: C/filechooserdialog.py.page:57(p)
-msgid ""
-"Note that the action of the FileChooserDialog can be one of the following: "
-"<code>Gtk.FileChooserAction.OPEN</code> (the file chooser will only let the "
-"user pick an existing file) <code>Gtk.FileChooserAction.SAVE</code> (the "
-"file chooser will let the user pick an existing file, or type in a new "
-"filename), <code>Gtk.FileChooserAction.SELECT_FOLDER</code> (the file "
-"chooser will let the user pick an existing folder), <code>Gtk."
-"FileChooserAction.CREATE_FOLDER</code> (the file chooser will let the user "
-"name an existing or new folder)."
+#: C/toolbar_builder.py.page:173(section/p)
+msgid "Gtk.Builder builds an interface from an XML UI definition."
 msgstr ""
+"Gtk.Builder constrúe unha interface desde unha definición de IU en XML."
 
-#: C/filechooserdialog.py.page:58(p)
-msgid "Besides the methods used in the <link xref=\"#code\"/>, we have:"
+#: C/toolbar_builder.py.page:176(item/p)
+msgid ""
+"<code>add_from_file(filename)</code> loads and parses the given file and "
+"merges it with the current contents of the Gtk.Builder."
 msgstr ""
+"<code>add_from_file(nomedeficheiro)</code> carga e analiza o ficheiro "
+"fornecido e combínao cos contidos actuais de Gtk.Builder."
 
-#: C/filechooserdialog.py.page:60(p)
+#: C/toolbar_builder.py.page:177(item/p)
 msgid ""
-"<code>set_show_hidden(True)</code> is used to display hidden files and "
-"folders."
+"<code>add_from_string(string)</code> parses the given string and merges it "
+"with the current contents of the Gtk.Builder."
 msgstr ""
 
-#: C/filechooserdialog.py.page:61(p)
+#: C/toolbar_builder.py.page:178(item/p)
 msgid ""
-"<code>set_select_multiple(True)</code> sets that multiple files can be "
-"selected. This is only relevant if the mode is <code>Gtk.FileChooserAction."
-"OPEN</code> or <code>Gtk.FileChooserAction.SELECT_FOLDER</code>."
+"<code>add_objects_from_file(filename, object_ids)</code> is the same as "
+"<code>add_from_file()</code>, but it loads only the objects with the ids "
+"given in the <code>object_id</code>s list."
 msgstr ""
 
-#: C/filechooserdialog.py.page:62(p)
+#: C/toolbar_builder.py.page:179(item/p)
 msgid ""
-"In a \"Save as\" dialog, <code>set_current_name(current_name)</code> sets "
-"<code>current_name</code> in the file selector, as if entered by the user; "
-"<code>current_name</code> can be something like <em>Untitled.txt</em>. This "
-"method should not be used except in a \"Save as\" dialog."
+"<code>add_objects_from_string(filename, object_ids)</code> is the same as "
+"<code>add_from_string()</code>, but it loads only the objects with the ids "
+"given in the <code>object_id</code>s list."
 msgstr ""
 
-#: C/filechooserdialog.py.page:63(p)
+#: C/toolbar_builder.py.page:180(item/p)
 msgid ""
-"The default current folder is \"recent items\". To set another folder use "
-"<code>set_current_folder_uri(uri)</code>; but note you should use this "
-"method and cause the file chooser to show a specific folder only when you "
-"are doing a \"Save as\" command and you already have a file saved somewhere."
+"<code>get_object(object_id)</code> retrieves the widget with the id "
+"<code>object_id</code> from the loaded objects in the builder."
 msgstr ""
 
-#: C/filechooserdialog.py.page:71(link)
-#, fuzzy
-#| msgid "Gtk.MessageDialog"
-msgid "GtkFileChooserDialog"
-msgstr "Gtk.MessageDialog"
+#: C/toolbar_builder.py.page:181(item/p)
+msgid "<code>get_objects()</code> returns all loaded objects."
+msgstr "<code>get_objects()</code> devolve todos os obxectos cargados."
 
-#: C/filechooserdialog.py.page:72(link)
-msgid "GtkFileChooser"
+#: C/toolbar_builder.py.page:182(item/p)
+msgid ""
+"<code>connect_signals(handler_object)</code> connects the signals to the "
+"methods given in the <code>handler_object</code>. This can be any object "
+"which contains keys or attributes that are called like the signal handler "
+"names given in the interface description, e.g. a class or a dict."
 msgstr ""
 
-#: C/filechooserdialog.py.page:77(link)
-msgid "GFile"
+#: C/toolbar_builder.py.page:197(item/p)
+msgid ""
+"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/builder.";
+"html\">The Python Gtk+ 3 Tutorial - Glade and Gtk.Builder</link>"
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/entry.vala.page:21(None) C/entry.py.page:26(None)
-#: C/entry.js.page:21(None) C/entry.c.page:22(None)
+#: C/toolbar_builder.vala.page:7(info/title)
 #, fuzzy
-#| msgid "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
-msgid "@@image: 'media/entry.png'; md5=8a828cffdcbaa4bad83342e109f28cc8"
-msgstr "@@image: 'media/entry.png'; md5=331ecfe7088f492f099d253d19984d73"
-
-#: C/entry.vala.page:7(title)
-msgid "Entry (Vala)"
-msgstr ""
-
-#: C/entry.vala.page:17(desc) C/entry.py.page:22(desc) C/entry.c.page:17(desc)
-msgid "A single line text entry field"
-msgstr ""
+#| msgid "Toolbar created using Glade (Vala)"
+msgctxt "text"
+msgid "Toolbar created using Glade (Vala)"
+msgstr "Barra de ferramentas creada empregando Glade (Vala)"
 
-#: C/entry.vala.page:20(title) C/entry.py.page:25(title)
-#: C/entry.js.page:20(title) C/entry.c.page:20(title)
-msgid "Entry"
+#: C/toolbar_builder.vala.page:25(page/p)
+msgid ""
+"This example is similar to <link xref=\"toolbar.vala\"/>, except we use "
+"Glade to create the toolbar in an XML ui file."
 msgstr ""
 
-#: C/entry.vala.page:22(p) C/entry.c.page:23(p)
-msgid "This application greets you in the terminal."
+#: C/toolbar_builder.vala.page:123(item/p)
+msgid ""
+"When our program will first start, we don't want the <gui>Leave Fullscreen</"
+"gui> ToolButton to be visible, since the application will not be in "
+"fullscreen mode. You can set this in the <gui>Common</gui> tab, by clicking "
+"the <gui>Visible</gui> property to <gui>No</gui>. The ToolButton will still "
+"appear in the interface designer, but will behave correctly when the file is "
+"loaded into your program code."
 msgstr ""
 
-#: C/entry.vala.page:29(link) C/entry.js.page:31(link)
-msgid "Gtk.Entry"
+#: C/toolbar_builder.vala.page:144(page/code)
+#, no-wrap
+msgid ""
+"/* This is the Window */\n"
+"class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\t/* Declare these two ToolButtons, as we will get them\n"
+"\t * from the ui file (see lines 32 and 33), so we can\n"
+"\t * hide() and show() them as needed.*/\n"
+"\tGtk.ToolButton fullscreen_button;\n"
+"\tGtk.ToolButton leave_fullscreen_button;\n"
+"\n"
+"\t/* Contstructor */\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"Toolbar Example\");\n"
+"\n"
+"\t\tthis.set_default_size (400, 200);\n"
+"\t\tvar grid = new Gtk.Grid ();\n"
+"\t\tthis.add (grid);\n"
+"\t\tgrid.show ();\n"
+"\n"
+"\t\t/* add the toolbar from the ui file */\n"
+"\t\tvar builder = new Gtk.Builder ();\n"
+"\t\ttry {\n"
+"\t\t\tbuilder.add_from_file (\"toolbar_builder.ui\");\n"
+"\t\t}\n"
+"\t\t/* Handle the exception */\n"
+"\t\tcatch (Error e) {\n"
+"\t\t\terror (\"Unable to load file: %s\", e.message);\n"
+"\t\t}\n"
+"\n"
+"\t\tgrid.attach (builder.get_object (\"toolbar\") as Gtk.Toolbar, 0, 0, 1, 1);\n"
+"\n"
+"\t\t/* get these objects from the ui file so we can toggle between them */\n"
+"\t\tfullscreen_button = builder.get_object (\"fullscreen_button\") as Gtk.ToolButton;\n"
+"\t\tleave_fullscreen_button = builder.get_object (\"leave_fullscreen_button\") as Gtk.ToolButton;\n"
+"\n"
+"\t\t/* create the \"undo\" window action action */\n"
+"\t\tvar undo_action = new SimpleAction (\"undo\", null);\n"
+"\t\tundo_action.activate.connect (undo_callback);\n"
+"\t\tthis.add_action (undo_action);\n"
+"\n"
+"\t\t/* create the \"fullscreen\" window action */\n"
+"\t\tvar fullscreen_action = new SimpleAction (\"fullscreen\", null);\n"
+"\t\tfullscreen_action.activate.connect (fullscreen_callback);\n"
+"\t\tthis.add_action (fullscreen_action);\n"
+"\t}\n"
+"\n"
+"\tvoid undo_callback (SimpleAction simple, Variant? parameter) {\n"
+"\t\t\tprint (\"You clicked \\\"Undo\\\".\\n\");\n"
+"\t}\n"
+"\n"
+"\tvoid fullscreen_callback (SimpleAction simple, Variant? parameter) {\n"
+"\t\tif ((this.get_window ().get_state () &amp; Gdk.WindowState.FULLSCREEN) != 0) {\n"
+"\t\t\tthis.unfullscreen ();\n"
+"\t\t\tleave_fullscreen_button.hide ();\n"
+"\t\t\tfullscreen_button.show ();\n"
+"\t\t}\n"
+"\t\telse {\n"
+"\t\t\tthis.fullscreen ();\n"
+"\t\t\tfullscreen_button.hide ();\n"
+"\t\t\tleave_fullscreen_button.show ();\n"
+"\t\t}\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* This is the application */\n"
+"class MyApplication : Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\t\tnew MyWindow (this).show ();\n"
+"\t}\n"
+"\n"
+"\tprotected override void startup () {\n"
+"\t\tbase.startup ();\n"
+"\n"
+"\t\t/* Create the \"new\" action and add it to the app*/\n"
+"\t\tvar new_action = new SimpleAction (\"new\", null);\n"
+"\t\tnew_action.activate.connect (new_callback);\n"
+"\t\tthis.add_action (new_action);\n"
+"\n"
+"\t\t/* Create the \"open\" action, and add it to the app */\n"
+"\t\tvar open_action = new SimpleAction (\"open\", null);\n"
+"\t\topen_action.activate.connect (open_callback);\n"
+"\t\tthis.add_action (open_action);\n"
+"\n"
+"\t\t/* You could also add the action to the app menu\n"
+"\t\t * if you wanted to.\n"
+"\t\t */\n"
+"\t\t//var menu = new Menu ();\n"
+"\t\t//menu.append (\"New\", \"app.new\");\n"
+"\t\t//this.app_menu = menu;\n"
+"\t}\n"
+"\n"
+"\tvoid new_callback (SimpleAction action, Variant? parameter) {\n"
+"\t\tprint (\"You clicked \\\"New\\\".\\n\");\n"
+"\t}\n"
+"\n"
+"\tvoid open_callback (SimpleAction action, Variant? parameter) {\n"
+"\t\t\tprint (\"You clicked \\\"Open\\\".\\n\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* The main function creates the application and runs it. */\n"
+"int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/entry.py.page:7(title)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/tooltip.py.page:22(media)
 #, fuzzy
-#| msgid "Python"
-msgid "Entry (Python)"
-msgstr "Python"
+#| msgid "@@image: 'media/tooltip.png'; md5=6950da5f4444aa941ecc2f0fc5951d52"
+msgctxt "_"
+msgid "external ref='media/tooltip.png' md5='6950da5f4444aa941ecc2f0fc5951d52'"
+msgstr "@@image: 'media/tooltip.png'; md5=6950da5f4444aa941ecc2f0fc5951d52"
 
-#: C/entry.py.page:27(p)
-msgid "This application greets you in the terminal with the name you provide."
-msgstr ""
+#: C/tooltip.py.page:18(info/desc)
+msgid "Add tips to your widgets"
+msgstr "Engadir consellos aos seus widgets"
 
-#: C/entry.py.page:37(title)
-msgid "Useful methods for an Entry widget"
+#: C/tooltip.py.page:21(page/title) C/tutorial.py.page:122(steps/title)
+msgid "Tooltip"
+msgstr "Consello"
+
+#: C/tooltip.py.page:23(page/p)
+msgid "A toolbar with a tooltip (with an image) for a button."
 msgstr ""
 
-#: C/entry.py.page:38(p)
+#: C/tooltip.py.page:29(section/code)
+#, no-wrap
 msgid ""
-"For an explanation of signals and callback functions, see <link xref="
-"\"signals-callbacks.py\">this page</link>. Some of the signals that a Gtk."
-"Entry widget can emit are: <code>\"activate\"</code> (emitted when the user "
-"activates the Entry key); <code>\"backspace\"</code> (emitted when the user "
-"activates the Backspace or Shift-Backspace keys); <code>\"copy-clipboard\"</"
-"code> (Ctrl-c and Ctrl-Insert); <code>\"paste-clipboard\"</code> (Ctrl-v and "
-"Shift-Insert); <code>\"delete-from-cursor\"</code> (Delete, for deleting a "
-"character; Ctrl-Delete, for deleting a word); <code>\"icon-press\"</code> "
-"(emitted when the user clicks an activable icon); <code>\"icon-release\"</"
-"code> (emitted on the button release from a mouse click over an activable "
-"icon); <code>\"insert-at-cursor\"</code> (emitted when the user initiates "
-"the insertion of a fixed string at the cursor); <code>\"move-cursor\"</code> "
-"(emitted when the user initiates a cursor movement); <code>\"populate-popup"
-"\"</code> (emitted before showing the context menu of the entry; it can be "
-"used to add items to it)."
+"from gi.repository import Gtk\n"
+"from gi.repository import Gdk\n"
+"from gi.repository import Gio\n"
+"import sys\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Toolbar with Tooltips Example\", application=app)\n"
+"        self.set_default_size(400, 200)\n"
+"\n"
+"        grid = Gtk.Grid()\n"
+"\n"
+"        toolbar = self.create_toolbar()\n"
+"        toolbar.set_hexpand(True)\n"
+"        toolbar.show()\n"
+"\n"
+"        grid.attach(toolbar, 0, 0, 1, 1)\n"
+"\n"
+"        self.add(grid)\n"
+"\n"
+"        undo_action = Gio.SimpleAction.new(\"undo\", None)\n"
+"        undo_action.connect(\"activate\", self.undo_callback)\n"
+"        self.add_action(undo_action)\n"
+"\n"
+"        fullscreen_action = Gio.SimpleAction.new(\"fullscreen\", None)\n"
+"        fullscreen_action.connect(\"activate\", self.fullscreen_callback)\n"
+"        self.add_action(fullscreen_action)\n"
+"\n"
+"    def create_toolbar(self):\n"
+"        toolbar = Gtk.Toolbar()\n"
+"        toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR);\n"
+"\n"
+"        # button for the \"new\" action\n"
+"        new_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_NEW)\n"
+"        # with a tooltip with a given text        \n"
+"        new_button.set_tooltip_text(\"Create a new file\")\n"
+"        new_button.set_is_important(True)\n"
+"        toolbar.insert(new_button, 0)\n"
+"        new_button.show()\n"
+"        new_button.set_action_name(\"app.new\")\n"
+"\n"
+"        # button for the \"open\" action\n"
+"        open_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_OPEN)\n"
+"        # with a tooltip with a given text in the Pango markup language        \n"
+"        open_button.set_tooltip_markup(\"Open an &lt;i&gt;existing&lt;/i&gt; file\")\n"
+"        open_button.set_is_important(True)\n"
+"        toolbar.insert(open_button, 1)\n"
+"        open_button.show()\n"
+"        open_button.set_action_name(\"app.open\")\n"
+"\n"
+"        # button for the \"undo\" action\n"
+"        undo_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_UNDO)\n"
+"        # with a tooltip with an image\n"
+"        # set True the property \"has-tooltip\"        \n"
+"        undo_button.set_property(\"has-tooltip\", True)\n"
+"        # connect to the callback function that for the tooltip\n"
+"        # with the signal \"query-tooltip\"\n"
+"        undo_button.connect(\"query-tooltip\", self.undo_tooltip_callback)\n"
+"        undo_button.set_is_important(True)\n"
+"        toolbar.insert(undo_button, 2)\n"
+"        undo_button.show()\n"
+"        undo_button.set_action_name(\"win.undo\")\n"
+"\n"
+"        # button for the \"fullscreen/leave fullscreen\" action\n"
+"        self.fullscreen_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_FULLSCREEN)\n"
+"        self.fullscreen_button.set_is_important(True)\n"
+"        toolbar.insert(self.fullscreen_button, 3)\n"
+"        self.fullscreen_button.set_action_name(\"win.fullscreen\")\n"
+"\n"
+"        return toolbar\n"
+"\n"
+"    # the callback function for the tooltip of the \"undo\" button\n"
+"    def undo_tooltip_callback(self, widget, x, y, keyboard_mode, tooltip):\n"
+"        # set the text for the tooltip\n"
+"        tooltip.set_text(\"Undo your last action\")\n"
+"        # set an icon fot the tooltip\n"
+"        tooltip.set_icon_from_stock(\"gtk-undo\", Gtk.IconSize.MENU)\n"
+"        # show the tooltip\n"
+"        return True\n"
+"\n"
+"    def undo_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"Undo\\\".\"\n"
+"\n"
+"    def fullscreen_callback(self, action, parameter):\n"
+"        is_fullscreen = self.get_window().get_state() &amp; Gdk.WindowState.FULLSCREEN != 0\n"
+"        if not is_fullscreen:\n"
+"            self.fullscreen_button.set_stock_id(Gtk.STOCK_LEAVE_FULLSCREEN)\n"
+"            self.fullscreen()\n"
+"        else:\n"
+"            self.fullscreen_button.set_stock_id(Gtk.STOCK_FULLSCREEN)\n"
+"            self.unfullscreen()\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"        new_action = Gio.SimpleAction.new(\"new\", None)\n"
+"        new_action.connect(\"activate\", self.new_callback)\n"
+"        app.add_action(new_action)\n"
+"\n"
+"        open_action = Gio.SimpleAction.new(\"open\", None)\n"
+"        open_action.connect(\"activate\", self.open_callback)\n"
+"        app.add_action(open_action)\n"
+"\n"
+"    def new_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"New\\\".\"\n"
+"\n"
+"    def open_callback(self, action, parameter):\n"
+"        print \"You clicked \\\"Open\\\".\"\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/entry.py.page:40(p)
-msgid ""
-"<code>get_buffer()</code> and <code>set_buffer(buffer)</code>, where "
-"<code>buffer</code> is a Gtk.EntryBuffer object, can be used to get and set "
-"the buffer for the entry."
-msgstr ""
+#: C/tooltip.py.page:33(section/title)
+msgid "Useful methods for a Tooltip widget"
+msgstr "Métodos útiles para o widget Tooltip"
 
-#: C/entry.py.page:41(p)
+#: C/tooltip.py.page:34(section/p)
 msgid ""
-"<code>get_text()</code> and <code>set_text(\"some text\")</code> can be used "
-"to get and set the content for the entry."
-msgstr ""
-
-#: C/entry.py.page:42(p)
-msgid "<code>get_text_length()</code> is self-explanatory."
+"<code>set_tooltip_text(text)</code> and <code>set_tooltip_markup(text)</"
+"code> can be used to add a tooltip of plain text (or text in the Pango "
+"Markup Language) to a widget."
 msgstr ""
 
-#: C/entry.py.page:43(p)
-msgid ""
-"<code>get_text_area()</code> gets the area where the entry's text is drawn."
+#: C/tooltip.py.page:35(section/p)
+msgid "For more complex tooltips, for instance for a tooltip with an image:"
 msgstr ""
 
-#: C/entry.py.page:44(p)
+#: C/tooltip.py.page:37(item/p)
 msgid ""
-"If we set <code>set_visibility(False)</code> the characters in the entry are "
-"displayed as the invisible char. This is the best available in the current "
-"font, but it can be changed with <code>set_invisible_char(ch)</code>, where "
-"<code>ch</code> is a Unicode charcater. The latter method is reversed by "
-"<code>unset_invisbile_char()</code>."
+"Set the <code>\"has-tooltip\"</code> property of the widget to <code>True</"
+"code>; this will make GTK+ monitor the widget for motion and related events "
+"which are needed to determine when and where to show a tooltip."
 msgstr ""
 
-#: C/entry.py.page:45(p)
+#: C/tooltip.py.page:38(item/p)
 msgid ""
-"<code>set_max_length(int)</code>, where <code>int</code> is an integer, "
-"truncates every entry longer than <code>int</code> to have the desired "
-"maximum length."
+"Connect to the <code>\"query-tooltip\"</code> signal. This signal will be "
+"emitted when a tooltip is supposed to be shown. One of the arguments passed "
+"to the signal handler is a GtkTooltip object. This is the object that we are "
+"about to display as a tooltip, and can be manipulated in your callback using "
+"functions like <code>set_icon()</code>. There are functions for setting the "
+"tooltip's markup (<code>set_markup(text)</code>), setting an image from a "
+"stock icon (<code>set_icon_from_stock(stock_id, size)</code>), or even "
+"putting in a custom widget (<code>set_custom(widget)</code>)."
 msgstr ""
 
-#: C/entry.py.page:46(p)
+#: C/tooltip.py.page:39(item/p)
 msgid ""
-"By default, if you press the Entry key the Gtk.Entry emits the signal <code>"
-"\"activate\"</code>. If you would like to activate the default widget for "
-"the window (set using <code>set_default(widget)</code> on the window), then "
-"use <code>set_activates_default(True)</code>."
-msgstr ""
-
-#: C/entry.py.page:47(p)
-msgid "To set a frame around the entry: <code>set_has_frame(True)</code>."
+"Return <code>True</code> from your query-tooltip handler. This causes the "
+"tooltip to be show. If you return <code>False</code>, it will not be shown."
 msgstr ""
 
-#: C/entry.py.page:48(p)
+#: C/tooltip.py.page:42(section/p)
 msgid ""
-"<code>set_placeholder_text(\"some text\")</code> sets the text to be "
-"displayed in the entry when it is empty and unfocused."
+"In the probably rare case where you want to have even more control over the "
+"tooltip that is about to be shown, you can set your own GtkWindow which will "
+"be used as tooltip window. This works as follows:"
 msgstr ""
 
-#: C/entry.py.page:49(p)
+#: C/tooltip.py.page:44(item/p)
 msgid ""
-"<code>set_overwrite_mode(True)</code> and <code>set_overwrite_mode(False)</"
-"code> are self-explanatory."
+"Set <code>\"has-tooltip\"</code> and connect to <code>\"query-tooltip\"</"
+"code> as before."
 msgstr ""
 
-#: C/entry.py.page:50(p)
+#: C/tooltip.py.page:45(item/p)
 msgid ""
-"If we have <code>set_editable(False)</code> the user cannot edit the text in "
-"the widget."
+"Use <code>set_tooltip_window()</code> on the widget to set a GtkWindow "
+"created by you as tooltip window."
 msgstr ""
 
-#: C/entry.py.page:51(p)
+#: C/tooltip.py.page:46(item/p)
 msgid ""
-"<code>set_completion(completion)</code>, where <code>completion</code> is a "
-"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkEntryCompletion.html";
-"\"><code>Gtk.EntryCompletion</code></link>, sets completion - or disables it "
-"if <code>completion</code> is <code>None</code>."
+"In the <code>\"query-tooltip\"</code> callback you can access your window "
+"using <code>get_tooltip_window()</code> and manipulate as you wish. The "
+"semantics of the return value are exactly as before, return <code>True</"
+"code> to show the window, <code>False</code> to not show it."
 msgstr ""
 
-#: C/entry.py.page:52(p)
+#: C/tooltip.py.page:55(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"An Entry widget can display progress or activity information behind the "
-"text. We use <code>set_progress_fraction(fraction)</code>, where "
-"<code>fraction</code> is a <code>float</code> between <code>0.0</code> and "
-"<code>1.0</code> inclusive, to fill in the given fraction of the bar. We use "
-"<code>set_progress_pulse_step()</code> to set the fraction of total entry "
-"width to move the progress bouncing block for each call to "
-"<code>progress_pulse()</code>. The latter method indicates that some "
-"progress is made, and causes the progress indicator of the entry to enter "
-"\"activity mode\", where a block bounces back and forth. Each call to "
-"<code>progress_pulse()</code> causes the block to move by a little bit (the "
-"amount of movement per pulse is determined, as said before, by "
-"<code>set_progress_pulse_step()</code>)."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkTooltip.html";
+"\">GtkTooltip</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/entry.py.page:53(p)
+#: C/tooltip.py.page:56(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"An Entry widget can also show icons. These icons can be activatable by "
-"clicking, can be set up as drag source and can have tooltips. To add an "
-"icon, use <code>set_icon_from_stock(icon_position, stock_id)</code>, or one "
-"of <code>set_icon_from_pixbuf(icon_position, pixbuf)</code>, "
-"<code>set_icon_from_icon_name(icon_position, icon_name)</code>, where "
-"<code>icon_position</code> is one of <code>Gtk.EntryIconPosition.PRIMARY</"
-"code> (to set the icon at the beginning of the entry) <code>Gtk."
-"EntryIconPosition.SECONDARY</code> (to set the icon at the end of the "
-"entry). To set a tooltip on an icon, use <code>set_icon_tooltip_text"
-"(\"tooltip text\")</code> or <code>set_icon_tooltip_markup(\"tooltip text in "
-"Pango markup language\")</code>."
-msgstr ""
-
-#: C/entry.py.page:61(link) C/entry.c.page:33(link)
-#: C/buttonbox.py.page:50(link)
-msgid "GtkEntry"
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkToolbar.html";
+"\">GtkToolbar</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/entry.js.page:7(title)
+#: C/tooltip.py.page:57(item/p)
 #, fuzzy
-#| msgid "JavaScript"
-msgid "Entry (JavaScript)"
-msgstr "JavaScript"
-
-#: C/entry.js.page:17(desc)
-msgid "A single-line text entry field"
-msgstr ""
-
-#: C/entry.js.page:22(p)
-msgid "This application greets you by name through a pop-up window."
-msgstr ""
-
-#: C/entry.c.page:7(title)
-msgid "Entry (C)"
-msgstr ""
-
-#: C/documentation.page:19(title)
-msgid "Help develop"
-msgstr ""
-
-#: C/documentation.page:20(p)
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"The <app>GNOME Developer Tutorials</app> are developed and maintained by a "
-"volunteer community. You are welcome to participate."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkWidget.html";
+"\">GtkWidget</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/documentation.page:23(p)
+#: C/tooltip.py.page:58(item/p)
 msgid ""
-"If you would like to <link href=\"https://live.gnome.org/";
-"DocumentationProject/Tasks/DeveloperDocs\">help develop <app>GNOME Developer "
-"Tutorials</app></link>, you can get in touch with the developers using <link "
-"href=\"https://cbe005.chat.mibbit.com/?url=irc%3A%2F%2Firc.gnome.org%2Fdocs";
-"\">irc</link>, or via our <link href=\"http://mail.gnome.org/mailman/";
-"listinfo/gnome-doc-devel-list\">mailing list</link>."
+"<link href=\"http://developer.gnome.org/gtk3/stable/gtk3-Stock-Items.html";
+"\">Stock Items</link>"
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/dialog.vala.page:21(None) C/dialog.py.page:22(None)
-#: C/dialog.js.page:21(None) C/dialog.c.page:24(None)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/treeview_advanced_liststore.py.page:24(media)
 #, fuzzy
 #| msgid ""
-#| "@@image: 'media/aboutdialog.png'; md5=a36117a559fa98e25e2f6b3db593639f"
-msgid "@@image: 'media/dialog.png'; md5=c90a33386a600e892fe623d4072c8c38"
-msgstr "@@image: 'media/aboutdialog.png'; md5=a36117a559fa98e25e2f6b3db593639f"
-
-#: C/dialog.vala.page:7(title)
-msgid "Dialog (Vala)"
-msgstr ""
-
-#: C/dialog.vala.page:17(desc) C/dialog.py.page:18(desc)
-#: C/dialog.js.page:17(desc) C/dialog.c.page:19(desc)
-msgid "A popup window"
+#| "@@image: 'media/treeview_advanced_liststore.png'; "
+#| "md5=102b512197fb9aa4ed9a16462f6af911"
+msgctxt "_"
+msgid ""
+"external ref='media/treeview_advanced_liststore.png' "
+"md5='102b512197fb9aa4ed9a16462f6af911'"
 msgstr ""
+"@@image: 'media/treeview_advanced_liststore.png'; "
+"md5=102b512197fb9aa4ed9a16462f6af911"
 
-#: C/dialog.vala.page:20(title) C/dialog.py.page:21(title)
-#: C/dialog.js.page:20(title) C/dialog.c.page:22(title)
-msgid "Dialog"
-msgstr ""
+#: C/treeview_advanced_liststore.py.page:7(info/title)
+#, fuzzy
+#| msgid "Simple TreeView with ListStore (Python)"
+msgctxt "text"
+msgid "Simple Treeview with ListStore (Python)"
+msgstr "TreeView simple con ListStore (Python)"
 
-#: C/dialog.vala.page:22(p)
-msgid "A dialog with the response signal hooked up to a callback function."
+#: C/treeview_advanced_liststore.py.page:20(info/desc)
+msgid "A TreeView displaying a ListStore (more complex example)"
 msgstr ""
 
-#: C/dialog.vala.page:31(link) C/dialog.js.page:31(link)
-msgid "Gtk.Dialog"
-msgstr ""
+#: C/treeview_advanced_liststore.py.page:23(page/title)
+#: C/treeview_simple_liststore.vala.page:22(page/title)
+msgid "Simple Treeview with ListStore"
+msgstr "TreeView simple con ListStore"
 
-#: C/dialog.vala.page:32(link)
-msgid "Gtk.Dialog.with_buttons"
+#: C/treeview_advanced_liststore.py.page:25(page/p)
+#: C/treeview_simple_liststore.py.page:24(page/p)
+msgid ""
+"This TreeView displays a simple ListStore with the selection \"changed\" "
+"signal connected."
 msgstr ""
+"Este TreeView mostra un ListStore simple con un sinal de selección «changed» "
+"conectado."
 
-#: C/dialog.vala.page:34(link)
-msgid "get_content_area"
+#: C/treeview_advanced_liststore.py.page:32(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import Pango\n"
+"import sys\n"
+"\n"
+"list_of_dvd = [[\"The Usual Suspects\"],\n"
+"               [\"Gilda\"],\n"
+"               [\"The Godfather\"],\n"
+"               [\"Pulp Fiction\"],\n"
+"               [\"Once Upon a Time in the West\"],\n"
+"               [\"Rear Window\"]]\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"My DVDs\", application=app)\n"
+"        self.set_default_size(250, 100)\n"
+"        self.set_border_width(10)\n"
+"\n"
+"        # the data are stored in the model\n"
+"        # create a liststore with one column\n"
+"        self.listmodel = Gtk.ListStore(str)\n"
+"        for i in range(len(list_of_dvd)):\n"
+"            self.listmodel.append(list_of_dvd[i])\n"
+"\n"
+"        # a treeview to see the data stored in the model\n"
+"        view = Gtk.TreeView(model=self.listmodel)\n"
+"\n"
+"        # cellrenderer for the first column\n"
+"        cell = Gtk.CellRendererText()\n"
+"        # the first column is created\n"
+"        col = Gtk.TreeViewColumn(\"Title\", cell, text=0)\n"
+"        # and it is appended to the treeview\n"
+"        view.append_column(col)\n"
+"\n"
+"        # when a row of the treeview is selected, it emits a signal\n"
+"        self.selection = view.get_selection()\n"
+"        self.selection.connect(\"changed\", self.on_changed)\n"
+"\n"
+"        # the label we use to show the selection\n"
+"        self.label = Gtk.Label()\n"
+"        self.label.set_text(\"\")\n"
+"\n"
+"        # a button to add new titles, connected to a callback function\n"
+"        self.button_add = Gtk.Button(label=\"Add\")\n"
+"        self.button_add.connect(\"clicked\", self.add_cb)\n"
+"\n"
+"        # an entry to enter titles\n"
+"        self.entry = Gtk.Entry()\n"
+"\n"
+"        # a button to remove titles, connected to a callback function\n"
+"        self.button_remove = Gtk.Button(label=\"Remove\")\n"
+"        self.button_remove.connect(\"clicked\", self.remove_cb)\n"
+"\n"
+"        # a button to remove all titles, connected to a callback function\n"
+"        self.button_remove_all = Gtk.Button(label=\"Remove All\")\n"
+"        self.button_remove_all.connect(\"clicked\", self.remove_all_cb)\n"
+"\n"
+"        # a grid to attach the widgets\n"
+"        grid = Gtk.Grid()\n"
+"        grid.attach(view, 0, 0, 4, 1)\n"
+"        grid.attach(self.label, 0, 1, 4, 1)\n"
+"        grid.attach(self.button_add, 0, 2, 1, 1)\n"
+"        grid.attach_next_to(self.entry, self.button_add, Gtk.PositionType.RIGHT, 1, 1)\n"
+"        grid.attach_next_to(self.button_remove, self.entry, Gtk.PositionType.RIGHT, 1, 1)\n"
+"        grid.attach_next_to(self.button_remove_all, self.button_remove, Gtk.PositionType.RIGHT, 1, 1)\n"
+"\n"
+"        # add the grid to the window\n"
+"        self.add(grid)\n"
+"\n"
+"    def on_changed(self, selection):\n"
+"        # get the model and the iterator that points at the data in the model\n"
+"        (model, iter) = selection.get_selected()\n"
+"        # set the label to a new value depending on the selection, if there is one\n"
+"        if iter is not None:\n"
+"            self.label.set_text(\"\\n %s\" %(model[iter][0]))\n"
+"        else:\n"
+"            self.label.set_text(\"\")\n"
+"        return True\n"
+"\n"
+"    # callback function for the \"Add\" button\n"
+"    def add_cb(self, button):\n"
+"        # append to the model the title that is in the entry\n"
+"        title = self.entry.get_text()\n"
+"        self.listmodel.append([title])\n"
+"        # and print a message in the terminal\n"
+"        print \"%s has been added\" %(title)\n"
+"\n"
+"    def remove_cb(self, button):\n"
+"        # if there is still an entry in the model\n"
+"        if len(self.listmodel) != 0:\n"
+"            # get the selection\n"
+"            (model, iter) = self.selection.get_selected()\n"
+"            # if there is a selection, print a message in the terminal\n"
+"            # and remove it from the model\n"
+"            if iter is not None:\n"
+"                print \"%s has been removed\" %(model[iter][0])\n"
+"                self.listmodel.remove(iter)\n"
+"            # otherwise, ask the user to select something to remove\n"
+"            else:\n"
+"                print \"Select a title to remove\"\n"
+"        # else, if there are no entries in the model, print \"Empty list\"\n"
+"        # in the terminal\n"
+"        else:\n"
+"            print \"Empty list\"\n"
+"\n"
+"    def remove_all_cb(self, button):\n"
+"        # if there is still an entry in the model\n"
+"        if len(self.listmodel) != 0:\n"
+"            # remove all the entries in the model\n"
+"            for i in range(len(self.listmodel)):\n"
+"                iter = self.listmodel.get_iter(0)\n"
+"                self.listmodel.remove(iter)\n"
+"        # print a message in the terminal alerting that the model is empty\n"
+"        print \"Empty list\"\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/dialog.py.page:7(title)
-msgid "Dialog (Python)"
-msgstr ""
+#: C/treeview_advanced_liststore.py.page:36(section/title)
+#: C/treeview_cellrenderertoggle.py.page:33(section/title)
+#: C/treeview_simple_liststore.py.page:35(section/title)
+#: C/treeview_treestore.py.page:33(section/title)
+msgid "Useful methods for a TreeView widget"
+msgstr "Métodos útiles para o widget TreeView"
 
-#: C/dialog.py.page:23(p)
-msgid "A dialog with the response signal connected to a callback function."
+#: C/treeview_advanced_liststore.py.page:37(section/p)
+#: C/treeview_cellrenderertoggle.py.page:34(section/p)
+#: C/treeview_simple_liststore.py.page:36(section/p)
+#: C/treeview_treestore.py.page:34(section/p)
+msgid ""
+"The TreeView widget is designed around a <em>Model/View/Controller</em> "
+"design. For more information, and for a list of useful methods for TreeView "
+"and the interface TreeModel, see <link xref=\"model-view-controller.py"
+"\">here</link>."
 msgstr ""
 
-#: C/dialog.py.page:35(title)
-msgid "Useful methods for a Dialog widget"
+#: C/treeview_advanced_liststore.py.page:38(section/p)
+msgid ""
+"For buttons and callbacks functions, see <link xref=\"signals-callbacks.py"
+"\">here</link>"
 msgstr ""
 
-#: C/dialog.py.page:38(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/treeview_cellrenderertoggle.py.page:21(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/treeview_cellrenderertoggle.png'; "
+#| "md5=ade9b9437f8f83150acf37610dab834d"
+msgctxt "_"
 msgid ""
-"Instead of <code>set_modal(True)</code> we could have <code>set_modal(False)"
-"</code> followed by <code>set_destroy_with_parent(True)</code> that would "
-"destroy the dialog window if the main window is closed."
+"external ref='media/treeview_cellrenderertoggle.png' "
+"md5='ade9b9437f8f83150acf37610dab834d'"
 msgstr ""
+"@@image: 'media/treeview_cellrenderertoggle.png'; "
+"md5=ade9b9437f8f83150acf37610dab834d"
 
-#: C/dialog.py.page:39(p)
+#: C/treeview_cellrenderertoggle.py.page:7(info/title)
+#: C/treeview_treestore.py.page:7(info/title)
+#, fuzzy
+#| msgid "TreeView with TreeStore (Python)"
+msgctxt "text"
+msgid "TreeView with TreeStore (Python)"
+msgstr "TreeView con TreeStore (Python)"
+
+#: C/treeview_cellrenderertoggle.py.page:17(info/desc)
 msgid ""
-"<code>add_button(button_text=\"The Answer\", response_id=42)</code>, where "
-"<code>42</code> is any integer, is an alternative to <code>add_button"
-"(button_text=\"text\", response_id=Gtk.ResponseType.RESPONSE)</code>, where "
-"<code>RESPONSE</code> could be one of <code>OK, CANCEL, CLOSE, YES, NO, "
-"APPLY, HELP</code>, which in turn correspond to the integers <code>-5, "
-"-6,..., -11</code>."
+"A TreeView displaying a TreeStore (more complex example, with "
+"CellRendererToggle)"
 msgstr ""
 
-#: C/dialog.js.page:7(title)
-#, fuzzy
-#| msgid "JavaScript"
-msgid "Dialog (JavaScript)"
-msgstr "JavaScript"
+#: C/treeview_cellrenderertoggle.py.page:20(page/title)
+#: C/treeview_treestore.py.page:20(page/title)
+msgid "TreeView with TreeStore"
+msgstr "TreeView con TreeStore"
 
-#: C/dialog.js.page:22(p)
+#: C/treeview_cellrenderertoggle.py.page:22(page/p)
 msgid ""
-"A customizable popup window, which has a content area and an action area. "
-"This example dialog's content area contains a short message, and its action "
-"area contains a button which dismisses the dialog."
+"This TreeView displays a TreeStore with two columns, one of which is "
+"rendered as a toggle."
 msgstr ""
 
-#: C/dialog.c.page:7(title)
-msgid "Dialog (C)"
+#: C/treeview_cellrenderertoggle.py.page:29(section/code)
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import Pango\n"
+"import sys\n"
+"\n"
+"books = [[\"Tolstoy, Leo\", [\"War and Peace\", True], [\"Anna Karenina\", False]],\n"
+"         [\"Shakespeare, William\", [\"Hamlet\", False], [\"Macbeth\", True], [\"Othello\", False]],\n"
+"         [\"Tolkien, J.R.R.\", [\"The Lord of the Rings\", False]]]\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Library\", application=app)\n"
+"        self.set_default_size(250, 100)\n"
+"        self.set_border_width(10)\n"
+"\n"
+"        # the data are stored in the model\n"
+"        # create a treestore with two columns\n"
+"        self.store = Gtk.TreeStore(str, bool)\n"
+"        # fill in the model\n"
+"        for i in range(len(books)):\n"
+"            # the iter piter is returned when appending the author in the first column\n"
+"            # and False in the second\n"
+"            piter = self.store.append(None, [books[i][0], False])\n"
+"            # append the books and the associated boolean value as children of the author\n"
+"            j = 1\n"
+"            while j &lt; len(books[i]):\n"
+"                self.store.append(piter, books[i][j])\n"
+"                j += 1\n"
+"\n"
+"        # the treeview shows the model\n"
+"        # create a treeview on the model self.store\n"
+"        view = Gtk.TreeView()\n"
+"        view.set_model(self.store)\n"
+"\n"
+"        # the cellrenderer for the first column - text\n"
+"        renderer_books = Gtk.CellRendererText()\n"
+"        # the first column is created\n"
+"        column_books = Gtk.TreeViewColumn(\"Books\", renderer_books, text=0)\n"
+"        # and it is appended to the treeview\n"
+"        view.append_column(column_books)\n"
+"\n"
+"        # the cellrenderer for the second column - boolean rendered as a toggle\n"
+"        renderer_in_out = Gtk.CellRendererToggle()\n"
+"        # the second column is created\n"
+"        column_in_out = Gtk.TreeViewColumn(\"Out?\", renderer_in_out, active=1)\n"
+"        # and it is appended to the treeview\n"
+"        view.append_column(column_in_out)\n"
+"        # connect the cellrenderertoggle with a callback function\n"
+"        renderer_in_out.connect(\"toggled\", self.on_toggled)\n"
+"\n"
+"        # add the treeview to the window\n"
+"        self.add(view)\n"
+"\n"
+"    # callback function for the signal emitted by the cellrenderertoggle\n"
+"    def on_toggled(self, widget, path):\n"
+"        # the boolean value of the selected row\n"
+"        current_value = self.store[path][1]\n"
+"        # change the boolean value of the selected row in the model\n"
+"        self.store[path][1] = not current_value\n"
+"        # new current value!\n"
+"        current_value = not current_value\n"
+"        # if length of the path is 1 (that is, if we are selecting an author)\n"
+"        if len(path) == 1:\n"
+"            # get the iter associated with the path\n"
+"            piter = self.store.get_iter(path)\n"
+"            # get the iter associated with its first child\n"
+"            citer = self.store.iter_children(piter)\n"
+"            # while there are children, change the state of their boolean value\n"
+"            # to the value of the author\n"
+"            while citer is not None:\n"
+"                self.store[citer][1] = current_value\n"
+"                citer = self.store.iter_next(citer)\n"
+"        # if the length of the path is not 1 (that is, if we are selecting a book)\n"
+"        elif len(path) != 1:\n"
+"            # get the first child of the parent of the book (the first book of the author)\n"
+"            citer = self.store.get_iter(path)\n"
+"            piter = self.store.iter_parent(citer)\n"
+"            citer = self.store.iter_children(piter)\n"
+"            # check if all the children are selected\n"
+"            all_selected = True\n"
+"            while citer is not None:\n"
+"                if self.store[citer][1] == False:\n"
+"                    all_selected = False\n"
+"                    break\n"
+"                citer = self.store.iter_next(citer)\n"
+"            # if they do, the author as well is selected; otherwise it is not\n"
+"            self.store[piter][1] = all_selected\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/dialog.c.page:25(p)
-msgid "A dialog window that pops up when a button is pressed."
+#: C/treeview_cellrenderertoggle.py.page:43(item/p)
+#: C/treeview_treestore.py.page:43(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeStore.html";
+"\">GtkTreeStore</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/cpp.page:6(title)
-msgid "C++"
-msgstr "C+"
-
-#: C/cpp.page:15(title)
-msgid "Platform demos in C++"
+#: C/treeview_cellrenderertoggle.py.page:45(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRendererToggle.";
+"html\">GtkCellRendererToggle</link>"
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/combobox_multicolumn.py.page:22(None) C/combobox.js.page:25(None)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/treeview_simple_liststore.js.page:24(media)
 #, fuzzy
 #| msgid ""
-#| "@@image: 'media/aboutdialog.png'; md5=a36117a559fa98e25e2f6b3db593639f"
+#| "@@image: 'media/treeview_simple_liststore_penguins.png'; "
+#| "md5=d750a0b9fddf8e508753cc639839871d"
+msgctxt "_"
 msgid ""
-"@@image: 'media/combobox_multicolumn.png'; "
-"md5=43f16648fb11ebc7d2f70825ed0f63b3"
-msgstr "@@image: 'media/aboutdialog.png'; md5=a36117a559fa98e25e2f6b3db593639f"
-
-#: C/combobox_multicolumn.py.page:7(title) C/combobox.py.page:7(title)
-msgid "ComboBox (Python)"
+"external ref='media/treeview_simple_liststore_penguins.png' "
+"md5='d750a0b9fddf8e508753cc639839871d'"
 msgstr ""
+"@@image: 'media/treeview_simple_liststore_penguins.png'; "
+"md5=d750a0b9fddf8e508753cc639839871d"
 
-#: C/combobox_multicolumn.py.page:18(desc) C/combobox.vala.page:17(desc)
-#: C/combobox.py.page:17(desc)
-msgid "A widget used to choose from a list of items"
-msgstr ""
+#: C/treeview_simple_liststore.js.page:7(info/title)
+#, fuzzy
+#| msgid "TreeView with ListStore (JavaScript)"
+msgctxt "text"
+msgid "TreeView with ListStore (JavaScript)"
+msgstr "TreeView con ListStore (JavaScript)"
 
-#: C/combobox_multicolumn.py.page:21(title) C/combobox.vala.page:20(title)
-#: C/combobox.py.page:20(title) C/combobox.js.page:24(title)
-msgid "ComboBox"
-msgstr ""
+#: C/treeview_simple_liststore.js.page:20(info/desc)
+msgid "A widget that shows a separate list of items"
+msgstr "Un widget que mostra unha lista de elementos separada"
 
-#: C/combobox_multicolumn.py.page:23(p) C/combobox.py.page:22(p)
-msgid "This ComboBox prints to the terminal your selection when you change it."
-msgstr ""
+#: C/treeview_simple_liststore.js.page:23(page/title)
+msgid "TreeView with ListStore"
+msgstr "TreeView con ListStore"
 
-#: C/combobox_multicolumn.py.page:34(title) C/combobox.py.page:32(title)
-msgid "Useful methods for a ComboBox widget"
+#: C/treeview_simple_liststore.js.page:25(page/p)
+msgid ""
+"A TreeView is like a window onto the contents of either a ListStore or a "
+"TreeStore. A ListStore is like a spreadsheet: a \"flat\", two-dimensional "
+"list of things broken up into rows and columns. A TreeStore, meanwhile, can "
+"branch out in different directions like a tree can. In this example, we "
+"create a TreeView that shows the contents of a ListStore with (fictitious) "
+"names and phone numbers in it, and set it so that the <link xref=\"label.js"
+"\">Label</link> at the bottom of the window shows more information about "
+"whichever name you click on."
 msgstr ""
 
-#: C/combobox_multicolumn.py.page:35(p) C/combobox.py.page:33(p)
+#: C/treeview_simple_liststore.js.page:26(page/p)
 msgid ""
-"The ComboBox widget is designed around a <em>Model/View/Controller</em> "
-"design. For more information, and for a list of useful methods for ComboBox "
-"and TreeModel, see <link xref=\"model-view-controller.py\">here</link>."
+"The TreeView is not just a single widget, but contains a number of smaller "
+"ones:"
 msgstr ""
+"Un TreView non é son un widget simple, senón que contén uns máis pequenos:"
 
-#: C/combobox_multicolumn.py.page:46(link)
-msgid "GtkCellRendererPixbuf"
+#: C/treeview_simple_liststore.js.page:28(item/p)
+msgid ""
+"TreeViewColumn widgets show each (vertical) column of information from the "
+"ListStore. Each one has a title which can be shown at the top of the column, "
+"like in the screenshot."
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/combobox.vala.page:21(None) C/combobox.py.page:21(None)
-#: C/comboboxtext.js.page:23(None)
-#, fuzzy
-#| msgid "@@image: 'media/toolbar.png'; md5=fca40afb940764d58f69b3a2add9a927"
-msgid "@@image: 'media/combobox.png'; md5=ab9e91bc1a58fe866cb00dd52159251d"
-msgstr "@@image: 'media/toolbar.png'; md5=fca40afb940764d58f69b3a2add9a927"
-
-#: C/combobox.vala.page:7(title)
-msgid "ComboBox (Vala)"
+#: C/treeview_simple_liststore.js.page:29(item/p)
+msgid ""
+"CellRenderer widgets are \"packed\" into each TreeViewColumn, and contain "
+"the instructions for how to display each individual \"cell\", or item from "
+"the ListStore. There are multiple different types, including the "
+"CellRendererText used here and the CellRendererPixbuf, which displays a "
+"picture (\"pixel buffer\")."
 msgstr ""
 
-#: C/combobox.vala.page:22(p)
-msgid "This ComboBox prints to the terminal when you change your selection."
+#: C/treeview_simple_liststore.js.page:31(page/p)
+msgid ""
+"Finally, we're going to use an object called a TreeIter, which isn't a "
+"widget so much as an invisible cursor which points to a (horizontal) row in "
+"the ListStore. Whenever you click on a name in the phonebook, for instance, "
+"we create a TreeIter pointing to the row that's selected, and then use that "
+"to tell the ListStore which entry we want the Label to show more information "
+"about."
 msgstr ""
 
-#: C/combobox.vala.page:30(link) C/combobox.js.page:241(link)
-msgid "Gtk.ComboBox"
+#: C/treeview_simple_liststore.js.page:32(note/p)
+msgid ""
+"The TreeView is probably the most complicated Gtk widget, because of how "
+"many parts it has and how they all have to work together. Give yourself time "
+"to learn how it works and experiment with it, or try something easier first "
+"if you're having trouble."
 msgstr ""
 
-#: C/combobox.vala.page:32(link)
-msgid "set_attributes"
+#: C/treeview_simple_liststore.js.page:37(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"const Pango = imports.gi.Pango;\n"
 msgstr ""
 
-#: C/combobox.py.page:43(link)
-msgid "GtkCellLayout"
+#: C/treeview_simple_liststore.js.page:50(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"const TreeViewExample = new Lang.Class({\n"
+"    Name: 'TreeView Example with Simple ListStore',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jstreeviewsimpleliststore'\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
 msgstr ""
 
-#: C/combobox.js.page:7(title)
-#, fuzzy
-#| msgid "JavaScript"
-msgid "ComboBox (JavaScript)"
-msgstr "JavaScript"
-
-#: C/combobox.js.page:21(desc)
-msgid "A customizable drop-down menu"
+#: C/treeview_simple_liststore.js.page:75(section/p)
+msgid ""
+"All the code for this sample goes in the TreeViewExample class. The above "
+"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
+"go in."
 msgstr ""
 
-#: C/combobox.js.page:26(p)
+#: C/treeview_simple_liststore.js.page:76(section/code)
+#, no-wrap
 msgid ""
-"A ComboBox is an extremely customizable drop-down menu. It holds the "
-"equivalent of a <link xref=\"treeview_simple_liststore.js\">TreeView</link> "
-"widget that appears when you click on it, complete with a ListStore "
-"(basically a spreadsheet) that says what's in the rows and columns. In this "
-"example, our ListStore has the name of each option in one column, and the "
-"name of a stock icon in the other, which the ComboBox then turns into an "
-"icon for each option."
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 250,\n"
+"            default_width: 100,\n"
+"            border_width: 20,\n"
+"            title: \"My Phone Book\"});\n"
 msgstr ""
 
-#: C/combobox.js.page:27(p)
+#: C/treeview_simple_liststore.js.page:94(section/code)
+#, no-wrap
 msgid ""
-"You select a whole horizontal row at a time, so the icons aren't treated as "
-"separate options. They and the text beside them make up each option you can "
-"click on."
+"\n"
+"        // Create the underlying liststore for the phonebook\n"
+"        this._listStore = new Gtk.ListStore ();\n"
+"        this._listStore.set_column_types ([\n"
+"            GObject.TYPE_STRING,\n"
+"            GObject.TYPE_STRING,\n"
+"            GObject.TYPE_STRING,\n"
+"            GObject.TYPE_STRING]);\n"
 msgstr ""
 
-#: C/combobox.js.page:28(p)
+#: C/treeview_simple_liststore.js.page:103(section/p)
 msgid ""
-"Working with a ListStore can be time-consuming. If you just want a simple "
-"text-only drop-down menu, take a look at the <link xref=\"comboboxtext.js"
-"\">ComboBoxText.</link> It doesn't take as much time to set up, and is "
-"easier to work with."
+"We first create the ListStore like we would any widget. Then we call its "
+"set_column_types method, and pass it an array of GObject data types. (We "
+"could have put the types all on one line, but here we are breaking them up "
+"to make it easier to read.)"
 msgstr ""
+"Primeiro creamos un ListStore como faríamos con calquera widget. Logo "
+"chamamos ao seu método set_column_types, e pasámoslle un array dos tipos de "
+"datos GObject. (Podemos poñerlle todos os tipos nunha liña, pero teremos que "
+"partila para facela máis doado de ler.)"
+
+#: C/treeview_simple_liststore.js.page:104(section/p)
+msgid "The GObject data types you can use include:"
+msgstr "Os tipos de datos GObject que pode usar son:"
+
+#: C/treeview_simple_liststore.js.page:109(item/p)
+msgid "<file>gtk.gdk.Pixbuf</file> -- A picture"
+msgstr "<file>gtk.gdk.Pixbuf</file> -- Unha imaxe"
 
-#: C/combobox.js.page:69(p)
+#: C/treeview_simple_liststore.js.page:111(section/p)
 msgid ""
-"All the code for this sample goes in the ComboBoxExample class. The above "
-"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
-"go in."
+"In this case, we're making a ListStore of four columns, each one containing "
+"string values."
 msgstr ""
+"Neste caso, crearemos unha ListStore para catro columnas, cada unha delas "
+"contén valores en cadeas."
 
-#: C/combobox.js.page:94(p)
+#: C/treeview_simple_liststore.js.page:114(section/code)
+#, no-wrap
 msgid ""
-"This ListStore works like the one used in the <link xref="
-"\"treeview_simple_liststore.js\">TreeView</link> example. We're giving it "
-"two columns, both strings, because one of them will contain the names of "
-"<link href=\"http://developer.gnome.org/gtk/2.24/gtk-Stock-Items.html#GTK-";
-"STOCK-ABOUT:CAPS\">stock Gtk icons.</link>"
+"\n"
+"        // Data to go in the phonebook\n"
+"        this.phonebook =\n"
+"        let phonebook =\n"
+"            [{ name: \"Jurg\", surname: \"Billeter\", phone: \"555-0123\",\n"
+"                description: \"A friendly person.\"},\n"
+"             { name: \"Johannes\", surname: \"Schmid\", phone: \"555-1234\",\n"
+"                description: \"Easy phone number to remember.\"},\n"
+"             { name: \"Julita\", surname: \"Inca\", phone: \"555-2345\",\n"
+"                description: \"Another friendly person.\"},\n"
+"             { name: \"Javier\", surname: \"Jardon\", phone: \"555-3456\",\n"
+"                description: \"Bring fish for his penguins.\"},\n"
+"             { name: \"Jason\", surname: \"Clinton\", phone: \"555-4567\",\n"
+"                description: \"His cake's not a lie.\"},\n"
+"             { name: \"Random J.\", surname: \"Hacker\", phone: \"555-5678\",\n"
+"                description: \"Very random!\"}];\n"
+msgstr ""
+
+#: C/treeview_simple_liststore.js.page:131(section/p)
+msgid ""
+"Here we have the information to go in the ListStore. It's an array of "
+"objects, each one corresponding to a single entry in our phone book."
 msgstr ""
 
-#: C/combobox.js.page:95(p)
+#: C/treeview_simple_liststore.js.page:132(section/p)
 msgid ""
-"If we'd wanted to use our own icons that weren't already built in to GNOME, "
-"we'd have needed to use the <file>gtk.gdk.Pixbuf</file> type instead. Here "
-"are a few other types you can use:"
+"Note that the TreeView in the screenshot doesn't actually show the data from "
+"the \"description\" properties. Instead, that information's shown in the "
+"Label beneath it, for whichever row that you click on. That's because the "
+"TreeView and ListStore are two separate things, and a TreeView can show all "
+"or part of a ListStore, and display what's in it in different ways. You can "
+"even have multiple widgets show things from the same ListStore, like the "
+"Label in our example or even a second TreeView."
 msgstr ""
 
-#: C/combobox.js.page:119(p)
+#: C/treeview_simple_liststore.js.page:134(section/code)
+#, no-wrap
 msgid ""
-"Here we create an array of the text options and their corresponding icons, "
-"then put them into the ListStore in much the same way we would for a <link "
-"xref=\"treeview_simple_liststore.js\">TreeView's</link> ListStore. We only "
-"want to put an icon in if there's actually an icon in the options array, so "
-"we make sure to check for that first."
+"\n"
+"        for (i = 0; i &lt; phonebook.length; i++ ) {\n"
+"            let contact = phonebook [i];\n"
+"            this._listStore.set (this._listStore.append(), [0, 1, 2, 3],\n"
+"                [contact.name, contact.surname, contact.phone, contact.description]);\n"
+"        }\n"
 msgstr ""
 
-#: C/combobox.js.page:120(p)
+#: C/treeview_simple_liststore.js.page:141(section/p)
 msgid ""
-"\"Select\" isn't really an option so much as an invitation to click on our "
-"ComboBox, so it doesn't need an icon."
+"This <file>for</file> loop puts the strings from our phonebook into our "
+"ListStore in order. In order, we pass the ListStore's set method the iter "
+"that points to the correct row, an array which says which columns we want to "
+"set, and an array which contains the data we want to put into those columns."
 msgstr ""
 
-#: C/combobox.js.page:124(title)
-msgid "Creating the ComboBox"
-msgstr "Crear un ComboBox"
-
-#: C/combobox.js.page:130(p)
+#: C/treeview_simple_liststore.js.page:142(section/p)
 msgid ""
-"Each ComboBox has an underlying \"model\" it takes all its options from. You "
-"can use a TreeStore if you want to have a ComboBox with branching options. "
-"In this case, we're just using the ListStore we already created."
+"A ListStore's <file>append</file> method adds a horizontal row onto it (it "
+"starts out with none), and returns a TreeIter pointing to that row like a "
+"cursor. So by passing <file>this._listStore.append()</file> to the ListStore "
+"as a property, we're creating a new row and telling the <file>set</file> "
+"method which row to set data for at the same time."
 msgstr ""
 
-#: C/combobox.js.page:144(p)
+#: C/treeview_simple_liststore.js.page:147(section/title)
+msgid "Creating the TreeView"
+msgstr "Crear un TreeView"
+
+#: C/treeview_simple_liststore.js.page:148(section/code)
+#, no-wrap
 msgid ""
-"This part, again, works much like creating CellRenderers and packing them "
-"into the columns of a <link xref=\"treeview_simple_liststore.js\">TreeView.</"
-"link> The biggest difference is that we don't need to create the ComboBox's "
-"columns as separate objects. We just pack the CellRenderers into it in the "
-"order we want them to show up, then tell them to pull information from the "
-"ListStore (and what type of information we want them to expect)."
+"\n"
+"        // Create the treeview\n"
+"        this._treeView = new Gtk.TreeView ({\n"
+"            expand: true,\n"
+"            model: this._listStore });\n"
 msgstr ""
 
-#: C/combobox.js.page:145(p)
+#: C/treeview_simple_liststore.js.page:154(section/p)
 msgid ""
-"We use a CellRendererText to show the text, and a CellRendererPixbuf to show "
-"the icons. We can store the names of the icons' stock types as strings, but "
-"when we display them we need a CellRenderer that's designed for pictures."
+"Here we create a basic TreeView widget, that expands both horizontally and "
+"vertically to use as much space as needed. We set it to use the ListStore we "
+"created as its \"model\", or the thing it'll show us stuff from."
 msgstr ""
 
-#: C/combobox.js.page:146(p)
+#: C/treeview_simple_liststore.js.page:156(section/code)
+#, no-wrap
 msgid ""
-"Just like with a TreeView, the \"model\" (in this case a ListStore) and the "
-"\"view\" (in this case our ComboBox) are separate. Because of that, we can "
-"do things like have the columns in one order in the ListStore, and then pack "
-"the CellRenderers that correspond to those columns into the ComboBox in a "
-"different order. We can even create a TreeView or other widget that shows "
-"the information in the ListStore in a different way, without it affecting "
-"our ComboBox."
+"\n"
+"        // Create the columns for the address book\n"
+"        let firstName = new Gtk.TreeViewColumn ({ title: \"First Name\" });\n"
+"        let lastName = new Gtk.TreeViewColumn ({ title: \"Last Name\" });\n"
+"        let phone = new Gtk.TreeViewColumn ({ title: \"Phone Number\" });\n"
 msgstr ""
 
-#: C/combobox.js.page:155(p)
+#: C/treeview_simple_liststore.js.page:162(section/p)
 msgid ""
-"We want the \"Select\" text to be the part people see at first, that gets "
-"them to click on the ComboBox. So we set it to be the active entry. We also "
-"connect the ComboBox's <file>changed</file> signal to a callback function, "
-"so that any time someone clicks on a new option something happens. In this "
-"case, we're just going to show a popup with a little haiku."
+"Now we create each of the vertical TreeViewColumns we'll see in the "
+"TreeView. The title for each one goes at the top, as you can see in the "
+"screenshot."
 msgstr ""
 
-#: C/combobox.js.page:165(p)
+#: C/treeview_simple_liststore.js.page:164(section/code)
+#, no-wrap
 msgid ""
-"Finally, we add the ComboBox to the window, and tell the window to show "
-"itself and everything inside it."
+"\n"
+"        // Create a cell renderer for when bold text is needed\n"
+"        let bold = new Gtk.CellRendererText ({\n"
+"            weight: Pango.Weight.BOLD });\n"
+"\n"
+"        // Create a cell renderer for normal text\n"
+"        let normal = new Gtk.CellRendererText ();\n"
+"\n"
+"        // Pack the cell renderers into the columns\n"
+"        firstName.pack_start (bold, true);\n"
+"        lastName.pack_start (normal, true);\n"
+"        phone.pack_start (normal, true);\n"
 msgstr ""
 
-#: C/combobox.js.page:179(p)
+#: C/treeview_simple_liststore.js.page:177(section/p)
 msgid ""
-"We're going to create a pop-up <link xref=\"messagedialog.js\">MessageDialog,"
-"</link> which shows you a silly haiku based on which distro you select. "
-"First, we create the array of haiku to use. Since the first string in our "
-"ComboBox is just the \"Select\" message, we make the first string in our "
-"array blank."
+"Here we create the CellRenderers that we'll use to display the text from our "
+"ListStore, and pack them into the TreeViewColumns. Each CellRendererText is "
+"used for all the entries in that column. Our normal CellRendererText just "
+"creates plain text, while our bold one uses heavier-weight text. We put it "
+"into the first name column, and tell the other two to use copies of the "
+"normal one. The \"true\" used as the second parameter for the "
+"<file>pack_start</file> method tells it to expand the cells when possible, "
+"instead of keeping them compact."
 msgstr ""
 
-#: C/combobox.js.page:203(p)
+#: C/treeview_simple_liststore.js.page:178(note/p)
 msgid ""
-"Before showing a MessageDialog, we first test to make sure you didn't choose "
-"the \"Select\" message. After that, we set its text to be the haiku in the "
-"array that corresponds to the active entry in our ComboBoxText. We do that "
-"using the <file>get_active</file> method, which returns the number ID of "
-"your selection."
+"<link href=\"http://www.pygtk.org/docs/pygtk/pango-constants.html\";>Here is "
+"a list</link> of other text properties you can use. In order to use these "
+"Pango constants, make sure to put the line <file>const Pango = imports.gi."
+"Pango;</file> at the beginning of your code like we did."
 msgstr ""
 
-#: C/combobox.js.page:204(p) C/comboboxtext.js.page:147(p)
+#: C/treeview_simple_liststore.js.page:180(section/code)
+#, no-wrap
 msgid ""
-"Other methods you can use include <file>get_active_id,</file> which returns "
-"the text ID assigned by <file>append,</file> and <file>get_active_text,</"
-"file> which returns the full text of the string you selected."
+"\n"
+"        firstName.add_attribute (bold, \"text\", 0);\n"
+"        lastName.add_attribute (normal, \"text\", 1);\n"
+"        phone.add_attribute (normal, \"text\", 2);\n"
+"\n"
+"        // Insert the columns into the treeview\n"
+"        this._treeView.insert_column (firstName, 0);\n"
+"        this._treeView.insert_column (lastName, 1);\n"
+"        this._treeView.insert_column (phone, 2);\n"
 msgstr ""
 
-#: C/combobox.js.page:205(p) C/comboboxtext.js.page:148(p)
+#: C/treeview_simple_liststore.js.page:190(section/p)
 msgid ""
-"After we create the MessageDialog, we connect its response signal to the "
-"_onDialogResponse function, then tell it to show itself."
+"Now that we've put the CellRenderers into the TreeViewColumns, we use the "
+"<file>add_attribute</file> method to tell each column to pull in text from "
+"the model our TreeView is set to use; in this case, the ListStore with the "
+"phonebook."
 msgstr ""
 
-#: C/combobox.js.page:216(p) C/comboboxtext.js.page:159(p)
+#: C/treeview_simple_liststore.js.page:192(item/p)
 msgid ""
-"Since the only button the MessageDialog has is an OK button, we don't need "
-"to test its response_id to see which button was clicked. All we do here is "
-"destroy the popup."
+"The first parameter is which CellRenderer we're going to use to render what "
+"we're pulling in."
 msgstr ""
 
-#: C/combobox.js.page:223(p)
+#: C/treeview_simple_liststore.js.page:193(item/p)
 msgid ""
-"Finally, we create a new instance of the finished ComboBoxExample class, and "
-"set the application running."
+"The second parameter is what kind of information we're going to pull in. In "
+"this case, we're letting it know that we're rendering text."
 msgstr ""
 
-#: C/combobox.js.page:239(link)
-msgid "Gtk.CellRendererPixbuf"
-msgstr "Gtk.CellRendererPixbuf"
-
-#: C/comboboxtext.js.page:7(title)
-msgid "ComboBoxText (JavaScript)"
-msgstr "ComboBoxText (JavaScript)"
-
-#: C/comboboxtext.js.page:19(desc)
-msgid "A text-only drop-down menu"
-msgstr "Un menú despregábel con só texto"
-
-#: C/comboboxtext.js.page:22(title)
-msgid "ComboBoxText"
-msgstr "ComboBoxText"
+#: C/treeview_simple_liststore.js.page:194(item/p)
+msgid ""
+"The third parameter is which of the ListStore's columns we're pulling that "
+"information in from."
+msgstr ""
 
-#: C/comboboxtext.js.page:24(p)
+#: C/treeview_simple_liststore.js.page:196(section/p)
 msgid ""
-"A ComboBox is a drop-down menu. The difference between a <link xref="
-"\"combobox.js\">ComboBox</link> and a ComboBoxText is that a ComboBoxText "
-"just has basic text options, while a full ComboBox uses a ListStore or "
-"TreeStore (which are basically spreadsheets) to show things like branching "
-"options, or pictures to go alongside each choice."
+"After we've set that up, we use the TreeView's <file>insert_column</file> "
+"method to put our TreeViewColumns inside it in order. Our TreeView is now "
+"complete."
 msgstr ""
 
-#: C/comboboxtext.js.page:25(p)
+#: C/treeview_simple_liststore.js.page:197(note/p)
 msgid ""
-"Unless you need the added features of a full ComboBox, or are comfortable "
-"working with ListStores and TreeStores, you may find it a lot simpler to use "
-"a ComboBoxText whenever possible."
+"Normally, you might want to use a loop to initialize your TreeView, but in "
+"this example we're spelling things out step by step for the sake of making "
+"it easier to understand."
 msgstr ""
 
-#: C/comboboxtext.js.page:82(title)
-msgid "Creating the ComboBoxText"
-msgstr "Crear un ComboBoxText"
+#: C/treeview_simple_liststore.js.page:201(section/title)
+msgid "Building the rest of the UI"
+msgstr "Construír o resto da IU"
 
-#: C/comboboxtext.js.page:96(p)
+#: C/treeview_simple_liststore.js.page:202(section/code)
+#, no-wrap
 msgid ""
-"After we create the ComboBoxText, we use its <file>append_text</file> method "
-"to add text strings to it. Like the entries in an array, they each have a "
-"number for an ID, starting with 0. To make things simpler, you can actually "
-"create an array for your ComboBoxText entries, then use a for loop to append "
-"them in order, like we did here."
+"\n"
+"        // Create the label that shows details for the name you select\n"
+"        this._label = new Gtk.Label ({ label: \"\" });\n"
+"\n"
+"        // Get which item is selected\n"
+"        this.selection = this._treeView.get_selection();\n"
+"\n"
+"        // When something new is selected, call _on_changed\n"
+"        this.selection.connect ('changed', Lang.bind (this, this._onSelectionChanged));\n"
 msgstr ""
 
-#: C/comboboxtext.js.page:97(p)
+#: C/treeview_simple_liststore.js.page:212(section/p)
 msgid ""
-"After we populate the ComboBoxText, we set its first entry to be active, so "
-"that we'll see the \"Select distribution\" line before we click on it. Then "
-"we connect its <file>changed</file> signal to the _onComboChanged function, "
-"so that it's called whenever you make a new selection from the drop-down "
-"menu."
+"The TreeView's <file>get_selection</file> method returns an object called a "
+"TreeSelection. A TreeSelection is like a TreeIter in that it's basically a "
+"cursor that points at a particular row, except that the one it points to is "
+"the one that's visibly highlighted as selected."
 msgstr ""
 
-#: C/comboboxtext.js.page:98(p)
+#: C/treeview_simple_liststore.js.page:213(section/p)
 msgid ""
-"If you'd like to add an entry to a ComboBoxText, you can use the "
-"<file>insert_text</file> method. And if you'd rather use a text string as an "
-"ID for each entry than rely on numbers alone, you can use the <file>append</"
-"file> and <file>insert</file> methods. See the links at the bottom of this "
-"tutorial for the details of how to use them."
+"After we get the TreeSelection that goes with our TreeView, we ask it to "
+"tell us when it changes which row it's pointing to. We do this by connecting "
+"its <file>changed</file> signal to the _onSelectionChanged function we "
+"wrote. This function changes the text displayed by the Label we just made."
 msgstr ""
 
-#: C/comboboxtext.js.page:108(p)
+#: C/treeview_simple_liststore.js.page:215(section/code)
+#, no-wrap
 msgid ""
-"Finally, we add the ComboBoxText to the window, and tell the window to show "
-"itself and the widget inside it."
+"\n"
+"        // Create a grid to organize everything in\n"
+"        this._grid = new Gtk.Grid;\n"
+"\n"
+"        // Attach the treeview and label to the grid\n"
+"        this._grid.attach (this._treeView, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._label, 0, 1, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
 msgstr ""
 
-#: C/comboboxtext.js.page:122(p)
+#: C/treeview_simple_liststore.js.page:230(section/p)
 msgid ""
-"We're going to create a pop-up <link xref=\"messagedialog.js\">MessageDialog,"
-"</link> which shows you a message based on which distro you select. First, "
-"we create the array of responses to use. Since the first string in our "
-"ComboBoxText is just the \"Select distribution\" message, we make the first "
-"string in our array blank."
+"After we've gotten that out of the way, we create a <link xref=\"grid.js"
+"\">Grid</link> to put everything in, then add it to our window and tell the "
+"window to show itself and its contents."
 msgstr ""
 
-#: C/comboboxtext.js.page:146(p)
+#: C/treeview_simple_liststore.js.page:234(section/title)
+msgid "Function which handles a changed selection"
+msgstr "Función que xestiona a selección cambiada"
+
+#: C/treeview_simple_liststore.js.page:236(section/code)
+#, no-wrap
 msgid ""
-"Before showing a MessageDialog, we first test to make sure you didn't choose "
-"the \"Select distribution\" message. After that, we set its text to be the "
-"entry in the array that corresponds to the active entry in our ComboBoxText. "
-"We do that using the <file>get_active</file> method, which returns the "
-"number ID of your selection."
+"\n"
+"    _onSelectionChanged: function () {\n"
+"\n"
+"        // Grab a treeiter pointing to the current selection\n"
+"        let [ isSelected, model, iter ] = this.selection.get_selected();\n"
+"\n"
+"        // Set the label to read off the values stored in the current selection\n"
+"        this._label.set_label (\"\\n\" +\n"
+"            this._listStore.get_value (iter, 0) + \" \" +\n"
+"            this._listStore.get_value (iter, 1) + \" \" +\n"
+"            this._listStore.get_value (iter, 2) + \"\\n\" +\n"
+"            this._listStore.get_value (iter, 3));\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
 msgstr ""
 
-#: C/comboboxtext.js.page:166(p)
+#: C/treeview_simple_liststore.js.page:253(section/p)
 msgid ""
-"Finally, we create a new instance of the finished ComboBoxTextExample class, "
-"and set the application running."
+"The line of code with the let statement is a little convoluted, but it's "
+"nonetheless the best way to get a TreeIter pointing to the same row as our "
+"TreeSelection. It has to create a couple of other object references, but "
+"<file>iter</file> is the only one we need."
 msgstr ""
 
-#: C/comboboxtext.js.page:182(link)
-msgid "Gtk.ComboBoxText"
+#: C/treeview_simple_liststore.js.page:254(section/p)
+msgid ""
+"After we've done that, we call the Label's <file>set_label</file> function, "
+"and use the ListStore's <file>get_value</file> function a handful of times "
+"to fill in the data we want to put in it. Its parameters are a TreeIter "
+"pointing to the row we want to get data from, and the column."
 msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/colorbutton.vala.page:23(None) C/colorbutton.py.page:21(None)
-#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
-msgid "@@image: 'media/colorbutton.png'; md5=904539d26fe367bf99f9a0961cfc9a03"
-msgstr "@@image: 'media/colorbutton.png'; md5=904539d26fe367bf99f9a0961cfc9a03"
-
-#: C/colorbutton.vala.page:7(title)
-msgid "ColorButton (Vala)"
-msgstr "ColorButton (Vala)"
-
-#: C/colorbutton.vala.page:19(desc) C/colorbutton.py.page:17(desc)
-msgid "A button to launch a color selection dialog"
-msgstr "Un botón para iniciar un diálogo de selección de cor"
-
-#: C/colorbutton.vala.page:22(title) C/colorbutton.py.page:20(title)
-#| msgid "Button"
-msgid "ColorButton"
-msgstr "ColorButton"
-
-#: C/colorbutton.vala.page:24(p)
-msgid "RGB values of the selected color are shown in the label."
-msgstr "Os valores RGB da cor seleccionada mostraranse na etiqueta."
-
-#: C/colorbutton.vala.page:31(link)
-#| msgid "Gtk.ButtonsType"
-msgid "Gtk.ColorButton"
-msgstr "Gtk.ColorButton"
-
-#: C/colorbutton.vala.page:32(link)
-msgid "Gdk.RGBA"
-msgstr "Gdk.RGBA"
-
-#: C/colorbutton.py.page:7(title)
-msgid "ColorButton (Python)"
-msgstr "ColorButton (Python)"
-
-#: C/colorbutton.py.page:22(p)
+#: C/treeview_simple_liststore.js.page:255(section/p)
 msgid ""
-"This ColorButton launches a color selection dialog and prints in the "
-"terminal the RGB values of the color selected."
+"Here, we want to get data from all four columns, including the \"hidden\" "
+"one that's not part of the TreeView. This way, we can use our Label to show "
+"strings that are too large to fit in the TreeView, and that we don't need to "
+"see at a glance."
 msgstr ""
 
-#: C/colorbutton.py.page:32(title)
-msgid "Useful methods for a ColorButton widget"
+#: C/treeview_simple_liststore.js.page:257(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new TreeViewExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/colorbutton.py.page:33(p)
+#: C/treeview_simple_liststore.js.page:262(section/p)
 msgid ""
-"<code>set_color(color)</code>, where the <code>color</code> is defined as in "
-"the example, sets the color of the ColorButton, which by default is black. "
-"<code>get_color()</code> returns the color."
+"Finally, we create a new instance of the finished TreeViewExample class, and "
+"set the application running."
 msgstr ""
 
-#: C/colorbutton.py.page:40(link)
-#| msgid "Gtk.ButtonsType"
-msgid "GtkColorButton"
-msgstr "GtkColorButton"
-
-#: C/colorbutton.py.page:41(link)
-msgid "GtkColorChooser"
-msgstr "GtkColorChooser"
-
-#: C/colorbutton.py.page:42(link)
-msgid "RGBA Colors"
-msgstr "Cores RGBA"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/checkbutton.vala.page:21(None) C/checkbutton.py.page:22(None)
-#: C/checkbutton.js.page:21(None) C/checkbutton.c.page:21(None)
-#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
-msgid "@@image: 'media/checkbutton.png'; md5=7921a6812c87dd2b3781f4fad241e858"
-msgstr "@@image: 'media/checkbutton.png'; md5=7921a6812c87dd2b3781f4fad241e858"
+#: C/treeview_simple_liststore.js.page:267(section/code)
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"const Pango = imports.gi.Pango;\n"
+"\n"
+"const TreeViewExample = new Lang.Class({\n"
+"    Name: 'TreeView Example with Simple ListStore',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jstreeviewsimpleliststore'\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 250,\n"
+"            default_width: 100,\n"
+"            border_width: 20,\n"
+"            title: \"My Phone Book\"});\n"
+"\n"
+"        // Create the underlying liststore for the phonebook\n"
+"        this._listStore = new Gtk.ListStore ();\n"
+"        this._listStore.set_column_types ([\n"
+"            GObject.TYPE_STRING,\n"
+"            GObject.TYPE_STRING,\n"
+"            GObject.TYPE_STRING,\n"
+"            GObject.TYPE_STRING]);\n"
+"\n"
+"        // Data to go in the phonebook\n"
+"        let phonebook =\n"
+"            [{ name: \"Jurg\", surname: \"Billeter\", phone: \"555-0123\",\n"
+"                description: \"A friendly person.\"},\n"
+"             { name: \"Johannes\", surname: \"Schmid\", phone: \"555-1234\",\n"
+"                description: \"Easy phone number to remember.\"},\n"
+"             { name: \"Julita\", surname: \"Inca\", phone: \"555-2345\",\n"
+"                description: \"Another friendly person.\"},\n"
+"             { name: \"Javier\", surname: \"Jardon\", phone: \"555-3456\",\n"
+"                description: \"Bring fish for his penguins.\"},\n"
+"             { name: \"Jason\", surname: \"Clinton\", phone: \"555-4567\",\n"
+"                description: \"His cake's not a lie.\"},\n"
+"             { name: \"Random J.\", surname: \"Hacker\", phone: \"555-5678\",\n"
+"                description: \"Very random!\"}];\n"
+"\n"
+"        // Put the data in the phonebook\n"
+"        for (let i = 0; i &lt; phonebook.length; i++ ) {\n"
+"            let contact = phonebook [i];\n"
+"            this._listStore.set (this._listStore.append(), [0, 1, 2, 3],\n"
+"                [contact.name, contact.surname, contact.phone, contact.description]);\n"
+"        }\n"
+"\n"
+"        // Create the treeview\n"
+"        this._treeView = new Gtk.TreeView ({\n"
+"            expand: true,\n"
+"            model: this._listStore });\n"
+"\n"
+"        // Create the columns for the address book\n"
+"        let firstName = new Gtk.TreeViewColumn ({ title: \"First Name\" });\n"
+"        let lastName = new Gtk.TreeViewColumn ({ title: \"Last Name\" });\n"
+"        let phone = new Gtk.TreeViewColumn ({ title: \"Phone Number\" });\n"
+"\n"
+"        // Create a cell renderer for when bold text is needed\n"
+"        let bold = new Gtk.CellRendererText ({\n"
+"            weight: Pango.Weight.BOLD });\n"
+"\n"
+"        // Create a cell renderer for normal text\n"
+"        let normal = new Gtk.CellRendererText ();\n"
+"\n"
+"        // Pack the cell renderers into the columns\n"
+"        firstName.pack_start (bold, true);\n"
+"        lastName.pack_start (normal, true);\n"
+"        phone.pack_start (normal, true);\n"
+"\n"
+"        // Set each column to pull text from the TreeView's model\n"
+"        firstName.add_attribute (bold, \"text\", 0);\n"
+"        lastName.add_attribute (normal, \"text\", 1);\n"
+"        phone.add_attribute (normal, \"text\", 2);\n"
+"\n"
+"        // Insert the columns into the treeview\n"
+"        this._treeView.insert_column (firstName, 0);\n"
+"        this._treeView.insert_column (lastName, 1);\n"
+"        this._treeView.insert_column (phone, 2);\n"
+"\n"
+"        // Create the label that shows details for the name you select\n"
+"        this._label = new Gtk.Label ({ label: \"\" });\n"
+"\n"
+"        // Get which item is selected\n"
+"        this.selection = this._treeView.get_selection();\n"
+"\n"
+"        // When something new is selected, call _on_changed\n"
+"        this.selection.connect ('changed', Lang.bind (this, this._onSelectionChanged));\n"
+"\n"
+"        // Create a grid to organize everything in\n"
+"        this._grid = new Gtk.Grid;\n"
+"\n"
+"        // Attach the treeview and label to the grid\n"
+"        this._grid.attach (this._treeView, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._label, 0, 1, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onSelectionChanged: function () {\n"
+"\n"
+"        // Grab a treeiter pointing to the current selection\n"
+"        let [ isSelected, model, iter ] = this.selection.get_selected();\n"
+"\n"
+"        // Set the label to read off the values stored in the current selection\n"
+"        this._label.set_label (\"\\n\" +\n"
+"            this._listStore.get_value (iter, 0) + \" \" +\n"
+"            this._listStore.get_value (iter, 1) + \" \" +\n"
+"            this._listStore.get_value (iter, 2) + \"\\n\" +\n"
+"            this._listStore.get_value (iter, 3));\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new TreeViewExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
 
-#: C/checkbutton.vala.page:7(title)
+#: C/treeview_simple_liststore.js.page:281(item/p)
 #, fuzzy
-msgid "CheckButton (Vala)"
-msgstr "CheckButton (Vala)"
-
-#: C/checkbutton.vala.page:17(desc)
-msgid "Create widgets with a disrete toggle button"
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeSelection.";
+"html\">Gtk.TreeSelection</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/checkbutton.vala.page:20(title) C/checkbutton.py.page:21(title)
-#: C/checkbutton.js.page:20(title) C/checkbutton.c.page:20(title)
-#| msgid "Button"
-msgid "CheckButton"
-msgstr "CheckButton"
-
-#: C/checkbutton.vala.page:22(p) C/checkbutton.py.page:23(p)
-#: C/checkbutton.c.page:22(p)
-msgid "This CheckButton toggles the title."
-msgstr "Este CheckButton troca o título."
-
-#: C/checkbutton.vala.page:29(link) C/checkbutton.js.page:139(link)
-#| msgid "Gtk.ButtonsType"
-msgid "Gtk.CheckButton"
-msgstr "Gtk.CheckButton"
-
-#: C/checkbutton.py.page:7(title)
-msgid "CheckButton (Python)"
-msgstr "CheckButton (Python)"
-
-#: C/checkbutton.py.page:18(desc)
-msgid "A toggle button in a window"
+#: C/treeview_simple_liststore.js.page:282(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeView.html";
+"\">Gtk.TreeView</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/checkbutton.py.page:32(p)
+#: C/treeview_simple_liststore.js.page:283(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.";
+"TreeViewColumn.html\">Gtk.TreeViewColumn</link>"
+msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#.
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/treeview_simple_liststore.py.page:23(media)
+#: C/treeview_simple_liststore.vala.page:23(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/treeview_simple_liststore.png'; "
+#| "md5=2dc501a2b95b094da985d37b66aee90c"
+msgctxt "_"
 msgid ""
-"We could also create the CheckButton with <code>button = Gtk.CheckButton."
-"new_with_label(\"Show Title\")</code>."
+"external ref='media/treeview_simple_liststore.png' "
+"md5='2dc501a2b95b094da985d37b66aee90c'"
 msgstr ""
+"@@image: 'media/treeview_simple_liststore.png'; "
+"md5=2dc501a2b95b094da985d37b66aee90c"
 
-#: C/checkbutton.py.page:37(title)
-msgid "Useful methods for a CheckButton widget"
-msgstr "Métodos útiles para o widget CheckButton"
-
-#: C/checkbutton.py.page:49(link) C/checkbutton.c.page:29(link)
-#| msgid "Gtk.ButtonsType"
-msgid "GtkCheckButton"
-msgstr "GtkCheckButton"
-
-#: C/checkbutton.js.page:7(title)
-#| msgid "Classes in JavaScript"
-msgid "CheckButton (JavaScript)"
-msgstr "CheckButton (JavaScript)"
-
-#: C/checkbutton.js.page:17(desc)
-#| msgid "A button which can be connected to other widgets"
-msgid "A box which can be checked or unchecked"
-msgstr "Unha caixa que pode estar marcada ou desmarcada"
+#: C/treeview_simple_liststore.py.page:7(info/title)
+#, fuzzy
+#| msgid "Simple TreeView with ListStore (Python)"
+msgctxt "text"
+msgid "Simple TreeView with ListStore (Python)"
+msgstr "TreeView simple con ListStore (Python)"
 
-#: C/checkbutton.js.page:22(p)
-msgid ""
-"This application has a CheckButton. Whether the box is checked dictates "
-"whether the window's title bar shows anything."
-msgstr ""
+#: C/treeview_simple_liststore.py.page:19(info/desc)
+msgid "A TreeView displaying a ListStore (simpler example)"
+msgstr "Un TreeView mostrando un ListStore (exemplo máis simple)"
 
-#: C/checkbutton.js.page:23(p)
-msgid ""
-"A CheckButton sends the \"toggled\" signal when it's checked or unchecked. "
-"While it's checked, the \"active\" property is true. While it's not, \"active"
-"\" tests as false."
-msgstr ""
+#: C/treeview_simple_liststore.py.page:22(page/title)
+msgid "Simple TreeView with ListStore"
+msgstr "TreeView Simple con ListStore"
 
-#: C/checkbutton.js.page:66(p)
+#: C/treeview_simple_liststore.py.page:31(section/code)
+#, no-wrap
 msgid ""
-"All the code for this sample goes in the CheckButtonExample class. The above "
-"code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> for our widgets and window to "
-"go in."
+"from gi.repository import Gtk\n"
+"from gi.repository import Pango\n"
+"import sys\n"
+"\n"
+"columns = [\"First Name\",\n"
+"           \"Last Name\",\n"
+"           \"Phone Number\"]\n"
+"\n"
+"phonebook = [[\"Jurg\", \"Billeter\", \"555-0123\"],\n"
+"             [\"Johannes\", \"Schmid\", \"555-1234\"],\n"
+"             [\"Julita\", \"Inca\", \"555-2345\"],\n"
+"             [\"Javier\", \"Jardon\", \"555-3456\"],\n"
+"             [\"Jason\", \"Clinton\", \"555-4567\"],\n"
+"             [\"Random J.\", \"Hacker\", \"555-5678\"]]\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"My Phone Book\", application=app)\n"
+"        self.set_default_size(250, 100)\n"
+"        self.set_border_width(10)\n"
+"\n"
+"        # the data in the model (three strings for each row, one for each column)\n"
+"        listmodel = Gtk.ListStore(str, str, str)\n"
+"        # append the values in the model\n"
+"        for i in range(len(phonebook)):\n"
+"            listmodel.append(phonebook[i])\n"
+"\n"
+"        # a treeview to see the data stored in the model\n"
+"        view = Gtk.TreeView(model=listmodel)\n"
+"        # for each column\n"
+"        for i in range(len(columns)):\n"
+"            # cellrenderer to render the text\n"
+"            cell = Gtk.CellRendererText()\n"
+"            # the text in the first column should be in boldface\n"
+"            if i == 0:\n"
+"                cell.props.weight_set=True\n"
+"                cell.props.weight=Pango.Weight.BOLD\n"
+"            # the column is created\n"
+"            col = Gtk.TreeViewColumn(columns[i], cell, text=i)\n"
+"            # and it is appended to the treeview\n"
+"            view.append_column(col)\n"
+"\n"
+"        # when a row is selected, it emits a signal\n"
+"        view.get_selection().connect(\"changed\", self.on_changed)\n"
+"\n"
+"        # the label we use to show the selection\n"
+"        self.label = Gtk.Label()\n"
+"        self.label.set_text(\"\")\n"
+"\n"
+"        # a grid to attach the widgets\n"
+"        grid = Gtk.Grid()\n"
+"        grid.attach(view, 0, 0, 1, 1)\n"
+"        grid.attach(self.label, 0, 1, 1, 1)\n"
+"\n"
+"        # attach the grid to the window\n"
+"        self.add(grid)\n"
+"\n"
+"    def on_changed(self, selection):\n"
+"        # get the model and the iterator that points at the data in the model\n"
+"        (model, iter) = selection.get_selected()\n"
+"        # set the label to a new value depending on the selection\n"
+"        self.label.set_text(\"\\n %s %s %s\" %(model[iter][0],  model[iter][1], model[iter][2]))\n"
+"        return True\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/checkbutton.js.page:80(p)
+#: C/treeview_simple_liststore.py.page:49(item/p)
 msgid ""
-"The _buildUI function is where we put all the code to create the "
-"application's user interface. The first step is creating a new <link href="
-"\"GtkApplicationWindow.js.page\">Gtk.ApplicationWindow</link> to put all our "
-"widgets into."
+"<link href=\"http://developer.gnome.org/pango/stable/pango-Fonts.html";
+"\">Fonts</link>"
 msgstr ""
 
-#: C/checkbutton.js.page:84(title)
-#| msgid "Reacting to the clicks"
-msgid "Creating the checkbutton"
-msgstr "Crear un checkbutton"
+#: C/treeview_simple_liststore.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Simple Treeview with ListStore (Vala)"
+msgctxt "text"
+msgid "Simple Treeview with ListStore (Vala)"
+msgstr "Treeview simple con ListStore (Vala)"
 
-#: C/checkbutton.js.page:96(p)
-msgid ""
-"This code creates the checkbutton itself. The label next to the checkbutton "
-"is created by giving the checkbutton the \"label\" property and assigning a "
-"string value to it. Since this checkbutton toggles whether the window title "
-"is on or off, and the window title will be on to start with, we want the box "
-"to be checked by default. Whenever the user checks or unchecks the box, we "
-"call the ._toggledCB function."
+#: C/treeview_simple_liststore.vala.page:19(info/desc)
+msgid "A widget can display any TreeModel implementation (lists and trees)"
 msgstr ""
+"Un widget pode mostrar calquera implementación de TreeModel (listas e "
+"árbores)"
 
-#: C/checkbutton.js.page:102(p)
+#: C/treeview_simple_liststore.vala.page:24(page/p)
 msgid ""
-"This code finishes up creating the UI, by telling the window to show itself "
-"and all child widgets (which is just the checkbutton in this case)."
-msgstr ""
-
-#: C/checkbutton.js.page:106(title)
-msgid "Function which handles the checkbutton's toggling"
+"This TreeView displays a simple ListStore with the Selection \"changed\" "
+"signal connected."
 msgstr ""
+"Este TreeView mostra un ListStore simple con un sinal de selección «changed» "
+"conectado."
 
-#: C/checkbutton.js.page:120(p)
+#: C/treeview_simple_liststore.vala.page:26(page/code)
+#, no-wrap
 msgid ""
-"If the checkbutton is toggled from on to off, we want the window title to "
-"disappear. If it's toggled from off to on, we want it to reappear. We can "
-"tell which way it was toggled by testing to see whether it's active "
-"(checked) or not afterwards. A simple if / else statement which calls the "
-"checkbutton's get_active() method will work for this."
+"public class PhoneBookEntry {\n"
+"\tpublic string firstname;\n"
+"\tpublic string lastname;\n"
+"\tpublic string phone;\n"
+"\n"
+"\tpublic PhoneBookEntry (string f, string l, string p) {\n"
+"\t\tthis.firstname = f;\n"
+"\t\tthis.lastname = l;\n"
+"\t\tthis.phone = p;\n"
+"\t}\n"
+"}\n"
+"\n"
+"class TreeViewSimpleListStore : Gtk.ApplicationWindow {\n"
+"\n"
+"\tGtk.Label label;\n"
+"\n"
+"\tPhoneBookEntry[] phonebook = {\n"
+"\t\tnew PhoneBookEntry (\"Jurg\", \"Billeter\", \"555-0123\"),\n"
+"\t\tnew PhoneBookEntry (\"Johannes\", \"Schmid\", \"555-1234\"),\n"
+"\t\tnew PhoneBookEntry (\"Julita\", \"Inca\", \"555-2345\"),\n"
+"\t\tnew PhoneBookEntry (\"Javier\", \"Jardon\", \"555-3456\"),\n"
+"\t\tnew PhoneBookEntry (\"Jason\", \"Clinton\", \"555-4567\"),\n"
+"\t\tnew PhoneBookEntry (\"Random J.\", \"Hacker\", \"555-5678\")\n"
+"\t};\n"
+"\n"
+"\tenum Column {\n"
+"\t\tFIRSTNAME,\n"
+"\t\tLASTNAME,\n"
+"\t\tPHONE\n"
+"\t}\n"
+"\n"
+"\tinternal TreeViewSimpleListStore (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"My Phone Book\");\n"
+"\n"
+"\t\tthis.set_default_size (250, 100);\n"
+"\t\tthis.border_width = 10;\n"
+"\n"
+"\t\tvar view = new Gtk.TreeView ();\n"
+"\t\tthis.setup_treeview (view);\n"
+"\t\tview.expand = true;\n"
+"\n"
+"\t\tlabel = new Gtk.Label (\"\");\n"
+"\n"
+"\t\tvar grid = new Gtk.Grid ();\n"
+"\n"
+"\t\tgrid.attach (view, 0, 0, 1, 1);\n"
+"\t\tgrid.attach (label, 0, 1, 1, 1);\n"
+"\t\tthis.add (grid);\n"
+"\n"
+"\t\tvar selection = view.get_selection ();\n"
+"\t\tselection.changed.connect (this.on_changed);\n"
+"\t}\n"
+"\n"
+"\tvoid setup_treeview (Gtk.TreeView view) {\n"
+"\t\tvar listmodel = new Gtk.ListStore (3, typeof (string),\n"
+"                                              typeof (string),\n"
+"                                              typeof (string));\n"
+"\t\tview.set_model (listmodel);\n"
+"\n"
+"\t\tvar cell = new Gtk.CellRendererText ();\n"
+"\n"
+"\t\t/* 'weight' refers to font boldness.\n"
+"\t\t *  400 is normal.\n"
+"\t\t *  700 is bold.\n"
+"\t\t */\n"
+"\t\tcell.set (\"weight_set\", true);\n"
+"\t\tcell.set (\"weight\", 700);\n"
+"\n"
+"\t\t/*columns*/\n"
+"\t\tview.insert_column_with_attributes (-1, \"First Name\",\n"
+"                                                cell, \"text\",\n"
+"                                                Column.FIRSTNAME);\n"
+"\n"
+"\t\tview.insert_column_with_attributes (-1, \"Last Name\",\n"
+"                                                new Gtk.CellRendererText (),\n"
+"                                                \"text\", Column.LASTNAME);\n"
+"\n"
+"\t\tview.insert_column_with_attributes (-1, \"Phone Number\",\n"
+"                                                new Gtk.CellRendererText (),\n"
+"                                                \"text\", Column.PHONE);\n"
+"\n"
+"\t\t/* Insert the phonebook into the ListStore */\n"
+"\t\tGtk.TreeIter iter;\n"
+"\t\tfor (int i = 0; i &lt; phonebook.length; i++) {\n"
+"\t\t\tlistmodel.append (out iter);\n"
+"\t\t\tlistmodel.set (iter, Column.FIRSTNAME,\n"
+"                                 phonebook[i].firstname,\n"
+"                                 Column.LASTNAME, phonebook[i].lastname,\n"
+"                                 Column.PHONE, phonebook[i].phone);\n"
+"\t\t}\n"
+"\t}\n"
+"\n"
+"\tvoid on_changed (Gtk.TreeSelection selection) {\n"
+"\t\tGtk.TreeModel model;\n"
+"\t\tGtk.TreeIter iter;\n"
+"\t\tstring name;\n"
+"\t\tstring lastname;\n"
+"\t\tstring phone;\n"
+"\n"
+"\t\tif (selection.get_selected (out model, out iter)) {\n"
+"\t\t\tmodel.get (iter,\n"
+"                                   Column.FIRSTNAME, out name,\n"
+"                                   Column.LASTNAME, out lastname,\n"
+"                                   Column.PHONE, out phone);\n"
+"\n"
+"\t\t\tlabel.set_text (\"\\n\" + name + \" \" + lastname + \" \" + phone);\n"
+"\t\t}\n"
+"\t}\n"
+"}\n"
+"\n"
+"class MyApplication : Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\n"
+"\t\t/* Create new Window and show all the things. */\n"
+"\t\tnew TreeViewSimpleListStore (this).show_all ();\n"
+"\t}\n"
+"\n"
+"\tinternal MyApplication () {\n"
+"\t\tObject (application_id: \"example.liststore.simple.treeview\");\n"
+"\t}\n"
+"}\n"
+"\n"
+"int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/checkbutton.js.page:126(p)
+#: C/treeview_simple_liststore.vala.page:31(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Finally, we create a new instance of the finished CheckButtonExample class, "
-"and set the application running."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TreeView.html\";>Gtk."
+"TreeView</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/checkbutton.c.page:7(title)
-msgid "CheckButton (C)"
+#: C/treeview_simple_liststore.vala.page:33(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TreeSelection.html\";>Gtk."
+"TreeSelection</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/checkbutton.c.page:13(email)
-#| msgid "tiffany antopolski gmail com"
-msgid "tiffany antpoolski gmail com"
-msgstr "tiffany antopolski gmail com"
-
-#: C/checkbutton.c.page:17(desc)
-msgid "Create widgets with a discrete ToggleButton"
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/treeview_treestore.py.page:21(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/treeview_treestore.png'; "
+#| "md5=5ca87bc4acd55c527b3fb5fd46779d85"
+msgctxt "_"
+msgid ""
+"external ref='media/treeview_treestore.png' "
+"md5='5ca87bc4acd55c527b3fb5fd46779d85'"
 msgstr ""
+"@@image: 'media/treeview_treestore.png'; md5=5ca87bc4acd55c527b3fb5fd46779d85"
 
-#: C/c.page:6(title)
-msgid "C"
-msgstr "C"
+#: C/treeview_treestore.py.page:17(info/desc)
+msgid "A TreeView displaying a TreeStore (simpler example)"
+msgstr "Un TreeView mostrando un TreeStore (exemplo máis simple)"
 
-#: C/c.page:15(title)
-msgid "Tutorials, code samples, and plaform demos in C"
-msgstr "Titoriais, exemplos de código e demostracións da plataforma en C"
+#: C/treeview_treestore.py.page:22(page/p)
+msgid "This TreeView displays a TreeStore."
+msgstr "Este TreeView mostra un TreeStore."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/buttonbox.py.page:23(None)
+#: C/treeview_treestore.py.page:29(section/code)
+#, no-wrap
 msgid ""
-"@@image: 'media/buttonbox_calculator.png'; "
-"md5=ce0de08b7ac66f517290e33e6d33d508"
-msgstr ""
-"@@image: 'media/buttonbox_calculator.png'; "
-"md5=ce0de08b7ac66f517290e33e6d33d508"
-
-#: C/buttonbox.py.page:7(title)
-msgid "ButtonBox (Python)"
-msgstr "ButtonBox (Python)"
-
-#: C/buttonbox.py.page:18(desc)
-msgid "A container for arranging buttons"
+"from gi.repository import Gtk\n"
+"from gi.repository import Pango\n"
+"import sys\n"
+"\n"
+"books = [[\"Tolstoy, Leo\", \"War and Peace\", \"Anna Karenina\"],\n"
+"         [\"Shakespeare, William\", \"Hamlet\", \"Macbeth\", \"Othello\"],\n"
+"         [\"Tolkien, J.R.R.\", \"The Lord of the Rings\"]]\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Library\", application=app)\n"
+"        self.set_default_size(250, 100)\n"
+"        self.set_border_width(10)\n"
+"\n"
+"        # the data are stored in the model\n"
+"        # create a treestore with one column\n"
+"        store = Gtk.TreeStore(str)\n"
+"        for i in range(len(books)):\n"
+"            # the iter piter is returned when appending the author\n"
+"            piter = store.append(None, [books[i][0]])\n"
+"            # append the books as children of the author\n"
+"            j = 1\n"
+"            while j &lt; len(books[i]):\n"
+"                store.append(piter, [books[i][j]])\n"
+"                j += 1\n"
+"\n"
+"        # the treeview shows the model\n"
+"        # create a treeview on the model store\n"
+"        view = Gtk.TreeView()\n"
+"        view.set_model(store)\n"
+"\n"
+"        # the cellrenderer for the column - text\n"
+"        renderer_books = Gtk.CellRendererText()\n"
+"        # the column is created\n"
+"        column_books = Gtk.TreeViewColumn(\"Books by Author\", renderer_books, text=0)\n"
+"        # and it is appended to the treeview\n"
+"        view.append_column(column_books)\n"
+"\n"
+"        # the books are sortable by author\n"
+"        column_books.set_sort_column_id(0)\n"
+"\n"
+"        # add the treeview to the window\n"
+"        self.add(view)\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        win = MyWindow(self)\n"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/buttonbox.py.page:21(title)
-#| msgid "Button"
-msgid "ButtonBox"
-msgstr "ButtonBox"
-
-#: C/buttonbox.py.page:24(p)
-msgid "A calculator - the buttons are enclosed in horizontal ButtonBoxes."
-msgstr ""
-"Unha calculadora - os botóns están dispostos en ButtonBoxes horizontais."
+#: C/translate.page:15(credit/name)
+msgid "Michael Hill"
+msgstr "Michael Hill"
 
-#: C/buttonbox.py.page:34(title)
-msgid "Uselful methods for a ButtonBox widget"
-msgstr "Métodos útiles para o widget ButtonBox"
+#: C/translate.page:23(page/title)
+msgid "Help translate"
+msgstr "Axude na tradución"
 
-#: C/buttonbox.py.page:36(p)
+#: C/translate.page:24(page/p)
 msgid ""
-"The layout of the ButtonBox are set with <code>set_layout(layout)</code>, "
-"where <code>layout</code> can be <code>Gtk.ButtonBoxStyle.SPREAD</code> "
-"(buttons are evenly spread across the box), <code>Gtk.ButtonBoxStyle.EDGE</"
-"code> (buttons are placed at the edges of the box), <code>Gtk.ButtonBoxStyle."
-"START</code> (buttons are grouped towards the start of the box), <code>Gtk."
-"ButtonBoxStyle.END</code> (buttons are grouped towards the end of the box), "
-"<code>Gtk.ButtonBoxStyle.CENTER</code> (buttons are centered in the box)."
+"The <app>Tutorial Demos</app> are being translated by a world-wide volunteer "
+"community. You are welcome to participate."
 msgstr ""
 
-#: C/buttonbox.py.page:37(p)
+#: C/translate.page:27(page/p)
 msgid ""
-"<code>set_child_secondary(button, is_secondary)</code> sets whether "
-"<code>button</code> should appear in a secondary group of children. A "
-"typical use of a secondary child is the help button in a dialog. This group "
-"appears after the other children if the style is <code>START</code>, "
-"<code>SPREAD</code> or <code>EDGE</code>, and before the other children if "
-"the style is <code>END</code>. If the style is <code>START</code> or "
-"<code>END</code>, then the secondary children are aligned at the other end "
-"of the button box from the main children. For the other styles, they appear "
-"immediately next to the main children."
+"There are <link href=\"http://l10n.gnome.org/module/gnome-devel-docs/\";>many "
+"languages</link> for which translations are still needed."
 msgstr ""
+"Hai <link href=\"http://l10n.gnome.org/module/gnome-devel-docs/\";>moitos "
+"idiomas</link> para os cales se precisan traducións."
 
-#: C/buttonbox.py.page:38(p)
+#: C/translate.page:30(page/p)
 msgid ""
-"<code>set_child_non_homogeneous(button, is_non_homogeneous)</code> sets "
-"whether the child is exempted from homogeous sizing. Default value is "
-"<code>False</code>."
+"To start translating you will need to <link href=\"http://l10n.gnome.org";
+"\">create an account</link> and join the <link href=\"http://l10n.gnome.org/";
+"teams/\">translation team</link> for your language. This will give you the "
+"ability to upload new translations."
 msgstr ""
+"Para comezar a traducir precisará <link href=\"http://l10n.gnome.org\";>crear "
+"unha conta</link> e unirse ao <link href=\"http://l10n.gnome.org/teams/";
+"\">equipo de tradución</link> do seu idioma. Isto daralle a posibilidade de "
+"subir traducións novas."
 
-#: C/buttonbox.py.page:39(p)
+#: C/translate.page:34(page/p)
 msgid ""
-"<code>set_spacing(spacing)</code> sets the spacing, in pixels, between the "
-"buttons of the box."
-msgstr ""
-
-#: C/buttonbox.py.page:47(link)
-#| msgid "Gtk.ButtonsType"
-msgid "GtkButtonBox"
-msgstr "GtkButtonBox"
-
-#: C/buttonbox.py.page:48(link)
-msgid "GtkBox"
-msgstr "GtkBox"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/button.vala.page:23(None) C/button.py.page:23(None)
-#: C/button.js.page:21(None) C/button.c.page:24(None)
-#| msgid "@@image: 'media/button.png'; md5=7a7f59f0f168326579e22801fd917c0c"
-msgid "@@image: 'media/button.png'; md5=8d69efbb3a0d3e043af6139b6492171c"
-msgstr "@@image: 'media/button.png'; md5=8d69efbb3a0d3e043af6139b6492171c"
-
-#: C/button.vala.page:7(title)
-#| msgid "Button"
-msgid "Button (Vala)"
-msgstr "Botón (Vala)"
-
-#: C/button.vala.page:18(desc) C/button.py.page:18(desc)
-#: C/button.c.page:19(desc)
-msgid "A button widget which emits a signal when clicked"
-msgstr ""
-
-#: C/button.vala.page:21(title)
-msgid "Button widget"
-msgstr "Widget de botón"
-
-#: C/button.vala.page:24(p) C/button.py.page:24(p)
-msgid "A button widget connected to a simple callback function."
+"You can chat with GNOME translators using <link href=\"https://cbe003.chat.";
+"mibbit.com/?url=irc%3A%2F%2Firc.gnome.org%2Fi18n\">irc</link>. People on the "
+"channel are located worldwide, so you may not get an immediate response as a "
+"result of timezone differences."
 msgstr ""
+"Pode conversar cos tradutores de GNOME empregando <link href=\"https://";
+"cbe003.chat.mibbit.com/?url=irc%3A%2F%2Firc.gnome.org%2Fi18n\">irc</link>. "
+"As persoas da canle están espallados por todo o mundo, polo que poda que non "
+"obteña resposta de forma inmediata debido ás diferenzas de fuso de hora."
 
-#: C/button.vala.page:28(p)
+#: C/translate.page:37(page/p)
 msgid ""
-"In this sample we used the following: <link href=\"http://www.valadoc.org/gtk";
-"+-3.0/Gtk.Button.html\">Gtk.Button</link>"
+"Alternatively, you can contact the Internationalization Team using their "
+"<link href=\"http://mail.gnome.org/mailman/listinfo/gnome-i18n\";>mailing "
+"list</link>."
 msgstr ""
+"De forma alternativa pode contactar o Equipo de Internacionalización "
+"empregando a <link href=\"http://mail.gnome.org/mailman/listinfo/gnome-i18n";
+"\">rolda de correo</link>."
 
-#: C/button.py.page:7(title)
-msgid "Button (Python)"
-msgstr "Botón (Python)"
-
-#: C/button.py.page:21(title) C/button.js.page:20(title)
-#: C/button.c.page:22(title)
-msgid "Button"
-msgstr "Botón"
-
-#: C/button.py.page:33(title)
-msgid "Useful methods for a Button widget"
-msgstr "Métodos útiles para o widget Button"
+#: C/tutorial.py.page:8(info/title)
+#, fuzzy
+#| msgid "Beginner's Tutorial (Python)"
+msgctxt "text"
+msgid "Beginner's Tutorial (Python)"
+msgstr "Titorial para principantes (Python)"
 
-#: C/button.py.page:35(p)
+#: C/tutorial.py.page:12(info/desc)
 msgid ""
-"<code>button = Gtk.Button(label=\"Click me\")</code> could also be used "
-"create a button and set the text directly. For a general discussion of this, "
-"see <link xref=\"properties.py\">here</link>."
+"A tutorial for beginners who want to learn how to program GUIs using GTK+ in "
+"Python."
 msgstr ""
+"Un titorial para principiantes que queren aprender como programar interfaces "
+"de usuario GTK+ empregando Python."
 
-#: C/button.py.page:37(p)
-msgid ""
-"<code>set_relief(Gtk.ReliefStyle.NONE)</code> sets to none the relief style "
-"of the edges of the Gtk.Button - as opposed to <code>Gtk.ReliefStyle.NORMAL</"
-"code>."
-msgstr ""
+#: C/tutorial.py.page:25(page/title)
+msgid "0 Beginner's Tutorial"
+msgstr "0. Titorial para principiantes"
 
-#: C/button.py.page:38(p)
+#: C/tutorial.py.page:30(synopsis/p)
 msgid ""
-"If the label of the button is a <link href=\"http://developer.gnome.org/gtk3/";
-"unstable/gtk3-Stock-Items.html\">stock icon</link>, <code>set_use_stock(True)"
-"</code> sets the label as the name of the corresponding stock icon."
+"If you have never programmed before, or are not familiar with the concepts "
+"of object oriented programming, you may need to learn a few basics first. "
+"The book <link href=\"http://learnpythonthehardway.org/book/\";>Learn Python "
+"the Hard Way</link> or <link href=\"http://docs.python.org/tutorial/index.";
+"html\">The Python Tutorial</link> may be a better place for you to start. "
+"You may also be interested in <link href=\"http://python-gtk-3-tutorial.";
+"readthedocs.org/en/latest/index.html\">The Python GTK+ 3 Tutorial</link>. "
+"Once you master the basics, be sure to come back and check out these "
+"tutorials."
 msgstr ""
 
-#: C/button.py.page:39(p)
-msgid ""
-"To set an image (e.g. a stock image) for the button <code>button</code>:"
-msgstr ""
+#: C/tutorial.py.page:36(section/title)
+msgid "To run the code samples"
+msgstr "Para executar os exemplos de código"
 
-#: C/button.py.page:40(code)
+#: C/tutorial.py.page:40(item/p)
+msgid "Copy and paste the code into <var>filename</var>.py"
+msgstr "Copie e pegue o código en <var>nomedeficheiro</var>.py"
+
+#: C/tutorial.py.page:42(item/screen)
 #, no-wrap
-msgid ""
-"\n"
-"image = Gtk.Image()\n"
-"image.set_from_stock(Gtk.STOCK_ABOUT, Gtk.IconSize.BUTTON)\n"
-"button.set_image(image)"
-msgstr ""
-"\n"
-"image = Gtk.Image()\n"
-"image.set_from_stock(Gtk.STOCK_ABOUT, Gtk.IconSize.BUTTON)\n"
-"button.set_image(image)"
+msgid "python <var>filename</var>.py"
+msgstr "python <var>nomeficheiro</var>.py"
+
+#: C/tutorial.py.page:48(section/title)
+msgid "A path through the widgets"
+msgstr "Unha ruta aos widgets"
+
+#: C/tutorial.py.page:50(steps/title)
+msgid "Tutorial"
+msgstr "Titorial"
 
-#: C/button.py.page:44(p)
-msgid ""
-"You should not set a label for the button after this, otherwise it will show "
-"the label and not the image."
-msgstr ""
+#: C/tutorial.py.page:52(steps/title)
+msgid "Basic windows"
+msgstr "Xanela básica"
 
-#: C/button.py.page:45(p)
-msgid ""
-"If we use <code>set_focus_on_click(False)</code> the button will not grab "
-"focus when it is clicked by the mouse. This could be useful in places like "
-"toolbars, so that the keyboard focus is not removed from the main area of "
-"the application."
-msgstr ""
+#: C/tutorial.py.page:57(steps/title)
+msgid "Images and labels"
+msgstr "Imaxes e etiquetas"
 
-#: C/button.js.page:7(title)
-#| msgid "JavaScript"
-msgid "Button (JavaScript)"
-msgstr "Botón (JavaScript)"
+#: C/tutorial.py.page:70(steps/title)
+msgid "Basic buttons"
+msgstr "Botóns básicos"
 
-#: C/button.js.page:17(desc)
-msgid "A button which can be connected to other widgets"
-msgstr "Un botón que pode conectarse a outros widgets"
+#: C/tutorial.py.page:79(steps/title)
+msgid "Other display widgets"
+msgstr "Outros widgets de visualización"
 
-#: C/button.js.page:22(p)
-msgid "A button widget that changes its label when you click it."
+#: C/tutorial.py.page:85(steps/title)
+msgid "Entry widgets (with a detour on basic scrolling)"
 msgstr ""
 
-#: C/button.c.page:7(title)
-#| msgid "Button"
-msgid "Button (C)"
-msgstr "Botón (C)"
+#: C/tutorial.py.page:93(steps/title)
+msgid "Dialogs"
+msgstr "Diálogos"
 
-#: C/button.c.page:25(p)
-msgid ""
-"A button widget connected to a callback function that reverses its label "
-"when clicked."
-msgstr ""
+#: C/tutorial.py.page:99(steps/title)
+msgid "TreeViews and ComboBoxes (using the M/V/C design)"
+msgstr "TreeViews e ComboBoxes (usando o deseño M/V/C)"
 
-#: C/button.c.page:36(link)
-msgid "Unicode Manipulation"
-msgstr ""
+#: C/tutorial.py.page:108(steps/title)
+msgid "Menus and toolbars (also: using Glade)"
+msgstr "Menús e barras de ferramentas (tamén: usando Glade)"
 
-#: C/bug-filing.page:10(email)
-msgid "tiffany antopolski com"
-msgstr ""
+#: C/tutorial.py.page:116(steps/title)
+msgid "Selectors (a recap)"
+msgstr "Selectores (un resumo)"
 
-#: C/bug-filing.page:18(title)
-msgid "Help make <app>GNOME Developer Tutorials</app> better"
-msgstr ""
+#: C/tutorial.py.page:126(steps/title)
+msgid "More containers"
+msgstr "Máis contedores"
 
-#: C/bug-filing.page:21(title)
-msgid "Report a bug or suggest an improvement"
-msgstr ""
+#: C/tutorial.py.page:131(steps/title)
+msgid "More scrolling"
+msgstr "Máis desprazamento"
 
-#: C/bug-filing.page:22(p)
-msgid ""
-"<app>GNOME Developer Tutorials</app> are maintained by a volunteer "
-"community. You are welcome to participate. If you notice a problem you can "
-"file a <em>bug report</em>. To file a bug, go to <link href=\"https://";
-"bugzilla.gnome.org/\"/>."
-msgstr ""
+#: C/tutorial.py.page:132(item/p)
+msgid "\"scrollbar.py\""
+msgstr "\"scrollbar.py\""
 
-#: C/bug-filing.page:25(p)
-msgid ""
-"This is a bug tracking system where users and developers can file details "
-"about bugs, crashes and request enhancements."
-msgstr ""
+#: C/tutorial.py.page:135(steps/title)
+msgid "Custom widget"
+msgstr "Widget personalizado"
 
-#: C/bug-filing.page:28(p)
-msgid ""
-"To participate you need an account which will give you the ability to gain "
-"access, file bugs, and make comments. Also, you need to register so you can "
-"receive updates by e-mail about the status of your bug. If you don't already "
-"have an account, just click on the <gui>New Account</gui> link to create one."
-msgstr ""
+#: C/tutorial.py.page:136(item/p)
+msgid "\"widget.py\""
+msgstr "\"widget.py\""
 
-#: C/bug-filing.page:31(p)
-msgid ""
-"Once you have an account, log in, click on <guiseq><gui>File a Bug</"
-"gui><gui>All</gui><gui>gnome-devel-docs</gui></guiseq>. Before reporting a "
-"bug, please read the <link href=\"https://bugzilla.gnome.org/page.cgi?id=bug-";
-"writing.html\">bug writing guidelines</link>, and please <link href="
-"\"https://bugzilla.gnome.org/browse.cgi?product=gnome-games\";>browse</link> "
-"for the bug to see if it already exists."
-msgstr ""
+#: C/tutorial.py.page:142(section/title)
+msgid "Some theory to help you"
+msgstr "Algunha teoría para axudarlle"
 
-#: C/bug-filing.page:35(p)
-msgid ""
-"To file your bug, choose the component <gui>platform-demos</gui> in the "
-"<gui>Component</gui> menu."
-msgstr ""
+#: C/vala.page:6(info/title)
+#, fuzzy
+#| msgid "Vala"
+msgctxt "link"
+msgid "Vala"
+msgstr "Vala"
 
-#: C/bug-filing.page:38(p)
-msgid ""
-"If you are requesting a new feature, choose <gui>enhancement</gui> in the "
-"<gui>Severity</gui> menu. Fill in the Summary and Description sections and "
-"click <gui>Commit</gui>."
-msgstr ""
+#: C/vala.page:15(page/title)
+msgid "Tutorials, code samples and platform demos in Vala"
+msgstr "Titoriais, exemplos de código e demostracións da plataforma en Vala"
 
-#: C/bug-filing.page:42(p)
+#. This is a reference to an external file such as an image or video. When
+#. the file changes, the md5 hash will change to let you know you need to
+#. update your localized copy. The msgstr is not used at all. Set it to
+#. whatever you like once you have updated your copy of the file.
+#: C/weatherApp.js.page:35(media)
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/weatherAppJs.png'; md5=1fe859ac4854273d72ea8fc9203639b2"
+msgctxt "_"
 msgid ""
-"Your report will be given an ID number, and its status will be updated as it "
-"is being dealt with. Thanks for helping make <app>GNOME Developer Tutorials</"
-"app> better!"
+"external ref='media/weatherAppJs.png' md5='1fe859ac4854273d72ea8fc9203639b2'"
 msgstr ""
+"@@image: 'media/weatherAppJs.png'; md5=1fe859ac4854273d72ea8fc9203639b2"
 
-#: C/beginner.vala.page:8(title)
-#| msgid "0 Beginner's Tutorials"
-msgid "Beginner Tutorials (Vala)"
-msgstr "Titoriais para principiantes (Vala)"
+#: C/weatherApp.js.page:6(info/title)
+#, fuzzy
+#| msgid "Weather Application (JavaScript)"
+msgctxt "text"
+msgid "Weather Application (JavaScript)"
+msgstr "Aplicativo de tempo (JavaScript)"
 
-#: C/beginner.vala.page:12(desc) C/beginner.c.page:12(desc)
+#: C/weatherApp.js.page:16(info/desc)
 msgid ""
-"A beginner's guide to GUI programming using GTK+, including code samples and "
-"practice exercises."
+"How to plan an application that uses asynchronous calls. Asynchronous calls "
+"will be presented through a weather application."
 msgstr ""
-"Unha guía para principiantes á programación de IGU usando GTK+, incluíndo "
-"exemplos de código e exercicios de práctica."
+"Como planificar un aplicativo que use chamadas asíncronas. As chamadas "
+"asíncronas presentaranse mediante un aplicativo de tempo."
 
-#: C/beginner.vala.page:19(title) C/beginner.c.page:20(title)
-msgid "0 Beginner's Tutorials"
-msgstr "0. Titoriais para principiantes"
+#: C/weatherApp.js.page:21(page/title)
+msgid "4 Weather Application"
+msgstr "4. Aplicativo do tempo"
 
-#: C/beginner.vala.page:21(p) C/beginner.c.page:22(p)
+#: C/weatherApp.js.page:23(synopsis/p)
 msgid ""
-"Although these tutorials are designed for beginners, we can't cover all the "
-"basics. Before attempting to follow these tutorials, you are expected to be "
-"familiar with the following concepts:"
+"In this guide well construct a weather application using asynchronous calls. "
+"Weather information in this example is fetched from geonames.org and the "
+"application is using the <link href=\"http://en.wikipedia.org/wiki/";
+"List_of_airports_by_ICAO_code:_E\">ICAO codes </link> to place your weather "
+"request. To write and run all the code examples yourself, you need an editor "
+"to write code in, Terminal and GNOME 3 or higher installed into your "
+"computer. In this guide we we'll go through the following parts:"
 msgstr ""
 
-#: C/beginner.vala.page:23(p) C/beginner.c.page:24(p)
-msgid "Object oriented programming"
-msgstr "Programación orientada a obxectos"
-
-#: C/beginner.vala.page:24(p)
-#| msgid "Basic knowledge of the Vala programming language"
-msgid "The Vala programming language:"
-msgstr "O linguaxe de programación Vala:"
-
-#: C/beginner.vala.page:26(link)
-msgid "The Vala Tutorial"
-msgstr "O titorial de Vala"
-
-#: C/beginner.vala.page:27(link)
-msgid "Sample Vala code"
-msgstr "Exemplo de código en Vala"
-
-#: C/beginner.vala.page:36(title) C/beginner.js.page:36(title)
-#: C/beginner.c.page:33(title)
-msgid "Tutorials"
-msgstr "Titoriais"
-
-#: C/beginner.vala.page:40(title) C/beginner.py.page:27(title)
-#: C/beginner.js.page:40(title) C/beginner.c.page:37(title)
-msgid "Code samples"
-msgstr "Exemplos de código"
-
-#: C/beginner.vala.page:45(p)
-msgid "Copy and paste the code into <var>filename</var>.vala"
-msgstr "Copie e pegue o código en <var>nomedeficheiro</var>vala"
+#: C/weatherApp.js.page:26(item/p)
+#, fuzzy
+#| msgid "Planning the graphical user interface"
+msgid "<link xref=\"#planningUi\">Planning the graphical user interface</link>"
+msgstr "Planificando a interface de usuario gráfica"
 
-#: C/beginner.vala.page:47(screen)
-#, no-wrap
-msgid "valac --pkg gtk+-3.0 <var>filename</var>.vala"
-msgstr "valac --pkg gtk+-3.0 <var>nome_ficheiro</var>.vala"
+#: C/weatherApp.js.page:27(item/p)
+msgid "<link xref=\"#asynchronous\">Asynchronous calls</link>"
+msgstr ""
 
-#: C/beginner.vala.page:48(screen) C/beginner.c.page:46(screen)
-#: C/beginner.c.page:60(screen)
-#, no-wrap
-msgid "./<var>filename</var>"
-msgstr "./<var>nome_ficheiro</var>"
+#: C/weatherApp.js.page:28(item/p)
+#, fuzzy
+#| msgid "The main program file"
+msgid "<link xref=\"#main\">The main program file</link>"
+msgstr "O ficheiro do programa principal"
 
-#: C/beginner.vala.page:52(title) C/beginner.py.page:29(title)
-#: C/beginner.js.page:49(title) C/beginner.c.page:63(title)
-msgid "Windows"
-msgstr "Xanelas"
+#: C/weatherApp.js.page:29(item/p)
+#, fuzzy
+#| msgid "Local library GeoNames"
+msgid "<link xref=\"#main\">Local library GeoNames</link>"
+msgstr "Biblioteca de GeoNames local"
 
-#: C/beginner.vala.page:55(title) C/beginner.py.page:32(title)
-#: C/beginner.js.page:51(title) C/beginner.c.page:66(title)
-msgid "Display widgets"
-msgstr "Widgets de visualización"
+#: C/weatherApp.js.page:30(item/p)
+msgid "<link xref=\"#main\">Autotools and Icons</link>"
+msgstr ""
 
-#: C/beginner.vala.page:57(title) C/beginner.py.page:34(title)
-#: C/beginner.js.page:53(title) C/beginner.c.page:68(title)
-msgid "Buttons and toggles"
-msgstr "Botóns e casillas"
+#: C/weatherApp.js.page:38(section/title)
+msgid "Planning the graphical user interface"
+msgstr "Planificando a interface de usuario gráfica"
 
-#: C/beginner.vala.page:59(title) C/beginner.py.page:36(title)
-#: C/beginner.js.page:55(title) C/beginner.c.page:70(title)
-msgid "Numeric and text data entry"
-msgstr "Entrada de datos numérica e de texto"
+#: C/weatherApp.js.page:39(section/p)
+msgid ""
+"Structuring an application for GNOME 3 means you will be using <link href="
+"\"http://developer.gnome.org/platform-overview/stable/gtk\";>GTK+</link>. The "
+"most important thing is to remember that the main window will only accept "
+"one widget. You must plan your structure accordingly (this example is using "
+"Gtk.Grid). A useful method is to draw out the main window and place every "
+"widget needed inside that box. By looking at an image of your future "
+"application it is easier to tell what are the relations between widgets. For "
+"example Gtk.Grid places your widgets in relation to other widgets, so after "
+"the first widget is in place, placing widgets can be done in relation to any "
+"widget on the grid."
+msgstr ""
 
-#: C/beginner.vala.page:61(title) C/beginner.py.page:38(title)
-#: C/beginner.js.page:57(title) C/beginner.c.page:72(title)
-msgid "Multiline text editor"
-msgstr "Editor de texto multiliña"
+#: C/weatherApp.js.page:42(section/title)
+msgid "Asynchronous calls"
+msgstr "Chamadas asíncronas"
 
-#: C/beginner.vala.page:63(title) C/beginner.py.page:40(title)
-#: C/beginner.js.page:59(title) C/beginner.c.page:74(title)
-msgid "Menu, combo box and toolbar widgets"
-msgstr "Widgets de menú, caixa combinada e barra de ferramentas"
+#: C/weatherApp.js.page:43(section/p)
+msgid ""
+"With many programming languages, all operations are run synchronously - you "
+"tell the program to do something, and it will wait until that action "
+"completes before proceeding. This is however bad for graphical user "
+"interfaces, as then the whole application will be frozen while the program "
+"waits for the operation. Going asynchronous (async) helps here. With async "
+"calls, your UI won't be blocked with any requests. Async calls make your "
+"application more flexible and better equipped to handle situations when "
+"calls take more time than expected or for some reason get jammed. Async "
+"calls can be used for example file system I/O and for slower calculations in "
+"the background."
+msgstr ""
 
-#: C/beginner.vala.page:65(title) C/beginner.py.page:42(title)
-#: C/beginner.js.page:61(title) C/beginner.c.page:76(title)
-msgid "TreeView widget"
-msgstr "Widget TreeView"
+#: C/weatherApp.js.page:46(section/p)
+msgid ""
+"In this example we have to get data from geonames.org. While we do that we "
+"want the rest of our program to continue. If we wouldn't get any information "
+"from geonames.org for the lack of internet connection and this would be a "
+"synchronous application we would never get to the point where our main_quit"
+"() is processed correctly and the application would have to killed from "
+"Terminal."
+msgstr ""
 
-#: C/beginner.vala.page:67(title) C/beginner.py.page:44(title)
-#: C/beginner.js.page:63(title) C/beginner.c.page:78(title)
-msgid "Selectors"
-msgstr "Selectores"
+#: C/weatherApp.js.page:49(section/title)
+msgid "The different parts of the program"
+msgstr "As diferentes partes do programa"
 
-#: C/beginner.vala.page:68(title) C/beginner.py.page:45(title)
-#: C/beginner.js.page:64(title) C/beginner.c.page:79(title)
-msgid "File selectors"
-msgstr "Selectores de ficheiros"
+#: C/weatherAppMain.js.page:18(page/title)
+msgid "The main program file"
+msgstr "O ficheiro do programa principal"
 
-#: C/beginner.vala.page:70(title) C/beginner.py.page:47(title)
-#: C/beginner.js.page:66(title) C/beginner.c.page:81(title)
-msgid "Font selectors"
-msgstr "Selectores de tipos de letra"
+#: C/weatherAppMain.js.page:20(synopsis/p)
+msgid ""
+"In this part of the guide well construct the main program file of the "
+"weather application. To write and run all the code examples yourself, you "
+"need an editor to write code in, Terminal and GNOME 3 or higher installed "
+"into your computer. In this part we we'll go through the following parts:"
+msgstr ""
 
-#: C/beginner.vala.page:72(title) C/beginner.py.page:49(title)
-#: C/beginner.js.page:68(title) C/beginner.c.page:83(title)
-msgid "Color Selectors"
-msgstr "Selectores de color"
+#: C/weatherAppMain.js.page:25(item/p)
+#, fuzzy
+#| msgid "Adding a grid and all the necessary widgets to it"
+msgid ""
+"<link xref=\"#widgets\">Adding a grid and all the necessary widgets to it</"
+"link>"
+msgstr "Engadir unha grade e todos os widgets precisos para eso"
 
-#: C/beginner.vala.page:75(title) C/beginner.py.page:52(title)
-#: C/beginner.js.page:71(title) C/beginner.c.page:86(title)
-msgid "Layout containers"
-msgstr "Contedores da distribución"
+#: C/weatherAppMain.js.page:26(item/p)
+#, fuzzy
+#| msgid "Requesting the weather information asynchronously"
+msgid ""
+"<link xref=\"#asynccall\">Requesting the weather information asynchronously</"
+"link>"
+msgstr "Solicitando a información do tempo de forma asíncrona"
 
-#: C/beginner.vala.page:79(title) C/beginner.py.page:56(title)
-#: C/beginner.js.page:75(title) C/beginner.c.page:90(title)
-msgid "Scrolling"
-msgstr "Desprazamento"
+#: C/weatherAppMain.js.page:27(item/p)
+#, fuzzy
+#| msgid "Connecting signals to button and entry.\"&gt;"
+msgid ""
+"<link xref=\"#connectingbuttons\">Connecting signals to button and entry</"
+"link>."
+msgstr "Conectando sinais ao botón e entrada.\"&gt;"
 
-#: C/beginner.vala.page:81(title) C/beginner.py.page:58(title)
-#: C/beginner.js.page:77(title) C/beginner.c.page:92(title)
-msgid "Miscellaneous"
-msgstr "Varios"
+#: C/weatherAppMain.js.page:28(item/p)
+msgid "<link xref=\"#weatherapp.js\">weatherapp.js</link>"
+msgstr ""
 
-#: C/beginner.py.page:8(title)
-msgid "Gtk Widget Sample Code and Tutorials (Python)"
-msgstr "Exemplo de código e titoriais de widgets Gtk (Python)"
+#: C/weatherAppMain.js.page:35(section/p)
+msgid ""
+"This line tells how to run the script. It needs to be the first line of the "
+"code and it needs to be executable. To get the execution rights go to "
+"Terminal and run in right folder: chmod +x scriptname. Or you can use the "
+"graphical filemanager. Just go to the right folder where your code is, right "
+"click you code file, choose properties, click the permissions tab and check "
+"the box for allow executing file as a program"
+msgstr ""
 
-#: C/beginner.py.page:12(desc)
+#: C/weatherAppMain.js.page:41(section/code)
+#, no-wrap
 msgid ""
-"A guide to GUI programming using GTK+, including code samples and practice "
-"exercises."
+"\n"
+"var Gtk = imports.gi.Gtk;\n"
+"const WeatherService = imports.geonames;"
 msgstr ""
-"Unha guía á programación de IGU usando GTK+, incluíndo exemplos de código e "
-"exercicios de práctica."
-
-#: C/beginner.py.page:19(title)
-msgid "Gtk Widget Sample Code and Tutorials"
-msgstr "Exemplo de código e titoriais de widgets Gtk"
 
-#: C/beginner.py.page:21(p)
+#: C/weatherAppMain.js.page:44(section/p)
 msgid ""
-"If you are a beginner and you would like a tutorial to guide you step by "
-"step in an exploration of what you can do with GTK+ 3, you should go to the "
-"<link xref=\"tutorial.py\"/> page. If you are looking for a specific widget, "
-"you can find it in the sections below."
+"In order to have a working program we need to import a GObject Introspection "
+"-library to our use. For working UI, we need Gtk. Gtk is imported in the "
+"beginning so we have it in our use everywhere. We also import our own local "
+"JavaScript library geonames to our use here."
 msgstr ""
 
-#: C/beginner.js.page:15(desc)
+#: C/weatherAppMain.js.page:49(section/code)
+#, no-wrap
 msgid ""
-"A beginner's guide to writing GNOME applications in JavaScript, including "
-"code samples and practice exercises."
+"\n"
+"// Initialize the gtk\n"
+"Gtk.init(null, 0);\n"
+"//create your window, name it and connect the x to quit function. Remember that window is a taken word\n"
+"var weatherwindow = new Gtk.Window({type: Gtk.WindowType.TOPLEVEL});\n"
+"weatherwindow.title = \"Todays weather\";\n"
+"//Window only accepts one widget and a title. Further structure with Gtk.boxes of similar\n"
+"weatherwindow.connect(\"destroy\", function(){Gtk.main_quit()});\n"
+"\n"
+"weatherwindow.show_all();\n"
+"//and run it\n"
+"Gtk.main();"
 msgstr ""
 
-#: C/beginner.js.page:18(title)
-#| msgid "0 Beginner's Tutorials"
-msgid "0 Beginner's tutorials and samples"
-msgstr "0. Titoriais e exemplos para principiantes"
+#: C/weatherAppMain.js.page:63(section/title)
+msgid "Adding a grid and all the necessary widgets to it"
+msgstr "Engadir unha grade e todos os widgets precisos para eso"
 
-#: C/beginner.js.page:20(p)
+#: C/weatherAppMain.js.page:64(section/code)
+#, no-wrap
 msgid ""
-"JavaScript is one of the most popular programming languages on the web. It's "
-"not just for the web, though. If you have even a basic understanding of "
-"JavaScript, you can write full-fledged applications for GNOME. <link href="
-"\"https://live.gnome.org/GnomeDocuments\";>GNOME Documents</link> is written "
-"in JavaScript, and so is <link href=\"https://live.gnome.org/GnomeShell/Tour";
-"\">GNOME Shell,</link> the most basic part of GNOME."
+"\n"
+"var grid = new Gtk.Grid();\n"
+"weatherwindow.add(grid);\n"
+"\n"
+"//We initialize the icon here, but deside the file later in geonames.js.\n"
+"var weatherIcon = new Gtk.Image();\n"
+"\n"
+"//Set some labels to your window\n"
+"var label1 = new Gtk.Label({label: \"\"});\n"
+"var label2 = new Gtk.Label({label: \"Looking in the sky...\"});\n"
+"var label3 = new Gtk.Label({label: \"\"});\n"
+"\n"
+"var entry = new Gtk.Entry();\n"
+"entry.set_width_chars(4);\n"
+"entry.set_max_length(4);\n"
+"var label4 = new Gtk.Label({label: \"Enter ICAO station for weather: \"});\n"
+"var button1 = new Gtk.Button({label: \"search!\"});\n"
+"\n"
+"grid.attach(label4, 2, 1, 1, 1);\n"
+"grid.attach_next_to(label1,label4,3,1,1);\n"
+"grid.attach_next_to(label2,label1,3,1,1);\n"
+"grid.attach_next_to(label3,label2,3,1,1);\n"
+"grid.attach_next_to(entry,label4,1,1,1);\n"
+"grid.attach_next_to(button1,entry,1,1,1);\n"
+"grid.attach_next_to(weatherIcon,label2,1,1,1)\n"
 msgstr ""
 
-#: C/beginner.js.page:21(p)
+#: C/weatherAppMain.js.page:90(section/p)
 msgid ""
-"GNOME Shell is what you see when you click on \"Activities\" in the top-left "
-"corner of your screen. It also controls the clock and the rest of the top "
-"panel. Besides showing how you to write GNOME applications, these tutorials "
-"will also show you how to use JavaScript to write GNOME Shell extensions, "
-"which give it new features or change the way it does things."
+"In this section we create the grid we are going to use for positioning the "
+"widgets. All the buttons, labels and entrys are initialized and placed on "
+"the grid. As seen from the placing of the different widgets, they don't need "
+"to be related only to one widget. At this point some of the labels don't "
+"have any content. The content for those widgets is applied later. If you run "
+"the application at this stage, you have the UI ready, but the widgets are "
+"not connected to anything. For this we need to first build the weather "
+"searching local library, and then get the information we need "
+"asynchronously. When we have our local library ready we can connect it to "
+"the necessary widgets."
 msgstr ""
 
-#: C/beginner.js.page:25(title)
-#| msgid "Getting Ready"
-msgid "Getting Started"
-msgstr "Comezar"
+#: C/weatherAppMain.js.page:94(section/title)
+msgid "Requesting the weather information asynchronously"
+msgstr "Solicitando a información do tempo de forma asíncrona"
 
-#: C/beginner.js.page:26(p)
+#: C/weatherAppMain.js.page:95(section/code)
+#, no-wrap
 msgid ""
-"These tutorials are designed for people who already know how to write in "
-"JavaScript, and who have GNOME installed on their computers already, but who "
-"are new to developing GNOME applications. If you don't already know "
-"JavaScript, or if you need help getting GNOME set up, take a look at these "
-"resources first:"
+"\n"
+"function getWeatherForStation() {\n"
+"  var station = entry.get_text();\n"
+"\n"
+"  var GeoNames = new WeatherService.GeoNames(station); //\"EFHF\";\n"
+"\n"
+"  GeoNames.getWeather(function(error, weather) {\n"
+"    //this here works bit like signals. This code will be run when we have weather.\n"
+"    if (error) {\n"
+"      label2.set_text(\"Suggested ICAO station does not exist Try EFHF\");\n"
+"    return; }\n"
+"    weatherIcon.file = GeoNames.getIcon(weather);\n"
+"\n"
+"    label1.set_text(\"Temperature is \" + weather.weatherObservation.temperature + \" degrees.\");\n"
+"    if (weather.weatherObservation.weatherCondition !== \"n/a\"){\n"
+"      label2.set_text(\"Looks like there is \" + weather.weatherObservation.weatherCondition + \" in the 
sky.\");\n"
+"      }\n"
+"    else {\n"
+"      label2.set_text(\"Looks like there is \" + weather.weatherObservation.clouds + \" in the sky.\");\n"
+"    }\n"
+"    label3.set_text(\"Windspeed is \" + weather.weatherObservation.windSpeed + \" m/s\")\n"
+"    // ...\n"
+"  });\n"
+"}\n"
 msgstr ""
 
-#: C/beginner.js.page:28(p)
+#: C/weatherAppMain.js.page:120(section/p)
 msgid ""
-"<link href=\"http://eloquentjavascript.net/contents.html\";>Eloquent "
-"JavaScript</link> is a free, Creative Commons-licensed book, which explains "
-"the basics of JavaScript programming. Since you won't be writing JavaScript "
-"for the web, you only need to read up to chapter 10 or so."
+"This function is dedicated for calling for the weather information and "
+"updating labels and icons accordingly. In the beginning of the function we "
+"get the user input for the search. So here for the first time we use our own "
+"library and assign it to variable GeoNames. While assigning WeatherService "
+"we give it the station. The firs thing we do with GeoNames is to request "
+"weather. Everything after GeoNames.getWeather(function(error, weather) "
+"happens only if we either get an error message or weather information. If "
+"either doesn't come, the rest of the program works as normal, so main_Quit "
+"works."
 msgstr ""
 
-#: C/beginner.js.page:29(p)
-msgid ""
-"<link href=\"http://www.gnome.org/getting-gnome/\";>Download GNOME</link> as "
-"part of a distribution, like Fedora, openSUSE, or Ubuntu. Each distribution "
-"has its own instructions for how to get GNOME."
+#: C/weatherAppMain.js.page:124(section/title)
+msgid "Connecting signals to button and entry."
 msgstr ""
 
-#: C/beginner.js.page:30(p)
+#: C/weatherAppMain.js.page:125(section/code)
+#, no-wrap
 msgid ""
-"<link xref=\"set-up-gedit.js\">Set up gedit</link> for writing applications. "
-"GNOME's text editor, gedit, is sometimes just called \"text editor.\""
+"\n"
+"entry.connect(\"key_press_event\", function(widget, event) {\n"
+"  if (entry.get_text().length === 4) {\n"
+"    // Enough is enough\n"
+"    getWeatherForStation();\n"
+"  }\n"
+"  return false;\n"
+"});\n"
+"\n"
+"button1.connect(\"clicked\", function(){\n"
+"  getWeatherForStation();\n"
+"});"
 msgstr ""
 
-#: C/beginner.js.page:41(p)
+#: C/weatherAppMain.js.page:137(section/p)
 msgid ""
-"These samples show how to use widgets in your GNOME applications. Each one "
-"demonstrates a complete application which showcases the featured widget. At "
-"the end of each sample, you will find links to more detailed reference "
-"material."
+"And finally we have the connections that make the whole application run as "
+"it should. We connect both the entry and the button to do the same thing, "
+"getting the weather. So it doesn't matter weather you press enter of click "
+"the search button."
 msgstr ""
 
-#: C/beginner.js.page:44(p)
-msgid "Copy and paste the code into <var>filename</var>.js"
-msgstr ""
+#: C/weatherAppMain.js.page:141(section/title)
+msgid "Weatherapp.js"
+msgstr "Weatherapp.js"
 
-#: C/beginner.js.page:45(p)
-#| msgid "In the terminal type:"
-msgid "In the terminal, type:"
-msgstr "Escriba no terminal, escriba:"
+#: C/weatherAppMain.js.page:142(section/p)
+msgid "Weatherapp.js file looks like this:"
+msgstr "O ficheiro Weatherapp.js é algo como:"
 
-#: C/beginner.js.page:46(screen)
+#: C/weatherAppMain.js.page:143(section/code)
 #, no-wrap
-msgid "gjs <var>filename</var>.js"
-msgstr "gjs <var>nomeficheiro</var>.js"
-
-#: C/beginner.c.page:8(title)
-#| msgid "0 Beginner's Tutorials"
-msgid "Beginner's Tutorials (C)"
-msgstr "Titoriais para principiantes (C)"
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"//The previous line is a hash bang tells how to run the script.\n"
+"// Note that the script has to be executable (run in terminal in the right folder: chmod +x scriptname)\n"
+"\n"
+"var Gtk = imports.gi.Gtk;\n"
+"\n"
+"const WeatherService = imports.geonames;\n"
+"//Bring your own library from same folder (as set in GJS_PATH). If using autotools .desktop will take care 
of this\n"
+"\n"
+"// Initialize the gtk\n"
+"Gtk.init(null, 0);\n"
+"//create your window, name it and connect the x to quit function. Remember that window is a taken word\n"
+"var weatherwindow = new Gtk.Window({type: Gtk.WindowType.TOPLEVEL});\n"
+"weatherwindow.title = \"Todays weather\";\n"
+"//Window only accepts one widget and a title. Further structure with Gtk.boxes of similar\n"
+"weatherwindow.connect(\"destroy\", function(){Gtk.main_quit()});\n"
+"//We initialize the icon here, but deside the file later in geonames.js.\n"
+"\n"
+"var weatherIcon = new Gtk.Image();\n"
+"\n"
+"//Set some labels to your window\n"
+"var label1 = new Gtk.Label({label: \"\"});\n"
+"var label2 = new Gtk.Label({label: \"Looking in the sky...\"});\n"
+"var label3 = new Gtk.Label({label: \"\"});\n"
+"\n"
+"var grid = new Gtk.Grid();\n"
+"weatherwindow.add(grid);\n"
+"\n"
+"var entry = new Gtk.Entry();\n"
+"entry.set_width_chars(4);\n"
+"entry.set_max_length(4);\n"
+"var label4 = new Gtk.Label({label: \"Enter ICAO station for weather: \"});\n"
+"var button1 = new Gtk.Button({label: \"search!\"});\n"
+"\n"
+"//some weather\n"
+"\n"
+"entry.connect(\"key_press_event\", function(widget, event) {\n"
+"  // FIXME: Get weather on enter (key 13)\n"
+"  if (entry.get_text().length === 4) {\n"
+"    // Enough is enough\n"
+"    getWeatherForStation();\n"
+"  }\n"
+"  return false;\n"
+"});\n"
+"\n"
+"button1.connect(\"clicked\", function(){\n"
+"  getWeatherForStation();\n"
+"});\n"
+"\n"
+"function getWeatherForStation() {\n"
+"  var station = entry.get_text();\n"
+"\n"
+"  var GeoNames = new WeatherService.GeoNames(station); //\"EFHF\";\n"
+"\n"
+"  GeoNames.getWeather(function(error, weather) {\n"
+"    //this here works bit like signals. This code will be run when we have weather.\n"
+"    if (error) {\n"
+"      label2.set_text(\"Suggested ICAO station does not exist Try EFHF\");\n"
+"    return; }\n"
+"    weatherIcon.file = GeoNames.getIcon(weather);\n"
+"\n"
+"    label1.set_text(\"Temperature is \" + weather.weatherObservation.temperature + \" degrees.\");\n"
+"    if (weather.weatherObservation.weatherCondition !== \"n/a\"){\n"
+"      label2.set_text(\"Looks like there is \" + weather.weatherObservation.weatherCondition + \" in the 
sky.\");\n"
+"      }\n"
+"    else {\n"
+"      label2.set_text(\"Looks like there is \" + weather.weatherObservation.clouds + \" in the sky.\");\n"
+"    }\n"
+"    label3.set_text(\"Windspeed is \" + weather.weatherObservation.windSpeed + \" m/s\")\n"
+"    // ...\n"
+"  });\n"
+"}\n"
+"\n"
+"grid.attach(label4, 2, 1, 1, 1);\n"
+"grid.attach_next_to(label1,label4,3,1,1);\n"
+"grid.attach_next_to(label2,label1,3,1,1);\n"
+"grid.attach_next_to(label3,label2,3,1,1);\n"
+"grid.attach_next_to(entry,label4,1,1,1);\n"
+"grid.attach_next_to(button1,entry,1,1,1);\n"
+"grid.attach_next_to(weatherIcon,label2,1,1,1)\n"
+"weatherwindow.show_all();\n"
+"//and run it\n"
+"Gtk.main();\n"
+msgstr ""
+
+#: C/weatherAppMain.js.page:228(section/p)
+msgid "Running until you have all the autotools files ready. :"
+msgstr "Executando até que todos os ficheiros de autotools estean listos. :"
 
-#: C/beginner.c.page:25(p)
-msgid "The C programming language"
-msgstr "O linguaxe de programación C"
+#: C/weatherAppMain.js.page:230(section/screen)
+#, no-wrap
+msgid " <output style=\"prompt\">$ </output><input> GJS_PATH=`pwd` gjs weatherapp.js</input>"
+msgstr ""
 
-#: C/beginner.c.page:42(p)
-msgid "Copy and paste the code into <var>filename</var>.c"
-msgstr "Copie e pegue o código en <var>nomedeficheiro</var>.c"
+#: C/weatherAppMain.js.page:231(section/p)
+msgid ""
+"Use this command on terminal while developing your modules. When calling "
+"your program in this manner it knows where to find your custom JSlibraries, "
+"in this case geonames.js."
+msgstr ""
+"Use esta orde na terminal mentres está desenvolvendo os seus módulos. Cando "
+"chame o seu programa desta forma sabe onde buscar a súa JSLibraries "
+"personalizada, neste caso geonames.js."
 
-#: C/beginner.c.page:44(screen)
-#, no-wrap
-msgid "gcc <var>filename</var>.c `pkg-config --cflags --libs gtk+-3.0` -o <var>filename</var>\n"
-msgstr "gcc <var>nomedeficheiro</var>.c `pkg-config --cflags --libs gtk+-3.0` -o "
-"<var>nomedeficheiro</var>\n"
+#: C/weatherAutotools.js.page:18(page/title)
+msgid "Autotools and Icons"
+msgstr "Autotools e iconas"
 
-#: C/beginner.c.page:50(p)
+#: C/weatherAutotools.js.page:20(synopsis/p)
 msgid ""
-"For more information about compiling Gtk+ programs see <link href=\"http://";
-"developer.gnome.org/gtk3/3.4/gtk-compiling.html\">Compiling Gtk+ "
-"Applications on UNIX</link>."
+"In this part of the guide well construct the autotools and custom icons "
+"needed for weather application to be a seamless part of your desktop. To "
+"write and run all the code examples yourself, you need an editor to write "
+"code in, Terminal and GNOME 3 or higher installed into your computer. In "
+"this guide we we'll go through the following parts:"
 msgstr ""
 
-#: C/beginner.c.page:54(p)
-msgid "You can also use the Vala compiler to compile these samples:"
-msgstr "Tamén pode empregar o compilador de Vala para compilar estes exemplos:"
+#: C/weatherAutotools.js.page:23(item/p)
+msgid "<link xref=\"#autotools\"> Autotools</link>"
+msgstr ""
 
-#: C/beginner.c.page:57(screen)
-#, no-wrap
-#| msgid "valac --pkg gtk+-3.0 <var>filename</var>.vala"
-msgid "valac --pkg gtk+-3.0 <var>filename</var>.c"
-msgstr "valac --pkg gtk+-3.0 <var>nomedeficheiro</var>.c"
+#: C/weatherAutotools.js.page:24(item/p)
+#, fuzzy
+#| msgid "Custom icons for your application"
+msgid "<link xref=\"#icons\">Custom icons for your application</link>"
+msgstr "Iconas personalizadas para o seu aplicativo"
 
-#: C/beginner.c.page:59(p)
-msgid "To run:"
-msgstr "Para executalo:"
+#: C/weatherAutotools.js.page:31(section/title)
+msgid "Autotools and necessary files"
+msgstr "Autotools e os ficheiros precisos"
 
-#: C/audio-player.vala.page:9(desc)
-msgid "Coming soon..."
-msgstr "Proximamente..."
+#: C/weatherAutotools.js.page:32(section/p)
+msgid ""
+"Having more than one file in your folder makes using autotools a bit tricky. "
+"You need the .desktop file, autogen.sh, Makefile.am, configure.ac and as a "
+"new file: myapp.sh.in file. Hacking the autotools file is a complicated "
+"field. More information can be found in many different sources, <link href="
+"\"http://en.wikipedia.org/wiki/GNU_build_system\";>the wikipedia article</"
+"link> provides a good overwiev on the subject."
+msgstr ""
 
-#: C/audio-player.vala.page:18(title)
-msgid "3 Audio Player"
-msgstr "3 Reprodutor de son"
+#: C/weatherAutotools.js.page:35(item/p)
+#: C/weatherAutotools.js.page:41(section/p)
+msgid "weatherapp.desktop"
+msgstr "weatherapp.desktop"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/aboutdialog.vala.page:29(None) C/aboutdialog.py.page:22(None)
-#: C/aboutdialog.js.page:20(None) C/aboutdialog.c.page:24(None)
-#| msgid ""
-#| "@@image: 'media/aboutdialog.png'; md5=a36117a559fa98e25e2f6b3db593639f"
+#: C/weatherAutotools.js.page:36(item/p)
+#: C/weatherAutotools.js.page:56(section/p)
+msgid "weatherapp.sh.in"
+msgstr "weatherapp.sh.in"
+
+#: C/weatherAutotools.js.page:42(section/code)
+#, no-wrap
 msgid ""
-"@@image: 'media/aboutdialog_GMenu.png'; md5=a36117a559fa98e25e2f6b3db593639f"
+"\n"
+"[Desktop Entry]\n"
+"Version=1.0\n"
+"Encoding=UTF-8\n"
+"Name=Weather app\n"
+"Comment=Weather showing application\n"
+"Exec=weatherapp.sh\n"
+"Icon=application-default-icon\n"
+"Terminal=false\n"
+"Type=Application\n"
+"StartupNotify=true\n"
+"Categories=GNOME;GTK;Utility;"
 msgstr ""
-"@@image: 'media/aboutdialog_GMenu.png'; md5=a36117a559fa98e25e2f6b3db593639f"
 
-#: C/aboutdialog.vala.page:7(title)
-#| msgid "AboutDialog"
-msgid "AboutDialog (Vala)"
-msgstr "AboutDialog (Vala)"
+#: C/weatherAutotools.js.page:54(section/p)
+msgid ""
+"The thing to notice in this file is that the Exec line will make this ."
+"desktop file work only after running all the other makefiles. Weatherapp.sh "
+"is a small shell script created with the weatherapp.sh.in."
+msgstr ""
 
-#: C/aboutdialog.vala.page:25(desc) C/aboutdialog.js.page:16(desc)
-#: C/aboutdialog.c.page:19(desc)
-msgid "Display information about an application"
-msgstr "Mostrar información sobre un aplicativo"
+#: C/weatherAutotools.js.page:57(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"#!/bin/sh\n"
+"export GJS_PATH= bindir@\n"
+"gjs @bindir@/weatherapp.js"
+msgstr ""
 
-#: C/aboutdialog.vala.page:28(title) C/aboutdialog.py.page:21(title)
-#: C/aboutdialog.js.page:19(title) C/aboutdialog.c.page:22(title)
-msgid "AboutDialog"
-msgstr "AboutDialog"
+#: C/weatherAutotools.js.page:61(section/p)
+msgid ""
+"This file is a template to the file Makefile will do to be run from .desktop."
+msgstr ""
+"Este ficheiro é un modelo para o ficheiro Makefile que terá que executar "
+"desde .desktop."
 
-#: C/aboutdialog.vala.page:30(p) C/aboutdialog.c.page:25(p)
-msgid "An AboutDialog example using Gtk.ApplicationWindow and Menu"
-msgstr "Un exemplo de AboutDialog usando Gtk.ApplicationWindow e Menu"
+#: C/weatherAutotools.js.page:64(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"# The actual runnable program is set to the SCRIPTS primitive. Prefix bin_ tells where to copy this\n"
+"bin_SCRIPTS = weatherapp.js geonames.js weatherapp.sh\n"
+"# List of files to be distributed\n"
+"EXTRA_DIST=  \\\n"
+"    $(bin_SCRIPTS) \\\n"
+"    $(private_icons)\t\\\n"
+"\t  $(NULL)\n"
+"\n"
+"CLEANFILES =\n"
+"\n"
+"# The desktop files\n"
+"desktopdir = $(datadir)/applications\n"
+"desktop_DATA =weatherapp.desktop\n"
+"\n"
+"# convenience command for doing Makefile variable substitutions in non-Makefile\n"
+"# files (scripts, service files, etc.)\n"
+"do_subst = sed -e 's|@abs_top_srcdir[ ]|$(abs_top_srcdir)|g' \\\n"
+"               -e 's|@abs_top_builddir[ ]|$(abs_top_builddir)|g' \\\n"
+"               -e 's|@localedir[ ]|$(localedir)|g' \\\n"
+"               -e 's|@bindir[ ]|$(bindir)|g' \\\n"
+"               -e 's|@libexecdir[ ]|$(libexecdir)|g' \\\n"
+"\t       -e 's|@pkglibdir[ ]|$(pkglibdir)|g' \\\n"
+"\t       -e 's|@pkgdatadir[ ]|$(pkgdatadir)|g' \\\n"
+"\t       -e 's|@have_libnotify[ ]|$(HAVE_LIBNOTIFY)|g' \\\n"
+"\t       -e 's|@have_libsoup[ ]|$(HAVE_LIBSOUP)|g' \\\n"
+"\t       -e 's|@have_cheese[ ]|$(HAVE_CHEESE)|g'\n"
+"\n"
+"weatherapp.sh: weatherapp.sh.in\n"
+"\t$(AM_V_GEN) $(do_subst) $&lt; &gt; $ \n"
+"\tchmod +x $ \n"
+"\n"
+"CLEANFILES += weatherapp.sh\n"
+"EXTRA_DIST += weatherapp.sh.in\n"
+"\n"
+"#the application icon\n"
+"appicondir=$(datadir)/icons/hicolor/scalable/apps\n"
+"appicon_DATA=weather-icon.svg\n"
+"\n"
+"#icons in the application\n"
+"NULL =\n"
+"\n"
+"private_icons = \\\n"
+"\tweather-clear.svg \\\n"
+"  weather-few-clouds.svg \\\n"
+"  weather-fog.svg \\\n"
+"  weather-icon.svg \\\n"
+"  weather-overcast.svg \\\n"
+"  weather-showers.svg \\\n"
+"  weather-showers-scattered.svg \\\n"
+"  weather-snow.svg \\\n"
+"  $(NULL)\n"
+"\n"
+"install-icons:\n"
+"\tfor icon in $(private_icons); do \\\n"
+"\t\tmkdir -p $(DESTDIR)$(pkgdatadir)/icons/; \\\n"
+"\t\t$(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(pkgdatadir)/icons/; \\\n"
+"\tdone\n"
+"\n"
+"install-data-local: install-icons"
+msgstr ""
 
-#: C/aboutdialog.vala.page:40(link)
-msgid "set_default_size"
-msgstr "set_default_size"
+#: C/weatherAutotools.js.page:124(section/p)
+msgid ""
+"This needs a bit more explaining. Compared to the HelloWorld Makefile.am "
+"this has changed quite a bit. Lets go through all the new blocks:"
+msgstr ""
+"Isto precisa unha explicación máis profunda. En comparación co Makefile.am "
+"de HelloWorld este cambiou un pouco. Vamos coa explicación de todos os "
+"bloques novos:"
 
-#: C/aboutdialog.py.page:7(title)
-#| msgid "AboutDialog"
-msgid "AboutDialog (Python)"
-msgstr "AboutDialog (Python)"
+#: C/weatherAutotools.js.page:125(section/p)
+msgid ""
+"bin_scripts are the files that are needed to run your application. In thin "
+"case they are the first two files are the program itself and the third is "
+"the script that launches the application."
+msgstr ""
 
-#: C/aboutdialog.py.page:18(desc)
-#| msgid "Display information about an application"
-msgid "A window that displays information about an application"
-msgstr "Unha xanela que mostra información sobre un aplicativo"
+#: C/weatherAutotools.js.page:126(section/p)
+msgid "EXTRA_DIST are the files that are to be distributed"
+msgstr "EXTRA_DIST son os ficheiros que van ser distribuidos"
 
-#: C/aboutdialog.py.page:23(p)
+#: C/weatherAutotools.js.page:127(section/p)
+msgid "do_subst block is bits and pieces that need to be where they are"
+msgstr "o bloque do_subst son as partes que precisan estar onde estan"
+
+#: C/weatherAutotools.js.page:128(section/p)
 msgid ""
-"An AboutDialog example using Gtk.ApplicationWindow and Menu (the \"about\" "
-"is displayed if \"About\" in the menu is selected)."
+"after the comment #icons in the application there are all the icons that are "
+"used by the program. For them to be useful you need to install the icons in "
+"correct places and that is done byt the install-icons: bit"
 msgstr ""
 
-#: C/aboutdialog.py.page:35(title)
-msgid "Useful methods for an AboutDialog widget"
-msgstr "Métodos útiles para o widget AboutDialog"
-
-#: C/aboutdialog.py.page:45(link) C/aboutdialog.c.page:36(link)
-#| msgid "AboutDialog"
-msgid "GtkAboutDialog"
-msgstr "GtkAboutDialog"
+#: C/weatherAutotools.js.page:131(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"dnl This file is processed by autoconf to create a configure script\n"
+"AC_INIT([Weather App], 1.0)\n"
+"AM_INIT_AUTOMAKE([1.10 no-define foreign])\n"
+"AC_CONFIG_FILES(Makefile)\n"
+"AC_OUTPUT"
+msgstr ""
 
-#: C/aboutdialog.js.page:6(title)
-#| msgid "AboutDialog"
-msgid "AboutDialog (JavaScript)"
-msgstr "AboutDialog (JavaScript)"
+#: C/weatherAutotools.js.page:137(section/p)
+msgid "autohen.sh"
+msgstr "autohen.sh"
 
-#: C/aboutdialog.js.page:21(p)
+#: C/weatherAutotools.js.page:138(section/code)
+#, no-wrap
 msgid ""
-"A modal dialog window which shows information about an application and its "
-"creators. This one is triggered by clicking \"About\" in the application's "
-"menu, which is normally a good place to put it."
+"\n"
+"#!/bin/sh\n"
+"# This will run autoconf, automake, etc. for us\n"
+"autoreconf --force --install"
 msgstr ""
 
-#: C/aboutdialog.js.page:30(link)
-#| msgid "AboutDialog"
-msgid "Gtk.AboutDialog"
-msgstr "Gtk.AboutDialog"
-
-#: C/aboutdialog.c.page:7(title)
-#| msgid "AboutDialog"
-msgid "AboutDialog (C)"
-msgstr "AboutDialog (C)"
+#: C/weatherAutotools.js.page:144(section/title)
+msgid "Custom icons for your application"
+msgstr "Iconas personalizadas para o seu aplicativo"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/03_getting_the_signal.js.page:36(None)
-#: C/03_getting_the_signal.js.page:352(None)
-#| msgid "@@image: 'media/dialog.png'; md5=be1b654bb025465e2de5d12079bcb260"
+#: C/weatherAutotools.js.page:145(section/p)
 msgid ""
-"@@image: 'media/03_jssignal_01.png'; md5=8d6ecab185f4af4534cc255d62b58b8e"
+"When thinking about custom icons a good rule of thumb is: do you expect to "
+"see that icon used elsewhere or is it private to your app? If the first (e."
+"g. the icons in the desktop file that are shown by the shell) then you need /"
+"usr/share/hicolor, otherwise (e.g. the weather icons of your app) /usr/share/"
+"$application/bla/bla"
 msgstr ""
-"@@image: 'media/03_jssignal_01.png'; md5=8d6ecab185f4af4534cc255d62b58b8e"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/03_getting_the_signal.js.page:156(None)
-#: C/03_getting_the_signal.js.page:358(None)
-#| msgid "@@image: 'media/toolbar.png'; md5=fca40afb940764d58f69b3a2add9a927"
+#: C/weatherAutotools.js.page:146(section/p)
 msgid ""
-"@@image: 'media/03_jssignal_02.png'; md5=ba941390fbafc4a0f653c8f70bca92c0"
+"Using autotools you have to make some changes to your .desktop and Makefile."
+"am files. In the desktop file you change the Icon's name Icon=weather-icon. "
+"In the Makefile.am file you add these two lines to the end of your "
+"application #the application icon"
 msgstr ""
-"@@image: 'media/03_jssignal_02.png'; md5=ba941390fbafc4a0f653c8f70bca92c0"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/03_getting_the_signal.js.page:160(None)
-msgid "@@image: 'media/03_jssignal_02b.png'; md5=THIS FILE DOESN'T EXIST"
-msgstr "@@image: 'media/03_jssignal_02b.png'; md5=THIS FILE DOESN'T EXIST"
+#: C/weatherAutotools.js.page:147(section/p)
+msgid "appicondir=$(datadir)/icons/hicolor/scalable/apps"
+msgstr "appicondir=$(datadir)/icons/hicolor/scalable/apps"
+
+#: C/weatherAutotools.js.page:148(section/p)
+msgid "appicon_DATA=weather-icon.svg"
+msgstr "appicon_DATA=weather-icon.svg"
+
+#: C/weatherGeonames.js.page:18(page/title)
+msgid "Local library geoNames"
+msgstr "Biblioteca de geoNames local"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/03_getting_the_signal.js.page:232(None)
-#: C/03_getting_the_signal.js.page:364(None)
-#| msgid "@@image: 'media/dialog.png'; md5=be1b654bb025465e2de5d12079bcb260"
+#: C/weatherGeonames.js.page:20(synopsis/p)
 msgid ""
-"@@image: 'media/03_jssignal_03.png'; md5=49ecf251b0bf57543c8d79a77b6f306d"
+"In this part of the guide we'll construct the local library geoNames using "
+"asynchronous calls. Weather information in this example is fetched from "
+"geonames.org and the application is using the <link href=\"http://en.";
+"wikipedia.org/wiki/List_of_airports_by_ICAO_code:_E\">ICAO codes </link> to "
+"place your weather request. To write and run all the code examples yourself, "
+"you need an editor to write code in, Terminal and GNOME 3 or higher "
+"installed into your computer. In this guide we'll go through the following "
+"parts:"
 msgstr ""
-"@@image: 'media/03_jssignal_03.png'; md5=49ecf251b0bf57543c8d79a77b6f306d"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/03_getting_the_signal.js.page:303(None)
-#: C/03_getting_the_signal.js.page:370(None)
-#| msgid "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
+#: C/weatherGeonames.js.page:23(item/p)
+#, fuzzy
+#| msgid "Local library for getting the weather"
 msgid ""
-"@@image: 'media/03_jssignal_04.png'; md5=dfc5221ca15ca9fba7d3c76a73804e2d"
-msgstr ""
-"@@image: 'media/03_jssignal_04.png'; md5=dfc5221ca15ca9fba7d3c76a73804e2d"
+"<link xref=\"#geonamesimports\">Local library for getting the weather</link>"
+msgstr "Biblioteca global para obter o tempo"
 
-#: C/03_getting_the_signal.js.page:20(desc)
-msgid "Create Buttons and other widgets that do things when you click on them."
+#: C/weatherGeonames.js.page:24(item/p)
+msgid "<link xref=\"#geonamesfunction\">Creating function geoNames</link>"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:23(title)
-#| msgid "Connecting the signals"
-msgid "3. Getting the Signal"
-msgstr "3. Conectar os sinais"
+#: C/weatherGeonames.js.page:25(item/p)
+msgid "<link xref=\"#geonamesmethods\">Methods for geoNames</link>"
+msgstr ""
 
-#: C/03_getting_the_signal.js.page:25(p)
-msgid ""
-"In the last tutorial, we learned how to create widgets like Labels, Images, "
-"and Buttons. Here, we'll learn how to make Buttons and other input widgets "
-"actually do things, by writing functions which handle the signals they send "
-"when they are clicked on or interacted with."
+#: C/weatherGeonames.js.page:26(item/p)
+msgid "<link xref=\"#geonames.js\">geonames.js </link>"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:31(title)
-#| msgid "A little bit more than a simple \"Hello world\" Gtk application."
-msgid "A basic application"
-msgstr "Un aplicativo básico"
+#: C/weatherGeonames.js.page:31(section/title)
+msgid "Local library for getting the weather"
+msgstr "Biblioteca global para obter o tempo"
+
+#: C/weatherGeonames.js.page:32(section/p)
+msgid "For this we need a new file that will be our local library."
+msgstr ""
+"Para isto precisamos un novo ficheiro que será a nosa biblioteca local."
 
-#: C/03_getting_the_signal.js.page:32(p)
+#: C/weatherGeonames.js.page:33(section/code)
+#, no-wrap
 msgid ""
-"In GNOME, widgets that you can interact with, like Buttons and Switches, "
-"send out signals when they are clicked on or activated. A Button, for "
-"instance, sends out the \"clicked\" signal when somebody clicks on it. When "
-"this happens, GNOME looks for the part in your code that says what to do."
+"\n"
+"const Soup = imports.gi.Soup;\n"
+"const _httpSession = new Soup.SessionAsync();\n"
+"Soup.Session.prototype.add_feature.call(_httpSession, new Soup.ProxyResolverDefault());\n"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:33(p)
+#: C/weatherGeonames.js.page:38(section/p)
 msgid ""
-"How do we write that code? By connecting that Button's \"clicked\" signal to "
-"a callback function, which is a function you write just to handle that "
-"signal. So whenever it gives off that signal, the function connected to that "
-"signal is run."
+"In the first lines we'll import and initialize the libraries we need to use "
+"in this local library. Soup handles all the requests we have to make with "
+"http."
 msgstr ""
+"Nas primeiras liñas precisamos importar e inicializar as bibliotecas que "
+"precisamos usar nesta biblioteca local. Soup xestiona todas as solicitudes "
+"que facemos con http."
 
-#: C/03_getting_the_signal.js.page:34(p)
-msgid "Here is an extremely basic example:"
-msgstr "Aquí está un exemplo moi básico:"
+#: C/weatherGeonames.js.page:42(section/title)
+msgid "Creating function GeoNames"
+msgstr "Crear a función GeoNames"
 
-#: C/03_getting_the_signal.js.page:38(p)
+#: C/weatherGeonames.js.page:43(section/code)
+#, no-wrap
 msgid ""
-"This ApplicationWindow has a Button and a Label inside it, arranged in a "
-"Grid. Whenever the Button is clicked, a variable that holds the number of "
-"cookies is increased by 1, and the Label that shows how many cookies there "
-"are is updated."
+"\n"
+"function GeoNames(station) {\n"
+"  this.station = station;\n"
+"}\n"
+"\n"
+"GeoNames.prototype = {\n"
+"\n"
+"}\n"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:39(p)
+#: C/weatherGeonames.js.page:52(section/p)
 msgid ""
-"The cookies in this example are not the same as the cookies that you get "
-"from websites, which store your login information and may keep track of "
-"which sites you've visited. They're just imaginary treats. You may bake some "
-"real ones if you like."
+"Here we create the function GeoNames that will handle getting weather for "
+"us. JavaScript allows us to create functions that have little inside at "
+"first and later expand them. This will be done inside the GeoNames.prototype "
+"curly braces{}"
 msgstr ""
+"Aquí podemos crear a función GeoNames que xestionará a recollida do tempo "
+"por nós. JavaScript permítenos crear as funcións que terán pouco dentro "
+"delas ao principio pero que crecerán máis tarde. Isto farase dentro das "
+"chaves {} de GeoNames.prototype"
+
+#: C/weatherGeonames.js.page:56(section/title)
+msgid "Methods for GeoNames"
+msgstr "Métodos para GeoNames"
 
-#: C/03_getting_the_signal.js.page:40(p)
+#: C/weatherGeonames.js.page:57(section/code)
+#, no-wrap
 msgid ""
-"Here is the basic, boilerplate code that goes at the start of the "
-"application, before we start creating the window and widgets. Besides the "
-"application having a unique name, the biggest change from the usual "
-"boilerplate is that we create a global variable right near the beginning, to "
-"hold the number of cookies."
+"\n"
+"getWeather: function(callback) {\n"
+"    var request = Soup.Message.new('GET', 'http://api.geonames.org/weatherIcaoJSON?ICAO=' + this.station + 
'&amp;username=demo');\n"
+"    _httpSession.queue_message(request, function(_httpSession, message) {\n"
+"      if (message.status_code !== 200) {\n"
+"        callback(message.status_code, null);\n"
+"        return;\n"
+"      }\n"
+"      var weatherJSON = request.response_body.data;\n"
+"      var weather = JSON.parse(weatherJSON);\n"
+"      callback(null, weather);\n"
+"      });\n"
+"},\n"
+"\n"
+"getIcon: function(weather){\n"
+"    switch (weather.weatherObservation.weatherCondition){\n"
+"    case \"drizzle\":\n"
+"    case \"light showers rain\":\n"
+"    case \"light rain\":\n"
+"      return \"weather-showers-scattered.svg\";\n"
+"    case \"rain\":\n"
+"      return \"weather-showers.svg\";\n"
+"    case \"light snow\":\n"
+"    case \"snow grains\":\n"
+"      return \"weather-snow.svg\";\n"
+"    }\n"
+"    switch (weather.weatherObservation.clouds){\n"
+"      case \"few clouds\":\n"
+"      case \"scattered clouds\":\n"
+"        return \"weather-few-clouds.svg\";\n"
+"      case \"clear sky\":\n"
+"        return \"weather-clear.svg\"\n"
+"      case \"broken clouds\":\n"
+"      case \"overcast\":\n"
+"        return \"weather-overcast.svg\";\n"
+"    }\n"
+"    return \"weather-fog.svg\";\n"
+"}\n"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:72(p)
+#: C/weatherGeonames.js.page:96(section/p)
 msgid ""
-"Take a look at the part that uses our application's connect method and Lang."
-"bind, to connect its activate and startup signals to the functions that "
-"present the window and build the UI. We're going to do the same thing with "
-"our Button when we get to it, except that we're going to connect its "
-"\"clicked\" signal instead."
+"The first method for GeoNames is getWeather and the second getIcon. In "
+"getWeather we make a http request with soup, handle errors and then parse "
+"the information from the request to form we can use it. In getIcon we simply "
+"compare the results we got from getWeather to the switch we have in order to "
+"get the icon matching current weather. Now that we have our local library "
+"ready, it's time to make use of it."
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:76(title)
-msgid "Click the button"
-msgstr "Prema o botón"
+#: C/weatherGeonames.js.page:101(section/title)
+msgid "geonames.js"
+msgstr "geonames.js"
 
-#: C/03_getting_the_signal.js.page:78(p)
+#: C/weatherGeonames.js.page:102(section/p)
 msgid ""
-"As usual, we'll put all the code to create our Button and other widgets "
-"inside the _buildUI function, which is called when the application starts up."
+"Here is the entire code for our local library. The main program file calls "
+"this asynchronously."
 msgstr ""
+"Aquí está o código completo para a nosa biblioteca global. O ficheiro do "
+"programa principal chamará a isto de forma asíncrona."
 
-#: C/03_getting_the_signal.js.page:84(p)
-msgid "First, we create the window itself:"
+#: C/weatherGeonames.js.page:103(section/code)
+#, no-wrap
+msgid ""
+"\n"
+"const Soup = imports.gi.Soup;\n"
+"const _httpSession = new Soup.SessionAsync();\n"
+"Soup.Session.prototype.add_feature.call(_httpSession, new Soup.ProxyResolverDefault());\n"
+"\n"
+"function GeoNames(station) {\n"
+"  this.station = station;\n"
+"}\n"
+"\n"
+"GeoNames.prototype = {\n"
+"  getWeather: function(callback) {\n"
+"    var request = Soup.Message.new('GET', 'http://api.geonames.org/weatherIcaoJSON?ICAO=' + this.station + 
'&amp;username=demo');\n"
+"    _httpSession.queue_message(request, function(_httpSession, message) {\n"
+"      if (message.status_code !== 200) {\n"
+"        callback(message.status_code, null);\n"
+"        return;\n"
+"      }\n"
+"      var weatherJSON = request.response_body.data;\n"
+"      var weather = JSON.parse(weatherJSON);\n"
+"      callback(null, weather);\n"
+"      });\n"
+"    },\n"
+"\n"
+"  getIcon: function(weather){\n"
+"    switch (weather.weatherObservation.weatherCondition){\n"
+"    case \"drizzle\":\n"
+"    case \"light showers rain\":\n"
+"    case \"light rain\":\n"
+"      return \"weather-showers-scattered.svg\";\n"
+"    case \"rain\":\n"
+"      return \"weather-showers.svg\";\n"
+"    case \"light snow\":\n"
+"    case \"snow grains\":\n"
+"      return \"weather-snow.svg\";\n"
+"    }\n"
+"    switch (weather.weatherObservation.clouds){\n"
+"      case \"few clouds\":\n"
+"      case \"scattered clouds\":\n"
+"        return \"weather-few-clouds.svg\";\n"
+"      case \"clear sky\":\n"
+"        return \"weather-clear.svg\"\n"
+"      case \"broken clouds\":\n"
+"      case \"overcast\":\n"
+"        return \"weather-overcast.svg\";\n"
+"    }\n"
+"    return \"weather-fog.svg\";\n"
+"    }\n"
+"}\n"
+"}  "
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:94(p)
+#: C/window.c.page:7(info/title)
+#, fuzzy
+#| msgid "Window (C)"
+msgctxt "text"
+msgid "Window (C)"
+msgstr "Xanela (C)"
+
+#: C/window.c.page:17(info/desc) C/window.py.page:22(info/desc)
+#: C/window.vala.page:17(info/desc)
+msgid "A toplevel window which can contain other widgets"
+msgstr "Un botón de primeiro nivel que pode conter a outros widgets"
+
+#: C/window.c.page:20(page/title) C/window.js.page:20(page/title)
+#: C/window.py.page:25(page/title) C/window.vala.page:20(page/title)
+msgid "Window"
+msgstr "Xanela"
+
+#: C/window.c.page:23(page/p)
 msgid ""
-"Note that we've set its default_height and default_width properties. These "
-"let us control how tall and wide the ApplicationWindow will be, in pixels."
+"A minimal GtkApplication. Use <link xref=\"GtkApplicationWindow.c"
+"\">Application Window</link> if you need GMenu support."
 msgstr ""
+"Un GtkApplication mínimo. Use <link xref=\"GtkApplicationWindow.c\">Xanela "
+"de aplicativo</link> se quere compatibilidade con GMenu."
 
-#: C/03_getting_the_signal.js.page:95(p)
+#: C/window.c.page:27(page/code)
+#, no-wrap
 msgid ""
-"Next, we'll create the Label that shows us the number of cookies. We can use "
-"the cookies variable as part of the Label's label property."
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"\n"
+"  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);\n"
+"\n"
+"  gtk_window_set_application (GTK_WINDOW (window), GTK_APPLICATION (app));\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Hello GNOME\");\n"
+"\n"
+"  gtk_widget_show_all (GTK_WIDGET (window));\n"
+"}\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\",G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"  return status;\n"
+"}\n"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:102(p)
+#: C/window.js.page:7(info/title)
+#, fuzzy
+#| msgid "Window (JavaScript)"
+msgctxt "text"
+msgid "Window (JavaScript)"
+msgstr "Xanela (JavaScript)"
+
+#: C/window.js.page:17(info/desc)
+msgid "A basic window which can contain other widgets"
+msgstr "Unha xanela de primeiro nivel que pode conter a outros widgets"
+
+#: C/window.js.page:25(td/p)
+msgid "A minimal GtkApplication"
+msgstr "Un GtkApplication mínimo"
+
+#: C/window.js.page:28(td/p)
 msgid ""
-"Now we'll create the Button. We set its label property to show the text that "
-"we want on the Button, and we connect its \"clicked\" signal to a function "
-"called _getACookie, which we'll write after we're done building our "
-"application's UI."
+"Use <link xref=\"GtkApplicationWindow.js\">ApplicationWindow</link> if you "
+"need GMenu support."
 msgstr ""
+"Use <link xref=\"GtkApplicationWindow.js\">Xanela de aplicativo</link> se "
+"quere compatibilidade con GMenu."
 
-#: C/03_getting_the_signal.js.page:110(p)
+#: C/window.js.page:32(page/code)
+#, no-wrap
 msgid ""
-"Finally, we create a Grid, attach the Label and Button to it, add it to the "
-"window and tell the window to show itself and its contents. That's all we "
-"need inside the _buildUI function, so we close it with a bracket, as well as "
-"a comma that tells GNOME to go on to the next function. Note that even "
-"though we wrote the code for the Label first, we can still attach it to the "
-"Grid in a way that will put it on the bottom."
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const Application = new Lang.Class ({\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.myapp',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    },\n"
+"\n"
+"    //callback function for 'activate' signal\n"
+"    _onActivate: function () {\n"
+"\n"
+"        MyWindow = new Gtk.Window({type: Gtk.WindowType.TOPLEVEL});\n"
+"        MyWindow.title = \"Welcome to GNOME\";\n"
+"\n"
+"       /* Here are a few ways we can customize our window.\n"
+"       Try uncommenting them or changing their values! */\n"
+"        //MyWindow.set_default_size (400,200);\n"
+"        //MyWindow.set_has_resize_grip (false);\n"
+"        //MyWindow.set_opacity (0.5);\n"
+"        //MyWindow.maximize ();\n"
+"\n"
+"        //show the window and all child widgets (none in this case)\n"
+"        MyWindow.show_all();\n"
+"        this.application.add_window(MyWindow);\n"
+"    }\n"
+"});\n"
+"\n"
+"//run the application\n"
+"let app = new Application ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:130(p)
+#: C/window.js.page:34(page/p)
+msgid "In this example we used the following:"
+msgstr "Neste exemplo empregaremos o seguinte:"
+
+#: C/window.js.page:39(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Now, we write the _getACookie function. Whenever our Button sends out its "
-"\"clicked\" signal, the code in this function will run. In this case, all it "
-"does is increase the number of cookies by 1, and update the Label to show "
-"the new number of cookies. We do this using the Label's set_label method."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Window.html";
+"\">Gtk.Window</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
+
+#: C/window.py.page:7(info/title)
+#, fuzzy
+#| msgid "Window (Python)"
+msgctxt "text"
+msgid "Window (Python)"
+msgstr "Xanela (Python)"
+
+#: C/window.py.page:31(td/p)
+msgid "A minimal Gtk+ Application: a window with a title."
+msgstr "Un aplicativo Gtk+ mínimo: unha xanela con un título."
 
-#: C/03_getting_the_signal.js.page:131(p)
+#: C/window.py.page:34(td/p)
 msgid ""
-"Many widgets have the same properties and methods. Both Labels and Buttons, "
-"for instance, have a label property that says what text is inside them, and "
-"get_label and set_label methods that let you check what that text is and "
-"change it, respectively. So if you learn how one widget works, you'll also "
-"know how others like it work."
+"Use <link xref=\"GtkApplicationWindow.py\">Application Window</link> if you "
+"need GMenu support."
 msgstr ""
+"Use <link xref=\"GtkApplicationWindow.py\">Xanela de aplicativo</link> se "
+"quere compatibilidade con GMenu."
 
-#: C/03_getting_the_signal.js.page:144(p)
+#: C/window.py.page:44(section/code)
+#, no-wrap
 msgid ""
-"Finally, we run the application, using the same kind of code as in our last "
-"tutorial."
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def do_activate(self):\n"
+"        # create a Gtk Window belonging to the application itself\n"
+"        window = Gtk.Window(application=self)\n"
+"        # set the title\n"
+"        window.set_title(\"Welcome to GNOME\")\n"
+"        # show the window\n"
+"        window.show_all()\n"
+"\n"
+"# create and run the application, exit with the value returned by\n"
+"# running the program\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:153(title)
-msgid "Flip the switch"
-msgstr ""
+#: C/window.py.page:49(section/title)
+msgid "Useful methods for a Window widget"
+msgstr "Métodos útiles para o widget de Xanela"
 
-#: C/03_getting_the_signal.js.page:154(p)
+#: C/window.py.page:50(section/p)
 msgid ""
-"Buttons aren't the only input widgets in our Gtk+ toolbox. We can also use "
-"switches, like the one in this example. Switches don't have a label "
-"property, so we have to create a separate Label that says what it does to go "
-"next to it."
+"<code>window = Gtk.Window(application=self, title=\"Welcome to GNOME\")</"
+"code> sets the title as well, without the need for the line <code>window."
+"set_title(\"Welcome to GNOME\")</code>. For a general discussion of this, "
+"see <link xref=\"properties.py\">here</link>."
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:158(p)
+#: C/window.vala.page:7(info/title)
+#, fuzzy
+#| msgid "Window (Vala)"
+msgctxt "text"
+msgid "Window (Vala)"
+msgstr "Xanela (Vala)"
+
+#: C/window.vala.page:25(td/p)
+msgid "The simplest Gtk.Application"
+msgstr "O Gtk.Application máis simple"
+
+#: C/window.vala.page:28(td/p)
 msgid ""
-"A Switch has two positions, Off and On. When a Switch is turned on, its text "
-"and background color change, so you can tell which position it's in."
+"Use <link xref=\"GtkApplicationWindow.vala\">Application Window</link> if "
+"you need GMenu support."
 msgstr ""
+"Use <link xref=\"GtkApplicationWindow.vala\">Xanela de aplicativo</link> se "
+"quere compatibilidade con GMenu."
 
-#: C/03_getting_the_signal.js.page:162(p)
+#: C/window.vala.page:32(page/code)
+#, no-wrap
 msgid ""
-"You may have seen Switches like these in GNOME's accessibility menu, which "
-"let you turn features like large text and the on-screen keyboard on and off. "
-"In this case, the Switch controls our imaginary cookie dispenser. If the "
-"Switch is turned on, you can get cookies by clicking the \"Get a cookie\" "
-"Button. If it's turned off, clicking the Button won't do anything."
+"/* This is the application. */\n"
+"public class Application : Gtk.Application {\n"
+"\n"
+"\t/* Constructor */\n"
+"\tpublic Application () {\n"
+"\t\tObject (application_id: \"org.example.window\");\n"
+"\t}\n"
+"\n"
+"\t/* Override the 'activate' signal of GLib.Application,\n"
+"\t * which is inherited by Gtk.Application. */\n"
+"\tpublic override void activate () {\n"
+"\n"
+"\t\tvar window = new Gtk.Window ();\n"
+"\t\twindow.title = \"Welcome to GNOME\";\n"
+"\n"
+"\t\t/* The following 3 lines are included here to introduce\n"
+"\t\t * you to ways you can adjust the toplevel window to suit\n"
+"\t\t * your needs.  Uncomment them to see what they do.\n"
+"\t\t */\n"
+"\n"
+"\t\t//window.border_width = 10;\n"
+"\t\t//window.set_default_size (350, 70);\n"
+"\t\t//window.window_position = Gtk.WindowPosition.CENTER;\n"
+"\n"
+"\t\t/* Add the window to this application. */\n"
+"\t\tthis.add_window (window);\n"
+"\n"
+"\t\t/* Show the window. */\n"
+"\t\twindow.show ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* The main function creates the application and runs it.*/\n"
+"int main (string[] args) {\n"
+"\tvar app = new Application ();\n"
+"\treturn app.run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:163(p)
+#: C/window.vala.page:38(item/p)
 msgid ""
-"You can get to the accessibility menu by clicking on the outline of a human, "
-"near your name in the upper-right corner of the screen."
+"The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+"\">Gtk.Window</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/03_getting_the_signal.js.page:164(p)
-msgid "Here's how we create the Switch:"
+#: C/window.vala.page:40(item/p)
+msgid ""
+"The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/03_getting_the_signal.js.page:170(p)
+#: C/window.vala.page:42(item/p)
 msgid ""
-"We don't actually need to connect the Switch to anything. All we need to do "
-"is write an if statement in our _getACookie function, to check to see if the "
-"Switch is turned on. If we wanted to make something happen as soon as you "
-"flip the Switch, though, we would connect its notify::active signal, like so:"
+"The method <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"set_default_size.html\">set_default_size</link>"
 msgstr ""
+"O método <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"set_default_size.html\">set_default_size</link>"
 
-#: C/03_getting_the_signal.js.page:176(p)
+#: C/window.vala.page:44(item/p)
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"A Switch is set to the off position by default. If we wanted the Switch to "
-"start out turned on, we would set the value of its active property to true "
-"when we create it."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Container.border_width.html";
+"\">border_width</link>"
 msgstr ""
+"O widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk."
+"Window</link>"
 
-#: C/03_getting_the_signal.js.page:181(p)
+#: C/window.vala.page:46(item/p)
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"Let's just create it normally, though, and then create the Label that goes "
-"with it. We want the Switch and the Label to be kept right next to each "
-"other, so we'll create a Grid just for them, then put that Grid in our "
-"larger Grid that holds all the widgets inside it. Here's what the code looks "
-"like to create all that:"
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.window_position.html";
+"\">window_position</link>"
 msgstr ""
+"O enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 
-#: C/03_getting_the_signal.js.page:200(p)
-msgid "And now we arrange everything in the larger Grid like so."
-msgstr ""
+#~ msgid "tiffany antopolski gmail com"
+#~ msgstr "tiffany antopolski gmail com"
 
-#: C/03_getting_the_signal.js.page:208(p)
-msgid ""
-"Now we change the _getACookie function so that it checks to see if the "
-"cookie dispenser is turned on. We do that by using the Switch's get_active "
-"method. It returns true if the Switch is turned on, and false if the Switch "
-"is turned off."
-msgstr ""
+#~ msgid "Gtk.Application"
+#~ msgstr "Gtk.Application"
 
-#: C/03_getting_the_signal.js.page:209(p)
-msgid ""
-"When a method is used in an if statement like this, the code inside the if "
-"statement is executed if the method returns true."
-msgstr ""
+#~ msgid "border_width"
+#~ msgstr "border_width"
 
-#: C/03_getting_the_signal.js.page:228(title)
-msgid "Tuning the radio"
-msgstr "Axustando o radio"
+#~ msgid "window_position"
+#~ msgstr "window_position"
 
-#: C/03_getting_the_signal.js.page:230(p)
-msgid ""
-"Another type of input widget we can use is called the RadioButton. You "
-"create them in groups, and then only one RadioButton in a group can be "
-"selected at a time. They're called RadioButtons because they work like the "
-"channel preset button in old-style car radios. The radio could only be tuned "
-"to one station at a time, so whenever you pressed one button in, another "
-"would pop back out."
-msgstr ""
+#~| msgid "mdhillca gmail com"
+#~ msgid "mmcasetti gmail com"
+#~ msgstr "mmcasetti gmail com"
 
-#: C/03_getting_the_signal.js.page:234(p)
-msgid ""
-"First off, let's change our ApplicationWindow's name and increase its "
-"border_width property, so that our widgets aren't packed in too tightly. The "
-"border_width is the number of pixels between any widget and the edge of the "
-"window."
-msgstr ""
+#~| msgid "Gtk.Application"
+#~ msgid "GtkApplication"
+#~ msgstr "GtkApplication"
 
-#: C/03_getting_the_signal.js.page:246(p)
-msgid ""
-"After that, we create the RadioButtons. Remember how they're created in "
-"groups? The way we do that, is we set each new RadioButton's group property "
-"to the name of another RadioButton."
-msgstr ""
+#~| msgid "Window"
+#~ msgid "GtkWindow"
+#~ msgstr "GtkWindow"
 
-#: C/03_getting_the_signal.js.page:256(p)
-msgid ""
-"Next, we create a Grid for the RadioButtons. Remember, we don't have to "
-"arrange things in Grids in the same order that we create them in."
-msgstr ""
+#~ msgid "jewelfox fursona net"
+#~ msgstr "jewelfox fursona net"
 
-#: C/03_getting_the_signal.js.page:265(p)
-msgid ""
-"Normally, the RadioButton that's selected by default is the one that's the "
-"name of the group. We want the first \"Not cookie\" button to be selected by "
-"default, though, so we use its set_active method."
-msgstr ""
+#~| msgid "Window"
+#~ msgid "Gtk.Window"
+#~ msgstr "Gtk.Window"
 
-#: C/03_getting_the_signal.js.page:266(p)
-msgid "We could also set its active property to true when we create it."
-msgstr ""
+#~ msgid "ihmis suski gmail com"
+#~ msgstr "ihmis suski gmail com"
 
-#: C/03_getting_the_signal.js.page:272(p)
-msgid "Now we arrange everything in our main Grid like usual ..."
-msgstr ""
+#~ msgid "Creating function geoNames"
+#~ msgstr "Crear función geoNames"
 
-#: C/03_getting_the_signal.js.page:280(p)
-msgid ""
-"And then we change our _getACookie function to test to see if the cookie "
-"button is the one that's selected."
-msgstr ""
+#~ msgid "Methods for geoNames"
+#~ msgstr "Métodos para geoNames"
 
-#: C/03_getting_the_signal.js.page:299(title)
-msgid "Can you spell \"cookie\"?"
-msgstr ""
+#~ msgid "Autotools"
+#~ msgstr "Autotools"
 
-#: C/03_getting_the_signal.js.page:301(p)
-msgid ""
-"The last input widget we're going to cover is the Entry widget, which is "
-"used for single-line text entry."
-msgstr ""
+#~ msgid "weatherapp.js"
+#~ msgstr "weatherapp.js"
 
-#: C/03_getting_the_signal.js.page:302(p)
-msgid ""
-"If you need to be able to enter in a whole paragraph or more, like if you "
-"are building a text editor, you'll want to look at the much more "
-"customizable <link xref=\"textview.js\">TextView</link> widget."
-msgstr ""
+#~ msgid "$"
+#~ msgstr "$"
 
-#: C/03_getting_the_signal.js.page:305(p)
-msgid "After we change the window's name, we create the Entry widget."
-msgstr ""
+#~ msgid "GJS_PATH=`pwd` gjs weatherapp.js"
+#~ msgstr "GJS_PATH=`pwd` gjs weatherapp.js"
 
-#: C/03_getting_the_signal.js.page:311(p)
-msgid "Next, we arrange everything in the Grid ..."
-msgstr ""
+#~ msgid "mdhillca gmail com"
+#~ msgstr "mdhillca gmail com"
 
-#: C/03_getting_the_signal.js.page:319(p)
-msgid ""
-"And now we modify _getACookie's if statement again, using the Entry's "
-"get_text method to retrieve the text that you entered into it and see if you "
-"spelled \"cookie\" right. We don't care whether you capitalize \"cookie\" or "
-"not, so we use JavaScript's built-in toLowerCase method to change the "
-"Entry's text to all lower case inside the if statement."
-msgstr ""
+#~| msgid "TreeView widget"
+#~ msgid "GtkTreeView"
+#~ msgstr "GtkTreeView"
 
-#: C/03_getting_the_signal.js.page:320(p)
-msgid ""
-"An Entry widget doesn't have a label property, which is a set text string "
-"that the user can't change. (You can't normally change the label on a "
-"Button, for instance.) Instead, it has a text property, which changes to "
-"match what the user types in."
-msgstr ""
+#~ msgid "GtkTreeModel"
+#~ msgstr "GtkTreeModel"
 
-#: C/03_getting_the_signal.js.page:340(p)
-msgid ""
-"<link xref=\"04_popup_dialog_boxes.js\">Click here</link> to go on to the "
-"next tutorial. Or keep reading, if you'd like to see the complete code for "
-"each version of our cookie maker application."
-msgstr ""
+#~ msgid "GtkTreeStore"
+#~ msgstr "GtkTreeStore"
 
-#: C/03_getting_the_signal.js.page:341(p)
-msgid ""
-"The main JavaScript tutorials page has <link xref=\"beginner.js#buttons"
-"\">more detailed code samples</link> for each input widget, including "
-"several not covered here."
-msgstr ""
+#~ msgid "GtkCellRendererText"
+#~ msgstr "GtkCellRendererText"
 
-#: C/03_getting_the_signal.js.page:346(title)
-#| msgid "Code samples"
-msgid "Complete code samples"
-msgstr "Exemplos de código completo"
+#~ msgid "GtkTreeViewColumn"
+#~ msgstr "GtkTreeViewColumn"
 
-#: C/03_getting_the_signal.js.page:351(title)
-#| msgid "Code samples"
-msgid "Code sample with Button"
-msgstr "Exemplo de código con Button"
+#~ msgid "Gtk.TreeView"
+#~ msgstr "Gtk.TreeView"
 
-#: C/03_getting_the_signal.js.page:357(title)
-#| msgid "Code samples"
-msgid "Code sample with Switch"
-msgstr "Exemplo de código con Switch"
+#~ msgid "Gtk.ListStore"
+#~ msgstr "Gtk.ListStore"
 
-#: C/03_getting_the_signal.js.page:363(title)
-msgid "Code sample with RadioButton"
-msgstr "Exemplo de código con RadioButton"
+#~| msgid "Gtk.Application"
+#~ msgid "Gtk.TreeSelection"
+#~ msgstr "Gtk.TreeSelection"
 
-#: C/03_getting_the_signal.js.page:369(title)
-#| msgid "Code samples"
-msgid "Code sample with Entry"
-msgstr "Exemplo de código con Entry"
+#~ msgid "GtkListStore"
+#~ msgstr "GtkListStore"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:94(None)
-#| msgid "@@image: 'media/window.png'; md5=38981fea31f2b9871cf369e0541fdbc6"
-msgid "@@image: 'media/02_jsgrid_01.png'; md5=3fdc22d361cf801f71557fdc76ae5b49"
-msgstr "@@image: 'media/02_jsgrid_01.png'; md5=3fdc22d361cf801f71557fdc76ae5b49"
+#~ msgid "pygobject - Python bindings for GObject Introspection"
+#~ msgstr "pygobject - ligazóns de Python para a introspección de GObject"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:149(None)
-#| msgid "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
-msgid "@@image: 'media/02_jsgrid_02.png'; md5=07db86b0043ba5c3c24a90d7322bd81e"
-msgstr "@@image: 'media/02_jsgrid_02.png'; md5=07db86b0043ba5c3c24a90d7322bd81e"
+#~ msgid "Fonts"
+#~ msgstr "Tipos de letra"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:166(None)
-#| msgid "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
-msgid "@@image: 'media/02_jsgrid_03.png'; md5=817351e73c687d47253c56ed06b6629f"
-msgstr "@@image: 'media/02_jsgrid_03.png'; md5=817351e73c687d47253c56ed06b6629f"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:196(None)
-msgid "@@image: 'media/02_jsgrid_04.png'; md5=eeaead27cee2851877fc3cfe66177f07"
-msgstr "@@image: 'media/02_jsgrid_04.png'; md5=eeaead27cee2851877fc3cfe66177f07"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:205(None)
-#| msgid "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
-msgid "@@image: 'media/02_jsgrid_05.png'; md5=a3ad12f432d5977fc1f66302ad5b7498"
-msgstr "@@image: 'media/02_jsgrid_05.png'; md5=a3ad12f432d5977fc1f66302ad5b7498"
+#~ msgid "Gtk.ApplicationWindow"
+#~ msgstr "Gtk.ApplicationWindow"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:216(None)
-#| msgid ""
-#| "@@image: 'media/messagedialog.png'; md5=7cca8bbffdce01233e13624bbfb7e294"
-msgid "@@image: 'media/02_jsgrid_06.png'; md5=450e48dbf6b8f5ce1c208e4812e1714b"
-msgstr "@@image: 'media/02_jsgrid_06.png'; md5=450e48dbf6b8f5ce1c208e4812e1714b"
+#~ msgid "Gtk.CellRendererText"
+#~ msgstr "Gtk.CellRendererText"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:226(None)
-#| msgid ""
-#| "@@image: 'media/guitar-tuner.png'; md5=f0b7ed4cdc2729d2d0f4d38b829db61e"
-msgid "@@image: 'media/02_jsgrid_07.png'; md5=0b304d70728903fbb2601d55bf00fdb9"
-msgstr "@@image: 'media/02_jsgrid_07.png'; md5=0b304d70728903fbb2601d55bf00fdb9"
+#~ msgid "Gtk.TreeIter"
+#~ msgstr "Gtk.TreeIter"
+
+#~ msgid "Gtk.TreeViewColumn"
+#~ msgstr "Gtk.TreeViewColumn"
+
+#~ msgid "GtkCellRendererToggle"
+#~ msgstr "GtkCellRendererToggle"
+
+#~ msgid "GtkTooltip"
+#~ msgstr "GtkTooltip"
+
+#~ msgid "GtkToolbar"
+#~ msgstr "GtkToolbar"
+
+#~ msgid "GtkWidget"
+#~ msgstr "GtkWidget"
+
+#~ msgid "Stock Items"
+#~ msgstr "Elemento de inventario"
+
+#~ msgid "Screenshot of Glade ui"
+#~ msgstr "Captura de pantalla da IU de Glade"
+
+#~ msgid "Screenshot of General tab"
+#~ msgstr "Captura de pantalla da lapela Xeral"
+
+#~ msgid "Screenshot of Common tab"
+#~ msgstr "Captura de pantalla da lapela Común"
+
+#~ msgid "Setting the visible property to No"
+#~ msgstr "Estabeleza a propiedade visible a Non"
+
+#~ msgid "Gtk.Toolbar"
+#~ msgstr "Gtk.Toolbar"
+
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "Gtk.Toolbutton"
+#~ msgstr "Gtk.Toolbutton"
+
+#~ msgid "Gtk.Stock"
+#~ msgstr "Gtk.Stock"
+
+#~ msgid "sebp k-d-w org"
+#~ msgstr "sebp k-d-w org"
+
+#~ msgid "GtkGrid"
+#~ msgstr "GtkGrid"
+
+#~ msgid "GtkBuilder"
+#~ msgstr "GtkBuilder"
+
+#~| msgid "Program Structure"
+#~ msgid "Event Structures"
+#~ msgstr "Estrutura de eventos"
+
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "GtkToolButton"
+#~ msgstr "GtkToolButton"
+
+#~ msgid "GtkToolItem"
+#~ msgstr "GtkToolItem"
+
+#~| msgid "Gtk.Application"
+#~ msgid "GtkActionable"
+#~ msgstr "GtkActionable"
+
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "Gtk.ToolButton"
+#~ msgstr "Gtk.ToolButton"
+
+#~ msgid "Gtk Stock items"
+#~ msgstr "Elementos do inventario de Gtk"
+
+#~ msgid "Gdk.WindowState"
+#~ msgstr "Gdk.WindowState"
+
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "Gtk.ToggleButton"
+#~ msgstr "Gtk.ToggleButton"
+
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "GtkToggleButton"
+#~ msgstr "GtkToggleButton"
+
+#~ msgid "GtkSpinner"
+#~ msgstr "GtkSpinner"
+
+#~ msgid "Gtk.Grid"
+#~ msgstr "Gtk.Grid"
+
+#~ msgid "Gtk.Spinner"
+#~ msgstr "Gtk.Spinner"
+
+#~| msgid "mdhillca gmail com"
+#~ msgid "monicakochofar gmail com"
+#~ msgstr "monicakochofar gmail com"
+
+#~ msgid "GtkTogglebutton"
+#~ msgstr "GtkTogglebutton"
+
+#~ msgid "Gtk.TextBuffer"
+#~ msgstr "Gtk.TextBuffer"
+
+#~ msgid "Gtk.TextView"
+#~ msgstr "Gtk.TextView"
+
+#~ msgid "Gtk.ScrolledWindow"
+#~ msgstr "Gtk.ScrolledWindow"
+
+#~ msgid "Gtk.WrapMode"
+#~ msgstr "Gtk.WrapMode"
+
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "Gtk.PolicyType"
+#~ msgstr "Gtk.PolicyType"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:248(None)
 #, fuzzy
-#| msgid "@@image: 'media/grid.png'; md5=9925ee72d701caca59190a24fa9dae8d"
-msgid "@@image: 'media/02_jsgrid_08.png'; md5=78890beb47bd11360154b8ca4d50d1ff"
-msgstr "@@image: 'media/02_jsgrid_08.png'; md5=78890beb47bd11360154b8ca4d50d1ff"
+#~ msgid "GtkTextView"
+#~ msgstr "GtkTextView"
 
-#: C/02_welcome_to_the_grid.js.page:19(desc)
-msgid "Learn how to lay out UI components, like Images and Labels."
-msgstr ""
+#~ msgid "GtkTextBuffer"
+#~ msgstr "GtkTextBuffer"
 
-#: C/02_welcome_to_the_grid.js.page:22(title)
-msgid "2. Welcome to the Grid"
-msgstr ""
+#~ msgid "GtkTextTag"
+#~ msgstr "GtkTextTag"
 
-#: C/02_welcome_to_the_grid.js.page:24(p)
-msgid ""
-"This tutorial will show you how to create basic widgets, or parts of the "
-"GNOME user interface, like Images and Labels. You'll then learn how to "
-"arrange them all in a Grid, which lets you put widgets exactly where you "
-"want them."
-msgstr ""
+#~| msgid "Scrolling"
+#~ msgid "GtkScrolledWindow"
+#~ msgstr "GtkScrolledWindow"
 
-#: C/02_welcome_to_the_grid.js.page:25(p)
-msgid ""
-"Have you taken <link xref=\"hellognome.js\">the first tutorial in this "
-"series</link> already? You'll want to do so before continuing."
-msgstr ""
+#~ msgid "Standard Enumerations"
+#~ msgstr "Enumeracións estándar"
 
-#: C/02_welcome_to_the_grid.js.page:31(title)
-msgid "Going native"
-msgstr ""
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "Gtk.Button"
+#~ msgstr "Gtk.Button"
 
-#: C/02_welcome_to_the_grid.js.page:33(p)
-msgid ""
-"In the last tutorial, we created what was basically a GNOME window frame for "
-"a web app. All the GNOME-specific code we needed to learn revolved around "
-"putting the WebView -- the widget containing our application -- into an "
-"ApplicationWindow, and telling it to display. The application itself was "
-"written in HTML and JavaScript, just like most pages on the web."
-msgstr ""
+#~ msgid "Gtk.Label"
+#~ msgstr "Gtk.Label"
+
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "Gtk.RadioButton"
+#~ msgstr "Gtk.ButtonsType"
+
+#~| msgid "Layout containers"
+#~ msgid "GtkContainer"
+#~ msgstr "GtkContainer"
+
+#~ msgid "Gtk.Switch"
+#~ msgstr "Gtk.Switch"
+
+#~ msgid "GtkSwitch"
+#~ msgstr "GtkSwitch"
+
+#~ msgid "GtkLabel"
+#~ msgstr "GtkLabel"
+
+#~| msgid "SimpleAction"
+#~ msgid "GSimpleAction"
+#~ msgstr "GSimpleAction"
+
+#~ msgid "Gtk.Image"
+#~ msgstr "Gtk.Image"
+
+#~ msgid "Gtk.Statusbar"
+#~ msgstr "Gtk.Statusbar"
+
+#~ msgid "GtkStatusbar"
+#~ msgstr "GtkStatusbar"
+
+#~ msgid "Gdk - Key Values"
+#~ msgstr "Gdk - Valores de chave"
+
+#~ msgid "GtkStatusBar"
+#~ msgstr "GtkStatusBar"
+
+#~ msgid "String Utility Functions"
+#~ msgstr "Funcións de utilidade de cadeas"
+
+#~ msgid "Gtk.Widget"
+#~ msgstr "Gtk.Widget"
+
+#~ msgid "Gdk.keyval_name"
+#~ msgstr "Gdk.keyval_name"
+
+#~ msgid "Key Values"
+#~ msgstr "Valores da chave"
+
+#~ msgid "GObject"
+#~ msgstr "GObject"
+
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "Gtk.SpinButton"
+#~ msgstr "Gtk.SpinButton"
+
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "GtkSpinButton"
+#~ msgstr "GtkSpinButton"
+
+#~ msgid "GtkAdjustment"
+#~ msgstr "GtkAdjustment"
+
+#~ msgid "GtkSeparator"
+#~ msgstr "GtkSeparator"
+
+#~ msgid "Gtk.Scale"
+#~ msgstr "Gtk.Scale"
+
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "Gtk.PositionType"
+#~ msgstr "Gtk.PositionType"
 
-#: C/02_welcome_to_the_grid.js.page:34(p)
-msgid ""
-"This time, we're going to use only native GNOME widgets. A widget is just a "
-"thing, like a checkbox or picture, and GNOME has a wide variety of them to "
-"choose from. We call them \"native\" widgets to distinguish them from things "
-"like the button and header in the web app we wrote. Because instead of using "
-"web code, these are going to be 100 percent GNOME, using Gtk+."
-msgstr ""
+#~| msgid "Gtk.Application"
+#~ msgid "Gtk.Orientation"
+#~ msgstr "Gtk.Orientation"
 
-#: C/02_welcome_to_the_grid.js.page:35(p)
-msgid ""
-"Gtk+ stands for \"GIMP Toolkit.\" It's like a toolbox of widgets that you "
-"can reach into, while building your applications. It was originally written "
-"for <link href=\"http://www.gimp.org/\";>the GIMP,</link> which is a free "
-"software image editor."
-msgstr ""
+#~ msgid "GtkRange"
+#~ msgstr "GtkRange"
 
-#: C/02_welcome_to_the_grid.js.page:39(title)
-#| msgid "Setting up our image actors"
-msgid "Setting up our application"
-msgstr "Configurar o seu aplicativo"
+#~ msgid "gnome-doc-list gnome org"
+#~ msgstr "gnome-doc-list gnome org"
 
-#: C/02_welcome_to_the_grid.js.page:41(p)
-msgid ""
-"Before we dig out any widgets from the Gtk+ toolbox, we first need to write "
-"the basic boilerplate code that our application requires."
-msgstr ""
+#~ msgid "jhs gnome org"
+#~ msgstr "jhs gnome org"
 
-#: C/02_welcome_to_the_grid.js.page:48(p)
-msgid ""
-"This part always goes at the start of your code. Depending on what you'll be "
-"doing with it, you may want to declare more imports here. What we're writing "
-"today is pretty basic, so these are all we need; Gtk for the widgets, and "
-"Lang so we can use Lang.bind to connect our application's activate and "
-"startup signals to the requisite functions."
-msgstr ""
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "GtkRadioButton"
+#~ msgstr "GtkRadioButton"
 
-#: C/02_welcome_to_the_grid.js.page:49(p)
-msgid "Speaking of which:"
-msgstr "Falando diso:"
+#~ msgid "Gtk.ProgressBar"
+#~ msgstr "Gtk.ProgressBar"
 
-#: C/02_welcome_to_the_grid.js.page:73(p)
-msgid ""
-"This is the start of the application itself, and the _init function which "
-"creates it. It tells _buildUI to create an ApplicationWindow, which we're "
-"going to call _window, and it tells our window to present itself whenever "
-"needed."
-msgstr ""
+#~ msgid "GLib.Timeout"
+#~ msgstr "GLib.Timeout"
 
-#: C/02_welcome_to_the_grid.js.page:74(p)
-msgid ""
-"This part, again, is pretty much copy-and-paste, but you always want to give "
-"your application a unique name."
-msgstr ""
+#~ msgid "GtkProgressBar"
+#~ msgstr "GtkProgressBar"
 
-#: C/02_welcome_to_the_grid.js.page:87(p)
-msgid ""
-"Finally, we start off the _buildUI function by creating a new "
-"ApplicationWindow. We specify that it goes with this application, that it "
-"should appear in the center of the screen, and that there should be at least "
-"10 pixels between the outside edge and any widgets inside of it. We also "
-"give it a title, which will appear at the top of the window."
-msgstr ""
+#~ msgid "GLib - The Main Event Loop"
+#~ msgstr "Glib - O búcle de eventos principal"
 
-#: C/02_welcome_to_the_grid.js.page:91(title)
-#| msgid "Reacting to the clicks"
-msgid "Reaching into the Gtk+ toolbox"
-msgstr ""
+#~ msgid "GLib"
+#~ msgstr "GLib"
 
-#: C/02_welcome_to_the_grid.js.page:92(p)
-msgid ""
-"What widgets should we use? Well, let's say we want to write an application "
-"that looks like this:"
-msgstr ""
+#~ msgid "G_Timeout"
+#~ msgstr "G_Timeout"
 
-#: C/02_welcome_to_the_grid.js.page:96(p)
-msgid ""
-"We're going to need, at the very least, a picture and a text label to go "
-"with it. Let's start with the picture:"
-msgstr ""
+#~ msgid "chrisk openismus com"
+#~ msgstr "chrisk openismus com"
 
-#: C/02_welcome_to_the_grid.js.page:102(p)
-msgid ""
-"You can download the image file used in this example <link href=\"https://";
-"live.gnome.org/TarynFox?action=AttachFile&amp;do=get&amp;target=gnome-image."
-"png\">here.</link> Be sure to put it in the same directory as the code "
-"you're writing."
-msgstr ""
+#~ msgid "Gtk.ResponseType"
+#~ msgstr "Gtk.ResponseType"
 
-#: C/02_welcome_to_the_grid.js.page:108(p)
-msgid ""
-"That code adds in the label beneath. You can see how we create widgets, "
-"here; each one is a part of Gtk, and we can give it properties that "
-"customize how it behaves. In this case, we set the Image's file property to "
-"be the filename of the picture we want, and the Label's label property to be "
-"the sentence that we want beneath the picture."
-msgstr ""
+#~ msgid "Gtk.MessageDialog"
+#~ msgstr "Gtk.MessageDialog"
 
-#: C/02_welcome_to_the_grid.js.page:109(p)
-msgid ""
-"Yes, it sounds redundant for a Label to have a label property, but it's not. "
-"Other widgets that contain text have a label property, so it's "
-"<em>consistent</em> for the Label widget to have one too."
-msgstr ""
+#~ msgid "Gtk.DialogFlags"
+#~ msgstr "Gtk.DialogFlags"
 
-#: C/02_welcome_to_the_grid.js.page:110(p)
-msgid ""
-"We can't just add these widgets to our window in order, though, the same way "
-"HTML elements appear in the order you write them. That's because an "
-"ApplicationWindow can only contain one widget."
-msgstr ""
+#~ msgid "Gtk.MessageType"
+#~ msgstr "Gtk.MessageType"
 
-#: C/02_welcome_to_the_grid.js.page:111(p)
-msgid ""
-"How do we get around that? By making that one widget a container widget, "
-"which can hold more than one widget and organize them inside it. Behold: The "
-"Grid."
-msgstr ""
+#~ msgid "Gtk.ButtonsType"
+#~ msgstr "Gtk.ButtonsType"
 
-#: C/02_welcome_to_the_grid.js.page:117(p)
-msgid ""
-"We're not giving it any properties yet. Those will come later, as we learn "
-"how to use the Grid's powers. First, let's attach the Image and Label we "
-"made to our Grid."
-msgstr ""
+#, fuzzy
+#~| msgid "Gtk.MessageDialog"
+#~ msgid "GtkMessageDialog"
+#~ msgstr "Gtk.MessageDialog"
 
-#: C/02_welcome_to_the_grid.js.page:124(p)
-msgid ""
-"This code looks awfully complicated, but it's not. Here's what those numbers "
-"mean:"
-msgstr ""
+#, fuzzy
+#~| msgid "Gtk.DialogFlags"
+#~ msgid "GtkDialog"
+#~ msgstr "Gtk.DialogFlags"
 
-#: C/02_welcome_to_the_grid.js.page:126(p)
-msgid ""
-"The <em>first</em> number is what left-to-right position to put things in, "
-"starting from 0. Any widget that uses a 0 here goes all the way to the left."
-msgstr ""
+#, fuzzy
+#~| msgid "Gtk.Application"
+#~ msgid "GApplication"
+#~ msgstr "Gtk.Application"
 
-#: C/02_welcome_to_the_grid.js.page:127(p)
-msgid ""
-"The <em>second</em> number is what top-to-botton position to put a given "
-"widget in, starting from 0. The Label goes beneath the Image, so we give the "
-"Image a 0 and the Label a 1 here."
-msgstr ""
+#~ msgid "shaunm gnome org"
+#~ msgstr "shaunm gnome org"
 
-#: C/02_welcome_to_the_grid.js.page:128(p)
-msgid ""
-"The <em>third</em> and <em>fourth</em> numbers are how many columns and rows "
-"a widget should take up. We'll see how these work in a minute."
-msgstr ""
+#~ msgid "\"UTF-8\""
+#~ msgstr "\"UTF-8\""
 
-#: C/02_welcome_to_the_grid.js.page:145(p)
-msgid ""
-"Now that we've created the Grid and attached all our widgets to it, we add "
-"it to the window and tell the window to show itself, as the last part of the "
-"_buildUI function. As always, to finish up we create a new instance of the "
-"application's class and tell it to run."
-msgstr ""
+#~ msgid "NULL"
+#~ msgstr "NULL"
 
-#: C/02_welcome_to_the_grid.js.page:146(p)
-msgid ""
-"Save your application as welcome_to_the_grid.js. Then, to run your "
-"application just open a terminal, go to the directory where your application "
-"is at, and type"
-msgstr ""
+#~ msgid "shaunm"
+#~ msgstr "shaunm"
 
-#: C/02_welcome_to_the_grid.js.page:147(screen)
-#, no-wrap
-msgid " <output style=\"prompt\">$ </output>gjs welcome_to_the_grid.js "
-msgstr ""
+#~ msgid "g_base64_encode has bad args"
+#~ msgstr "g_base64_encode ten argumentos non válidos"
 
-#: C/02_welcome_to_the_grid.js.page:151(p)
-msgid ""
-"There we go! But wait. That doesn't look right. Why is the Label crammed up "
-"next to the Image like that? That doesn't look as nice, and it makes it "
-"harder to read. What can we do about this?"
-msgstr ""
+#~ msgid "Link to method to get HTML from DOM and to GIO APIs."
+#~ msgstr "Ligazón ao método para obter HTML desde DOM e nas API de GIO."
 
-#: C/02_welcome_to_the_grid.js.page:155(title)
-msgid "Tweaking the Grid"
-msgstr ""
+#~ msgid "Link to strftime or something"
+#~ msgstr "Ligazóns a strftime ou algo"
 
-#: C/02_welcome_to_the_grid.js.page:157(p)
-msgid ""
-"One thing we can do, is we can give the Label a margin_top property when we "
-"create it. This works sort of like setting a margin for an HTML element "
-"using inline CSS styling."
-msgstr ""
+#~ msgid "dgsiegel gnome org"
+#~ msgstr "dgsiegel gnome org"
 
-#: C/02_welcome_to_the_grid.js.page:165(p)
-msgid ""
-"Of course, if we do that then if we replace the Label with something else -- "
-"or add in another widget -- then we have to repeat the margin_top on it too. "
-"Otherwise we end up with something like this:"
-msgstr ""
+#, fuzzy
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "Gtk.LinkButton"
+#~ msgstr "Gtk.ButtonsType"
 
-#: C/02_welcome_to_the_grid.js.page:168(p)
-msgid ""
-"We could give the Image a margin_bottom property, but that won't work when "
-"the new Label is in a separate column. So how about we try this instead:"
-msgstr ""
+#, fuzzy
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "GtkLinkButton"
+#~ msgstr "Gtk.ButtonsType"
 
-#: C/02_welcome_to_the_grid.js.page:175(p)
-msgid ""
-"That makes it so that there are always 20 pixels of space in between each "
-"horizontal row."
-msgstr ""
+#~ msgid "philip chimento gmail com"
+#~ msgstr "philip chimento gmail com"
 
-#: C/02_welcome_to_the_grid.js.page:176(p)
-msgid ""
-"Yes, you can also set the column_spacing property on a Grid, or the "
-"margin_left and margin_right properties on any widget. Try them out, if you "
-"like!"
-msgstr ""
+#~ msgid "jwendell gnome org"
+#~ msgstr "jwendell gnome org"
 
-#: C/02_welcome_to_the_grid.js.page:180(title)
-msgid "Adding more widgets"
-msgstr "Engadir máis widgets"
+#, fuzzy
+#~| msgid "A first Gtk application"
+#~ msgid "GtkApplicationWindow"
+#~ msgstr "Un primeiro aplicativo en GTK"
 
-#: C/02_welcome_to_the_grid.js.page:182(p)
-msgid ""
-"If we did want to add a second Label, how would we do it so that it actually "
-"looked like it belonged there? One way is to center the Image on top, so "
-"that it's above both Labels instead of just the one on the left. That's "
-"where those other numbers in the Grid's attach method come in:"
-msgstr ""
+#, fuzzy
+#~| msgid "helloWorld.desktop"
+#~ msgid "gjs helloWorld.js"
+#~ msgstr "holaMundo.desktop"
 
-#: C/02_welcome_to_the_grid.js.page:194(p)
-msgid ""
-"After we create the second Label, we attach it to the Grid to the right of "
-"the first Label. Remember, the first two numbers count columns and rows from "
-"left to right and top to bottom, starting with 0. So if the first Label is "
-"in column 0 and row 1, we can put the second in column 1 and row 1 to put it "
-"to the right of the first Label."
-msgstr ""
+#, fuzzy
+#~| msgid "autogen.sh"
+#~ msgid "chmod +x autogen.sh"
+#~ msgstr "autogen.sh"
 
-#: C/02_welcome_to_the_grid.js.page:195(p)
-msgid ""
-"Note the number 2 in the attach statement for the Image. That's what does "
-"the trick here. That number is how many columns the Image spans, remember? "
-"So when we put it together, we get something like this:"
-msgstr ""
+#, fuzzy
+#~| msgid "Button"
+#~ msgid "GtkButton"
+#~ msgstr "Botón"
 
-#: C/02_welcome_to_the_grid.js.page:198(p)
-msgid "There are two things you should take note of, here."
-msgstr ""
+#~ msgid "SimpleAction"
+#~ msgstr "SimpleAction"
 
-#: C/02_welcome_to_the_grid.js.page:200(p)
-msgid ""
-"Setting the Image to span two columns doesn't stretch the picture itself "
-"horizontally. Instead, it stretches the invisible box taken up by the Image "
-"widget to fill both columns, then places the Image in the center of that box."
-msgstr ""
+#~ msgid "Ubuntu"
+#~ msgstr "Ubuntu"
 
-#: C/02_welcome_to_the_grid.js.page:201(p)
-msgid ""
-"Even though we've set the Grid's row_spacing and the ApplicationWindow's "
-"border_width properties, we haven't yet set anything that puts a border in "
-"between the two Labels. They were separate earlier when the Image was in "
-"only one column, but now that it spans both GNOME doesn't see a reason to "
-"keep them apart."
-msgstr ""
+#~ msgid "Fedora"
+#~ msgstr "Fedora"
 
-#: C/02_welcome_to_the_grid.js.page:204(p)
-msgid ""
-"There are at least three ways we can get around that last one. First, we can "
-"set a margin_left or margin_right on one of the Labels:"
-msgstr ""
+#~ msgid "OpenSuSE"
+#~ msgstr "OpenSuSE"
 
-#: C/02_welcome_to_the_grid.js.page:207(p)
-msgid "Second, we can set the Grid's column_homogenous property to true."
-msgstr ""
+#~ msgid "Others"
+#~ msgstr "Otras"
 
-#: C/02_welcome_to_the_grid.js.page:215(p)
-#| msgid "Weatherapp.js file looks like this:"
-msgid "That makes it look something like this:"
-msgstr "Iso fai que se vexa algo como isto:"
+#, fuzzy
+#~| msgid "Gtk.MessageDialog"
+#~ msgid "GtkFileChooserDialog"
+#~ msgstr "Gtk.MessageDialog"
 
-#: C/02_welcome_to_the_grid.js.page:218(p)
-msgid ""
-"And third, we can set the Grid's column_spacing property, the same way we "
-"set its row_spacing."
-msgstr ""
+#~ msgid "Gtk.CellRendererPixbuf"
+#~ msgstr "Gtk.CellRendererPixbuf"
 
-#: C/02_welcome_to_the_grid.js.page:225(p)
-#| msgid "Weatherapp.js file looks like this:"
-msgid "That makes it look like this:"
-msgstr "Iso fai que se vexa como isto:"
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "Gtk.ColorButton"
+#~ msgstr "Gtk.ColorButton"
 
-#: C/02_welcome_to_the_grid.js.page:230(title)
-#| msgid "Loading the images"
-msgid "Using stock images"
-msgstr "Cargar as imaxes de inventario"
+#~ msgid "Gdk.RGBA"
+#~ msgstr "Gdk.RGBA"
 
-#: C/02_welcome_to_the_grid.js.page:232(p)
-msgid ""
-"GNOME has a lot of stock images on hand already, that we can use if we don't "
-"feel like creating our own or if we want a universally-recognized icon. "
-"Here's how we create a stock image, compared to how we create a normal one:"
-msgstr ""
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "GtkColorButton"
+#~ msgstr "GtkColorButton"
 
-#: C/02_welcome_to_the_grid.js.page:240(p)
-msgid ""
-"After that, we attach it to the Grid to the left of the first Label. (We "
-"aren't using the second one for this example.)"
-msgstr ""
+#~ msgid "GtkColorChooser"
+#~ msgstr "GtkColorChooser"
 
-#: C/02_welcome_to_the_grid.js.page:247(p)
-msgid "That gives us this, when we run it:"
-msgstr "Iso fornécenos isto, cando o executamos:"
+#~ msgid "RGBA Colors"
+#~ msgstr "Cores RGBA"
 
-#: C/02_welcome_to_the_grid.js.page:250(p)
-msgid ""
-"That's what the stock \"About\" icon looks like. You can see a list of all "
-"the stock items starting with gtk-about in <link href=\"http://developer.";
-"gnome.org/gtk/2.24/gtk-Stock-Items.html#GTK-STOCK-ABOUT:CAPS\">GNOME's "
-"developer documentation.</link> It was written for C programmers, but you "
-"don't need to know C to use it; just look at the part in quotation marks, "
-"like \"gtk-about\", and copy that part to use the icon next to it."
-msgstr ""
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "Gtk.CheckButton"
+#~ msgstr "Gtk.CheckButton"
 
-#: C/02_welcome_to_the_grid.js.page:251(p)
-msgid ""
-"We put single quotes around 'gtk-about' here because, unlike text strings "
-"that have double quotes around them, that part will never need to be "
-"translated into another language. In fact, if it <em>were</em> translated "
-"it'd break the icon, because its name is still \"gtk-about\" no matter which "
-"language you speak."
-msgstr ""
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "GtkCheckButton"
+#~ msgstr "GtkCheckButton"
 
-#: C/02_welcome_to_the_grid.js.page:257(p)
-msgid ""
-"Before we go on to the next tutorial, let's try something a little different:"
-msgstr ""
+#~| msgid "tiffany antopolski gmail com"
+#~ msgid "tiffany antpoolski gmail com"
+#~ msgstr "tiffany antopolski gmail com"
 
-#: C/02_welcome_to_the_grid.js.page:269(p)
-msgid ""
-"That's right, we turned the Label into a Button just by changing the name! "
-"If you run the application and click on it, though, you'll find that it "
-"doesn't do anything. How do we make our Button do something? That's what "
-"we'll find out, in <link xref=\"getting_the_signal.js\">our next tutorial.</"
-"link>"
-msgstr ""
+#~| msgid "Gtk.ButtonsType"
+#~ msgid "GtkButtonBox"
+#~ msgstr "GtkButtonBox"
 
-#: C/02_welcome_to_the_grid.js.page:270(p)
-msgid ""
-"If you like, feel free to spend some time experimenting with Grids, Labels, "
-"and Images, including stock images."
-msgstr ""
+#~ msgid "GtkBox"
+#~ msgstr "GtkBox"
 
-#: C/02_welcome_to_the_grid.js.page:271(p)
-msgid ""
-"One trick you can use to make more complex layouts is to nest Grids inside "
-"of each other. This lets you group together related widgets, and rearrange "
-"them easily. Take a look at the <link xref=\"radiobutton.js\">RadioButton</"
-"link> code sample if you'd like to see how this is done."
-msgstr ""
+#~ msgid "The Vala Tutorial"
+#~ msgstr "O titorial de Vala"
 
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
-#: C/index.page:0(None)
-msgid "translator-credits"
-msgstr "Fran Dieguez <frandieguez gnome org>, 2011-2012."
+#~ msgid "Sample Vala code"
+#~ msgstr "Exemplo de código en Vala"
+
+#~ msgid "set_default_size"
+#~ msgstr "set_default_size"
+
+#~| msgid "AboutDialog"
+#~ msgid "GtkAboutDialog"
+#~ msgstr "GtkAboutDialog"
+
+#~| msgid "AboutDialog"
+#~ msgid "Gtk.AboutDialog"
+#~ msgstr "Gtk.AboutDialog"
+
+#~ msgid "@@image: 'media/03_jssignal_02b.png'; md5=THIS FILE DOESN'T EXIST"
+#~ msgstr "@@image: 'media/03_jssignal_02b.png'; md5=THIS FILE DOESN'T EXIST"
 
 #, fuzzy
 #~| msgid ""
diff --git a/platform-overview/gl/gl.po b/platform-overview/gl/gl.po
index 1ef5efb..bf58a30 100644
--- a/platform-overview/gl/gl.po
+++ b/platform-overview/gl/gl.po
@@ -7,8 +7,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: gnome-devel-docs master\n"
-"POT-Creation-Date: 2012-08-18 22:26+0000\n"
-"PO-Revision-Date: 2012-09-23 21:43+0200\n"
+"POT-Creation-Date: 2012-10-31 14:54+0000\n"
+"PO-Revision-Date: 2012-12-25 15:47+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez gnome org>\n"
 "Language-Team: gnome-l10n-gl gnome org\n"
 "Language: gl\n"
@@ -19,660 +19,888 @@ msgstr ""
 "X-Generator: Virtaal 0.7.1\n"
 "X-Project-Style: gnome\n"
 
-#: C/webkit.page:6(desc)
-msgid "The power of HTML5 and the web in your application"
-msgstr "A potencia de HTML5 e a web no seu aplicativo"
-
-#: C/webkit.page:10(title)
-msgid "WebKit"
-msgstr "WebKit"
-
-#: C/webkit.page:12(p)
-msgid ""
-"WebKit is a powerful, multi-platform HTML engine used in open source and "
-"commercial products. WebKitGTK+ is the port of WebKit built on <link xref="
-"\"gtk\">GTK+</link> and integrated into the GNOME developer platform. "
-"WebKitGTK+ is developed upstream as part of the main WebKit project, so it's "
-"always up to date with the latest HTML5 features."
+#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
+#| msgid "translator-credits"
+msgctxt "_"
+msgid "translator-credits"
 msgstr ""
-"Webkit é un motor HTML potente e multiplataforma usado en produtos de código "
-"aberto e comerciais. WebKitGTK+ é o port de WebKit construído sobre <link "
-"xref=\"gtk\">GTK+</link> e integrado na plataforma de desenvolvemento de "
-"GNOME. WebKitGTK+ desenvolvese no proxecto orixinal como parte do proxecto "
-"principal de WebKit, polo que sempre estará actualizado ás últimas "
-"características de HTML5."
+"Fran Diéguez <frandieguez gnome org>, 2011-2013.\n"
+"Leandro Regueiro <leandro regueiro gmail com>, 2011.\n"
+"\n"
+"Proxecto Trasno - Adaptación do software libre á lingua galega.\n"
+"Se desexas colaborar connosco podes atopar máis información en "
+"http://www.trasno.net";
 
-#: C/webkit.page:19(p)
-msgid ""
-"WebKitGTK+ makes it easy to add web functionality to your application, or to "
-"use HTML5 and associated technologies to create dynamic user interfaces "
-"quickly."
-msgstr ""
-"WebKitGTK+ fai sinxelo engadir funcionalidades do web ao seu aplicativo ou "
-"usar HTML5 e as tecnoloxías asociadas para crear interfaces de usuario "
-"dinámicas de forma rápida."
+#: C/index.page:6(info/desc)
+msgid "Overview of the powerful technologies inside the GNOME platform."
+msgstr "Resumo das potentes tecnoloxías dentro da plataforma GNOME."
 
-#: C/webkit.page:24(link)
-msgid "WebKitGTK+ demo tutorial"
-msgstr "Titorial de demostración de WebKitGTK+"
+#: C/index.page:10(credit/name)
+msgid "Shaun McCance"
+msgstr "Shaun McCance"
 
-#: C/webkit.page:25(link)
-msgid "WebKitGTK+ Reference Manual"
-msgstr "Manual de referencia de WebKitGTK+"
+#: C/index.page:15(credit/name)
+msgid "Germán Póo-Caamaño"
+msgstr "Germán Póo-Caamaño"
 
-#: C/webkit.page:26(link)
-msgid "The WebKitGTK+ web site"
-msgstr "A páxina web de WebKitGTK+"
+#: C/index.page:20(credit/name)
+msgid "GNOME Foundation"
+msgstr "Fundación GNOME"
 
-#: C/telepathy.page:6(desc)
-msgid "Unified and integrated real-time communication service"
-msgstr "Contactos e mensaxaría instantánea unificados e integrados"
+#: C/index.page:21(credit/page)
+msgid "http://foundation.gnome.org/";
+msgstr "http://foundation.gnome.org/";
 
-#: C/telepathy.page:10(title)
-msgid "Telepathy"
-msgstr "Telepathy"
+#: C/index.page:23(info/title)
+#| msgid "GNOME"
+msgctxt "link:trail"
+msgid "GNOME"
+msgstr "GNOME"
+
+#: C/index.page:27(page/title)
+msgid "Overview of the GNOME Platform"
+msgstr "Resumo da plataforma GNOME"
 
-#: C/telepathy.page:12(p)
+#: C/index.page:29(page/p)
 msgid ""
-"Telepathy provides a powerful framework for interacting with the user's "
-"instant messaging contacts. With Telepathy, all accounts and connections are "
-"handled by a D-Bus session service that's deeply integrated into the GNOME "
-"desktop. Applications can tie into this service to communicate with contacts."
+"GNOME is a powerful but simple desktop environment with a strong focus on "
+"usability, accessibility, and internationalization. GNOME is designed to be "
+"usable by everybody, regardless of technical expertise, disabilitites, or "
+"native language. GNOME makes it easy for people to use their computers."
 msgstr ""
-"Telepathy fornece un marco de traballo potente para interactuar cos "
-"contactos de mensaxaría instantánea do usuario. Con Telepathy, todas as "
-"contas e conexións son xestionadas por un servizo D-Bus de sesión integrado "
-"profundamente no escritorio GNOME. Os aplicativos poden unirse a este "
-"servizo para comunicarse cos contactos."
+"GNOEM é un poderoso porén sinxelo contorno de escritorio con un forte "
+"enfoque na usabilidade, accesibilidade e internacionalización. GNOME está "
+"deseñado para ser usábel por todos, sen importar a súa pericia técnica, "
+"discapacidades ou idioma nativo. GNOME fai sinxelo o uso das computadoras "
+"para a xente."
 
-#: C/telepathy.page:18(p)
-#| msgid ""
-#| "With the Telepathy Tubes API, you can even tunnel an arbitrary protocal "
-#| "over modern instant messaging protocols like Jabber to create interactive "
-#| "applications. Create multi-player games or collaborative editors that "
-#| "integrate with the desktop-wide instant messaging services."
+#: C/index.page:34(page/p)
 msgid ""
-"With the Telepathy Tubes API, you can even tunnel an arbitrary protocol over "
-"modern instant messaging protocols like Jabber to create interactive "
-"applications. Create multi-player games or collaborative editors that "
-"integrate with the desktop-wide instant messaging services."
+"The GNOME platform provides a comprehensive development environment for "
+"graphical applications and other software. GNOME provides a comprehensive "
+"developer platform that allow developers to create professional software "
+"that is easy to use and aesthetically pleasing. Using the technologies in "
+"GNOME, you can create high-quality software to meet and exceed your users' "
+"expectations. This document provides a high-level overview of the GNOME "
+"platform along with links to detailed documentation on each part of the "
+"platform."
 msgstr ""
-"Coa API «Telepathy Tubes» pode crear incluso un túnel con un protocolo "
-"arbitrario sobre os protocolos de mensaxaría instantánea modernos, como "
-"Jabber, para interactuar cos aplicativos. Crear xogos multixogador ou "
-"editores colaborativos que se integran cos servizos de mensaxaría "
-"instantánea do escritorio."
+"GNOME fornece unha plataforma de desenvolvemento comprensivo que permite aos "
+"desenvolvedores crear software profesional sinxelo de usar e agradábel "
+"esteticamente. Este documento fornece un resumo de alto nivel da plataforma "
+"GNOME a través de ligazóns a documentación detallada en cada parte da "
+"plataforma. Usando as tecnoloxías de GNOME pode crear software de alta "
+"calidade e para satisfacer as expectativas dos seus usuarios. Este documento "
+"fornécelle unha visión xeral de alto nivel da plataforma de GNOME, xunto con "
+"algunhas ligazóns a documentación detallada sobre cada parte da plataforma."
 
-#: C/telepathy.page:25(link)
-msgid "Telepathy Developer's Manual"
-msgstr "Manual do desenvolvedor de Telepathy"
+#: C/index.page:45(links/title)
+msgid "Graphics and Multimedia"
+msgstr "Gráficos e multimedia"
 
-#: C/telepathy.page:26(link)
-msgid "The Telepathy web site"
-msgstr "A páxina web de Telepathy"
+#: C/index.page:50(links/title)
+msgid "Core Application Support"
+msgstr "Compatibilidade ao núcleo do aplicativo"
 
-#: C/pango.page:6(desc)
-msgid "Fully internationalized text layout and rendering"
-msgstr "Renderización e disposición de texto completamente internacionalizado"
+#: C/index.page:55(links/title)
+msgid "Application Technologies"
+msgstr "Tecnoloxías do aplicativo"
 
-#: C/pango.page:10(title)
-msgid "Pango"
-msgstr "Pango"
+#: C/index.page:60(links/title)
+msgid "Under the Hood"
+msgstr "Nos miolos"
 
-#: C/pango.page:12(p)
-msgid ""
-"Pango is the core text and font handling library in the GNOME platform. It "
-"is responsible for laying out and rendering text, and is used throughout GTK"
-"+."
+#: C/atk.page:6(info/desc)
+msgid "Support for screen readers and other accessibility tools"
 msgstr ""
-"Pango é a biblioteca principal de xestión de texto e tipos de letra na "
-"plataforma GNOME. É responsábel de mostrar e renderizar textos e úsase a "
-"través de GTK+."
+"Compatibilidade para lectores de pantalla e outras ferramentas de "
+"accesibilidade"
+
+#: C/atk.page:11(page/title)
+msgid "ATK"
+msgstr "ATK"
 
-#: C/pango.page:15(p)
+#: C/atk.page:13(page/p)
 msgid ""
-"The Pango layout engine can be used with different font backends and drawing "
-"backends. On most GNOME systems, Pango will use FreeType, fontconfig, and "
-"Cairo to access fonts and render text. On other systems, Pango will use the "
-"native font systems, such as Uniscribe on Microsoft Windows and ATSUI on "
-"MacOS"
+"Accessibility is the process of ensuring your application can be used by "
+"people with various disabilities. Disabilities come in many forms: visual "
+"impairments, movement impairments, hearing impairments, cognitive and "
+"language impairments, and seizure disorders. Many people have some sort of "
+"disability, and making your application accessibility will allow more people "
+"to use your application effectively."
 msgstr ""
-"O motor de debuxo Pango pódese usar con diferentes backends de tipos de "
-"letra e debuxado. Na maioría de sistemas GNOME, pango usará FreeType, "
-"fontconfig e Cairo para acceder aos tipos de letra e renderizar texto. "
-"Noutros sistemas, Pango usará o tipo de letra nativo dos sistemas, tales "
-"como Uniscribe en Microsoft Windows e ATSUI en MacOS."
+"A accesibilidade é o proceso de asegurarse de que o seu aplicativo pode ser "
+"usado por persoas con algunha ou varias discapacidades. As discapacidades "
+"poden ser de moitos tipos: visuais, de coordinación, movementos "
+"descoordinados, impedimentos auditivos, impedimentos cognitivos e de idioma "
+"e desorde de apoplexías. Moitas persoas teñen algún tipo de discapacidade e "
+"facer o seu aplicativo accesíbel permitira que máis xente poida usalo de "
+"forma efectiva."
 
-#: C/pango.page:22(p)
+#: C/atk.page:20(page/p)
 msgid ""
-"Pango has extensive support for the various writing systems used throughout "
-"the world. Many of the writing systems used for languages have complex rules "
-"for laying out glyphs and composing characters. With Pango, nearly all "
-"languages can be written and displayed correctly, allowing users everywhere "
-"to view text in their native languages. Pango support for multiple writing "
-"systems is automatic; application developers do not have to write any "
-"special code to support other languages."
+"GNOME provides support for accessibility devices using the ATK framework. "
+"This framework defines a set of interfaces to which graphical interface "
+"components adhere. This allows, for instance, screen readers to read the "
+"text of an interface and interact with its controls. ATK support is built "
+"into GTK+ and the rest of the GNOME platform, so any application using GTK+ "
+"will have reasonable accessibility support for free."
 msgstr ""
-"Pango ten compatibilidade extensa para os variados sistemas de escritura "
-"usados en todo o mundo. Moitos dos sistemas de escrita usados nos idiomas "
-"teñen complexas reglas de debuxado de glifos e composición de caracteres. "
-"Con Pango, case todos os idiomas poden escribirse e mostrarse correctamente, "
-"permitindo aos usuarios en calquera parte ver texto nos seus idiomas "
-"maternos. A compatibilidade é automática; os desenvolvedores de aplicativos "
-"non teñen que escribir ningún código especial para ter compatibilidade con "
-"outros idiomas."
+"GNOME fornece compatibilidade para dispositivos de accesibilidade usando o "
+"contorno de traballo ATK. Este contorno de traballo define un conxunto de "
+"interface gráfico que deberá adherir. Isto permite, por exemplo, aos "
+"lectores de pantalla ler o texto dunha interface e interactuar cos seus "
+"controles. A compatibilidade de ATK está construída dentro de GTK+ e o resto "
+"da plataforma GNOME, de tal forma que calquera aplicativo que use GTK+ terá "
+"certa compatibilidade razoabel debido a este feito."
 
-#: C/pango.page:31(p)
+#: C/atk.page:28(page/p)
 msgid ""
-"Pango supports the text styling used in typical documents and interfaces, "
-"including italics, font weights, and underlines. Pango uses a simple XML-"
-"like vocabulary called PangoMarkup which enables you to set font size, "
-"color, styles, and other text attributes. Using PangoMarkup, you can specify "
-"inline styles without manually iterating over text blocks. PangoMarkup can "
-"be used directly from GTK+, enabling you to style text in your graphical "
-"interfaces easily."
+"Nonetheless, you should be aware of accessibility issues when when "
+"developing your applications. Although GTK+ interfaces provide reasonable "
+"accessibility by default, you can often improve how well your program "
+"behaves with accessibility tools by providing additional information to ATK. "
+"If you develop custom widgets, you should ensure that they expose their "
+"properties to ATK. You should also avoid using sound, graphics, or color as "
+"the sole means of conveying information to the user."
 msgstr ""
-"Pango é compatíbel co estilo de texto usado nos tipos documentos e "
-"interfaces, incluíndo cursivas, tamaños de tipografía e subliñado. Pango usa "
-"un vogabulario sinxelo semellante a XML chamado PangoMarkup que lle permite "
-"estabelecer o tamaño do tipo de letra, a cor, os estilos e outros atributos "
-"do texto. Ao usar PangoMarkup poderá especificar estilos en liña sen ter que "
-"iterar manualmente cos bloques de texto. Pódese empregar PangoMarkup desde "
-"GTK+ directamente, permitíndolle dar estilo a textos nas súas interfaces "
-"gráficas de forma sinxela."
+"Porén, debería ser consciente das cuestións de accesibilidade cando "
+"desenvolva aplicativos. Aínda que as interfaces GTK+ fornecen unha "
+"accesibilidade razoábel de forma predeterminada, a miúdo pode mellorar o "
+"comportamento do seu programa coas ferramentas de accesibilidade fornecendo "
+"información adicional a ATK. Se desenvolve widgets personalizados, debería "
+"asegurarse que expoñen as súas propiedades a ATK. Tamén debería evitar o uso "
+"de sons, gráficos e cores como única vía de enviarlle información ao usuario."
 
-#: C/pango.page:40(p)
+#: C/atk.page:37(page/p)
 msgid ""
-"You should use Pango directly whenever you need to lay text out on the "
-"screen or on a different medium. Using Pango will allow your text layout to "
-"work seamlessly with GTK+ and the rest of the GNOME platform. It will help "
-"you create portable code, and most importantly, it will ensure that your "
-"application can render text correctly in hundreds of different languages."
+"The GNOME desktop ships with a number of accessibility tools which enable "
+"users with disabilities to take full advantage of their desktop and "
+"applications. Applications that fully implement ATK will be able to work "
+"with the accessibility tools. GNOME's accessibility tools include a screen "
+"reader, a screen magnifier, an on-screen keyboard, and <app>Dasher</app>, an "
+"innovative predictive text entry tool."
 msgstr ""
-"Debería usar directamente Pango cando precise mostrar texto na pantalla ou "
-"nun medio diferente. Usar Pango permitirá á disposición do seu texto "
-"traballar de forma semellante con GTK+ e o resto da plataforma GNOME. "
-"Axudaralle a crear código portábel e, o máis importante, aseguraralle que o "
-"seu aplicativo poida renderizar texto correctamente en centos de idiomas "
-"distintos."
-
-#: C/pango.page:49(link)
-msgid "Pango Reference Manual"
-msgstr "Manual de referencia de Pango"
-
-#: C/pango.page:50(link)
-msgid "The Pango web site"
-msgstr "A páxina web de Pango"
-
-#: C/notify.page:6(desc)
-msgid "Interactive notifications in the messaging tray"
-msgstr "Notificacións interactivas na bandexa de mensaxaría"
-
-#: C/notify.page:10(title)
-msgid "Notify"
-msgstr "Notify"
+"O escritorio GNOME posee certo número de ferramentas de accesibilidade que "
+"lle permite aos usuarios con discapacidades usar plenamente o escritorio e "
+"os seus aplicativos. Os aplicativos que implementan completamente ATK serán "
+"capaces de traballar coas ferramentas de accesibilidade. As ferramentas de "
+"accesibilidade de GNOME inclúen un lector de pantalla, un magnificador de "
+"pantalla, un teclado en pantalla e <app>Dasher</app>, unha innovadora "
+"ferramenta de predición de entrada de texto."
 
-#: C/notify.page:12(p)
+#: C/atk.page:46(item/p)
 msgid ""
-"The libnotify library provides a convenient API for presenting notifications "
-"to the user. Notifications can be simple message or they can allow the user "
-"to respond. Notifications made with libnotify will use the appropriate "
-"interface in the environment the application is running in. In GNOME 3, "
-"notifications are displayed at the bottom of the screen and then put into "
-"the messaging tray."
+"<link href=\"http://developer.gnome.org/accessibility-devel-guide/\";>GNOME "
+"Accessibility for Developers</link>"
 msgstr ""
-"A biblioteca libnotify fornece unha API conveniente para mostrarlle "
-"notificacións ao usuario. As notificacións poden ser mensaxes sinxelas ou "
-"poden permitirlle ao usuario facer respostas. As notificacións creadas con "
-"libnotify usarán a interface axeitada nos contornos nos que o aplicativo "
-"está sendo executado. En GNOME 3, as notificacións móstranse na parte "
-"inferior da pantalla e logo póñense na bandexa de mensaxaría."
+"<link href=\"http://developer.gnome.org/accessibility-devel-";
+"guide/\">Accesibilidade de GNOME para os desenvolvedores</link>"
 
-#: C/notify.page:20(link)
-msgid "Libnotify Reference Manual"
-msgstr "Manual de referencia de Libnotify"
+#: C/atk.page:47(item/p)
+msgid ""
+"<link href=\"http://library.gnome.org/devel/atk/stable/\";>ATK Reference</"
+"link>"
+msgstr ""
+"<link href=\"http://library.gnome.org/devel/atk/stable/\";>Referencia de "
+"ATK</link>"
 
-#: C/keyring.page:6(desc)
-msgid "Secure storage for passwords and other data"
-msgstr "Almacenamento seguro para so contrasinais e outros datos"
+#: C/cairo.page:6(info/desc)
+msgid "Modern 2D vector drawing canvas"
+msgstr "Debuxado canvas de vectores 2D moderno"
 
-#: C/keyring.page:10(title)
-msgid "Keyring"
-msgstr "Anel de chaves"
+#: C/cairo.page:10(page/title)
+msgid "Cairo"
+msgstr "Cairo"
 
-#: C/keyring.page:12(p)
+#: C/cairo.page:12(page/p)
 msgid ""
-"GNOME provides a modern and secure keyring manager to store users' passwords "
-"and other sensitive data. Applications can use the keyring manager library "
-"to store and access passwords, and users can manage their passwords using "
-"GNOME's <app>Seahorse</app> application."
-msgstr ""
-"GNOME fornece un xestos de anel de chaves seguro e moderno para almacenar os "
-"contrasinais do usuario e outros datos sensíbeis. Os aplicativos poden usar "
-"a biblioteca do xestor do anel de chaves para almacenar e acceder aos "
-"contrasinais, e os usuarios poden xestionar os seus contrasinais usando o "
-"aplicativo de GNOME <app>Seahorse</app>."
+"Cairo is a 2D graphics library featuring a sophisticated API for drawing "
+"vector graphics, compositing images, and rendering anti-aliased text. Cairo "
+"provides support for multiple output devices, including the X Window System, "
+"Microsoft Windows, and image buffers, allowing you to write platform-"
+"independent code to draw graphics on different media."
+msgstr ""
+"Cairo é unha biblioteca gráfica 2D que conta cunha API sofisticada para "
+"debuxar gráficos vectoriais, imaxes compostas e renderizar texto con "
+"antialias. Cairo fornece compatibilidade para moitos dispositivos de saída, "
+"inclúindo o sistema X Windows, Microsoft Windows e búferes de imaxe, "
+"permitíndolle escribir código para debuxar gráficos en diferentes medios "
+"independentes da plataforma."
 
-#: C/keyring.page:18(p)
+#: C/cairo.page:18(page/p)
 msgid ""
-"The keyring manager provides any number of keyrings, where each keyring can "
-"contain any number of keyring items. Items in a keyring store some piece of "
-"data, often a password. Each keyring is locked individually, and users must "
-"provide a password to unlock the keyring. Once a keyring has been unlocked, "
-"the user has access to all of the items in that keyring."
+"The Cairo drawing model is similar to those provided by PostScript and PDF. "
+"The Cairo API provides such drawing operations as stroking and filling cubic "
+"Bézier splines, compositing images, and performing affine transformations. "
+"These vector operations allow for rich, anti-aliased graphics without using "
+"expensive pixel-based drawing in your application code."
 msgstr ""
-"O xestor do anel de chaves fornece calquera número de aneis onde cada anel "
-"pode conter calquera número de elementos. Os elementos nun anel almacenan "
-"unha información, xeralmente un contrasinal. Cada anel está bloqueado "
-"individualmente e os usuarios deben fornecer unha chave para desbloquear o "
-"anel. Unha vez que o anel está desbloqueado, o usuario ten acceso a todos os "
-"elementos do anel."
+"O modelo de debuxado de Cairo é similar ao que fornece PostScript e PDF. O "
+"API de Cairo fornece operacións de debuxado tales como pincelar e rechear "
+"splines cúbicos de Bézier, compo;er imaxes e realizar transformacións afíns. "
+"Estas operacións con vectores permiten gráficos ricos con antialias sen ter "
+"que usar o caro debuxo baseado en píxeles no código do seu aplicativo."
 
-#: C/keyring.page:25(p)
+#: C/cairo.page:25(page/p)
 msgid ""
-"The keyring manager provides access control lists for each keyring item, "
-"controlling which applications are allowed access to that item. If an "
-"unknown application attempts to access a keyring item, the keyring manager "
-"will prompt the user to allow or deny that application access. This helps "
-"prevent malicious or poorly-written programs from accessing the user's "
-"sensitive data."
+"Cairo's rich drawing model allows for high-quality rendering to multiple "
+"media. The same API can be used to create stunning on-screen graphics and "
+"text, to render images, or create crisp output suitable for printing."
 msgstr ""
-"O xestor do anel de chaves fornece unha lista de control para cada elemento "
-"do anel, controlando a que aplicativos se lle permite o acceso a este "
-"elemento. Se un aplicativo do anel, o xestor de anel preguntará ao usuario "
-"se desexa permitir ou denegar o acceso a dito aplicativo. Isto axuda a "
-"previr que programas maliciosos ou probremente escritos accedan a "
-"información sensíbel do usuario."
+"O rico modelo de Cairo permite renderizado de alta calidade en múltiples "
+"dispositivos. O mesmo API pódese usar para crear impresionantes gráficos e "
+"textos na pantalla, para renderizar imaxes e crear saídas modificadas "
+"axeitadas para unha impresión."
 
-#: C/keyring.page:32(p)
+#: C/cairo.page:30(page/p)
 msgid ""
-"Keyring data stored on the file system is encrypted with the AES block "
-"cipher, and SHA1 is used for hashes of the item's attributes. Using the "
-"attributes hash, the keyring manager is able to look up items requested by "
-"applications without ever unlocking the keyring. The keyring has to be "
-"unlocked when a matching item is found and accessed."
+"You should use Cairo whenever you need to draw graphics in your application "
+"beyond the widgets provided by GTK+. Much of the drawing inside GTK+ is done "
+"using Cairo. Using Cairo for your custom drawing will allow your application "
+"to have high-quality, anti-aliased, and resolution-independent graphics."
 msgstr ""
-"Os datos do anel de chaves almacenados no sistema de ficheiros están "
-"cifrados co cifrado de bloques AES, mentres que o SAH1 úsase para o «hash» "
-"dos atributos do elemento. Usando atributos «hash», o xestor de anel de "
-"chaves é capaz de mirar elementos que piden os aplicativos sen necesidade de "
-"desbloquear o anel. O anel desbloquéase cando se encontra un elemento "
-"coincidente e accédese a el."
+"Debería usar Cairo sempre que precise debuxar gráficos no seu aplicativo "
+"máis aló dos widgets fornecidos por GTK+. Gran parte do debuxado realizado "
+"por GTK+ lévase a cabo usando Cairo. Usar Cairo para o seu debuxado "
+"personalizado permitiralle ao seu aplicativo ter gráficos de alta calidade, "
+"con antialias e independentes da resolución."
+
+#: C/cairo.page:37(item/p)
+msgid "<link href=\"http://www.cairographics.org/manual/\";>Cairo Manual</link>"
+msgstr ""
+"<link href=\"http://www.cairographics.org/manual/\";>Manual de Cairo</link>"
+
+#: C/cairo.page:38(item/p)
+msgid "<link href=\"http://www.cairographics.org\";>The Cairo web site</link>"
+msgstr "<link href=\"http://www.cairographics.org\";>Sitio web de Cairo</link>"
 
-#: C/keyring.page:39(p)
+#: C/canberra.page:6(info/desc)
+msgid "Simple audio API for notifications and events"
+msgstr "API de audio sinxela para notificacións e eventos"
+
+#: C/canberra.page:10(page/title)
+msgid "Canberra"
+msgstr "Canberra"
+
+#: C/canberra.page:12(page/p)
 msgid ""
-"The keyring manager also provides a session keyring. Items in the session "
-"keyring are never stored on disk, and are lost as soon as the user's session "
-"ends. The session keyring can be used to store passwords to be used in the "
-"current session only."
+"Canberra is a simple library for playing audio events and notifications, "
+"such as when the user has received a message or an error has occurred. As "
+"well as providing a convenient API, Canberra can also work with the "
+"accessibility features of the desktop to provide alternate notification for "
+"hearing-impaired users."
 msgstr ""
-"O xestor de anel de chaves tamén fornece un anel de chaves para a sesión. Os "
-"elementos no anel da sesión nunca se almacenan en disco e pérdense cando "
-"remata a sesión do usuario. O anel da sesión pódese usar para almacenar "
-"contrasinais que só van a usarse na sesión actual."
+"Canberra é unha biblioteca sinxela para reproducir eventos de son e "
+"notificacións, como cando o usuario recibe unha mensaxe ou produciuse un "
+"erro. Así como tamén fornece unha API conveniente, Canberra tamén pode "
+"traballar coas características de accesibilidade do escritorio para fornecer "
+"notificacións alternativas para os usuarios con discapacidades auditivas."
 
-#: C/keyring.page:44(p)
+#: C/canberra.page:19(item/p)
 msgid ""
-"If you use GIO to access remote servers, you automatically get the benefits "
-"of the keyring manager. Whenever GVFS needs to authenticate the user, it "
-"provides the option to store the password, either in the default keyring or "
-"in the session keyring."
+"<link href=\"http://library.gnome.org/devel/libcanberra/unstable/libcanberra-";
+"canberra.html\">Canberra Reference</link>"
 msgstr ""
-"Se usa GIO para acceder a servidores remotos, automaticamente obterá os "
-"beneficios do xestor de anel de chaves. Sempre que GFfs precise autenticar "
-"ao usuario, fornece a opción de almacenar o contrasinal, xa sexa no anel de "
-"chaves predeterminado ou no anel de chaves da sesión."
+"<link href=\"http://library.gnome.org/devel/libcanberra/unstable/libcanberra-";
+"canberra.html\">Referencia de Canberra</link>"
 
-#: C/keyring.page:49(p)
+#: C/clutter.page:6(info/desc)
+msgid "Stunning graphics and animations with a scene-graph API"
+msgstr "Impresionantes gráficos e animacións con unha API de escena-gráfico"
+
+#: C/clutter.page:10(page/title)
+msgid "Clutter"
+msgstr "Clutter"
+
+#: C/clutter.page:12(page/p)
 msgid ""
-"You should use the keyring manager whenever your application needs to store "
-"passwords or other sensitive data for users. Using the keyring manager "
-"provides a better user experience while still keeping user data safe and "
-"secure."
+"Clutter is a library that allows creating fast, portable, dynamic, "
+"compelling user interfaces."
 msgstr ""
-"Debería usar o xestor de anel de chaves sempre que o seu aplicativo necesite "
-"almacenar contrasinais ou outros datos sensíbeis dos usuarios. Ao usar o "
-"xestor de anel de chaves fornécese unha mellor experiencia ao usuario á vez "
-"que mantén seguros os datos do mesmo."
+"Clutter é unha biblioteca que lle permite crear interfaces de usuario "
+"rápidas, portábeis, dinámicas e irresistíbeis."
 
-#: C/keyring.page:55(link)
-msgid "gnome-keyring Reference Manual"
-msgstr "Manual de referencia de gnome-keyring"
+#: C/clutter.page:15(page/p)
+msgid ""
+"Clutter uses the <link href=\"http://www.khronos.org/opengl/\";>OpenGL</link> "
+"and <link href=\"http://www.khronos.org/opengles/\";>OpenGL|ES</link> "
+"industry standard API to access the accelerated graphical hardware on both "
+"desktop and mobile environments alike, without exposing the complexities of "
+"GPU pipeline programming."
+msgstr ""
+"Clutter usa os API estándares na industria <link href=\"http://www.khronos.";
+"org/opengl/\">OpenGL</link> e <link href=\"http://www.khronos.org/opengles/";
+"\">OpenGL|ES</link> para acceder a hardware gráfico acelerado tanto no "
+"escritorio como en contornos móbiles, sen expoñer as complexidades da "
+"programación pipeline GPU."
 
-#: C/keyring.page:56(link)
-msgid "libseahorse Reference Manual"
-msgstr "Manual de referencia de libseahorse"
+#: C/clutter.page:21(page/p)
+msgid ""
+"Clutter does not specify any visual style, and does not provide any pre-"
+"defined complex user interface control; it lets the developer define what is "
+"needed, using a flexible scene graph API, with free-form placement of the "
+"scene elements (or \"actors\") on the main viewport (or \"stage\")."
+msgstr ""
+"Clutter non especifica ningún estilo visual e non fornece ningún control de "
+"interface de usuario complexo e predefinido. Permítelle ao desenvolvedor "
+"definir o que precisa usando unha API de gráficos de escena flexíbel, con "
+"libre colocación dos elementos da escena (ou «actores») na xanela principal "
+"(ou «escena»)"
 
-#: C/index.page:6(desc)
-msgid "Overview of the powerful technologies inside the GNOME platform."
-msgstr "Resumo das potentes tecnoloxías dentro da plataforma GNOME."
+#: C/clutter.page:26(page/p)
+msgid ""
+"Clutter comes with pre-defined actors for displaying solid colors, image "
+"data, text and custom high-precision 2D drawing using the <link xref=\"cairo"
+"\">Cairo</link> API. Clutter also provides generic classes for structuring a "
+"user interface using both a box-packing model like <link xref=\"gtk\">GTK+</"
+"link>, and a series of free-form \"constraints\"."
+msgstr ""
+"Clutter ven con actores predefinidos para mostrar cores sólidas, datos de "
+"imaxe, texto e debuxado 2D de alta precisión presonalizado usando a API de "
+"<link xref=\"cairo\">Cairo</link>. Clutter tamén fornece clases xenéricas "
+"para estructurar unha interface de usuario usando tanto un modelo de "
+"empaquetado de caixo como <link xref=\"gtk\">GTK+</link> como unha serie de "
+"constantes «de libre disposición»."
 
-#: C/index.page:10(name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
+#: C/clutter.page:33(page/p)
+msgid ""
+"Clutter provides an extensible animation framework and graphical effects. An "
+"animation is associated with a timeline and changes one or more properties "
+"of one or more actors over time, for example their rotation in a particular "
+"dimension, scale, size, opacity, etc."
+msgstr ""
+"Clutter fornece un marco de traballo de animación e efectos gráficos "
+"extensíbel. Unha animación está asociada con unha liña de tempo e cambia "
+"nunha ou máis propieaddes de un ou máis actores no tempo, por exemplo a súa "
+"rotación nunha dimensión en particular, escala, tamaño, opacidade, etc."
 
-#: C/index.page:11(email)
-msgid "shaunm gnome org"
-msgstr "shaunm gnome org"
+#: C/clutter.page:38(page/p)
+msgid ""
+"A number of third-party libraries allow integration with other technologies, "
+"such as: Clutter-GTK, for embedding a Clutter stage inside a GTK+ "
+"application; Clutter-GStreamer, for embedding GStreamer video and audio "
+"pipelines; Clutter-Box2D and Clutter-Bullet, for adding physics interaction "
+"in both 2D and 3D environments."
+msgstr ""
+"Un número de bibliotecas de terceiros permítenlle a integración con outras "
+"tecnoloxías, como pode ser: Clutter-GTK, para incrustar unha escena de "
+"Clutter dentro de aplicativos GTK+, Clutter-GStreamer, para incrustar "
+"tuberías de vídeo e son de GStreamer, Clutter-Box2D e Clutter-Bullet para "
+"engadir interación física tanto en contornos 2D como 3D."
 
-#: C/index.page:15(name)
-msgid "Germán Póo-Caamaño"
-msgstr "Germán Póo-Caamaño"
+#: C/clutter.page:45(item/p)
+msgid ""
+"<link href=\"http://docs.clutter-project.org/docs/clutter-cookbook/1.0/";
+"\">The Clutter Cookbook</link>"
+msgstr ""
+"<link href=\"http://docs.clutter-project.org/docs/clutter-";
+"cookbook/1.0/\">Libro de cociña de Clutter</link>"
 
-#: C/index.page:16(email)
-msgid "gpoo gnome org"
-msgstr "gpoo gnome org"
+#: C/clutter.page:46(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/clutter/stable\";>Clutter Reference "
+"Manual</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/clutter/stable\";>Manual de "
+"rereferencia de Clutter</link>"
 
-#: C/index.page:20(name)
-msgid "GNOME Foundation"
-msgstr "Fundación GNOME"
+#: C/clutter.page:47(item/p)
+msgid ""
+"<link href=\"http://www.clutter-project.org\";>The Clutter web site</link>"
+msgstr "<link href=\"http://www.clutter-project.org\";>Sitio web de Clutter</link>"
 
-#: C/index.page:21(page)
-msgid "http://foundation.gnome.org/";
-msgstr "http://foundation.gnome.org/";
+#: C/d-bus.page:6(info/desc)
+msgid "Standard interprocess communications bus"
+msgstr "Bus de comunicacións entre procesos estándar"
 
-#: C/index.page:23(title)
-msgid "GNOME"
-msgstr "GNOME"
+#: C/d-bus.page:10(page/title)
+msgid "D-Bus"
+msgstr "D-Bus"
 
-#: C/index.page:27(title)
-msgid "Overview of the GNOME Platform"
-msgstr "Resumo da plataforma GNOME"
+#: C/d-bus.page:12(page/p)
+msgid ""
+"D-Bus is a cross-desktop message bus for sending events between various "
+"applications, the desktop, and low-level components of the system. D-Bus "
+"provides a simple API for sending messages to particular services and for "
+"broadcasting messages to all interested services. D-Bus enables different "
+"types of applications to communicate and integrate with each other and with "
+"the desktop, providing better interaction and a richer experience for the "
+"user."
+msgstr ""
+"D-Bus é un bus de mensaxes multiescritorio para enviar eventos entre "
+"distintos aplicativos, o escritorio e compoñentes de baixo nivel do sistema. "
+"D-Bus fornece unha API sinxela para enviar mensaxes a servicios en "
+"particular e para enviar mensaxes de difusión a todos os servicios "
+"interesados. D-Bus permite que diferentes tipos de aplicativos se comuniquen "
+"e integren entre elas e o escritorio, fornecendo unha mellor interacción e "
+"unha experiencia enriquecedora para o usuario."
 
-#: C/index.page:29(p)
+#: C/d-bus.page:20(page/p)
 msgid ""
-"GNOME is a powerful but simple desktop environment with a strong focus on "
-"usability, accessibility, and internationalization. GNOME is designed to be "
-"usable by everybody, regardless of technical expertise, disabilitites, or "
-"native language. GNOME makes it easy for people to use their computers."
+"D-Bus provides a session and a system bus. The session bus is used by "
+"applications in a single user session, allowing them to share data and event "
+"notifications and to integrate into the user's desktop. For example, movie "
+"players can send a D-Bus message to prevent the screensaver from activating "
+"when the user is watching a movie."
 msgstr ""
-"GNOEM é un poderoso porén sinxelo contorno de escritorio con un forte "
-"enfoque na usabilidade, accesibilidade e internacionalización. GNOME está "
-"deseñado para ser usábel por todos, sen importar a súa pericia técnica, "
-"discapacidades ou idioma nativo. GNOME fai sinxelo o uso das computadoras "
-"para a xente."
+"D-Bus fornece un bus de sesión e un bus de sistema. O bus de sesión úsano os "
+"aplicativos nunha sesión dun só usuario, permitíndolles compartir datos e "
+"notificacións de eventos e integrándoos co escritorio do usuario. Por "
+"exemplo, os reprodutores de filmes poden enviar unha mensaxe por D-Bus para "
+"evitar que se active o protector de pantalla cando o usuario está vendo un "
+"filme."
 
-#: C/index.page:34(p)
+#: C/d-bus.page:26(page/p)
 msgid ""
-"The GNOME platform provides a comprehensive development environment for "
-"graphical applications and other software. GNOME provides a comprehensive "
-"developer platform that allow developers to create professional software "
-"that is easy to use and aesthetically pleasing. Using the technologies in "
-"GNOME, you can create high-quality software to meet and exceed your users' "
-"expectations. This document provides a high-level overview of the GNOME "
-"platform along with links to detailed documentation on each part of the "
-"platform."
+"The system bus is a single message bus which runs independently of any user "
+"sessions. It can communicate with applications in any session, enabling "
+"those applications to interact with system components without dealing with "
+"low-level system details. The system bus is used to provide important "
+"functionality that users expect to work on their systems. For example, the "
+"system bus is used to monitor when network interfaces go up or down, when "
+"external drives get plugged in, and when laptop batteries are low."
 msgstr ""
-"GNOME fornece unha plataforma de desenvolvemento comprensivo que permite aos "
-"desenvolvedores crear software profesional sinxelo de usar e agradábel "
-"esteticamente. Este documento fornece un resumo de alto nivel da plataforma "
-"GNOME a través de ligazóns a documentación detallada en cada parte da "
-"plataforma. Usando as tecnoloxías de GNOME pode crear software de alta "
-"calidade e para satisfacer as expectativas dos seus usuarios. Este documento "
-"fornécelle unha visión xeral de alto nivel da plataforma de GNOME, xunto con "
-"algunhas ligazóns a documentación detallada sobre cada parte da plataforma."
+"O bus do sistema é un bus dun só mensaxe que se executa independentemente de "
+"calquera sesión de usuario. Pódese comunicar cos aplicativos de calquera "
+"sesión, permitindo a ditos aplicativos interactuar cos compoñentes do "
+"sistema sen ter que tratar con detalles de baixo nivel do sistema. O bus do "
+"sistema úsase para fornecer unha funcionalidade importante que os usuarios "
+"agardan que funcione nos seus sistemas. Por exemplo, o bus do sistema úsase "
+"para monitorizar cando as interfaces de rede se conectan ou desconectan, "
+"cando se conectan unidades externas e cando a batería do sistema está baixa."
 
-#: C/index.page:45(title)
-msgid "Graphics and Multimedia"
-msgstr "Gráficos e multimedia"
+#: C/d-bus.page:35(page/p)
+msgid ""
+"D-Bus is developed jointly on <link href=\"http://www.freedesktop.org/";
+"\">freedesktop.org</link>, so you can use it with different desktop "
+"environments and applications. Because D-Bus is a cross-desktop project, you "
+"use it to create portable and versatile software that seamlessly integrates "
+"with the user's desktop, regardless of which desktop it is."
+msgstr ""
+"D-Bus é desenvolvido conxuntamente en <link href=\"http://www.freedesktop.";
+"org/\">freedesktop.org</link>, de tal forma que pode usalo con diferentes "
+"contornos de escritorio e aplicativos. Debido a que D-Bus é un proxecto "
+"multiescritorio, pode usalo para crear software portábel e versátil que se "
+"integre dun modo transparente co escritorio do usuario, independente de que "
+"escritorio sexa."
 
-#: C/index.page:50(title)
-msgid "Core Application Support"
-msgstr "Compatibilidade ao núcleo do aplicativo"
+#: C/d-bus.page:42(page/p)
+msgid ""
+"GNOME provides full support for D-Bus using the GDBus APIs in <link xref="
+"\"gio\">GIO</link>."
+msgstr ""
+"GNOME fornece compatibilidade completa para D-Bus usando as API de GBus e "
+"GDBus en <link xref=\"gio\">GIO</link>."
 
-#: C/index.page:55(title)
-msgid "Application Technologies"
-msgstr "Tecnoloxías do aplicativo"
+#: C/d-bus.page:46(item/p) C/gio-network.page:20(item/p) C/gio.page:30(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gio/stable/\";>GIO Reference Manual</"
+"link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gio/stable/\";>Manual de referencia de "
+"GIO</link>"
 
-#: C/index.page:60(title)
-msgid "Under the Hood"
-msgstr "Nos miolos"
+#: C/d-bus.page:47(item/p)
+msgid ""
+"<link href=\"http://dbus.freedesktop.org/doc/dbus-tutorial.html\";>D-Bus "
+"Tutorial</link>"
+msgstr ""
+"<link href=\"http://dbus.freedesktop.org/doc/dbus-tutorial.html\";>Titorial de "
+"D-Bus</link>"
 
-#: C/help.page:6(desc)
-msgid "Topic-oriented help system"
-msgstr "Sistema de axuda orientado a temas"
+#: C/d-bus.page:48(item/p)
+msgid ""
+"<link href=\"http://dbus.freedesktop.org/doc/dbus-specification.html\";>D-Bus "
+"Specification</link>"
+msgstr ""
+"<link href=\"http://dbus.freedesktop.org/doc/dbus-";
+"specification.html\">Especificación de D-Bus</link>"
 
-#: C/help.page:10(title)
-msgid "Help"
-msgstr "Axuda"
+#: C/eds.page:6(info/desc)
+msgid "Integration with the desktop-wide address book and calendar"
+msgstr "Integración coa axenda de enderezos e calendario do escritorio"
+
+#: C/eds.page:10(page/title)
+msgid "Evolution Data Server"
+msgstr "Servidor de datos de Evolution"
 
-#: C/help.page:12(p)
+#: C/eds.page:12(page/p)
 msgid ""
-"Users sometimes need a little help, even with the best-designed "
-"applications. GNOME provides a built-in topic-oriented help system using the "
-"<link href=\"http://projectmallard.org/\";>Mallard</link> markup language. "
-"Pioneered by GNOME developers, Mallard is an agile and dynamic language that "
-"helps you write and revise quickly. Its topic-oriented design means your "
-"users can find the answers they need without sifting through a manual. With "
-"its unique linking and organization system, Mallard is the only language "
-"designed to handle plugin and vendor help in one coherent document."
+"With Evolution Data Server, GNOME provides a single address book and "
+"calendar that all applications can use to store and retrieve information. "
+"Using Evolution Data Server means that users no longer have to maintain "
+"separate lists of contacts in each application, or manually copy events to "
+"their calendar."
 msgstr ""
-"Os usuario a miúdo precisa un pouco de axuda, incluso os aplicativos mellor "
-"deseñados. GNOME fornece un sistema de axuda orientada a temas usando o "
-"idioma de marcado <link href=\"http://projectmallard.org/\";>Mallard</link>. "
-"Impulsado polos desenvolvedores de GNOME, Mallard é un idioma áxil e "
-"dinámico que lle axuda a escribir e revisar de forma rápida. O seu deseño "
-"orientado a temas significa que os seus usuarios poderán atopar as respostas "
-"que precisan sen ter que navegar por todo un manual. Co seu sistema de "
-"ligado único e organización, Mallard é un idioma deseñado para xestionar "
-"engadidos e axuda de fabricantes nun documento coherente."
+"O servidor de datos de Evolution (Evolution Data Server) fornece unha única "
+"axenda de enderezos e un calendario que todos os aplicativos poden usar para "
+"almacenar e recuperar información. Usar o servidor de datos de Evolution "
+"significa que os usuarios non terán que manter listas de contactos separadas "
+"por aplicativo ou copiar manualmente acontecementos entre os calendarios."
 
-#: C/help.page:22(p)
+#: C/eds.page:18(page/p)
 msgid ""
-"When you do need linear manuals, GNOME also supports the industry-standard "
-"<link href=\"http://docbook.org/\";>DocBook</link> format."
+"People use computers increasingly to interact with their friends and "
+"colleagues. Applications such as email programs, instant messengers, and "
+"telephony and video conferencing applications are used to communicate with "
+"others. These applications often provide contact lists to help users. Using "
+"Evolution Data Server, applications can store contact information in a "
+"single location, allowing all applications to see all the pertinent data "
+"about users' contacts."
 msgstr ""
-"Cando precisa manuais lineais, GNOME tamén é compatíbel co formato estándar "
-"da industria <link href=\"http://docbook.org/\";>DocBook</link>."
+"A xente cada vez emprega máis os equipos para interactuar cos amigos e "
+"colegas. Os aplicativos tales como clientes de correo electrónico, "
+"mensaxaría instantánea e videoconferencia úsanse para comunicarse uns con "
+"outros. Estes aplicativos a miúdo fornecen listas de contactos para axudar "
+"aos usuarios. Ao usar o servidor de datos de Evolution, os aplicativos poden "
+"almacenar a información dos contactos nunha única localización, permitindo a "
+"todos os aplicativos ver todos os datos pertencentes aos contactos do "
+"usuario."
 
-#: C/help.page:27(link)
-msgid "Ten Minute Mallard Tour"
-msgstr "O tour de dez minutos para Mallard"
+#: C/eds.page:26(page/p)
+msgid ""
+"Applications can also use Evolution Data Server to store and retrieve "
+"appointments on the user's calendar. For example, the clock on the panel "
+"shows a simple calendar when clicked. If the user has any appointments "
+"scheduled, they are shown alongside the calendar. This makes it easy to see "
+"upcoming appointments without opening a full calendar application."
+msgstr ""
+"Os aplicativos tamén poden usar o servidor de datos de Evolution para "
+"almacenar e recuperar citas do calendario de usuario. Por exemplo, o reloxo "
+"do panel mostra un calendario sinxelo cando se preme sobre el. Se o usuario "
+"ten unha cita planificada mostrarase neste calendario. Isto fai máis sinxelo "
+"ver as citas próximas sen ter que abrir un aplicativo de calendario completo."
 
-#: C/help.page:28(link)
-msgid "The Mallard web site"
-msgstr "A páxina web de Mallard"
+#: C/eds.page:33(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/libebook/stable/\";>Evolution API "
+"Reference: libebook</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/libebook/stable/\";>Referencia da API "
+"de Evolution: libebook</link>"
 
-#: C/help.page:29(link)
-msgid "The DocBook web site"
-msgstr "A páxina web de DocBook"
+#: C/eds.page:34(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/libecal/stable/\";>Evolution API "
+"Reference: libecal</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/libecal/stable/\";>Referencia da API de "
+"Evolution: libecal</link>"
 
-#: C/gupnp.page:6(desc)
-msgid "An easy to use, efficient and flexible UPnP framework"
-msgstr "Un marco de traballo UPnP doado de usar, eficiente e flexíbel"
+#: C/gda.page:6(info/desc)
+msgid "Common relational database access"
+msgstr "Acceso a bases de datos relacionais comúns"
 
-#: C/gupnp.page:10(title)
-msgid "GUPnP"
-msgstr "GUPnP"
+#: C/gda.page:10(page/title)
+msgid "GDA"
+msgstr "GDA"
 
-#: C/gupnp.page:12(p)
+#: C/gda.page:12(page/p)
 msgid ""
-"GUPnP is an object-oriented open source framework for creating UPnP devices "
-"and control points, written in C using GObject and libsoup. The GUPnP API is "
-"intended to be easy to use, efficient and flexible."
+"GDA offers a wrapper around relational databases, allowing you to easily "
+"store and retrieve data in many different common database systems."
 msgstr ""
-"GUPnP é un marco de traballo de fontes abertas orientado a obxectos para "
-"crear dispositivos UPnP e puntos de control, escrito en C empregando GObject "
-"e libsoup. A API de GUPnP pretende ser doado de usar, eficiente e flexíbel."
+"GDA fornece un envoltorio sobre as bases de datos relacionais, permitíndolle "
+"almacenar e recuperar de forma sinxela datos en distintos sistemas de bases "
+"de datos comúns."
 
-#: C/gupnp.page:16(p)
-msgid "The GUPnP framework consists of the following components/packages:"
+#: C/gda.page:17(item/p)
+msgid ""
+"<link href=\"http://developer-next.gnome.org/libgda/stable/\";>GNOME Data "
+"Access Manual</link>"
 msgstr ""
-"O marco de traballo GUPnP consiste  nos seguintes paquetes/compoñentes:"
+"<link href=\"http://developer-next.gnome.org/libgda/stable/\";>Manual de acceso "
+"de datos de GNOME</link>"
+
+#: C/gdk.page:6(info/desc)
+msgid "Underlying windowing and event handling"
+msgstr "Manexo de xanelas e xestión de eventos por detrás"
+
+#: C/gdk.page:10(page/title)
+msgid "GDK"
+msgstr "GDK"
 
-#: C/gupnp.page:20(p)
+#: C/gdk.page:12(page/p)
 msgid ""
-"GSSDP: The low-level library implementing resource discovery and "
-"announcement on the network through SSDP protocol."
+"GDK is the low-level library used by GTK+ to interact with the system for "
+"graphics and input devices. Although you will rarely use GDK directly in "
+"application code, it contains all the necessary functionality to draw "
+"objects and text to the screen and to interact with the user with various "
+"input devices."
 msgstr ""
-"GSSDP: unha biblioteca de baixo nivel que implementa o descubrimento e "
-"anuncio de recursos en redes mediante o protocolo SSDP."
+"GTK é a biblioteca de baixo nivel que usa GTK+ para interactuar co sistema "
+"para os dispositivos gráficos e de entrada. Aínda que rara vez usará GTK "
+"directamente no código do aplicativo, contén toda a funcionalidade necesaria "
+"para debuxar obxectos e texto na pantalla e interactuar co usuario con "
+"varios dispositivos de entrada."
 
-#: C/gupnp.page:23(p)
+#: C/gdk.page:18(page/p)
 msgid ""
-"GUPnP: The core library that implements the UPnP specification: resource "
-"announcement and discovery, description, control, event notification, and "
-"presentation (GUPnP includes basic web server functionality through "
-"libsoup). GUPnP does not include helpers for construction or control of "
-"specific standardized resources (e.g. MediaServer); this is left for higher "
-"level libraries utilizing the GUPnP framework."
+"GDK enables you to access events from keyboards, mice, and other input "
+"devices, rather than connect to the high-level signals used in GTK+. GDK "
+"also provides low-level routines to access drag and drop and clipboard data "
+"from the system. When implementing custom controls, you may need to access "
+"these features to implement proper user interaction behavior."
 msgstr ""
-"GUPnP: a biblioteca principal que implementa a especificación UPnP: anuncio "
-"e descubrimento de recursos, descrición, control, notificación de eventos e "
-"presentación (GUPnP inclúe a funcionalidade dun servidor web básico mediante "
-"libsoup). GUPnP non inclúe axudantes para a construción ou control dos "
-"recursos estándarizados específicos (p.ex. MediaServer); isto é para "
-"bibliotecas de nivel máis alto empregando o marco de traballo GUPnP."
+"GDK permítelle acceder a eventos de teclado, rato e outros dispositivos de "
+"entrada, no lugar de conectarse coas sinais de alto nivel que se usan en GTK"
+"+. GTK tamén fornece rutinas de baixo nivel para acceder a datos de "
+"arrastrar e soltar e do portapapeis do sistema. Cando implemente controis "
+"personalizados, quizais deba acceder a estas características para "
+"implementar un comportamento axeitado da interacción co usuario."
 
-#: C/gupnp.page:29(p)
+#: C/gdk.page:25(page/p)
 msgid ""
-"GUPnP A/V: A small utility library that aims to ease the handling and "
-"implementation of UPnP A/V profiles."
+"GDK provides other functionality which is needed to implement a complete "
+"graphical toolkit like GTK+. Since GDK acts as a platform abstraction, "
+"allowing GTK+ to run under multiple environments, it provides an API for all "
+"of the system functionality needed by GTK+. This includes information about "
+"multi-head displays, resolution and color depth, colormaps, and cursors."
 msgstr ""
-"GUPnP A/V: Unha pequena biblioteca de utilidades que lle permite de forma "
-"doada a xestión e implementación de perfiles UPnP A/V."
+"GDK fornece outra funcionalidade necesaria para implementar un tookit "
+"gráfico completo como GTK+. Xa que GDK actúa como unha plataforma de "
+"abstracción, permitindo que GTK+ se execute en múltiples contornos, fornece "
+"unha API para todas as funcionalidades do sistema que precisa GTK+. Isto "
+"inclúe información sobre configuracións multimonitor, resolución e "
+"profundidade da cor, mapas de cores e cursores."
+
+#: C/gdk.page:32(page/p)
+msgid ""
+"You should use GDK whenever you need low-level access to the underlying "
+"windowing system, including low-level access to events, windows, and the "
+"clipboard. Using GDK for these tasks ensures that your code is portable and "
+"integrates with the rest of your GTK+ code. The simple drawing routines in "
+"GDK should generally not be used. Instead, you should use the extensive "
+"functionality provide by Cairo."
+msgstr ""
+"Debería usar GDK sempre que precise acceso a baixo nivel para eventos, "
+"xanelas e ao portapapeis. Usar GDK para estas tarefas asegura que o seu "
+"código é portábel e intégrase co resto do seu código GTK+. Xeralmente non "
+"deberían usarse as rutinas de debuxado sinxelo en GDK. No seu lugar, debería "
+"usar a extensa funcionalidade que fornece Cairo."
+
+#: C/gdk.page:41(item/p)
+msgid ""
+"<link href=\"http://library.gnome.org/devel/gdk/stable/\";>GDK Reference "
+"Manual</link>"
+msgstr ""
+"<link href=\"http://library.gnome.org/devel/gdk/stable/\";>Manual de referencia "
+"de GDK</link>"
+
+#: C/gio-network.page:6(info/desc)
+msgid "Powerful networking API built on the GIO stream classes"
+msgstr "API de rede potente construída sobre as clases de fluxo de GIO"
+
+#: C/gio-network.page:10(page/title)
+msgid "GIO Networking"
+msgstr "Redes GIO"
+
+#: C/gio-network.page:12(page/p)
+msgid ""
+"Built on top of the stream APIs used for files, GIO provides high-level "
+"networking APIs to communicate over TCP/IP and UNIX domain sockets. You can "
+"use the GIO networking APIs to connect to a server, listen for events, and "
+"read resources. The asynchronous API designs means your application doesn't "
+"block waiting for a response."
+msgstr ""
+"Construída sobre as API de fluxo usadas para os ficheiros, GIO fornece "
+"varias API de rede de alto nivel para comunicarse sobre TCP/IP e sockets de "
+"dominio de UNIX. Tamén pode usar as API de rede de GIO para conectarse a un "
+"servidor, escoitar eventos e ler recursos. A API asíncronica significa que o "
+"seu aplicativo non se bloqueará ao agardar por unha resposta."
+
+#: C/gio-network.page:21(item/p)
+msgid ""
+"<link href=\"http://developer-next.gnome.org/gio/stable/networking.html";
+"\">Lowlevel network support</link>"
+msgstr ""
+"<link href=\"http://developer-";
+"next.gnome.org/gio/stable/networking.html\">Compatibilidade de rede de baixo "
+"nivel</link>"
+
+#: C/gio-network.page:22(item/p)
+msgid ""
+"<link href=\"http://developer-next.gnome.org/gio/stable/highlevel-socket.html";
+"\">Highlevel network functionality</link>"
+msgstr ""
+"<link href=\"http://developer-next.gnome.org/gio/stable/highlevel-";
+"socket.html\">Funcionalidade de rede de alto nivel</link>"
+
+#: C/gio.page:6(info/desc)
+msgid "Asynchronous file and URI handling with access to file and volume info"
+msgstr ""
+"Xestión de ficheiros e URI asíncrona con acceso á información de ficheiros e "
+"volume"
+
+#: C/gio.page:11(page/title)
+msgid "GIO Files"
+msgstr "Ficheiros GIO"
 
-#: C/gupnp.page:32(p)
+#: C/gio.page:13(page/p)
 msgid ""
-"GUPnP DLNA: A small utility library that aims to ease the DLNA-related tasks "
-"such as media profile guessing, transcoding to a given profile, etc."
+"GIO provides APIs for asynchronously reading and writing files and other "
+"streams. Files are referenced by URIs, and local backends can provide access "
+"to more than just local files. When running under the GNOME desktop, GIO "
+"uses GVfs to allow access to files over SFTP, FTP, WebDAV, SMB, and other "
+"popular protocols. This transparent network file access is free to all "
+"applications using GIO."
 msgstr ""
-"GUPnP DLNA: Unha pequena biblioteca de utilidades que lle permite de forma "
-"doada levar a cabo tarefas relacionadas con DLNA como descubrir perfiles "
-"multimedia, transcoficación dado un perfíl, etc."
+"GIO fornece varias API para a lectura e escritura asíncrona de ficheiros e "
+"outros fluxos. Os ficheiros son referenciados por URIs, e os backends locais "
+"poden fornecer acceso a máis ficheiros que os locais. Ao executarse baixo o "
+"escritorio GNOME, GIO usa GVfs para permitirlle o acceso a ficheiros sobre "
+"SFTP, FTP, WebDAV, SMB e outros protocolos populares. Este acceso a "
+"ficheiros de rede transparente é libre para todos os aplicativos que usen "
+"GIO."
 
-#: C/gupnp.page:35(p)
+#: C/gio.page:20(page/p)
 msgid ""
-"GUPnP IGD: A library to handle UPnP Internet Gateway Device port mappings."
+"The GIO file APIs were designed to be used in event-driven graphical "
+"interfaces. The non-blocking, asynchronous design means your user interface "
+"doesn't hang while waiting for a file. There are also synchronous versions "
+"of the APIs available, which are sometimes more convenient for worker "
+"threads or processes."
 msgstr ""
-"GUPnP IGD: Unha biblioteca para xestionar mapeados de portos de UPnP "
-"Internet Gateway Device."
-
-#: C/gupnp.page:37(p)
-msgid "GUPnP Vala: Vala bindings for GUPnP libraries."
-msgstr "GUPnP para Vala: «bindings» Vala para as bibliotecas de GUPnP."
+"As API de ficheiro de GIO están deseñadas para ser usadas en interfaces "
+"gráficas baseadas en eventos. O deseño non bloqueante e asíncrono significa "
+"que a súa interface de usuario non se bloqueará mentres agarda por un "
+"ficheiro. Tamén existen versións síncronas das API, que son en ocasións máis "
+"convenientes para o traballo de fíos ou procesos."
 
-#: C/gupnp.page:39(p)
+#: C/gio.page:26(page/p)
 msgid ""
-"GUPnP Tools: Free replacements of Intel UPnP tools, that use GUPnP. They "
-"provides the following client and server side tools which enable one to "
-"easily test and debug one's UPnP devices and control points:"
+"GIO also provides routines for managing drives and volumes, querying file "
+"types and icons, and finding applications to open files."
 msgstr ""
-"Ferramentas de GUPnP: substitucións libres para as ferramentas UPnP de "
-"Intel. Fornécenlle as ferramentas do lado do cliente e do servidor que lle "
-"permiten probar e depurar de forma doada dispositivos e puntos de control "
-"UPnP:"
+"GIO tamén fornece rutinas para xestionar unidades e volumes, consulta de "
+"tipos de dato e iconas ademais de buscar aplicativos para abrir ficheiros."
+
+#: C/gstreamer.page:6(info/desc)
+msgid "Playing, creating and manipulating sound, video, and other media"
+msgstr "Xogar, crear e manipular son, vídeo e outro multimedia"
+
+#: C/gstreamer.page:10(page/title)
+msgid "GStreamer"
+msgstr "GStreamer"
 
-#: C/gupnp.page:45(p)
+#: C/gstreamer.page:12(page/p)
 msgid ""
-"Universal Control Point: a tool that enables one to discover UPnP devices "
-"and services, retrieve information about them, subscribe to events and "
-"invoke actions."
+"GStreamer is a powerful multimedia library for playing, creating, and "
+"manipulating sound, video, and other media. You can use GStreamer to provide "
+"sound and video playback, record input from multiple sources, and edit "
+"multimedia content. GStreamer supports encoding and decoding numerous "
+"formats by default, and support for additional formats can be added with "
+"plug-ins."
 msgstr ""
-"Universal Control Point: unha ferramenta que lle permite descubrir "
-"dispositivos e servizos, obter información sobre eles, e subscribirse ás "
-"eventos e accións invocadas"
+"GStreamer é unha biblioteca multimedia moi potente para reproducir, crear e "
+"manipular sons, vídeo e outros tipos de media. Pode usar GStreamer para "
+"fornecer reprodución de son e vídeo, gravar unha entrada de múltiples fontes "
+"e editar contido multimedia. GStreamer é compatíbel de forma predeterminada "
+"coa codificación e decodificación de numerosos formatos, ademais pode "
+"engadir compatibilidade a máis formatos mediante o seu sistema de engadidos."
 
-#: C/gupnp.page:48(p)
+#: C/gstreamer.page:19(page/p)
 msgid ""
-"Network Light: a virtual light bulb that allows control points to switch it "
-"on and off, change its dimming level and query its current status. It also "
-"provides a simple UI to control all the network lights available on the "
-"network."
+"GStreamer provides a flexible architecture wherein media is processed "
+"through a pipeline of elements. Each element may apply filters to the "
+"content, such as encoding or decoding, combining multiple sources, or "
+"transforming the multimedia content. This architecture allows for an "
+"arbitrary arrangement of elements, so that you can accomplish virtually any "
+"effect using GStreamer. Furthermore, GStreamer is designed to have low "
+"overhead, so it can be used in applications with high demands on latency."
 msgstr ""
-"Iluminación de rede: unha bombilla de iluminación virtual que controla os "
-"puntos de acendido e apagado, cambiar o seu nivel de intensidade e consultar "
-"o seu estado actual. Tamén fornece unha IU simple para controlar as luces "
-"de rede dispoñíbeis na rede."
+"GStreamer fornece unha arquitectura flexíbel na que se procesa o contido "
+"multimedia a través dunha «pipeline» de elementos. Cada elemento pode "
+"aplicar filtros ao contido, tales como codificación e decodificación, "
+"combinar múltiples fontes ou transformar o contido multimedia. Esta "
+"arquitectura permítese para un grupo arbitrario de elementos, de tal forma "
+"que virtualmente pode levar a cabo calquera efecto ao usar GStreamer. "
+"Ademais GStreamer está deseñado para non requirir exceso computacional, de "
+"tal forma que pode usarse en aplicativos con altas latencias."
 
-#: C/gupnp.page:52(p)
+#: C/gstreamer.page:28(page/p)
 msgid ""
-"AV Control Point: a simple media player UI that enables one to discover and "
-"play multimedia contents available on a network. It is strictly a control "
-"point and therefore does not have any playback capabilities of it's own and "
-"relies on external UPnP MediaRenderer devices for actual playback."
+"While GStreamer provides a powerful API for manipulating multimedia, it also "
+"provides convenient routines for simple playback. GStreamer can "
+"automatically construct a pipeline to read and playback files in any "
+"supported format, allowing you to use sound and video in your application "
+"easily."
 msgstr ""
-"Punto de Control AV: unha IU simple de reprodutor multimedia que lle permite "
-"descubrir e reproducir contidos multimedia dispoñíbeis nunha rede. É "
-"estritamente un punto de control e polo tanto non ten capacidades de "
-"reprodución por si mesmo e baséase nos dispositivos UPnP MediaRenderer para "
-"a reprodución en si."
+"Á vez que GStreamer fornece unha potente API para manipular contido "
+"multimedia, tamén fornece rutinas convenientes para unha reprodución "
+"sinxela. GStreamer pode construír automaticamente un «pipeline» para ler e "
+"reproducir ficheiros en calquera dos formatos compatíbeis, permitíndolle "
+"usar de forma doada son e vídeo no seu aplicativo."
 
-#: C/gupnp.page:57(p)
+#: C/gstreamer.page:34(page/p)
 msgid ""
-"Upload: a simple commandline utility that uploads files to known "
-"MediaServers. Use Universal Control Point for discovering the MediaServers."
+"The GStreamer architecture allows plugins to add encoders, decoders, and all "
+"sorts of content filters. Third-party developers can provide GStreamer "
+"plugins which will be automatically available to other applications using "
+"GStreamer. Plugins can provide support for other multimedia formats or "
+"provide additional functionality and effects."
 msgstr ""
-"Upload: unha ferramenta de liña de ordes sinxela para subir ficheiros a "
-"MediaServers coñecidos. Use Universal Control Point para descubrir os "
-"MediaServers."
+"A arquitectura de GStreamer permite que os engadidos engadan codificadores, "
+"decodificadores e todo tipo de filtro de contidos. Os desenvolvedores de "
+"terceiras partes poden fornecer engadidos para GStreamer para todos os "
+"aplicativos que usen GStreamer. Os engadidos poden fornecer compatibilidade "
+"para outros formatos multimedia ou fornecer funcionalidades e efectos "
+"adicionais."
 
-#: C/gupnp.page:66(p)
+#: C/gstreamer.page:41(page/p)
 msgid ""
-"The GUPnP framework was born out of frustration with libupnp and its mess of "
-"threads. GUPnP is entirely single-threaded (though asynchronous), integrates "
-"with the GLib main loop, and provides the same set of features as libupnp "
-"while hiding most of the UPnP internals through an elegant object-oriented "
-"design."
+"You should use GStreamer whenever you need to read or play multimedia "
+"content in your application, or if your application needs to manipulate "
+"sound or video. Using GStreamer makes your application development easy, and "
+"it provides you well-tested elements for many of your needs."
 msgstr ""
-"O marco de traballo GUPnP naceu da frustración con libupnp e os seus lio cos "
-"fíos. GUPnP é completamente de fío único (mediante asícrono), intégrase co "
-"búcle principal de GLib e fornece o mesmo conxunto de características que "
-"libupnp mentres agocha a maoiría das partes internas de UPnP mediante un "
-"deseño orientado a obxectos elegante."
+"Debería usar GStreamer sempre que precise ler ou reproducir contido "
+"multimedia no seu aplicativo, ou se o seu aplicativo precisa manipular son "
+"ou vídeo. Usar GStreamer fará máis sinxelo o desenvolvemento do seu "
+"aplicativo e fornecerá elementos fiábeis para moitas das súas necesidades."
 
-#: C/gupnp.page:71(p)
+#: C/gstreamer.page:48(item/p)
 msgid ""
-"GUPnP is free software. All libraries are released under the GNU LGPL, while "
-"GUPnP Tools are licensed under GNU GPL."
+"<link href=\"http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/";
+"html/index.html\">The GStreamer Application Development Manual</link>"
 msgstr ""
-"GUPnP é software libre. Todas as bibliotecas son publicadas baixo a GNU "
-"LGPL, mentres que as ferramentas GUPnP son publicadas baixo a GNU GPL."
+"<link href=\"http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/";
+"html/index.html\">Manual de desenvolvemento de aplicativos GStreamer</link>"
 
-#: C/gupnp.page:74(p)
+#: C/gstreamer.page:49(item/p)
 msgid ""
-"You should use GUPnP whenever you need your code to communicate with any "
-"UPnP or DLNA devices. Examples of such devices includes Sony Playstation 3 "
-"and Bravia model TVs, Samsung TVs and phones, Microsoft XBox and all modern "
-"router etc. The list of such devices is huge and its increasing."
+"<link href=\"http://gstreamer.freedesktop.org/data/doc/gstreamer/head/";
+"gstreamer/html/\">The GStreamer 0.10 Core Reference Manual</link>"
 msgstr ""
-"Debería usar GUPnP onde o seu código precise comunicarse con calquera "
-"dispositivo UPnP ou DLNA. Algúns exemplos de ditos dispositivos son Sony "
-"Playstation 3 e televisores do modelo Bravia, televisores e teléfonos de "
-"Samsung, Microsoft XBox e todos os enrutadores modernos, etc. A lista dos "
-"dispositivos é inmensa e segue medrando."
+"<link href=\"http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstream";
+"er/html/\">Manual de referencia de GStreamer 0.10 Core</link>"
 
-#: C/gupnp.page:77(p)
+#: C/gstreamer.page:50(item/p)
 msgid ""
-"Apart from dealing with existing UPnP devices, GUPnP can very effectively be "
-"used to easily create custom home network solutions where devices/services "
-"are able to discover and interact with each other without any configuration "
-"from user."
+"<link href=\"http://gstreamer.freedesktop.org/documentation/\";>The GStreamer "
+"documentation page</link>"
 msgstr ""
-"Ademais do manexo cos dispositivos UPnP existentes, GUPnP pode ser "
-"efectivamente usado para crear solucións en redes persoais  onde "
-"dispositivos/servizos poidan ser descubertas e interactuar con outras sen "
-"ningunha configuración por parte do usuario."
+"<link href=\"http://gstreamer.freedesktop.org/documentation/\";>Páxina de "
+"documentación de GStreamer</link>"
 
-#: C/gupnp.page:81(p)
+#: C/gstreamer.page:51(item/p)
 msgid ""
-"For comprehensive information on GUPnP, please visit the <link href=\"http://";
-"www.gupnp.org\">project home page</link>."
+"<link href=\"http://gstreamer.freedesktop.org\";>The GStreamer web site</link>"
 msgstr ""
-"Para obter información de GUPnP visite a <link href=\"http://www.gupnp.org";
-"\">páxina principal do proxecto</link>."
+"<link href=\"http://gstreamer.freedesktop.org\";>Sitio web de GStreamer</link>"
 
-#: C/gtk.page:6(desc)
+#: C/gtk.page:6(info/desc)
 msgid "Feature rich toolkit for creating graphical user interfaces"
 msgstr ""
 "Kit de ferramentas con moitas características para crear interfaces gráficas "
 "de usuario"
 
-#: C/gtk.page:10(title)
+#: C/gtk.page:10(page/title)
 msgid "GTK+"
 msgstr "GTK+"
 
-#: C/gtk.page:12(p)
+#: C/gtk.page:12(page/p)
 msgid ""
 "GTK+ is the primary library used to construct user interfaces in GNOME. It "
 "provides all the user interface controls, or widgets, used in a common "
@@ -686,7 +914,7 @@ msgstr ""
 "permite construír interfaces de usuario atractivas e sofisticadas sen tratar "
 "cos detalles de baixo nivel como o pintado ou a interacción cos dispositivos."
 
-#: C/gtk.page:19(p)
+#: C/gtk.page:19(page/p)
 msgid ""
 "In addition to basic widgets, such as buttons, check boxes, and text "
 "entries, GTK+ also provides powerful Model-View-Controller (MVC) APIs for "
@@ -697,7 +925,7 @@ msgstr ""
 "para vistas en árbore, campos de texto multiliña e accións de menú e barra "
 "de ferramentas."
 
-#: C/gtk.page:24(p)
+#: C/gtk.page:24(page/p)
 msgid ""
 "Widgets in GTK+ are placed on windows using a box-packing model. Programmers "
 "specify only how to pack widgets together in container boxes, rather than "
@@ -711,7 +939,7 @@ msgstr ""
 "asegúrase de que as xanelas se dimensionan correctamente para axustarse ao "
 "seu contido e manexa automaticamente as redimensións de xanelas."
 
-#: C/gtk.page:30(p)
+#: C/gtk.page:30(page/p)
 msgid ""
 "Because GTK+ offers a flexible API, developing additional widgets for use in "
 "GTK+ applications is easy. A number of third-party libraries exist which "
@@ -723,7 +951,7 @@ msgstr ""
 "widgets adicionais e moitos desenvolvedores crearon widgets personalizados "
 "para propósitos especiais nos seus aplicativos."
 
-#: C/gtk.page:35(p)
+#: C/gtk.page:35(page/p)
 msgid ""
 "GTK+ handles the difficult details of user interfaces and user interaction, "
 "and provides a simple yet powerful API which allows you to focus on the "
@@ -738,748 +966,860 @@ msgstr ""
 "debidamente coas tecnoloxías de asistencia e comportarase como o usuario "
 "agarda que se comporte."
 
-#: C/gtk.page:43(link)
-msgid "GTK+ demo tutorial"
-msgstr "Demostración de titorial de GTK+"
+#: C/gtk.page:43(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gnome-devel-demos/stable/image-";
+"viewer.c.html\">GTK+ demo tutorial</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gnome-devel-demos/stable/image-";
+"viewer.c.html\">Titorial de demostración de GTK+</link>"
 
-#: C/gtk.page:44(link)
-msgid "GTK+ Reference Manual"
-msgstr "Manual de referencia de GTK+"
+#: C/gtk.page:44(item/p)
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/\";>GTK+ Reference "
+"Manual</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/\";>Manual de referencia de "
+"GTK+</link>"
 
-#: C/gtk.page:45(link)
-msgid "The GTK+ web site"
-msgstr "A páxina web de GTK+"
+#: C/gtk.page:45(item/p)
+msgid "<link href=\"http://gtk.org/\";>The GTK+ web site</link>"
+msgstr "<link href=\"http://gtk.org/\";>Sitio web de GTK+</link>"
 
-#: C/gstreamer.page:6(desc)
-msgid "Playing, creating and manipulating sound, video, and other media"
-msgstr "Xogar, crear e manipular son, vídeo e outro multimedia"
+#: C/gupnp.page:6(info/desc)
+msgid "An easy to use, efficient and flexible UPnP framework"
+msgstr "Un marco de traballo UPnP doado de usar, eficiente e flexíbel"
 
-#: C/gstreamer.page:10(title)
-msgid "GStreamer"
-msgstr "GStreamer"
+#: C/gupnp.page:10(page/title)
+msgid "GUPnP"
+msgstr "GUPnP"
+
+#: C/gupnp.page:12(page/p)
+msgid ""
+"GUPnP is an object-oriented open source framework for creating UPnP devices "
+"and control points, written in C using GObject and libsoup. The GUPnP API is "
+"intended to be easy to use, efficient and flexible."
+msgstr ""
+"GUPnP é un marco de traballo de fontes abertas orientado a obxectos para "
+"crear dispositivos UPnP e puntos de control, escrito en C empregando GObject "
+"e libsoup. A API de GUPnP pretende ser doado de usar, eficiente e flexíbel."
+
+#: C/gupnp.page:16(page/p)
+msgid "The GUPnP framework consists of the following components/packages:"
+msgstr ""
+"O marco de traballo GUPnP consiste  nos seguintes paquetes/compoñentes:"
+
+#: C/gupnp.page:20(item/p)
+msgid ""
+"GSSDP: The low-level library implementing resource discovery and "
+"announcement on the network through SSDP protocol."
+msgstr ""
+"GSSDP: unha biblioteca de baixo nivel que implementa o descubrimento e "
+"anuncio de recursos en redes mediante o protocolo SSDP."
+
+#: C/gupnp.page:23(item/p)
+msgid ""
+"GUPnP: The core library that implements the UPnP specification: resource "
+"announcement and discovery, description, control, event notification, and "
+"presentation (GUPnP includes basic web server functionality through "
+"libsoup). GUPnP does not include helpers for construction or control of "
+"specific standardized resources (e.g. MediaServer); this is left for higher "
+"level libraries utilizing the GUPnP framework."
+msgstr ""
+"GUPnP: a biblioteca principal que implementa a especificación UPnP: anuncio "
+"e descubrimento de recursos, descrición, control, notificación de eventos e "
+"presentación (GUPnP inclúe a funcionalidade dun servidor web básico mediante "
+"libsoup). GUPnP non inclúe axudantes para a construción ou control dos "
+"recursos estándarizados específicos (p.ex. MediaServer); isto é para "
+"bibliotecas de nivel máis alto empregando o marco de traballo GUPnP."
+
+#: C/gupnp.page:29(item/p)
+msgid ""
+"GUPnP A/V: A small utility library that aims to ease the handling and "
+"implementation of UPnP A/V profiles."
+msgstr ""
+"GUPnP A/V: Unha pequena biblioteca de utilidades que lle permite de forma "
+"doada a xestión e implementación de perfiles UPnP A/V."
+
+#: C/gupnp.page:32(item/p)
+msgid ""
+"GUPnP DLNA: A small utility library that aims to ease the DLNA-related tasks "
+"such as media profile guessing, transcoding to a given profile, etc."
+msgstr ""
+"GUPnP DLNA: Unha pequena biblioteca de utilidades que lle permite de forma "
+"doada levar a cabo tarefas relacionadas con DLNA como descubrir perfiles "
+"multimedia, transcoficación dado un perfíl, etc."
+
+#: C/gupnp.page:35(item/p)
+msgid ""
+"GUPnP IGD: A library to handle UPnP Internet Gateway Device port mappings."
+msgstr ""
+"GUPnP IGD: Unha biblioteca para xestionar mapeados de portos de UPnP "
+"Internet Gateway Device."
+
+#: C/gupnp.page:37(item/p)
+msgid "GUPnP Vala: Vala bindings for GUPnP libraries."
+msgstr "GUPnP para Vala: «bindings» Vala para as bibliotecas de GUPnP."
+
+#: C/gupnp.page:39(item/p)
+msgid ""
+"GUPnP Tools: Free replacements of Intel UPnP tools, that use GUPnP. They "
+"provides the following client and server side tools which enable one to "
+"easily test and debug one's UPnP devices and control points:"
+msgstr ""
+"Ferramentas de GUPnP: substitucións libres para as ferramentas UPnP de "
+"Intel. Fornécenlle as ferramentas do lado do cliente e do servidor que lle "
+"permiten probar e depurar de forma doada dispositivos e puntos de control "
+"UPnP:"
+
+#: C/gupnp.page:45(item/p)
+msgid ""
+"Universal Control Point: a tool that enables one to discover UPnP devices "
+"and services, retrieve information about them, subscribe to events and "
+"invoke actions."
+msgstr ""
+"Universal Control Point: unha ferramenta que lle permite descubrir "
+"dispositivos e servizos, obter información sobre eles, e subscribirse ás "
+"eventos e accións invocadas"
 
-#: C/gstreamer.page:12(p)
+#: C/gupnp.page:48(item/p)
 msgid ""
-"GStreamer is a powerful multimedia library for playing, creating, and "
-"manipulating sound, video, and other media. You can use GStreamer to provide "
-"sound and video playback, record input from multiple sources, and edit "
-"multimedia content. GStreamer supports encoding and decoding numerous "
-"formats by default, and support for additional formats can be added with "
-"plug-ins."
+"Network Light: a virtual light bulb that allows control points to switch it "
+"on and off, change its dimming level and query its current status. It also "
+"provides a simple UI to control all the network lights available on the "
+"network."
 msgstr ""
-"GStreamer é unha biblioteca multimedia moi potente para reproducir, crear e "
-"manipular sons, vídeo e outros tipos de media. Pode usar GStreamer para "
-"fornecer reprodución de son e vídeo, gravar unha entrada de múltiples fontes "
-"e editar contido multimedia. GStreamer é compatíbel de forma predeterminada "
-"coa codificación e decodificación de numerosos formatos, ademais pode "
-"engadir compatibilidade a máis formatos mediante o seu sistema de engadidos."
+"Iluminación de rede: unha bombilla de iluminación virtual que controla os "
+"puntos de acendido e apagado, cambiar o seu nivel de intensidade e consultar "
+"o seu estado actual. Tamén fornece unha IU simple para controlar as luces de "
+"rede dispoñíbeis na rede."
 
-#: C/gstreamer.page:19(p)
+#: C/gupnp.page:52(item/p)
 msgid ""
-"GStreamer provides a flexible architecture wherein media is processed "
-"through a pipeline of elements. Each element may apply filters to the "
-"content, such as encoding or decoding, combining multiple sources, or "
-"transforming the multimedia content. This architecture allows for an "
-"arbitrary arrangement of elements, so that you can accomplish virtually any "
-"effect using GStreamer. Furthermore, GStreamer is designed to have low "
-"overhead, so it can be used in applications with high demands on latency."
+"AV Control Point: a simple media player UI that enables one to discover and "
+"play multimedia contents available on a network. It is strictly a control "
+"point and therefore does not have any playback capabilities of it's own and "
+"relies on external UPnP MediaRenderer devices for actual playback."
 msgstr ""
-"GStreamer fornece unha arquitectura flexíbel na que se procesa o contido "
-"multimedia a través dunha «pipeline» de elementos. Cada elemento pode "
-"aplicar filtros ao contido, tales como codificación e decodificación, "
-"combinar múltiples fontes ou transformar o contido multimedia. Esta "
-"arquitectura permítese para un grupo arbitrario de elementos, de tal forma "
-"que virtualmente pode levar a cabo calquera efecto ao usar GStreamer. "
-"Ademais GStreamer está deseñado para non requirir exceso computacional, de "
-"tal forma que pode usarse en aplicativos con altas latencias."
+"Punto de Control AV: unha IU simple de reprodutor multimedia que lle permite "
+"descubrir e reproducir contidos multimedia dispoñíbeis nunha rede. É "
+"estritamente un punto de control e polo tanto non ten capacidades de "
+"reprodución por si mesmo e baséase nos dispositivos UPnP MediaRenderer para "
+"a reprodución en si."
 
-#: C/gstreamer.page:28(p)
+#: C/gupnp.page:57(item/p)
 msgid ""
-"While GStreamer provides a powerful API for manipulating multimedia, it also "
-"provides convenient routines for simple playback. GStreamer can "
-"automatically construct a pipeline to read and playback files in any "
-"supported format, allowing you to use sound and video in your application "
-"easily."
+"Upload: a simple commandline utility that uploads files to known "
+"MediaServers. Use Universal Control Point for discovering the MediaServers."
 msgstr ""
-"Á vez que GStreamer fornece unha potente API para manipular contido "
-"multimedia, tamén fornece rutinas convenientes para unha reprodución "
-"sinxela. GStreamer pode construír automaticamente un «pipeline» para ler e "
-"reproducir ficheiros en calquera dos formatos compatíbeis, permitíndolle "
-"usar de forma doada son e vídeo no seu aplicativo."
+"Upload: unha ferramenta de liña de ordes sinxela para subir ficheiros a "
+"MediaServers coñecidos. Use Universal Control Point para descubrir os "
+"MediaServers."
 
-#: C/gstreamer.page:34(p)
+#: C/gupnp.page:66(page/p)
 msgid ""
-"The GStreamer architecture allows plugins to add encoders, decoders, and all "
-"sorts of content filters. Third-party developers can provide GStreamer "
-"plugins which will be automatically available to other applications using "
-"GStreamer. Plugins can provide support for other multimedia formats or "
-"provide additional functionality and effects."
+"The GUPnP framework was born out of frustration with libupnp and its mess of "
+"threads. GUPnP is entirely single-threaded (though asynchronous), integrates "
+"with the GLib main loop, and provides the same set of features as libupnp "
+"while hiding most of the UPnP internals through an elegant object-oriented "
+"design."
 msgstr ""
-"A arquitectura de GStreamer permite que os engadidos engadan codificadores, "
-"decodificadores e todo tipo de filtro de contidos. Os desenvolvedores de "
-"terceiras partes poden fornecer engadidos para GStreamer para todos os "
-"aplicativos que usen GStreamer. Os engadidos poden fornecer compatibilidade "
-"para outros formatos multimedia ou fornecer funcionalidades e efectos "
-"adicionais."
+"O marco de traballo GUPnP naceu da frustración con libupnp e os seus lio cos "
+"fíos. GUPnP é completamente de fío único (mediante asícrono), intégrase co "
+"búcle principal de GLib e fornece o mesmo conxunto de características que "
+"libupnp mentres agocha a maoiría das partes internas de UPnP mediante un "
+"deseño orientado a obxectos elegante."
 
-#: C/gstreamer.page:41(p)
+#: C/gupnp.page:71(page/p)
 msgid ""
-"You should use GStreamer whenever you need to read or play multimedia "
-"content in your application, or if your application needs to manipulate "
-"sound or video. Using GStreamer makes your application development easy, and "
-"it provides you well-tested elements for many of your needs."
+"GUPnP is free software. All libraries are released under the GNU LGPL, while "
+"GUPnP Tools are licensed under GNU GPL."
 msgstr ""
-"Debería usar GStreamer sempre que precise ler ou reproducir contido "
-"multimedia no seu aplicativo, ou se o seu aplicativo precisa manipular son "
-"ou vídeo. Usar GStreamer fará máis sinxelo o desenvolvemento do seu "
-"aplicativo e fornecerá elementos fiábeis para moitas das súas necesidades."
-
-#: C/gstreamer.page:48(link)
-#| msgid "Telepathy Developer's Manual"
-msgid "The GStreamer Application Development Manual"
-msgstr "Manual do desenvolvedor de GStreamer"
-
-#: C/gstreamer.page:49(link)
-#| msgid "Clutter Reference Manual"
-msgid "The GStreamer 0.10 Core Reference Manual"
-msgstr "Manual de referencia de GStreamer 0.10"
+"GUPnP é software libre. Todas as bibliotecas son publicadas baixo a GNU "
+"LGPL, mentres que as ferramentas GUPnP son publicadas baixo a GNU GPL."
 
-#: C/gstreamer.page:50(link)
-msgid "The GStreamer documentation page"
-msgstr "A páxina de documentación de GStreamer"
+#: C/gupnp.page:74(page/p)
+msgid ""
+"You should use GUPnP whenever you need your code to communicate with any "
+"UPnP or DLNA devices. Examples of such devices includes Sony Playstation 3 "
+"and Bravia model TVs, Samsung TVs and phones, Microsoft XBox and all modern "
+"router etc. The list of such devices is huge and its increasing."
+msgstr ""
+"Debería usar GUPnP onde o seu código precise comunicarse con calquera "
+"dispositivo UPnP ou DLNA. Algúns exemplos de ditos dispositivos son Sony "
+"Playstation 3 e televisores do modelo Bravia, televisores e teléfonos de "
+"Samsung, Microsoft XBox e todos os enrutadores modernos, etc. A lista dos "
+"dispositivos é inmensa e segue medrando."
 
-#: C/gstreamer.page:51(link)
-#| msgid "The Clutter web site"
-msgid "The GStreamer web site"
-msgstr "A páxina web de GStreamer"
+#: C/gupnp.page:77(page/p)
+msgid ""
+"Apart from dealing with existing UPnP devices, GUPnP can very effectively be "
+"used to easily create custom home network solutions where devices/services "
+"are able to discover and interact with each other without any configuration "
+"from user."
+msgstr ""
+"Ademais do manexo cos dispositivos UPnP existentes, GUPnP pode ser "
+"efectivamente usado para crear solucións en redes persoais  onde "
+"dispositivos/servizos poidan ser descubertas e interactuar con outras sen "
+"ningunha configuración por parte do usuario."
 
-#: C/gio.page:6(desc)
-msgid "Asynchronous file and URI handling with access to file and volume info"
+#: C/gupnp.page:81(page/p)
+msgid ""
+"For comprehensive information on GUPnP, please visit the <link href=\"http://";
+"www.gupnp.org\">project home page</link>."
 msgstr ""
-"Xestión de ficheiros e URI asíncrona con acceso á información de ficheiros e "
-"volume"
+"Para obter información de GUPnP visite a <link href=\"http://www.gupnp.org";
+"\">páxina principal do proxecto</link>."
 
-#: C/gio.page:11(title)
-msgid "GIO Files"
-msgstr "Ficheiros GIO"
+#: C/help.page:6(info/desc)
+msgid "Topic-oriented help system"
+msgstr "Sistema de axuda orientado a temas"
 
-#: C/gio.page:13(p)
+#: C/help.page:10(page/title)
+msgid "Help"
+msgstr "Axuda"
+
+#: C/help.page:12(page/p)
 msgid ""
-"GIO provides APIs for asynchronously reading and writing files and other "
-"streams. Files are referenced by URIs, and local backends can provide access "
-"to more than just local files. When running under the GNOME desktop, GIO "
-"uses GVfs to allow access to files over SFTP, FTP, WebDAV, SMB, and other "
-"popular protocols. This transparent network file access is free to all "
-"applications using GIO."
+"Users sometimes need a little help, even with the best-designed "
+"applications. GNOME provides a built-in topic-oriented help system using the "
+"<link href=\"http://projectmallard.org/\";>Mallard</link> markup language. "
+"Pioneered by GNOME developers, Mallard is an agile and dynamic language that "
+"helps you write and revise quickly. Its topic-oriented design means your "
+"users can find the answers they need without sifting through a manual. With "
+"its unique linking and organization system, Mallard is the only language "
+"designed to handle plugin and vendor help in one coherent document."
 msgstr ""
-"GIO fornece varias API para a lectura e escritura asíncrona de ficheiros e "
-"outros fluxos. Os ficheiros son referenciados por URIs, e os backends locais "
-"poden fornecer acceso a máis ficheiros que os locais. Ao executarse baixo o "
-"escritorio GNOME, GIO usa GVfs para permitirlle o acceso a ficheiros sobre "
-"SFTP, FTP, WebDAV, SMB e outros protocolos populares. Este acceso a "
-"ficheiros de rede transparente é libre para todos os aplicativos que usen "
-"GIO."
+"Os usuario a miúdo precisa un pouco de axuda, incluso os aplicativos mellor "
+"deseñados. GNOME fornece un sistema de axuda orientada a temas usando o "
+"idioma de marcado <link href=\"http://projectmallard.org/\";>Mallard</link>. "
+"Impulsado polos desenvolvedores de GNOME, Mallard é un idioma áxil e "
+"dinámico que lle axuda a escribir e revisar de forma rápida. O seu deseño "
+"orientado a temas significa que os seus usuarios poderán atopar as respostas "
+"que precisan sen ter que navegar por todo un manual. Co seu sistema de "
+"ligado único e organización, Mallard é un idioma deseñado para xestionar "
+"engadidos e axuda de fabricantes nun documento coherente."
 
-#: C/gio.page:20(p)
+#: C/help.page:22(page/p)
 msgid ""
-"The GIO file APIs were designed to be used in event-driven graphical "
-"interfaces. The non-blocking, asynchronous design means your user interface "
-"doesn't hang while waiting for a file. There are also synchronous versions "
-"of the APIs available, which are sometimes more convenient for worker "
-"threads or processes."
+"When you do need linear manuals, GNOME also supports the industry-standard "
+"<link href=\"http://docbook.org/\";>DocBook</link> format."
 msgstr ""
-"As API de ficheiro de GIO están deseñadas para ser usadas en interfaces "
-"gráficas baseadas en eventos. O deseño non bloqueante e asíncrono significa "
-"que a súa interface de usuario non se bloqueará mentres agarda por un "
-"ficheiro. Tamén existen versións síncronas das API, que son en ocasións máis "
-"convenientes para o traballo de fíos ou procesos."
+"Cando precisa manuais lineais, GNOME tamén é compatíbel co formato estándar "
+"da industria <link href=\"http://docbook.org/\";>DocBook</link>."
 
-#: C/gio.page:26(p)
+#: C/help.page:27(item/p)
 msgid ""
-"GIO also provides routines for managing drives and volumes, querying file "
-"types and icons, and finding applications to open files."
+"<link href=\"http://projectmallard.org/about/learn/tenminutes.html\";>Ten "
+"Minute Mallard Tour</link>"
 msgstr ""
-"GIO tamén fornece rutinas para xestionar unidades e volumes, consulta de "
-"tipos de dato e iconas ademais de buscar aplicativos para abrir ficheiros."
+"<link href=\"http://projectmallard.org/about/learn/tenminutes.html\";>Tour de "
+"10 minutos de Mallard</link>"
 
-#: C/gio.page:30(link) C/gio-network.page:20(link) C/d-bus.page:46(link)
-msgid "GIO Reference Manual"
-msgstr "Manual de referencia de GIO"
+#: C/help.page:28(item/p)
+msgid "<link href=\"http://projectmallard.org/\";>The Mallard web site</link>"
+msgstr "<link href=\"http://projectmallard.org/\";>Sitio web de Mallard</link>"
 
-#: C/gio-network.page:6(desc)
-msgid "Powerful networking API built on the GIO stream classes"
-msgstr "API de rede potente construída sobre as clases de fluxo de GIO"
+#: C/help.page:29(item/p)
+msgid "<link href=\"http://docbook.org/\";>The DocBook web site</link>"
+msgstr "<link href=\"http://docbook.org/\";>Sitio web de DocBook</link>"
 
-#: C/gio-network.page:10(title)
-msgid "GIO Networking"
-msgstr "Redes GIO"
+#: C/keyring.page:6(info/desc)
+msgid "Secure storage for passwords and other data"
+msgstr "Almacenamento seguro para so contrasinais e outros datos"
+
+#: C/keyring.page:10(page/title)
+msgid "Keyring"
+msgstr "Anel de chaves"
 
-#: C/gio-network.page:12(p)
+#: C/keyring.page:12(page/p)
 msgid ""
-"Built on top of the stream APIs used for files, GIO provides high-level "
-"networking APIs to communicate over TCP/IP and UNIX domain sockets. You can "
-"use the GIO networking APIs to connect to a server, listen for events, and "
-"read resources. The asynchronous API designs means your application doesn't "
-"block waiting for a response."
+"GNOME provides a modern and secure keyring manager to store users' passwords "
+"and other sensitive data. Applications can use the keyring manager library "
+"to store and access passwords, and users can manage their passwords using "
+"GNOME's <app>Seahorse</app> application."
 msgstr ""
-"Construída sobre as API de fluxo usadas para os ficheiros, GIO fornece "
-"varias API de rede de alto nivel para comunicarse sobre TCP/IP e sockets de "
-"dominio de UNIX. Tamén pode usar as API de rede de GIO para conectarse a un "
-"servidor, escoitar eventos e ler recursos. A API asíncronica significa que o "
-"seu aplicativo non se bloqueará ao agardar por unha resposta."
-
-#: C/gio-network.page:21(link)
-msgid "Lowlevel network support"
-msgstr "Compatibilidade de rede de baixo nivel"
-
-#: C/gio-network.page:22(link)
-msgid "Highlevel network functionality"
-msgstr "Funcionalidade de rede de alto nivel"
+"GNOME fornece un xestos de anel de chaves seguro e moderno para almacenar os "
+"contrasinais do usuario e outros datos sensíbeis. Os aplicativos poden usar "
+"a biblioteca do xestor do anel de chaves para almacenar e acceder aos "
+"contrasinais, e os usuarios poden xestionar os seus contrasinais usando o "
+"aplicativo de GNOME <app>Seahorse</app>."
 
-#: C/gdk.page:6(desc)
-msgid "Underlying windowing and event handling"
-msgstr "Manexo de xanelas e xestión de eventos por detrás"
+#: C/keyring.page:18(page/p)
+msgid ""
+"The keyring manager provides any number of keyrings, where each keyring can "
+"contain any number of keyring items. Items in a keyring store some piece of "
+"data, often a password. Each keyring is locked individually, and users must "
+"provide a password to unlock the keyring. Once a keyring has been unlocked, "
+"the user has access to all of the items in that keyring."
+msgstr ""
+"O xestor do anel de chaves fornece calquera número de aneis onde cada anel "
+"pode conter calquera número de elementos. Os elementos nun anel almacenan "
+"unha información, xeralmente un contrasinal. Cada anel está bloqueado "
+"individualmente e os usuarios deben fornecer unha chave para desbloquear o "
+"anel. Unha vez que o anel está desbloqueado, o usuario ten acceso a todos os "
+"elementos do anel."
 
-#: C/gdk.page:10(title)
-msgid "GDK"
-msgstr "GDK"
+#: C/keyring.page:25(page/p)
+msgid ""
+"The keyring manager provides access control lists for each keyring item, "
+"controlling which applications are allowed access to that item. If an "
+"unknown application attempts to access a keyring item, the keyring manager "
+"will prompt the user to allow or deny that application access. This helps "
+"prevent malicious or poorly-written programs from accessing the user's "
+"sensitive data."
+msgstr ""
+"O xestor do anel de chaves fornece unha lista de control para cada elemento "
+"do anel, controlando a que aplicativos se lle permite o acceso a este "
+"elemento. Se un aplicativo do anel, o xestor de anel preguntará ao usuario "
+"se desexa permitir ou denegar o acceso a dito aplicativo. Isto axuda a "
+"previr que programas maliciosos ou probremente escritos accedan a "
+"información sensíbel do usuario."
 
-#: C/gdk.page:12(p)
+#: C/keyring.page:32(page/p)
 msgid ""
-"GDK is the low-level library used by GTK+ to interact with the system for "
-"graphics and input devices. Although you will rarely use GDK directly in "
-"application code, it contains all the necessary functionality to draw "
-"objects and text to the screen and to interact with the user with various "
-"input devices."
+"Keyring data stored on the file system is encrypted with the AES block "
+"cipher, and SHA1 is used for hashes of the item's attributes. Using the "
+"attributes hash, the keyring manager is able to look up items requested by "
+"applications without ever unlocking the keyring. The keyring has to be "
+"unlocked when a matching item is found and accessed."
 msgstr ""
-"GTK é a biblioteca de baixo nivel que usa GTK+ para interactuar co sistema "
-"para os dispositivos gráficos e de entrada. Aínda que rara vez usará GTK "
-"directamente no código do aplicativo, contén toda a funcionalidade necesaria "
-"para debuxar obxectos e texto na pantalla e interactuar co usuario con "
-"varios dispositivos de entrada."
+"Os datos do anel de chaves almacenados no sistema de ficheiros están "
+"cifrados co cifrado de bloques AES, mentres que o SAH1 úsase para o «hash» "
+"dos atributos do elemento. Usando atributos «hash», o xestor de anel de "
+"chaves é capaz de mirar elementos que piden os aplicativos sen necesidade de "
+"desbloquear o anel. O anel desbloquéase cando se encontra un elemento "
+"coincidente e accédese a el."
 
-#: C/gdk.page:18(p)
+#: C/keyring.page:39(page/p)
 msgid ""
-"GDK enables you to access events from keyboards, mice, and other input "
-"devices, rather than connect to the high-level signals used in GTK+. GDK "
-"also provides low-level routines to access drag and drop and clipboard data "
-"from the system. When implementing custom controls, you may need to access "
-"these features to implement proper user interaction behavior."
+"The keyring manager also provides a session keyring. Items in the session "
+"keyring are never stored on disk, and are lost as soon as the user's session "
+"ends. The session keyring can be used to store passwords to be used in the "
+"current session only."
 msgstr ""
-"GDK permítelle acceder a eventos de teclado, rato e outros dispositivos de "
-"entrada, no lugar de conectarse coas sinais de alto nivel que se usan en GTK"
-"+. GTK tamén fornece rutinas de baixo nivel para acceder a datos de "
-"arrastrar e soltar e do portapapeis do sistema. Cando implemente controis "
-"personalizados, quizais deba acceder a estas características para "
-"implementar un comportamento axeitado da interacción co usuario."
+"O xestor de anel de chaves tamén fornece un anel de chaves para a sesión. Os "
+"elementos no anel da sesión nunca se almacenan en disco e pérdense cando "
+"remata a sesión do usuario. O anel da sesión pódese usar para almacenar "
+"contrasinais que só van a usarse na sesión actual."
 
-#: C/gdk.page:25(p)
+#: C/keyring.page:44(page/p)
 msgid ""
-"GDK provides other functionality which is needed to implement a complete "
-"graphical toolkit like GTK+. Since GDK acts as a platform abstraction, "
-"allowing GTK+ to run under multiple environments, it provides an API for all "
-"of the system functionality needed by GTK+. This includes information about "
-"multi-head displays, resolution and color depth, colormaps, and cursors."
+"If you use GIO to access remote servers, you automatically get the benefits "
+"of the keyring manager. Whenever GVFS needs to authenticate the user, it "
+"provides the option to store the password, either in the default keyring or "
+"in the session keyring."
 msgstr ""
-"GDK fornece outra funcionalidade necesaria para implementar un tookit "
-"gráfico completo como GTK+. Xa que GDK actúa como unha plataforma de "
-"abstracción, permitindo que GTK+ se execute en múltiples contornos, fornece "
-"unha API para todas as funcionalidades do sistema que precisa GTK+. Isto "
-"inclúe información sobre configuracións multimonitor, resolución e "
-"profundidade da cor, mapas de cores e cursores."
+"Se usa GIO para acceder a servidores remotos, automaticamente obterá os "
+"beneficios do xestor de anel de chaves. Sempre que GFfs precise autenticar "
+"ao usuario, fornece a opción de almacenar o contrasinal, xa sexa no anel de "
+"chaves predeterminado ou no anel de chaves da sesión."
 
-#: C/gdk.page:32(p)
+#: C/keyring.page:49(page/p)
 msgid ""
-"You should use GDK whenever you need low-level access to the underlying "
-"windowing system, including low-level access to events, windows, and the "
-"clipboard. Using GDK for these tasks ensures that your code is portable and "
-"integrates with the rest of your GTK+ code. The simple drawing routines in "
-"GDK should generally not be used. Instead, you should use the extensive "
-"functionality provide by Cairo."
+"You should use the keyring manager whenever your application needs to store "
+"passwords or other sensitive data for users. Using the keyring manager "
+"provides a better user experience while still keeping user data safe and "
+"secure."
 msgstr ""
-"Debería usar GDK sempre que precise acceso a baixo nivel para eventos, "
-"xanelas e ao portapapeis. Usar GDK para estas tarefas asegura que o seu "
-"código é portábel e intégrase co resto do seu código GTK+. Xeralmente non "
-"deberían usarse as rutinas de debuxado sinxelo en GDK. No seu lugar, debería "
-"usar a extensa funcionalidade que fornece Cairo."
-
-#: C/gdk.page:41(link)
-msgid "GDK Reference Manual"
-msgstr "Manual de referencia de GDK"
-
-#: C/gda.page:6(desc)
-msgid "Common relational database access"
-msgstr "Acceso a bases de datos relacionais comúns"
-
-#: C/gda.page:10(title)
-msgid "GDA"
-msgstr "GDA"
+"Debería usar o xestor de anel de chaves sempre que o seu aplicativo necesite "
+"almacenar contrasinais ou outros datos sensíbeis dos usuarios. Ao usar o "
+"xestor de anel de chaves fornécese unha mellor experiencia ao usuario á vez "
+"que mantén seguros os datos do mesmo."
 
-#: C/gda.page:12(p)
+#: C/keyring.page:55(item/p)
 msgid ""
-"GDA offers a wrapper around relational databases, allowing you to easily "
-"store and retrieve data in many different common database systems."
+"<link href=\"http://developer.gnome.org/gnome-keyring/stable/\";>gnome-"
+"keyring Reference Manual</link>"
 msgstr ""
-"GDA fornece un envoltorio sobre as bases de datos relacionais, permitíndolle "
-"almacenar e recuperar de forma sinxela datos en distintos sistemas de bases "
-"de datos comúns."
-
-#: C/gda.page:17(link)
-msgid "GNOME Data Access Manual"
-msgstr "Manual de acceso a datos de GNOME"
-
-#: C/eds.page:6(desc)
-msgid "Integration with the desktop-wide address book and calendar"
-msgstr "Integración coa axenda de enderezos e calendario do escritorio"
-
-#: C/eds.page:10(title)
-msgid "Evolution Data Server"
-msgstr "Servidor de datos de Evolution"
+"<link href=\"http://developer.gnome.org/gnome-keyring/stable/\";>Manual de "
+"referencia de gnome-keyring</link>"
 
-#: C/eds.page:12(p)
+#: C/keyring.page:56(item/p)
 msgid ""
-"With Evolution Data Server, GNOME provides a single address book and "
-"calendar that all applications can use to store and retrieve information. "
-"Using Evolution Data Server means that users no longer have to maintain "
-"separate lists of contacts in each application, or manually copy events to "
-"their calendar."
+"<link href=\"http://developer.gnome.org/libseahorse/stable/\";>libseahorse "
+"Reference Manual</link>"
 msgstr ""
-"O servidor de datos de Evolution (Evolution Data Server) fornece unha única "
-"axenda de enderezos e un calendario que todos os aplicativos poden usar para "
-"almacenar e recuperar información. Usar o servidor de datos de Evolution "
-"significa que os usuarios non terán que manter listas de contactos separadas "
-"por aplicativo ou copiar manualmente acontecementos entre os calendarios."
+"<link href=\"http://developer.gnome.org/libseahorse/stable/\";>Manual de "
+"referencia de libseahorse</link>"
+
+#: C/notify.page:6(info/desc)
+msgid "Interactive notifications in the messaging tray"
+msgstr "Notificacións interactivas na bandexa de mensaxaría"
+
+#: C/notify.page:10(page/title)
+msgid "Notify"
+msgstr "Notify"
 
-#: C/eds.page:18(p)
+#: C/notify.page:12(page/p)
 msgid ""
-"People use computers increasingly to interact with their friends and "
-"colleagues. Applications such as email programs, instant messengers, and "
-"telephony and video conferencing applications are used to communicate with "
-"others. These applications often provide contact lists to help users. Using "
-"Evolution Data Server, applications can store contact information in a "
-"single location, allowing all applications to see all the pertinent data "
-"about users' contacts."
+"The libnotify library provides a convenient API for presenting notifications "
+"to the user. Notifications can be simple message or they can allow the user "
+"to respond. Notifications made with libnotify will use the appropriate "
+"interface in the environment the application is running in. In GNOME 3, "
+"notifications are displayed at the bottom of the screen and then put into "
+"the messaging tray."
 msgstr ""
-"A xente cada vez emprega máis os equipos para interactuar cos amigos e "
-"colegas. Os aplicativos tales como clientes de correo electrónico, "
-"mensaxaría instantánea e videoconferencia úsanse para comunicarse uns con "
-"outros. Estes aplicativos a miúdo fornecen listas de contactos para axudar "
-"aos usuarios. Ao usar o servidor de datos de Evolution, os aplicativos poden "
-"almacenar a información dos contactos nunha única localización, permitindo a "
-"todos os aplicativos ver todos os datos pertencentes aos contactos do "
-"usuario."
+"A biblioteca libnotify fornece unha API conveniente para mostrarlle "
+"notificacións ao usuario. As notificacións poden ser mensaxes sinxelas ou "
+"poden permitirlle ao usuario facer respostas. As notificacións creadas con "
+"libnotify usarán a interface axeitada nos contornos nos que o aplicativo "
+"está sendo executado. En GNOME 3, as notificacións móstranse na parte "
+"inferior da pantalla e logo póñense na bandexa de mensaxaría."
 
-#: C/eds.page:26(p)
+#: C/notify.page:20(item/p)
 msgid ""
-"Applications can also use Evolution Data Server to store and retrieve "
-"appointments on the user's calendar. For example, the clock on the panel "
-"shows a simple calendar when clicked. If the user has any appointments "
-"scheduled, they are shown alongside the calendar. This makes it easy to see "
-"upcoming appointments without opening a full calendar application."
+"<link href=\"http://developer-next.gnome.org/libnotify/\";>Libnotify "
+"Reference Manual</link>"
 msgstr ""
-"Os aplicativos tamén poden usar o servidor de datos de Evolution para "
-"almacenar e recuperar citas do calendario de usuario. Por exemplo, o reloxo "
-"do panel mostra un calendario sinxelo cando se preme sobre el. Se o usuario "
-"ten unha cita planificada mostrarase neste calendario. Isto fai máis sinxelo "
-"ver as citas próximas sen ter que abrir un aplicativo de calendario completo."
-
-#: C/eds.page:33(link)
-msgid "Evolution API Reference: libebook"
-msgstr "Referencia da API de Evolution: libebook"
-
-#: C/eds.page:34(link)
-msgid "Evolution API Reference: libecal"
-msgstr "Referencia da API de Evolution: libecal"
+"<link href=\"http://developer-next.gnome.org/libnotify/\";>Manual de referencia "
+"de Libnotify</link>"
 
-#: C/d-bus.page:6(desc)
-msgid "Standard interprocess communications bus"
-msgstr "Bus de comunicacións entre procesos estándar"
+#: C/pango.page:6(info/desc)
+msgid "Fully internationalized text layout and rendering"
+msgstr "Renderización e disposición de texto completamente internacionalizado"
 
-#: C/d-bus.page:10(title)
-msgid "D-Bus"
-msgstr "D-Bus"
+#: C/pango.page:10(page/title)
+msgid "Pango"
+msgstr "Pango"
 
-#: C/d-bus.page:12(p)
+#: C/pango.page:12(page/p)
 msgid ""
-"D-Bus is a cross-desktop message bus for sending events between various "
-"applications, the desktop, and low-level components of the system. D-Bus "
-"provides a simple API for sending messages to particular services and for "
-"broadcasting messages to all interested services. D-Bus enables different "
-"types of applications to communicate and integrate with each other and with "
-"the desktop, providing better interaction and a richer experience for the "
-"user."
+"Pango is the core text and font handling library in the GNOME platform. It "
+"is responsible for laying out and rendering text, and is used throughout GTK"
+"+."
 msgstr ""
-"D-Bus é un bus de mensaxes multiescritorio para enviar eventos entre "
-"distintos aplicativos, o escritorio e compoñentes de baixo nivel do sistema. "
-"D-Bus fornece unha API sinxela para enviar mensaxes a servicios en "
-"particular e para enviar mensaxes de difusión a todos os servicios "
-"interesados. D-Bus permite que diferentes tipos de aplicativos se comuniquen "
-"e integren entre elas e o escritorio, fornecendo unha mellor interacción e "
-"unha experiencia enriquecedora para o usuario."
+"Pango é a biblioteca principal de xestión de texto e tipos de letra na "
+"plataforma GNOME. É responsábel de mostrar e renderizar textos e úsase a "
+"través de GTK+."
 
-#: C/d-bus.page:20(p)
+#: C/pango.page:15(note/p)
 msgid ""
-"D-Bus provides a session and a system bus. The session bus is used by "
-"applications in a single user session, allowing them to share data and event "
-"notifications and to integrate into the user's desktop. For example, movie "
-"players can send a D-Bus message to prevent the screensaver from activating "
-"when the user is watching a movie."
+"The Pango layout engine can be used with different font backends and drawing "
+"backends. On most GNOME systems, Pango will use FreeType, fontconfig, and "
+"Cairo to access fonts and render text. On other systems, Pango will use the "
+"native font systems, such as Uniscribe on Microsoft Windows and ATSUI on "
+"MacOS"
 msgstr ""
-"D-Bus fornece un bus de sesión e un bus de sistema. O bus de sesión úsano os "
-"aplicativos nunha sesión dun só usuario, permitíndolles compartir datos e "
-"notificacións de eventos e integrándoos co escritorio do usuario. Por "
-"exemplo, os reprodutores de filmes poden enviar unha mensaxe por D-Bus para "
-"evitar que se active o protector de pantalla cando o usuario está vendo un "
-"filme."
+"O motor de debuxo Pango pódese usar con diferentes backends de tipos de "
+"letra e debuxado. Na maioría de sistemas GNOME, pango usará FreeType, "
+"fontconfig e Cairo para acceder aos tipos de letra e renderizar texto. "
+"Noutros sistemas, Pango usará o tipo de letra nativo dos sistemas, tales "
+"como Uniscribe en Microsoft Windows e ATSUI en MacOS."
 
-#: C/d-bus.page:26(p)
+#: C/pango.page:22(page/p)
 msgid ""
-"The system bus is a single message bus which runs independently of any user "
-"sessions. It can communicate with applications in any session, enabling "
-"those applications to interact with system components without dealing with "
-"low-level system details. The system bus is used to provide important "
-"functionality that users expect to work on their systems. For example, the "
-"system bus is used to monitor when network interfaces go up or down, when "
-"external drives get plugged in, and when laptop batteries are low."
+"Pango has extensive support for the various writing systems used throughout "
+"the world. Many of the writing systems used for languages have complex rules "
+"for laying out glyphs and composing characters. With Pango, nearly all "
+"languages can be written and displayed correctly, allowing users everywhere "
+"to view text in their native languages. Pango support for multiple writing "
+"systems is automatic; application developers do not have to write any "
+"special code to support other languages."
 msgstr ""
-"O bus do sistema é un bus dun só mensaxe que se executa independentemente de "
-"calquera sesión de usuario. Pódese comunicar cos aplicativos de calquera "
-"sesión, permitindo a ditos aplicativos interactuar cos compoñentes do "
-"sistema sen ter que tratar con detalles de baixo nivel do sistema. O bus do "
-"sistema úsase para fornecer unha funcionalidade importante que os usuarios "
-"agardan que funcione nos seus sistemas. Por exemplo, o bus do sistema úsase "
-"para monitorizar cando as interfaces de rede se conectan ou desconectan, "
-"cando se conectan unidades externas e cando a batería do sistema está baixa."
+"Pango ten compatibilidade extensa para os variados sistemas de escritura "
+"usados en todo o mundo. Moitos dos sistemas de escrita usados nos idiomas "
+"teñen complexas reglas de debuxado de glifos e composición de caracteres. "
+"Con Pango, case todos os idiomas poden escribirse e mostrarse correctamente, "
+"permitindo aos usuarios en calquera parte ver texto nos seus idiomas "
+"maternos. A compatibilidade é automática; os desenvolvedores de aplicativos "
+"non teñen que escribir ningún código especial para ter compatibilidade con "
+"outros idiomas."
 
-#: C/d-bus.page:35(p)
+#: C/pango.page:31(page/p)
 msgid ""
-"D-Bus is developed jointly on <link href=\"http://www.freedesktop.org/";
-"\">freedesktop.org</link>, so you can use it with different desktop "
-"environments and applications. Because D-Bus is a cross-desktop project, you "
-"use it to create portable and versatile software that seamlessly integrates "
-"with the user's desktop, regardless of which desktop it is."
+"Pango supports the text styling used in typical documents and interfaces, "
+"including italics, font weights, and underlines. Pango uses a simple XML-"
+"like vocabulary called PangoMarkup which enables you to set font size, "
+"color, styles, and other text attributes. Using PangoMarkup, you can specify "
+"inline styles without manually iterating over text blocks. PangoMarkup can "
+"be used directly from GTK+, enabling you to style text in your graphical "
+"interfaces easily."
 msgstr ""
-"D-Bus é desenvolvido conxuntamente en <link href=\"http://www.freedesktop.";
-"org/\">freedesktop.org</link>, de tal forma que pode usalo con diferentes "
-"contornos de escritorio e aplicativos. Debido a que D-Bus é un proxecto "
-"multiescritorio, pode usalo para crear software portábel e versátil que se "
-"integre dun modo transparente co escritorio do usuario, independente de que "
-"escritorio sexa."
+"Pango é compatíbel co estilo de texto usado nos tipos documentos e "
+"interfaces, incluíndo cursivas, tamaños de tipografía e subliñado. Pango usa "
+"un vogabulario sinxelo semellante a XML chamado PangoMarkup que lle permite "
+"estabelecer o tamaño do tipo de letra, a cor, os estilos e outros atributos "
+"do texto. Ao usar PangoMarkup poderá especificar estilos en liña sen ter que "
+"iterar manualmente cos bloques de texto. Pódese empregar PangoMarkup desde "
+"GTK+ directamente, permitíndolle dar estilo a textos nas súas interfaces "
+"gráficas de forma sinxela."
 
-#: C/d-bus.page:42(p)
-#| msgid ""
-#| "GNOME provides full support for D-Bus using the GBus and GDBus APIs in "
-#| "GIO."
+#: C/pango.page:40(page/p)
 msgid ""
-"GNOME provides full support for D-Bus using the GDBus APIs in <link xref="
-"\"gio\">GIO</link>."
+"You should use Pango directly whenever you need to lay text out on the "
+"screen or on a different medium. Using Pango will allow your text layout to "
+"work seamlessly with GTK+ and the rest of the GNOME platform. It will help "
+"you create portable code, and most importantly, it will ensure that your "
+"application can render text correctly in hundreds of different languages."
+msgstr ""
+"Debería usar directamente Pango cando precise mostrar texto na pantalla ou "
+"nun medio diferente. Usar Pango permitirá á disposición do seu texto "
+"traballar de forma semellante con GTK+ e o resto da plataforma GNOME. "
+"Axudaralle a crear código portábel e, o máis importante, aseguraralle que o "
+"seu aplicativo poida renderizar texto correctamente en centos de idiomas "
+"distintos."
+
+#: C/pango.page:49(item/p)
+msgid ""
+"<link href=\"http://library.gnome.org/devel/pango/stable/\";>Pango Reference "
+"Manual</link>"
 msgstr ""
-"GNOME fornece compatibilidade completa para D-Bus usando as API de GBus e "
-"GDBus en <link xref=\"gio\">GIO</link>."
+"<link href=\"http://library.gnome.org/devel/pango/stable/\";>Manual de "
+"referencia de Pango</link>"
 
-#: C/d-bus.page:47(link)
-msgid "D-Bus Tutorial"
-msgstr "Titorial de D-Bus"
+#: C/pango.page:50(item/p)
+msgid "<link href=\"http://www.pango.org\";>The Pango web site</link>"
+msgstr "<link href=\"http://www.pango.org\";>Sitio web de Pango</link>"
 
-#: C/d-bus.page:48(link)
-msgid "D-Bus Specification"
-msgstr "Especificación de D-BUS"
+#: C/telepathy.page:6(info/desc)
+msgid "Unified and integrated real-time communication service"
+msgstr "Contactos e mensaxaría instantánea unificados e integrados"
 
-#: C/clutter.page:6(desc)
-msgid "Stunning graphics and animations with a scene-graph API"
-msgstr "Impresionantes gráficos e animacións con unha API de escena-gráfico"
+#: C/telepathy.page:10(page/title)
+msgid "Telepathy"
+msgstr "Telepathy"
 
-#: C/clutter.page:10(title)
-msgid "Clutter"
-msgstr "Clutter"
+#: C/telepathy.page:12(page/p)
+msgid ""
+"Telepathy provides a powerful framework for interacting with the user's "
+"instant messaging contacts. With Telepathy, all accounts and connections are "
+"handled by a D-Bus session service that's deeply integrated into the GNOME "
+"desktop. Applications can tie into this service to communicate with contacts."
+msgstr ""
+"Telepathy fornece un marco de traballo potente para interactuar cos "
+"contactos de mensaxaría instantánea do usuario. Con Telepathy, todas as "
+"contas e conexións son xestionadas por un servizo D-Bus de sesión integrado "
+"profundamente no escritorio GNOME. Os aplicativos poden unirse a este "
+"servizo para comunicarse cos contactos."
 
-#: C/clutter.page:12(p)
+#: C/telepathy.page:18(page/p)
 msgid ""
-"Clutter is a library that allows creating fast, portable, dynamic, "
-"compelling user interfaces."
+"With the Telepathy Tubes API, you can even tunnel an arbitrary protocol over "
+"modern instant messaging protocols like Jabber to create interactive "
+"applications. Create multi-player games or collaborative editors that "
+"integrate with the desktop-wide instant messaging services."
 msgstr ""
-"Clutter é unha biblioteca que lle permite crear interfaces de usuario "
-"rápidas, portábeis, dinámicas e irresistíbeis."
+"Coa API «Telepathy Tubes» pode crear incluso un túnel con un protocolo "
+"arbitrario sobre os protocolos de mensaxaría instantánea modernos, como "
+"Jabber, para interactuar cos aplicativos. Crear xogos multixogador ou "
+"editores colaborativos que se integran cos servizos de mensaxaría "
+"instantánea do escritorio."
 
-#: C/clutter.page:15(p)
+#: C/telepathy.page:25(item/p)
 msgid ""
-"Clutter uses the <link href=\"http://www.khronos.org/opengl/\";>OpenGL</link> "
-"and <link href=\"http://www.khronos.org/opengles/\";>OpenGL|ES</link> "
-"industry standard API to access the accelerated graphical hardware on both "
-"desktop and mobile environments alike, without exposing the complexities of "
-"GPU pipeline programming."
+"<link href=\"http://telepathy.freedesktop.org/doc/book/\";>Telepathy "
+"Developer's Manual</link>"
 msgstr ""
-"Clutter usa os API estándares na industria <link href=\"http://www.khronos.";
-"org/opengl/\">OpenGL</link> e <link href=\"http://www.khronos.org/opengles/";
-"\">OpenGL|ES</link> para acceder a hardware gráfico acelerado tanto no "
-"escritorio como en contornos móbiles, sen expoñer as complexidades da "
-"programación pipeline GPU."
+"<link href=\"http://telepathy.freedesktop.org/doc/book/\";>Manual para "
+"desenvolvedores de Telepathy</link>"
 
-#: C/clutter.page:21(p)
+#: C/telepathy.page:26(item/p)
 msgid ""
-"Clutter does not specify any visual style, and does not provide any pre-"
-"defined complex user interface control; it lets the developer define what is "
-"needed, using a flexible scene graph API, with free-form placement of the "
-"scene elements (or \"actors\") on the main viewport (or \"stage\")."
+"<link href=\"http://telepathy.freedesktop.org\";>The Telepathy web site</link>"
 msgstr ""
-"Clutter non especifica ningún estilo visual e non fornece ningún control de "
-"interface de usuario complexo e predefinido. Permítelle ao desenvolvedor "
-"definir o que precisa usando unha API de gráficos de escena flexíbel, con "
-"libre colocación dos elementos da escena (ou «actores») na xanela principal "
-"(ou «escena»)"
+"<link href=\"http://telepathy.freedesktop.org\";>Sitio web de Telepathy</link>"
+
+#: C/webkit.page:6(info/desc)
+msgid "The power of HTML5 and the web in your application"
+msgstr "A potencia de HTML5 e a web no seu aplicativo"
+
+#: C/webkit.page:10(page/title)
+msgid "WebKit"
+msgstr "WebKit"
 
-#: C/clutter.page:26(p)
-#| msgid ""
-#| "Clutter comes with pre-defined actors for displaying solid colors, image "
-#| "data, text and custom high-precision 2D drawing using the Cairo API. "
-#| "Clutter also provides generic classes for structuring a user interface "
-#| "using both a box-packing model like GTK+, and a series of free-form "
-#| "\"constraints\"."
+#: C/webkit.page:12(page/p)
 msgid ""
-"Clutter comes with pre-defined actors for displaying solid colors, image "
-"data, text and custom high-precision 2D drawing using the <link xref=\"cairo"
-"\">Cairo</link> API. Clutter also provides generic classes for structuring a "
-"user interface using both a box-packing model like <link xref=\"gtk\">GTK+</"
-"link>, and a series of free-form \"constraints\"."
+"WebKit is a powerful, multi-platform HTML engine used in open source and "
+"commercial products. WebKitGTK+ is the port of WebKit built on <link xref="
+"\"gtk\">GTK+</link> and integrated into the GNOME developer platform. "
+"WebKitGTK+ is developed upstream as part of the main WebKit project, so it's "
+"always up to date with the latest HTML5 features."
 msgstr ""
-"Clutter ven con actores predefinidos para mostrar cores sólidas, datos de "
-"imaxe, texto e debuxado 2D de alta precisión presonalizado usando a API de "
-"<link xref=\"cairo\">Cairo</link>. Clutter tamén fornece clases xenéricas para "
-"estructurar unha interface de usuario usando tanto un modelo de empaquetado "
-"de caixo como <link xref=\"gtk\">GTK+</link> como unha serie de constantes "
-"«de libre disposición»."
+"Webkit é un motor HTML potente e multiplataforma usado en produtos de código "
+"aberto e comerciais. WebKitGTK+ é o port de WebKit construído sobre <link "
+"xref=\"gtk\">GTK+</link> e integrado na plataforma de desenvolvemento de "
+"GNOME. WebKitGTK+ desenvolvese no proxecto orixinal como parte do proxecto "
+"principal de WebKit, polo que sempre estará actualizado ás últimas "
+"características de HTML5."
 
-#: C/clutter.page:33(p)
+#: C/webkit.page:19(page/p)
 msgid ""
-"Clutter provides an extensible animation framework and graphical effects. An "
-"animation is associated with a timeline and changes one or more properties "
-"of one or more actors over time, for example their rotation in a particular "
-"dimension, scale, size, opacity, etc."
+"WebKitGTK+ makes it easy to add web functionality to your application, or to "
+"use HTML5 and associated technologies to create dynamic user interfaces "
+"quickly."
 msgstr ""
-"Clutter fornece un marco de traballo de animación e efectos gráficos "
-"extensíbel. Unha animación está asociada con unha liña de tempo e cambia "
-"nunha ou máis propieaddes de un ou máis actores no tempo, por exemplo a súa "
-"rotación nunha dimensión en particular, escala, tamaño, opacidade, etc."
+"WebKitGTK+ fai sinxelo engadir funcionalidades do web ao seu aplicativo ou "
+"usar HTML5 e as tecnoloxías asociadas para crear interfaces de usuario "
+"dinámicas de forma rápida."
 
-#: C/clutter.page:38(p)
+#: C/webkit.page:24(item/p)
 msgid ""
-"A number of third-party libraries allow integration with other technologies, "
-"such as: Clutter-GTK, for embedding a Clutter stage inside a GTK+ "
-"application; Clutter-GStreamer, for embedding GStreamer video and audio "
-"pipelines; Clutter-Box2D and Clutter-Bullet, for adding physics interaction "
-"in both 2D and 3D environments."
+"<link href=\"http://developer.gnome.org/gnome-devel-demos/stable/message-";
+"board.c.html\">WebKitGTK+ demo tutorial</link>"
 msgstr ""
-"Un número de bibliotecas de terceiros permítenlle a integración con outras "
-"tecnoloxías, como pode ser: Clutter-GTK, para incrustar unha escena de "
-"Clutter dentro de aplicativos GTK+, Clutter-GStreamer, para incrustar "
-"tuberías de vídeo e son de GStreamer, Clutter-Box2D e Clutter-Bullet para "
-"engadir interación física tanto en contornos 2D como 3D."
+"<link href=\"http://developer.gnome.org/gnome-devel-demos/stable/message-";
+"board.c.html\">Titorial de demostración de WebKitGTK+</link>"
+
+#: C/webkit.page:25(item/p)
+msgid ""
+"<link href=\"http://webkitgtk.org/reference/index.html\";>WebKitGTK+ "
+"Reference Manual</link>"
+msgstr ""
+"<link href=\"http://webkitgtk.org/reference/index.html\";>Manual de referencia "
+"de WebKitGTK+</link>"
+
+#: C/webkit.page:26(item/p)
+msgid "<link href=\"http://webkitgtk.org/\";>The WebKitGTK+ web site</link>"
+msgstr "<link href=\"http://webkitgtk.org/\";>Sitio web de WebKitGTK+</link>"
+
+#: C/cc-by-sa-3-0.xml:4(p/link)
+msgid "Creative Commons Attribution-Share Alike 3.0 United States License"
+msgstr ""
+"Este traballo distribúese baixo a licenza Creative Commons "
+"Atribución-Compartir Igual 3.0."
+
+#: C/cc-by-sa-3-0.xml:3(license/p)
+msgid "This work is licensed under a <_:link-1/>."
+msgstr "Este traballo está baixo a licenza <_:link-1/>."
+
+#: C/cc-by-sa-3-0.xml:6(license/p)
+msgid ""
+"As a special exception, the copyright holders give you permission to copy, "
+"modify, and distribute the example code contained in this document under the "
+"terms of your choosing, without restriction."
+msgstr ""
+"Como unha excepción especial, os propietarios do copyright danlle permiso "
+"para copiar, modificar e distribuír o código de exemplo contido neste "
+"documento baixo os termos da súa elección, sen restricións."
+
+#: C/legal-fdl.xml:8(para/ulink)
+msgid "link"
+msgstr "ligazón"
+
+#: C/legal-fdl.xml:2(legalnotice/para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <_:ulink-1/> or in the file COPYING-DOCS distributed "
+"with this manual."
+msgstr ""
+"Pode copiar, distribuír e modificar este documento baixo os termos da "
+"Licenza de Documentación Libre GNU (GFDL) na súa versión 1.1 ou "
+"posterior, publicada pola Free Software Foundation, sen seccións "
+"invariantes e sen textos de portada ou de contraportada. Pode atopar unha "
+"copia da GFDL en <_:ulink-1/> ou no ficheiro COPYING-DOCS distribuído xunto "
+"con este manual."
+
+#: C/legal-fdl.xml:11(legalnotice/para)
+msgid ""
+"This manual is part of a collection of GNOME manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Este manual é parte da colección de manuais de GNOME distribuidos baixo a "
+"licenza GFDL. Se quere distribuír este manual de forma separada da colección "
+"pode facelo engadindo unha copia da licenza xunto ao manual, como se "
+"describe na sección 6 da licenza."
+
+#: C/legal-fdl.xml:17(legalnotice/para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any GNOME "
+"documentation, and the members of the GNOME Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Moitos dos nomes empregados polas empresas para distinguir os seus produtos "
+"e servizos considéranse marcas comerciais. Cando estes nomes aparezan na "
+"documentación de GNOME, e sempre que se teña informado aos membros do "
+"Proxecto de documentación de GNOME de ditas marcas comerciais, os nomes "
+"aparecerán en maiúsculas ou coas iniciais en maiúsculas."
 
-#: C/clutter.page:45(link)
-msgid "The Clutter Cookbook"
-msgstr "O libro de cociña de Clutter"
+#: C/legal-fdl.xml:30(listitem/para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+
+#: C/legal-fdl.xml:47(listitem/para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"EN NINGUNHA CIRCUNSTANCIA NIN SEGUNDO NINGÚN ARGUMENTO LEGAL, SEXA POR "
+"MOTIVOS CULPOSOS (INCLUÍDA A NEGLIXENCIA), CONTRACTUAIS OU DE OUTRO TIPO, "
+"NIN O AUTOR, NIN O REDACTOR INICIAL, NIN CALQUERA COLABORADOR, NIN CALQUERA "
+"DISTRIBUIDOR DO DOCUMENTO OU VERSIÓN MODIFICADA DO MESMO, NIN CALQUERA "
+"FORNECEDOR DE CALQUERA DE DITAS PARATES, SERÁN RESPONSÁBEIS, ANTE NINGÚN "
+"TERCEIRO, DE NINGÚN DANO OU PERXUIZO DIRECTO, INDIRECTO, ESPECIAL, "
+"INCIDENTAL OU CONSIGUIENTE DE NINGÚN TIPO, INCLUÍDOS, SEN LIMITACIÓN, OS "
+"DANOS POR PERDA DE FONDO DE COMERCIO, INTERRUPCIÓN DO TRABALLO, FALLO OU MAL "
+"FUNCIONAMENTO INFORMÁTICO, NIN CALQUERA OUTRO DANO OU PERDA DERIVADA DO USO "
+"DO DOCUMENTO E AS VERSIÓNS MODIFICADAS DO MESMO, OU RELACIONADO CON ILO, "
+"INCLUSO SE SE COMUNICOU A AQUELA PARTE A POSIBILIDADE DE TALES DANOS.\t"
+
+#: C/legal-fdl.xml:24(legalnotice/para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<_:orderedlist-1/>"
+msgstr ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<_:orderedlist-1/>"
+
+#~ msgid "WebKitGTK+ demo tutorial"
+#~ msgstr "Titorial de demostración de WebKitGTK+"
 
-#: C/clutter.page:46(link)
-msgid "Clutter Reference Manual"
-msgstr "Manual de referencia de Clutter"
+#~ msgid "WebKitGTK+ Reference Manual"
+#~ msgstr "Manual de referencia de WebKitGTK+"
 
-#: C/clutter.page:47(link)
-msgid "The Clutter web site"
-msgstr "A páxina web de Clutter"
+#~ msgid "The WebKitGTK+ web site"
+#~ msgstr "A páxina web de WebKitGTK+"
 
-#: C/canberra.page:6(desc)
-msgid "Simple audio API for notifications and events"
-msgstr "API de audio sinxela para notificacións e eventos"
+#~ msgid "Telepathy Developer's Manual"
+#~ msgstr "Manual do desenvolvedor de Telepathy"
 
-#: C/canberra.page:10(title)
-msgid "Canberra"
-msgstr "Canberra"
+#~ msgid "The Telepathy web site"
+#~ msgstr "A páxina web de Telepathy"
 
-#: C/canberra.page:12(p)
-msgid ""
-"Canberra is a simple library for playing audio events and notifications, "
-"such as when the user has received a message or an error has occurred. As "
-"well as providing a convenient API, Canberra can also work with the "
-"accessibility features of the desktop to provide alternate notification for "
-"hearing-impaired users."
-msgstr ""
-"Canberra é unha biblioteca sinxela para reproducir eventos de son e "
-"notificacións, como cando o usuario recibe unha mensaxe ou produciuse un "
-"erro. Así como tamén fornece unha API conveniente, Canberra tamén pode "
-"traballar coas características de accesibilidade do escritorio para fornecer "
-"notificacións alternativas para os usuarios con discapacidades auditivas."
+#~ msgid "Pango Reference Manual"
+#~ msgstr "Manual de referencia de Pango"
 
-#: C/canberra.page:19(link)
-msgid "Canberra Reference"
-msgstr "Referencia de Canberra"
+#~ msgid "The Pango web site"
+#~ msgstr "A páxina web de Pango"
 
-#: C/cairo.page:6(desc)
-msgid "Modern 2D vector drawing canvas"
-msgstr "Debuxado canvas de vectores 2D moderno"
+#~ msgid "Libnotify Reference Manual"
+#~ msgstr "Manual de referencia de Libnotify"
 
-#: C/cairo.page:10(title)
-msgid "Cairo"
-msgstr "Cairo"
+#~ msgid "gnome-keyring Reference Manual"
+#~ msgstr "Manual de referencia de gnome-keyring"
 
-#: C/cairo.page:12(p)
-msgid ""
-"Cairo is a 2D graphics library featuring a sophisticated API for drawing "
-"vector graphics, compositing images, and rendering anti-aliased text. Cairo "
-"provides support for multiple output devices, including the X Window System, "
-"Microsoft Windows, and image buffers, allowing you to write platform-"
-"independent code to draw graphics on different media."
-msgstr ""
-"Cairo é unha biblioteca gráfica 2D que conta cunha API sofisticada para "
-"debuxar gráficos vectoriais, imaxes compostas e renderizar texto con "
-"antialias. Cairo fornece compatibilidade para moitos dispositivos de saída, "
-"inclúindo o sistema X Windows, Microsoft Windows e búferes de imaxe, "
-"permitíndolle escribir código para debuxar gráficos en diferentes medios "
-"independentes da plataforma."
+#~ msgid "libseahorse Reference Manual"
+#~ msgstr "Manual de referencia de libseahorse"
 
-#: C/cairo.page:18(p)
-msgid ""
-"The Cairo drawing model is similar to those provided by PostScript and PDF. "
-"The Cairo API provides such drawing operations as stroking and filling cubic "
-"Bézier splines, compositing images, and performing affine transformations. "
-"These vector operations allow for rich, anti-aliased graphics without using "
-"expensive pixel-based drawing in your application code."
-msgstr ""
-"O modelo de debuxado de Cairo é similar ao que fornece PostScript e PDF. O "
-"API de Cairo fornece operacións de debuxado tales como pincelar e rechear "
-"splines cúbicos de Bézier, compo;er imaxes e realizar transformacións afíns. "
-"Estas operacións con vectores permiten gráficos ricos con antialias sen ter "
-"que usar o caro debuxo baseado en píxeles no código do seu aplicativo."
+#~ msgid "shaunm gnome org"
+#~ msgstr "shaunm gnome org"
 
-#: C/cairo.page:25(p)
-msgid ""
-"Cairo's rich drawing model allows for high-quality rendering to multiple "
-"media. The same API can be used to create stunning on-screen graphics and "
-"text, to render images, or create crisp output suitable for printing."
-msgstr ""
-"O rico modelo de Cairo permite renderizado de alta calidade en múltiples "
-"dispositivos. O mesmo API pódese usar para crear impresionantes gráficos e "
-"textos na pantalla, para renderizar imaxes e crear saídas modificadas "
-"axeitadas para unha impresión."
+#~ msgid "gpoo gnome org"
+#~ msgstr "gpoo gnome org"
 
-#: C/cairo.page:30(p)
-msgid ""
-"You should use Cairo whenever you need to draw graphics in your application "
-"beyond the widgets provided by GTK+. Much of the drawing inside GTK+ is done "
-"using Cairo. Using Cairo for your custom drawing will allow your application "
-"to have high-quality, anti-aliased, and resolution-independent graphics."
-msgstr ""
-"Debería usar Cairo sempre que precise debuxar gráficos no seu aplicativo "
-"máis aló dos widgets fornecidos por GTK+. Gran parte do debuxado realizado "
-"por GTK+ lévase a cabo usando Cairo. Usar Cairo para o seu debuxado "
-"personalizado permitiralle ao seu aplicativo ter gráficos de alta calidade, "
-"con antialias e independentes da resolución."
+#~ msgid "Ten Minute Mallard Tour"
+#~ msgstr "O tour de dez minutos para Mallard"
 
-#: C/cairo.page:37(link)
-msgid "Cairo Manual"
-msgstr "Manual de Cairo"
+#~ msgid "The Mallard web site"
+#~ msgstr "A páxina web de Mallard"
 
-#: C/cairo.page:38(link)
-#| msgid "The Mallard web site"
-msgid "The Cairo web site"
-msgstr "A páxina web de Cairo"
+#~ msgid "The DocBook web site"
+#~ msgstr "A páxina web de DocBook"
 
-#: C/atk.page:6(desc)
-msgid "Support for screen readers and other accessibility tools"
-msgstr ""
-"Compatibilidade para lectores de pantalla e outras ferramentas de "
-"accesibilidade"
+#~ msgid "GTK+ demo tutorial"
+#~ msgstr "Demostración de titorial de GTK+"
 
-#: C/atk.page:11(title)
-msgid "ATK"
-msgstr "ATK"
+#~ msgid "GTK+ Reference Manual"
+#~ msgstr "Manual de referencia de GTK+"
 
-#: C/atk.page:13(p)
-msgid ""
-"Accessibility is the process of ensuring your application can be used by "
-"people with various disabilities. Disabilities come in many forms: visual "
-"impairments, movement impairments, hearing impairments, cognitive and "
-"language impairments, and seizure disorders. Many people have some sort of "
-"disability, and making your application accessibility will allow more people "
-"to use your application effectively."
-msgstr ""
-"A accesibilidade é o proceso de asegurarse de que o seu aplicativo pode ser "
-"usado por persoas con algunha ou varias discapacidades. As discapacidades "
-"poden ser de moitos tipos: visuais, de coordinación, movementos "
-"descoordinados, impedimentos auditivos, impedimentos cognitivos e de idioma "
-"e desorde de apoplexías. Moitas persoas teñen algún tipo de discapacidade e "
-"facer o seu aplicativo accesíbel permitira que máis xente poida usalo de "
-"forma efectiva."
+#~ msgid "The GTK+ web site"
+#~ msgstr "A páxina web de GTK+"
 
-#: C/atk.page:20(p)
-msgid ""
-"GNOME provides support for accessibility devices using the ATK framework. "
-"This framework defines a set of interfaces to which graphical interface "
-"components adhere. This allows, for instance, screen readers to read the "
-"text of an interface and interact with its controls. ATK support is built "
-"into GTK+ and the rest of the GNOME platform, so any application using GTK+ "
-"will have reasonable accessibility support for free."
-msgstr ""
-"GNOME fornece compatibilidade para dispositivos de accesibilidade usando o "
-"contorno de traballo ATK. Este contorno de traballo define un conxunto de "
-"interface gráfico que deberá adherir. Isto permite, por exemplo, aos "
-"lectores de pantalla ler o texto dunha interface e interactuar cos seus "
-"controles. A compatibilidade de ATK está construída dentro de GTK+ e o resto "
-"da plataforma GNOME, de tal forma que calquera aplicativo que use GTK+ terá "
-"certa compatibilidade razoabel debido a este feito."
+#~| msgid "Telepathy Developer's Manual"
+#~ msgid "The GStreamer Application Development Manual"
+#~ msgstr "Manual do desenvolvedor de GStreamer"
 
-#: C/atk.page:28(p)
-msgid ""
-"Nonetheless, you should be aware of accessibility issues when when "
-"developing your applications. Although GTK+ interfaces provide reasonable "
-"accessibility by default, you can often improve how well your program "
-"behaves with accessibility tools by providing additional information to ATK. "
-"If you develop custom widgets, you should ensure that they expose their "
-"properties to ATK. You should also avoid using sound, graphics, or color as "
-"the sole means of conveying information to the user."
-msgstr ""
-"Porén, debería ser consciente das cuestións de accesibilidade cando "
-"desenvolva aplicativos. Aínda que as interfaces GTK+ fornecen unha "
-"accesibilidade razoábel de forma predeterminada, a miúdo pode mellorar o "
-"comportamento do seu programa coas ferramentas de accesibilidade fornecendo "
-"información adicional a ATK. Se desenvolve widgets personalizados, debería "
-"asegurarse que expoñen as súas propiedades a ATK. Tamén debería evitar o uso "
-"de sons, gráficos e cores como única vía de enviarlle información ao usuario."
+#~| msgid "Clutter Reference Manual"
+#~ msgid "The GStreamer 0.10 Core Reference Manual"
+#~ msgstr "Manual de referencia de GStreamer 0.10"
 
-#: C/atk.page:37(p)
-msgid ""
-"The GNOME desktop ships with a number of accessibility tools which enable "
-"users with disabilities to take full advantage of their desktop and "
-"applications. Applications that fully implement ATK will be able to work "
-"with the accessibility tools. GNOME's accessibility tools include a screen "
-"reader, a screen magnifier, an on-screen keyboard, and <app>Dasher</app>, an "
-"innovative predictive text entry tool."
-msgstr ""
-"O escritorio GNOME posee certo número de ferramentas de accesibilidade que "
-"lle permite aos usuarios con discapacidades usar plenamente o escritorio e "
-"os seus aplicativos. Os aplicativos que implementan completamente ATK serán "
-"capaces de traballar coas ferramentas de accesibilidade. As ferramentas de "
-"accesibilidade de GNOME inclúen un lector de pantalla, un magnificador de "
-"pantalla, un teclado en pantalla e <app>Dasher</app>, unha innovadora "
-"ferramenta de predición de entrada de texto."
+#~ msgid "The GStreamer documentation page"
+#~ msgstr "A páxina de documentación de GStreamer"
 
-#: C/atk.page:46(link)
-msgid "GNOME Accessibility for Developers"
-msgstr "Accesibilidade de GNOME para desenvolvedores"
+#~| msgid "The Clutter web site"
+#~ msgid "The GStreamer web site"
+#~ msgstr "A páxina web de GStreamer"
 
-#: C/atk.page:47(link)
-msgid "ATK Reference"
-msgstr "Referencia de ATK"
+#~ msgid "GIO Reference Manual"
+#~ msgstr "Manual de referencia de GIO"
 
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
-#: C/index.page:0(None)
-msgid "translator-credits"
-msgstr ""
-"Leandro Regueiro <leandro regueiro gmail com>, 2011.\n"
-"Fran Diéguez <frandieguez gnome org>, 2011.\n"
-"\n"
-"Proxecto Trasno - Adaptación do software libre á lingua galega.\n"
-"Se desexas colaborar connosco podes atopar máis información en http://www.";
-"trasno.net"
+#~ msgid "Lowlevel network support"
+#~ msgstr "Compatibilidade de rede de baixo nivel"
+
+#~ msgid "Highlevel network functionality"
+#~ msgstr "Funcionalidade de rede de alto nivel"
+
+#~ msgid "GDK Reference Manual"
+#~ msgstr "Manual de referencia de GDK"
+
+#~ msgid "GNOME Data Access Manual"
+#~ msgstr "Manual de acceso a datos de GNOME"
+
+#~ msgid "Evolution API Reference: libebook"
+#~ msgstr "Referencia da API de Evolution: libebook"
+
+#~ msgid "Evolution API Reference: libecal"
+#~ msgstr "Referencia da API de Evolution: libecal"
+
+#~ msgid "D-Bus Tutorial"
+#~ msgstr "Titorial de D-Bus"
+
+#~ msgid "D-Bus Specification"
+#~ msgstr "Especificación de D-BUS"
+
+#~ msgid "The Clutter Cookbook"
+#~ msgstr "O libro de cociña de Clutter"
+
+#~ msgid "Clutter Reference Manual"
+#~ msgstr "Manual de referencia de Clutter"
+
+#~ msgid "The Clutter web site"
+#~ msgstr "A páxina web de Clutter"
+
+#~ msgid "Canberra Reference"
+#~ msgstr "Referencia de Canberra"
+
+#~ msgid "Cairo Manual"
+#~ msgstr "Manual de Cairo"
+
+#~| msgid "The Mallard web site"
+#~ msgid "The Cairo web site"
+#~ msgstr "A páxina web de Cairo"
+
+#~ msgid "GNOME Accessibility for Developers"
+#~ msgstr "Accesibilidade de GNOME para desenvolvedores"
+
+#~ msgid "ATK Reference"
+#~ msgstr "Referencia de ATK"
 
 #~ msgid ""
 #~ "For API references please see the <link href=\"http://developer.gnome.org/";


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]