[gnome-devel-docs] platform-demos: Add Swedish translation



commit 840d0ab56f7e399fa7e6e1dfd82bdf00d74439ab
Author: Anders Jonsson <anders jonsson norsjovallen se>
Date:   Fri Mar 30 23:31:11 2018 +0200

    platform-demos: Add Swedish translation

 platform-demos/Makefile.am |    2 +-
 platform-demos/sv/sv.po    |35823 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 35824 insertions(+), 1 deletions(-)
---
diff --git a/platform-demos/Makefile.am b/platform-demos/Makefile.am
index 3d9e28f..a39c81c 100644
--- a/platform-demos/Makefile.am
+++ b/platform-demos/Makefile.am
@@ -481,7 +481,7 @@ HELP_FILES =                                \
        window.vala.page                \
        custom-gsource.c.page
 
-HELP_LINGUAS = ca cs de el es fr gl ko pt_BR
+HELP_LINGUAS = ca cs de el es fr gl ko pt_BR sv
 
 # Tooling to compile and run unit tests for example code.
 demo_sources += samples/example-custom-gsource.c
diff --git a/platform-demos/sv/sv.po b/platform-demos/sv/sv.po
new file mode 100644
index 0000000..dfc1327
--- /dev/null
+++ b/platform-demos/sv/sv.po
@@ -0,0 +1,35823 @@
+# Swedish translation for gnome-devel-docs.
+# Copyright © 2018 gnome-devel-docs's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gnome-devel-docs package.
+# Anders Jonsson <anders jonsson norsjovallen se>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gnome-devel-docs master\n"
+"POT-Creation-Date: 2018-03-29 19:42+0000\n"
+"PO-Revision-Date: 2018-03-30 23:22+0200\n"
+"Language-Team: Swedish <tp-sv listor tp-sv se>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Last-Translator: \n"
+"X-Generator: Poedit 2.0.6\n"
+
+#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
+msgctxt "_"
+msgid "translator-credits"
+msgstr "Anders Jonsson <anders jonsson norsjovallen se>, 2018"
+
+#. (itstool) path: credit/name
+#: C/02_welcome_to_the_grid.js.page:15 C/03_getting_the_signal.js.page:16 C/aboutdialog.js.page:12
+#: C/button.js.page:13 C/checkbutton.js.page:13 C/comboboxtext.js.page:15 C/combobox.js.page:17 
C/dialog.js.page:13
+#: C/entry.js.page:13 C/grid.js.page:18 C/hellognome.js.page:12 C/image.js.page:12 C/label.js.page:13
+#: C/linkbutton.js.page:13 C/messagedialog.js.page:16 C/progressbar.js.page:12 C/radiobutton.js.page:13
+#: C/scale.js.page:13 C/set-up-gedit.js.page:12 C/spinbutton.js.page:16 C/spinner.js.page:13 
C/statusbar.js.page:13
+#: C/switch.js.page:13 C/textview.js.page:17 C/togglebutton.js.page:13 C/treeview_simple_liststore.js.page:16
+#: C/window.js.page:13
+msgid "Taryn Fox"
+msgstr "Taryn Fox"
+
+#. (itstool) path: credit/years
+#: C/02_welcome_to_the_grid.js.page:17 C/03_getting_the_signal.js.page:18 C/aboutdialog.c.page:17
+#: C/aboutdialog.js.page:14 C/aboutdialog.py.page:16 C/aboutdialog.vala.page:17 C/beginner.js.page:13
+#: C/button.c.page:17 C/button.js.page:15 C/button.py.page:17 C/button.vala.page:16 C/buttonbox.py.page:17
+#: C/checkbutton.c.page:15 C/checkbutton.js.page:15 C/checkbutton.py.page:16 C/checkbutton.vala.page:15
+#: C/colorbutton.py.page:16 C/colorbutton.vala.page:17 C/comboboxtext.js.page:17 C/combobox.c.page:15
+#: C/combobox.js.page:19 C/combobox.py.page:17 C/combobox.vala.page:15 C/combobox_multicolumn.py.page:16
+#: C/dialog.c.page:17 C/dialog.js.page:15 C/dialog.py.page:17 C/dialog.vala.page:15 C/entry.c.page:15
+#: C/entry.js.page:15 C/entry.py.page:17 C/entry.vala.page:15 C/filechooserdialog.py.page:19
+#: C/filechooserdialog.vala.page:18 C/fontchooserwidget.py.page:17 C/gmenu.c.page:15 C/gmenu.js.page:15
+#: C/gmenu.py.page:17 C/gmenu.py.page:23 C/gmenu.vala.page:16 C/grid.c.page:15 C/grid.js.page:15 
C/grid.py.page:17
+#: C/grid.py.page:23 C/grid.vala.page:17 C/GtkApplicationWindow.c.page:15 C/GtkApplicationWindow.js.page:15
+#: C/GtkApplicationWindow.py.page:17 C/GtkApplicationWindow.py.page:22 C/GtkApplicationWindow.vala.page:15
+#: C/guitar-tuner.js.page:14 C/hellognome.js.page:14 C/hello-world.c.page:17 C/hello-world.js.page:17
+#: C/hello-world.py.page:17 C/hello-world.vala.page:17 C/image.c.page:15 C/image.js.page:14 
C/image.py.page:17
+#: C/image.vala.page:15 C/label.c.page:16 C/label.js.page:15 C/label.py.page:19 C/label.py.page:24
+#: C/label.vala.page:15 C/linkbutton.c.page:15 C/linkbutton.js.page:15 C/linkbutton.py.page:16
+#: C/linkbutton.vala.page:15 C/menubar.c.page:17 C/menubar.py.page:17 C/menubar.py.page:22 
C/menubar.vala.page:17
+#: C/menubutton.js.page:15 C/menubutton.py.page:16 C/menubutton.py.page:22 C/menubutton.vala.page:15
+#: C/messagedialog.c.page:16 C/messagedialog.js.page:18 C/messagedialog.py.page:16 
C/messagedialog.vala.page:15
+#: C/model-view-controller.py.page:23 C/paned.c.page:15 C/paned.py.page:16 C/progressbar.c.page:16
+#: C/progressbar.js.page:14 C/progressbar.py.page:16 C/progressbar.vala.page:15 C/properties.py.page:23
+#: C/radiobutton.c.page:17 C/radiobutton.js.page:15 C/radiobutton.py.page:17 C/radiobutton.vala.page:18
+#: C/response-type.page:11 C/scale.c.page:17 C/scale.js.page:15 C/scale.py.page:17 C/scale.vala.page:17
+#: C/scrolledwindow.c.page:17 C/scrolledwindow.py.page:16 C/scrolledwindow.vala.page:16 
C/separator.py.page:17
+#: C/set-up-gedit.js.page:14 C/signals-callbacks.py.page:23 C/spinbutton.c.page:18 C/spinbutton.js.page:18
+#: C/spinbutton.py.page:17 C/spinbutton.vala.page:17 C/spinner.c.page:16 C/spinner.js.page:15 
C/spinner.py.page:16
+#: C/spinner.vala.page:15 C/statusbar.c.page:19 C/statusbar.js.page:15 C/statusbar.py.page:17
+#: C/statusbar.vala.page:18 C/strings.py.page:23 C/switch.c.page:15 C/switch.js.page:15 C/switch.py.page:16
+#: C/switch.vala.page:19 C/textview.c.page:15 C/textview.js.page:19 C/textview.py.page:24 
C/textview.vala.page:15
+#: C/togglebutton.c.page:19 C/togglebutton.js.page:15 C/togglebutton.py.page:16 C/togglebutton.vala.page:18
+#: C/toolbar.c.page:17 C/toolbar.js.page:15 C/toolbar.py.page:17 C/toolbar.vala.page:16 
C/toolbar_builder.py.page:18
+#: C/toolbar_builder.py.page:24 C/toolbar_builder.vala.page:17 C/tooltip.py.page:17
+#: C/treeview_advanced_liststore.py.page:16 C/treeview_cellrenderertoggle.py.page:16
+#: C/treeview_simple_liststore.js.page:18 C/treeview_simple_liststore.py.page:17
+#: C/treeview_simple_liststore.vala.page:17 C/treeview_treestore.py.page:17 C/tutorial.py.page:17
+#: C/weatherApp.js.page:14 C/weatherAppMain.js.page:13 C/weatherAutotools.js.page:13 
C/weatherGeonames.js.page:13
+#: C/window.c.page:15 C/window.js.page:15 C/window.py.page:17 C/window.py.page:22 C/window.vala.page:15
+msgid "2012"
+msgstr "2012"
+
+#. (itstool) path: info/desc
+#: C/02_welcome_to_the_grid.js.page:20
+msgid "Learn how to lay out UI components, like Images and Labels."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/02_welcome_to_the_grid.js.page:23
+msgid "2. Welcome to the Grid"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/02_welcome_to_the_grid.js.page:25
+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 ""
+
+#. (itstool) path: note/p
+#: C/02_welcome_to_the_grid.js.page:26
+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 ""
+
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:32
+msgid "Going native"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:34
+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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:35
+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 ""
+
+#. (itstool) path: note/p
+#: C/02_welcome_to_the_grid.js.page:36
+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 ""
+
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:40
+msgid "Setting up our application"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:42
+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 ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:43
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"const Gtk = imports.gi.Gtk;\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:49
+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, using the stable '3.0' API."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:50
+msgid "Speaking of which:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:51
+#, no-wrap
+msgid ""
+"\n"
+"class WelcomeToTheGrid {\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI ();\n"
+"    }\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:72
+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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:73
+msgid "This part, again, is pretty much copy-and-paste, but you always want to give your application a 
unique name."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:75
+#, no-wrap
+msgid ""
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:86
+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 ""
+
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:90
+msgid "Reaching into the GTK+ toolbox"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:91
+msgid "What widgets should we use? Well, let's say we want to write an application that looks like this:"
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:93
+msgctxt "_"
+msgid "external ref='media/02_jsgrid_01.png' md5='3fdc22d361cf801f71557fdc76ae5b49'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:95
+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 ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:96
+#, no-wrap
+msgid ""
+"\n"
+"        // Create an image\n"
+"        this._image = new Gtk.Image ({ file: \"gnome-image.png\" });\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:101
+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 ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:103
+#, no-wrap
+msgid ""
+"\n"
+"        // Create a label\n"
+"        this._label = new Gtk.Label ({ label: \"Welcome to GNOME, too!\" });\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:107
+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 ""
+
+#. (itstool) path: note/p
+#: C/02_welcome_to_the_grid.js.page:108
+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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:109
+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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:110
+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 ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:111
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ();\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:116
+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 ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:117
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:123
+msgid "This code looks awfully complicated, but it's not. Here's what those numbers mean:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/02_welcome_to_the_grid.js.page:125
+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 ""
+
+#. (itstool) path: item/p
+#: C/02_welcome_to_the_grid.js.page:126
+msgid ""
+"The <em>second</em> number is what top-to-bottom 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 ""
+
+#. (itstool) path: item/p
+#: C/02_welcome_to_the_grid.js.page:127
+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 ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:130
+#, 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"
+"\n"
+"};\n"
+"\n"
+"// Run the application\n"
+"let app = new WelcomeToTheGrid ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:144
+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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:145
+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 ""
+
+#. (itstool) path: section/screen
+#: C/02_welcome_to_the_grid.js.page:146
+#, no-wrap
+msgid " <output style=\"prompt\">$ </output>gjs welcome_to_the_grid.js "
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:148
+msgctxt "_"
+msgid "external ref='media/02_jsgrid_02.png' md5='07db86b0043ba5c3c24a90d7322bd81e'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:150
+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 ""
+
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:154
+msgid "Tweaking the Grid"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:156
+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 ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:157
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:164
+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 ""
+
+#. (itstool) path: section/media
+#. 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:165
+msgctxt "_"
+msgid "external ref='media/02_jsgrid_03.png' md5='817351e73c687d47253c56ed06b6629f'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:167
+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 ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:168
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            row_spacing: 20 });\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:174
+msgid "That makes it so that there are always 20 pixels of space in between each horizontal row."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/02_welcome_to_the_grid.js.page:175
+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 ""
+
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:179
+msgid "Adding more widgets"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:181
+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 ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:182
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:193
+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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:194
+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 ""
+
+#. (itstool) path: section/media
+#. 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:195
+msgctxt "_"
+msgid "external ref='media/02_jsgrid_04.png' md5='eeaead27cee2851877fc3cfe66177f07'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:197
+msgid "There are two things you should take note of, here."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/02_welcome_to_the_grid.js.page:199
+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 ""
+
+#. (itstool) path: item/p
+#: C/02_welcome_to_the_grid.js.page:200
+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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:203
+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 ""
+
+#. (itstool) path: section/media
+#. 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:204
+msgctxt "_"
+msgid "external ref='media/02_jsgrid_05.png' md5='a3ad12f432d5977fc1f66302ad5b7498'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:206
+msgid "Second, we can set the Grid's column_homogeneous property to true."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:207
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            column_homogeneous: true,\n"
+"            row_spacing: 20 });\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:214
+msgid "That makes it look something like this:"
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:215
+msgctxt "_"
+msgid "external ref='media/02_jsgrid_06.png' md5='450e48dbf6b8f5ce1c208e4812e1714b'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:217
+msgid "And third, we can set the Grid's column_spacing property, the same way we set its row_spacing."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:218
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            column_spacing: 20,\n"
+"            row_spacing: 20 });\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:224
+msgid "That makes it look like this:"
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:225
+msgctxt "_"
+msgid "external ref='media/02_jsgrid_07.png' md5='0b304d70728903fbb2601d55bf00fdb9'"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:229
+msgid "Using stock images"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:231
+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 ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:232
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:239
+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 ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:240
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:246
+msgid "That gives us this, when we run it:"
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:247
+msgctxt "_"
+msgid "external ref='media/02_jsgrid_08.png' md5='78890beb47bd11360154b8ca4d50d1ff'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:249
+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=\"https://developer.gnome.org/gtk3/3.4/gtk3-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 ""
+
+#. (itstool) path: note/p
+#: C/02_welcome_to_the_grid.js.page:250
+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 ""
+
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:255 C/03_getting_the_signal.js.page:336 C/hellognome.js.page:187
+msgid "What's next?"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:256
+msgid "Before we go on to the next tutorial, let's try something a little different:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:257
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:268
+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=\"03_getting_the_signal.js\">our next tutorial</link>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:269
+msgid ""
+"If you like, feel free to spend some time experimenting with Grids, Labels, and Images, including stock 
images."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/02_welcome_to_the_grid.js.page:270
+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 ""
+
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:274 C/checkbutton.js.page:130 C/comboboxtext.js.page:171 
C/combobox.js.page:228
+#: C/hellognome.js.page:194 C/messagedialog.js.page:184 C/radiobutton.js.page:269 C/scale.js.page:203
+#: C/spinbutton.js.page:194 C/statusbar.js.page:216 C/switch.js.page:259 C/textview.js.page:243
+#: C/togglebutton.js.page:148 C/treeview_simple_liststore.js.page:267
+msgid "Complete code sample"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:275
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class WelcomeToTheGrid {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', this._onActivate.bind(this));\n"
+"    this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI ();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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 ""
+
+#. (itstool) path: info/desc
+#: C/03_getting_the_signal.js.page:21
+msgid "Create Buttons and other widgets that do things when you click on them."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/03_getting_the_signal.js.page:24
+msgid "3. Getting the Signal"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/03_getting_the_signal.js.page:26
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:32
+msgid "A basic application"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:33
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:34
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:35
+msgid "Here is an extremely basic example:"
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:37 C/03_getting_the_signal.js.page:349
+msgctxt "_"
+msgid "external ref='media/03_jssignal_01.png' md5='8d6ecab185f4af4534cc255d62b58b8e'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:39
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/03_getting_the_signal.js.page:40
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:41
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:42
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"class GettingTheSignal {\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI ();\n"
+"    }\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:71
+msgid ""
+"Take a look at the part that uses our application's connect method and 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 ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:75
+msgid "Click the button"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:77
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:78
+#, no-wrap
+msgid ""
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:83
+msgid "First, we create the window itself:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:84
+#, 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"
+"            title: \"Click the button to get a cookie!\"});\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:93
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:94
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:95
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the label\n"
+"        this._cookieLabel = new Gtk.Label ({\n"
+"            label: \"Number of cookies: \" + cookies });\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:101
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:102
+#, no-wrap
+msgid ""
+"\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', this._getACookie.bind(this));\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:109
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:110
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:129
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/03_getting_the_signal.js.page:130
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:131
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:143
+msgid "Finally, we run the application, using the same kind of code as in our last tutorial."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:144
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new GettingTheSignal ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:152
+msgid "Flip the switch"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:153
+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."
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:155 C/03_getting_the_signal.js.page:355
+msgctxt "_"
+msgid "external ref='media/03_jssignal_02.png' md5='ba941390fbafc4a0f653c8f70bca92c0'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:157
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:159
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/03_getting_the_signal.js.page:160
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:161
+msgid "Here's how we create the Switch:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:162
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the switch that controls whether or not you can win\n"
+"        this._cookieSwitch = new Gtk.Switch ();\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:167
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:168
+#, no-wrap
+msgid ""
+"\n"
+"        // Connect the switch to the function that handles it\n"
+"        this._cookieSwitch.connect ('notify::active', this._cookieDispenser.bind(this));\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:173
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:174
+#, no-wrap
+msgid ""
+"\n"
+"        this._cookieSwitch = new Gtk.Switch ({ active: true });\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:178
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:179
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:197
+msgid "And now we arrange everything in the larger Grid like so."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:198
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:205
+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 ""
+
+#. (itstool) path: note/p
+#: C/03_getting_the_signal.js.page:206
+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 ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:207
+#, no-wrap
+msgid ""
+"\n"
+"    _getACookie() {\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 ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:225
+msgid "Tuning the radio"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:227
+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 ""
+
+#. (itstool) path: section/media
+#. 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:229 C/03_getting_the_signal.js.page:361
+msgctxt "_"
+msgid "external ref='media/03_jssignal_03.png' md5='49ecf251b0bf57543c8d79a77b6f306d'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:231
+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 ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:232
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:243
+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 ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:244
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the radio buttons\n"
+"        this._cookieRadio = new Gtk.RadioButton ({ label: \"Cookie\" });\n"
+"        this._notCookieOne = new Gtk.RadioButton ({ label: \"Not cookie\",\n"
+"            group: this._cookieRadio });\n"
+"        this._notCookieTwo = new Gtk.RadioButton ({ label: \"Not cookie\",\n"
+"            group: this._cookieRadio });\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:253
+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 ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:254
+#, 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._cookieRadio, 0, 1, 1, 1);\n"
+"        this._radioGrid.attach (this._notCookieTwo, 0, 2, 1, 1);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:262
+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 ""
+
+#. (itstool) path: note/p
+#: C/03_getting_the_signal.js.page:263
+msgid "We could also set its active property to true when we create it."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:264
+#, no-wrap
+msgid ""
+"\n"
+"        // Set the button that will be at the top to be active by default\n"
+"        this._notCookieOne.set_active (true);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:269
+msgid "Now we arrange everything in our main Grid like usual ..."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:270
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:277
+msgid "And then we change our _getACookie function to test to see if the cookie button is the one that's 
selected."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:278
+#, no-wrap
+msgid ""
+"\n"
+"    _getACookie() {\n"
+"\n"
+"        // Did you select \"cookie\" instead of \"not cookie\"?\n"
+"        if (this._cookieRadio.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 ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:296
+msgid "Can you spell \"cookie\"?"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:298
+msgid "The last input widget we're going to cover is the Entry widget, which is used for single-line text 
entry."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/03_getting_the_signal.js.page:299
+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 ""
+
+#. (itstool) path: section/media
+#. 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:300 C/03_getting_the_signal.js.page:367
+msgctxt "_"
+msgid "external ref='media/03_jssignal_04.png' md5='dfc5221ca15ca9fba7d3c76a73804e2d'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:302
+msgid "After we change the window's name, we create the Entry widget."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:303
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the text entry field\n"
+"        this._spellCookie = new Gtk.Entry ();\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:308
+msgid "Next, we arrange everything in the Grid ..."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:309
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:316
+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 ""
+
+#. (itstool) path: note/p
+#: C/03_getting_the_signal.js.page:317
+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 ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:318
+#, no-wrap
+msgid ""
+"\n"
+"    _getACookie() {\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 ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:337
+msgid "Keep reading, if you'd like to see the complete code for each version of our cookie maker 
application."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/03_getting_the_signal.js.page:338
+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 ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:343
+msgid "Complete code samples"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:348
+msgid "Code sample with Button"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:350
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"class GettingTheSignal {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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', this._getACookie.bind(this));\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"
+"    _getACookie() {\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 ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:354
+msgid "Code sample with Switch"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:356
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"class GettingTheSignal {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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', this._getACookie.bind(this));\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"
+"    _getACookie() {\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 ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:360
+msgid "Code sample with RadioButton"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:362
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"class GettingTheSignal {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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._cookieRadio = new Gtk.RadioButton ({ label: \"Cookie\" });\n"
+"        this._notCookieOne = new Gtk.RadioButton ({ label: \"Not cookie\",\n"
+"            group: this._cookieRadio });\n"
+"        this._notCookieTwo = new Gtk.RadioButton ({ label: \"Not cookie\",\n"
+"            group: this._cookieRadio });\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._cookieRadio, 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', this._getACookie.bind(this));\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"
+"    _getACookie() {\n"
+"\n"
+"        // Did you select \"cookie\" instead of \"not cookie\"?\n"
+"        if (this._cookieRadio.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 ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:366
+msgid "Code sample with Entry"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:368
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"class GettingTheSignal {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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', this._getACookie.bind(this));\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"
+"    _getACookie() {\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 ""
+
+#. (itstool) path: info/title
+#: C/aboutdialog.c.page:8
+msgctxt "text"
+msgid "AboutDialog (C)"
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/aboutdialog.c.page:15 C/button.c.page:15 C/combobox.c.page:13 C/dialog.c.page:15 C/entry.c.page:13
+#: C/grid.c.page:13 C/image.c.page:13 C/label.c.page:14 C/linkbutton.c.page:13 C/menubar.c.page:15
+#: C/messagedialog.c.page:14 C/progressbar.c.page:14 C/radiobutton.c.page:15 C/scale.c.page:15
+#: C/scrolledwindow.c.page:15 C/spinbutton.c.page:16 C/spinner.c.page:14 C/statusbar.c.page:17 
C/switch.c.page:13
+#: C/textview.c.page:13 C/togglebutton.c.page:17 C/toolbar.c.page:15
+msgid "Monica Kochofar"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/aboutdialog.c.page:20 C/aboutdialog.js.page:17 C/aboutdialog.vala.page:26
+msgid "Display information about an application"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/aboutdialog.c.page:23 C/aboutdialog.js.page:20 C/aboutdialog.py.page:22 C/aboutdialog.vala.page:29
+msgid "AboutDialog"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:25 C/aboutdialog.js.page:21 C/aboutdialog.py.page:23 C/aboutdialog.vala.page:30
+msgctxt "_"
+msgid "external ref='media/aboutdialog_GMenu.png' md5='a36117a559fa98e25e2f6b3db593639f'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/aboutdialog.c.page:26 C/aboutdialog.vala.page:31
+msgid "An AboutDialog example using Gtk.ApplicationWindow and Menu"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/aboutdialog.c.page:27 C/aboutdialog.vala.page:32 C/gmenu.c.page:24
+msgid "<em style=\"bold\">You need to be running Gtk3.4 or later for this to work</em>"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/aboutdialog.c.page:29
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\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"
+"/* 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"
+"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"
+"/* 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"
+"/* 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"
+"/* 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 ""
+
+#. (itstool) path: page/p
+#. (itstool) path: section/p
+#: C/aboutdialog.c.page:31 C/aboutdialog.js.page:25 C/aboutdialog.py.page:42 C/aboutdialog.vala.page:35
+#: C/button.c.page:30 C/button.js.page:27 C/button.py.page:53 C/buttonbox.js.page:36 C/buttonbox.py.page:47
+#: C/checkbutton.c.page:26 C/checkbutton.py.page:43 C/checkbutton.vala.page:26 C/colorbutton.js.page:34
+#: C/colorbutton.py.page:41 C/colorbutton.vala.page:28 C/comboboxtext.js.page:177 C/combobox.c.page:31
+#: C/combobox.js.page:234 C/combobox.py.page:43 C/combobox.vala.page:26 C/combobox_multicolumn.py.page:42
+#: C/combobox_multicolumn.vala.page:36 C/dialog.c.page:30 C/dialog.js.page:26 C/dialog.py.page:47
+#: C/dialog.vala.page:28 C/entry.c.page:28 C/entry.js.page:26 C/entry.py.page:62 C/entry.vala.page:26
+#: C/filechooserdialog.py.page:71 C/filechooserdialog.vala.page:36 C/fontchooserwidget.js.page:35
+#: C/fontchooserwidget.py.page:45 C/fontchooserwidget.vala.page:35 C/gmenu.c.page:28 C/gmenu.js.page:26
+#: C/gmenu.py.page:78 C/gmenu.vala.page:35 C/grid.c.page:28 C/grid.js.page:30 C/grid.py.page:55 
C/grid.vala.page:28
+#: C/GtkApplicationWindow.c.page:26 C/GtkApplicationWindow.js.page:27 C/GtkApplicationWindow.py.page:51
+#: C/GtkApplicationWindow.vala.page:27 C/image.c.page:29 C/image.js.page:28 C/image.py.page:128 
C/image.vala.page:28
+#: C/label.c.page:33 C/label.js.page:26 C/label.py.page:103 C/label.vala.page:27 C/linkbutton.c.page:28
+#: C/linkbutton.js.page:26 C/linkbutton.py.page:45 C/linkbutton.vala.page:26 C/menubar.c.page:33
+#: C/menubar.py.page:184 C/menubar.vala.page:188 C/menubutton.c.page:36 C/menubutton.js.page:29
+#: C/menubutton.py.page:54 C/menubutton.vala.page:29 C/messagedialog.c.page:32 C/messagedialog.js.page:190
+#: C/messagedialog.py.page:55 C/messagedialog.vala.page:27 C/paned.c.page:34 C/paned.js.page:34 
C/paned.py.page:40
+#: C/paned.vala.page:34 C/progressbar.c.page:29 C/progressbar.js.page:35 C/progressbar.py.page:55
+#: C/progressbar.vala.page:26 C/radiobutton.c.page:30 C/radiobutton.py.page:47 C/radiobutton.vala.page:29
+#: C/scale.c.page:30 C/scale.py.page:55 C/scale.vala.page:28 C/scrolledwindow.c.page:30 
C/scrolledwindow.js.page:34
+#: C/scrolledwindow.py.page:43 C/scrolledwindow.vala.page:27 C/separator.c.page:36 C/separator.py.page:37
+#: C/separator.vala.page:38 C/spinbutton.c.page:31 C/spinbutton.py.page:47 C/spinbutton.vala.page:28
+#: C/spinner.c.page:29 C/spinner.js.page:26 C/spinner.py.page:40 C/spinner.vala.page:26 C/statusbar.c.page:32
+#: C/statusbar.py.page:51 C/statusbar.vala.page:29 C/switch.c.page:29 C/switch.py.page:43 
C/switch.vala.page:32
+#: C/textview.c.page:32 C/textview.py.page:94 C/textview.vala.page:31 C/togglebutton.c.page:32
+#: C/togglebutton.py.page:42 C/togglebutton.vala.page:29 C/toolbar.c.page:31 C/toolbar.js.page:27
+#: C/toolbar.py.page:53 C/toolbar.vala.page:30 C/toolbar_builder.py.page:192 C/toolbar_builder.vala.page:147
+#: C/tooltip.c.page:36 C/tooltip.js.page:35 C/tooltip.py.page:57 C/tooltip.vala.page:36
+#: C/treeview_advanced_liststore.py.page:42 C/treeview_cellrenderertoggle.py.page:42
+#: C/treeview_simple_liststore.js.page:273 C/treeview_simple_liststore.py.page:43
+#: C/treeview_simple_liststore.vala.page:28 C/treeview_treestore.py.page:42 C/widget_drawing.py.page:36
+#: C/window.c.page:30 C/window.py.page:62 C/window.vala.page:34
+msgid "In this sample we used the following:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/aboutdialog.c.page:35 C/button.c.page:34 C/combobox.c.page:35 C/dialog.c.page:34 C/entry.c.page:32
+#: C/grid.c.page:32 C/GtkApplicationWindow.c.page:30 C/image.c.page:33 C/label.c.page:37 
C/linkbutton.c.page:32
+#: C/messagedialog.c.page:36 C/progressbar.c.page:33 C/radiobutton.c.page:34 C/scale.c.page:34 
C/spinbutton.c.page:35
+#: C/spinner.c.page:33 C/statusbar.c.page:36 C/switch.c.page:33 C/textview.c.page:36 C/togglebutton.c.page:36
+#: C/window.c.page:34
+msgid "<link href=\"http://developer.gnome.org/gtk3/3.4/GtkApplication.html\";>GtkApplication</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/aboutdialog.c.page:36 C/button.c.page:35 C/combobox.c.page:36 C/dialog.c.page:35 C/entry.c.page:33
+#: C/grid.c.page:33 C/linkbutton.c.page:33 C/messagedialog.c.page:38 C/progressbar.c.page:34 
C/radiobutton.c.page:35
+#: C/scale.c.page:35 C/spinbutton.c.page:36 C/spinner.c.page:34 C/statusbar.c.page:37 C/switch.c.page:34
+#: C/textview.c.page:37 C/togglebutton.c.page:37 C/window.c.page:35
+msgid "<link href=\"http://developer.gnome.org/gtk3/3.4/GtkWindow.html\";>GtkWindow</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/aboutdialog.c.page:37
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkAboutDialog.html\";>GtkAboutDialog</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/aboutdialog.c.page:38 C/aboutdialog.py.page:48 C/messagedialog.c.page:42 C/messagedialog.py.page:64
+msgid "<link href=\"http://developer.gnome.org/gio/stable/GMenu.html\";>GMenu</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/aboutdialog.c.page:39 C/messagedialog.c.page:41
+msgid "<link href=\"http://developer.gnome.org/gio/stable/GActionMap.html\";>GActionMap</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/aboutdialog.js.page:7
+msgctxt "text"
+msgid "AboutDialog (JavaScript)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/aboutdialog.js.page:22
+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 ""
+
+#. (itstool) path: page/code
+#: C/aboutdialog.js.page:24
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class AboutDialogExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal creates the menu and builds the UI\n"
+"    _onStartup() {\n"
+"        this._initMenus();\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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() {\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', () =&gt; { this._showAbout(); });\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', () =&gt; { this._window.destroy(); });\n"
+"        this.application.add_action(quitAction);\n"
+"    }\n"
+"\n"
+"    _showAbout() {\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 ""
+
+#. (itstool) path: item/p
+#: C/aboutdialog.js.page:29 C/gmenu.c.page:32 C/gmenu.js.page:30 C/gmenu.py.page:80 
C/messagedialog.js.page:194
+#: C/switch.js.page:266
+msgid "<link href=\"http://developer.gnome.org/gio/unstable/GMenu.html\";>GMenu</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/aboutdialog.js.page:30 C/filechooserdialog.py.page:80 C/gmenu.c.page:33 C/gmenu.js.page:31 
C/gmenu.py.page:81
+#: C/menubar.c.page:39 C/messagedialog.js.page:195 C/messagedialog.py.page:62 C/switch.js.page:267
+msgid "<link href=\"http://developer.gnome.org/gio/stable/GSimpleAction.html\";>GSimpleAction</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/aboutdialog.js.page:31
+msgid "<link 
href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.AboutDialog.html\";>Gtk.AboutDialog</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/aboutdialog.js.page:32 C/button.js.page:31 C/checkbutton.js.page:137 C/comboboxtext.js.page:181
+#: C/combobox.js.page:238 C/dialog.js.page:30 C/entry.js.page:30 C/grid.js.page:34 
C/GtkApplicationWindow.js.page:31
+#: C/image.js.page:32 C/label.js.page:30 C/linkbutton.js.page:30 C/messagedialog.js.page:196 
C/progressbar.js.page:40
+#: C/radiobutton.js.page:276 C/scale.js.page:211 C/spinbutton.js.page:202 C/spinner.js.page:31
+#: C/statusbar.js.page:223 C/switch.js.page:268 C/textview.js.page:250 C/togglebutton.js.page:155
+#: C/treeview_simple_liststore.js.page:277 C/window.js.page:39
+msgid "<link 
href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Application.html\";>Gtk.Application</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/aboutdialog.js.page:33 C/button.js.page:32 C/checkbutton.js.page:138 C/comboboxtext.js.page:182
+#: C/combobox.js.page:239 C/dialog.js.page:31 C/entry.js.page:31 C/grid.js.page:35 
C/GtkApplicationWindow.js.page:32
+#: C/image.js.page:33 C/label.js.page:31 C/linkbutton.js.page:31 C/messagedialog.js.page:197 
C/progressbar.js.page:41
+#: C/radiobutton.js.page:277 C/scale.js.page:212 C/spinbutton.js.page:203 C/spinner.js.page:32
+#: C/statusbar.js.page:224 C/switch.js.page:269 C/textview.js.page:251 C/togglebutton.js.page:156
+#: C/treeview_simple_liststore.js.page:278
+msgid "<link 
href=\"http://developer.gnome.org/gtk3/stable/GtkApplicationWindow.html\";>Gtk.ApplicationWindow</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/aboutdialog.py.page:8
+msgctxt "text"
+msgid "AboutDialog (Python)"
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/aboutdialog.py.page:14 C/beginner.js.page:16 C/beginner.py.page:19 C/beginner.vala.page:19 
C/button.py.page:15
+#: C/buttonbox.py.page:15 C/checkbutton.py.page:14 C/colorbutton.py.page:14 C/combobox.py.page:15
+#: C/combobox_multicolumn.py.page:14 C/dialog.py.page:15 C/entry.py.page:15 C/filechooserdialog.py.page:17
+#: C/fontchooserwidget.py.page:15 C/gmenu.py.page:21 C/grid.py.page:21 C/GtkApplicationWindow.py.page:20
+#: C/guitar-tuner.c.page:23 C/guitar-tuner.cpp.page:21 C/guitar-tuner.py.page:23 C/guitar-tuner.py.page:28
+#: C/guitar-tuner.vala.page:26 C/image.py.page:15 C/image-viewer.c.page:23 C/image-viewer.cpp.page:21
+#: C/image-viewer.js.page:23 C/image-viewer.py.page:23 C/image-viewer.vala.page:31 C/js.page:16 
C/label.py.page:17
+#: C/linkbutton.py.page:14 C/magic-mirror.vala.page:23 C/menubar.py.page:20 C/menubutton.py.page:20
+#: C/message-board.c.page:20 C/messagedialog.py.page:14 C/model-view-controller.py.page:21 C/paned.py.page:14
+#: C/photo-wall.c.page:22 C/progressbar.py.page:14 C/properties.py.page:21 C/py.page:15 
C/radiobutton.py.page:15
+#: C/record-collection.js.page:23 C/scale.py.page:15 C/scrolledwindow.py.page:14 C/separator.py.page:15
+#: C/signals-callbacks.py.page:21 C/spinbutton.py.page:15 C/spinner.py.page:14 C/statusbar.py.page:15
+#: C/strings.py.page:21 C/switch.py.page:14 C/textview.py.page:22 C/togglebutton.py.page:14 
C/toolbar.py.page:15
+#: C/toolbar_builder.py.page:22 C/tooltip.py.page:15 C/treeview_advanced_liststore.py.page:14
+#: C/treeview_cellrenderertoggle.py.page:14 C/treeview_simple_liststore.py.page:15 
C/treeview_treestore.py.page:15
+#: C/tutorial.py.page:20 C/vala.page:15 C/weatherApp.js.page:17 C/widget_drawing.py.page:13 
C/window.py.page:20
+msgid "Marta Maria Casetti"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/aboutdialog.py.page:19
+msgid "A window that displays information about an application"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/aboutdialog.py.page:24
+msgid ""
+"An AboutDialog example using Gtk.ApplicationWindow and Menu (the \"about\" is displayed if \"About\" in the 
menu "
+"is selected)."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/aboutdialog.py.page:29 C/button.py.page:31 C/buttonbox.js.page:30 C/buttonbox.py.page:31
+#: C/checkbutton.py.page:29 C/colorbutton.js.page:28 C/colorbutton.py.page:29 C/combobox.py.page:30
+#: C/combobox_multicolumn.py.page:29 C/combobox_multicolumn.vala.page:29 C/dialog.py.page:30 
C/entry.py.page:35
+#: C/filechooserdialog.py.page:53 C/fontchooserwidget.js.page:29 C/fontchooserwidget.py.page:31
+#: C/fontchooserwidget.vala.page:29 C/gmenu.py.page:36 C/grid.py.page:37 C/GtkApplicationWindow.py.page:35
+#: C/image.py.page:41 C/label.py.page:37 C/linkbutton.py.page:30 C/menubutton.c.page:30 
C/menubutton.py.page:37
+#: C/messagedialog.py.page:29 C/paned.c.page:28 C/paned.js.page:28 C/paned.py.page:29 C/paned.vala.page:28
+#: C/progressbar.py.page:39 C/radiobutton.py.page:30 C/scale.py.page:30 C/scrolledwindow.js.page:28
+#: C/scrolledwindow.py.page:29 C/separator.c.page:30 C/separator.py.page:31 C/separator.vala.page:32
+#: C/spinbutton.py.page:30 C/spinner.py.page:29 C/statusbar.py.page:30 C/switch.py.page:31 
C/textview.py.page:44
+#: C/togglebutton.py.page:29 C/toolbar.py.page:31 C/toolbar_builder.py.page:164 C/tooltip.c.page:30
+#: C/tooltip.js.page:29 C/tooltip.py.page:31 C/tooltip.vala.page:30 C/treeview_advanced_liststore.py.page:29
+#: C/treeview_cellrenderertoggle.py.page:29 C/treeview_simple_liststore.py.page:30 
C/treeview_treestore.py.page:30
+#: C/widget_drawing.py.page:28 C/window.py.page:45
+msgid "Code used to generate this example"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/aboutdialog.py.page:31
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import Gio\n"
+"import sys\n"
+"\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(\n"
+"            \"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\n"
+"        # 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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/aboutdialog.py.page:36
+msgid "Useful methods for an AboutDialog widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/aboutdialog.py.page:37
+msgid ""
+"In line 15 the signal <code>\"activate\"</code> is connected to the callback function 
<code>about_cb()</code> "
+"using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See <link 
xref="
+"\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/aboutdialog.py.page:41 C/button.py.page:52 C/buttonbox.js.page:35 C/buttonbox.py.page:46
+#: C/checkbutton.py.page:42 C/colorbutton.js.page:33 C/colorbutton.py.page:40 C/combobox.py.page:42
+#: C/combobox_multicolumn.py.page:41 C/combobox_multicolumn.vala.page:35 C/dialog.py.page:46 
C/entry.py.page:61
+#: C/filechooserdialog.py.page:70 C/fontchooserwidget.js.page:34 C/fontchooserwidget.py.page:44
+#: C/fontchooserwidget.vala.page:34 C/gmenu.py.page:77 C/grid.py.page:54 C/GtkApplicationWindow.py.page:50
+#: C/image.py.page:126 C/label.py.page:102 C/linkbutton.py.page:44 C/menubar.py.page:183 
C/menubutton.c.page:35
+#: C/menubutton.py.page:53 C/messagedialog.py.page:54 C/paned.c.page:33 C/paned.js.page:33 C/paned.py.page:39
+#: C/paned.vala.page:33 C/progressbar.py.page:54 C/radiobutton.py.page:46 C/scale.py.page:54
+#: C/scrolledwindow.js.page:33 C/scrolledwindow.py.page:42 C/spinbutton.py.page:46 C/spinner.py.page:39
+#: C/statusbar.py.page:50 C/switch.py.page:42 C/textview.py.page:93 C/togglebutton.py.page:41 
C/toolbar.py.page:52
+#: C/toolbar_builder.py.page:191 C/tooltip.c.page:35 C/tooltip.js.page:34 C/tooltip.py.page:56 
C/tooltip.vala.page:35
+#: C/treeview_advanced_liststore.py.page:41 C/treeview_cellrenderertoggle.py.page:41
+#: C/treeview_simple_liststore.py.page:42 C/treeview_treestore.py.page:41 C/widget_drawing.py.page:35
+#: C/window.py.page:60
+msgid "API References"
+msgstr "API-referenser"
+
+#. (itstool) path: item/p
+#: C/aboutdialog.py.page:46
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkAboutDialog.html\";>GtkAboutDialog</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkAboutDialog.html\";>GtkAboutDialog</link>"
+
+#. (itstool) path: item/p
+#: C/aboutdialog.py.page:47 C/checkbutton.py.page:46 C/grid.py.page:58 C/GtkApplicationWindow.py.page:56
+#: C/separator.c.page:38
+msgid "<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkApplicationWindow.html\";>GtkApplicationWindow</link>"
+msgstr ""
+"<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkApplicationWindow.html\";>GtkApplicationWindow</link>"
+
+#. (itstool) path: item/p
+#: C/aboutdialog.py.page:49 C/checkbutton.py.page:45 C/grid.py.page:57 C/GtkApplicationWindow.py.page:55
+#: C/messagedialog.py.page:65 C/window.py.page:64
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkApplication.html\";>GtkApplication</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkApplication.html\";>GtkApplication</link>"
+
+#. (itstool) path: info/title
+#: C/aboutdialog.vala.page:8
+msgctxt "text"
+msgid "AboutDialog (Vala)"
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/aboutdialog.vala.page:15 C/gmenu.vala.page:14
+msgid "Ryan Lortie"
+msgstr "Ryan Lortie"
+
+#. (itstool) path: credit/name
+#: C/aboutdialog.vala.page:21 C/beginner.py.page:15 C/beginner.vala.page:15 C/button.vala.page:14 C/c.page:14
+#: C/checkbutton.c.page:13 C/checkbutton.vala.page:13 C/colorbutton.vala.page:15 C/combobox.c.page:18
+#: C/combobox.vala.page:13 C/combobox_multicolumn.vala.page:14 C/cpp.page:11 C/dialog.vala.page:13
+#: C/entry.vala.page:13 C/filechooserdialog.vala.page:16 C/gmenu.c.page:13 C/gmenu.js.page:13 
C/gmenu.py.page:15
+#: C/gmenu.vala.page:20 C/grid.py.page:15 C/grid.vala.page:15 C/GtkApplicationWindow.c.page:13
+#: C/GtkApplicationWindow.js.page:13 C/GtkApplicationWindow.py.page:15 C/GtkApplicationWindow.vala.page:13
+#: C/guitar-tuner.vala.page:22 C/hello-world.c.page:20 C/hello-world.js.page:20 C/hello-world.py.page:20
+#: C/hello-world.vala.page:20 C/image.vala.page:13 C/image-viewer.vala.page:27 C/index.page:23 C/js.page:12
+#: C/label.vala.page:13 C/linkbutton.vala.page:13 C/menubar.py.page:15 C/menubar.vala.page:15 
C/menubutton.c.page:13
+#: C/menubutton.py.page:14 C/menubutton.vala.page:13 C/messagedialog.vala.page:13 C/paned.c.page:13
+#: C/paned.vala.page:13 C/progressbar.vala.page:13 C/py.page:11 C/radiobutton.vala.page:16 
C/response-type.page:9
+#: C/scale.vala.page:15 C/scrolledwindow.vala.page:14 C/separator.c.page:14 C/separator.vala.page:16
+#: C/spinbutton.vala.page:15 C/spinner.vala.page:13 C/statusbar.vala.page:16 C/switch.vala.page:17
+#: C/textview.vala.page:13 C/togglebutton.vala.page:16 C/toolbar.js.page:13 C/toolbar.vala.page:14
+#: C/toolbar_builder.py.page:16 C/toolbar_builder.vala.page:15 C/tooltip.c.page:14 C/tooltip.vala.page:14
+#: C/treeview_simple_liststore.vala.page:15 C/tutorial.py.page:15 C/vala.page:11 C/window.c.page:13
+#: C/window.py.page:15 C/window.vala.page:13
+msgid "Tiffany Antopolski"
+msgstr "Tiffany Antopolski"
+
+#. (itstool) path: page/code
+#: C/aboutdialog.vala.page:34
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/aboutdialog.vala.page:39 C/gmenu.vala.page:39 C/window.vala.page:38
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Application.html\";>Gtk.Application</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Application.html\";>Gtk.Application</link>"
+
+#. (itstool) path: item/p
+#: C/aboutdialog.vala.page:40 C/gmenu.vala.page:40 C/GtkApplicationWindow.vala.page:32 C/label.vala.page:32
+msgid "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ApplicationWindow.html\";>Gtk.ApplicationWindow</link>"
+msgstr "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ApplicationWindow.html\";>Gtk.ApplicationWindow</link>"
+
+#. (itstool) path: item/p
+#: C/aboutdialog.vala.page:41
+msgid "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.set_default_size.html\";>set_default_size</link>"
+msgstr "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.set_default_size.html\";>set_default_size</link>"
+
+#. (itstool) path: info/desc
+#: C/audio-player.vala.page:10
+msgid "Coming soon..."
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/audio-player.vala.page:14 C/guitar-tuner.c.page:15 C/guitar-tuner.cpp.page:13 C/guitar-tuner.py.page:15
+#: C/guitar-tuner.vala.page:14 C/image-viewer.c.page:15 C/image-viewer.cpp.page:13 
C/image-viewer.vala.page:15
+#: C/record-collection.js.page:15
+msgid "GNOME Documentation Project"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/audio-player.vala.page:19
+msgid "Audio player"
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/beginner.js.page:11 C/grid.js.page:13 C/guitar-tuner.js.page:12 C/hello-world.c.page:15 
C/hello-world.js.page:15
+#: C/hello-world.py.page:15 C/hello-world.vala.page:15 C/weatherApp.js.page:12 C/weatherAppMain.js.page:11
+#: C/weatherAutotools.js.page:11 C/weatherGeonames.js.page:11
+msgid "Susanna Huhtanen"
+msgstr "Susanna Huhtanen"
+
+#. (itstool) path: credit/years
+#: C/beginner.js.page:18 C/beginner.py.page:21 C/beginner.vala.page:21 C/buttonbox.js.page:16
+#: C/colorbutton.js.page:15 C/combobox_multicolumn.vala.page:16 C/fontchooserwidget.js.page:15
+#: C/fontchooserwidget.vala.page:15 C/guitar-tuner.c.page:25 C/guitar-tuner.cpp.page:23 
C/guitar-tuner.py.page:25
+#: C/guitar-tuner.py.page:30 C/guitar-tuner.vala.page:28 C/image-viewer.c.page:25 C/image-viewer.cpp.page:23
+#: C/image-viewer.js.page:25 C/image-viewer.py.page:25 C/image-viewer.vala.page:33 C/js.page:18
+#: C/magic-mirror.vala.page:25 C/menubutton.c.page:15 C/message-board.c.page:22 C/paned.js.page:15
+#: C/paned.vala.page:15 C/photo-wall.c.page:24 C/py.page:17 C/record-collection.js.page:25
+#: C/scrolledwindow.js.page:15 C/separator.c.page:16 C/separator.vala.page:18 C/tooltip.c.page:16
+#: C/tooltip.js.page:16 C/tooltip.vala.page:16 C/tutorial.py.page:27 C/vala.page:17 C/weatherApp.js.page:19
+#: C/widget_drawing.py.page:15
+msgid "2013"
+msgstr "2013"
+
+#. (itstool) path: info/desc
+#: C/beginner.js.page:21
+msgid ""
+"A beginner's guide to writing GNOME applications in JavaScript, including code samples and practice 
exercises."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/beginner.js.page:24 C/beginner.vala.page:25
+msgid "Tutorial for beginners and code samples"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/beginner.js.page:26
+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://wiki.gnome.org/Apps/Documents\";>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 ""
+
+#. (itstool) path: note/p
+#: C/beginner.js.page:27
+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 ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:31
+msgid "Getting Started"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/beginner.js.page:32
+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 ""
+
+#. (itstool) path: item/p
+#: C/beginner.js.page:34
+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 ""
+
+#. (itstool) path: item/p
+#: C/beginner.js.page:35
+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 ""
+
+#. (itstool) path: item/p
+#: C/beginner.js.page:36
+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 ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:42 C/beginner.vala.page:42 C/c.page:113
+msgid "Tutorials"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:46 C/beginner.vala.page:46 C/py.page:32
+msgid "Code samples"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/beginner.js.page:47
+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 ""
+
+#. (itstool) path: section/p
+#: C/beginner.js.page:48 C/beginner.vala.page:47 C/c.page:91
+msgid "To run the code samples:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/beginner.js.page:50
+msgid "Copy and paste the code into <var>filename</var>.js"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/beginner.js.page:51
+msgid "In the terminal, type:"
+msgstr ""
+
+#. (itstool) path: item/screen
+#: C/beginner.js.page:52
+#, no-wrap
+msgid "gjs <var>filename</var>.js"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:55 C/beginner.py.page:32 C/beginner.vala.page:58 C/c.page:118
+msgid "Windows"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:57 C/beginner.py.page:34 C/beginner.vala.page:61 C/c.page:121
+msgid "Display widgets"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:59 C/beginner.py.page:36 C/beginner.vala.page:63 C/c.page:123
+msgid "Buttons and toggles"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:61 C/beginner.py.page:38 C/beginner.vala.page:65 C/c.page:125
+msgid "Numeric and text data entry"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:63 C/beginner.py.page:40 C/beginner.vala.page:67 C/c.page:127
+msgid "Multiline text editor"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:65 C/beginner.py.page:42 C/beginner.vala.page:69 C/c.page:129
+msgid "Menu, combo box and toolbar widgets"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:67 C/beginner.py.page:44 C/beginner.vala.page:71 C/c.page:131
+msgid "TreeView widget"
+msgstr ""
+
+#. (itstool) path: section/title
+#. (itstool) path: steps/title
+#: C/beginner.js.page:69 C/beginner.py.page:46 C/beginner.vala.page:73 C/c.page:133 C/tutorial.py.page:127
+msgid "Selectors"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:70 C/beginner.py.page:47 C/beginner.vala.page:74 C/c.page:134
+msgid "File selectors"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:72 C/beginner.py.page:49 C/beginner.vala.page:76 C/c.page:136
+msgid "Font selectors"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:74 C/beginner.py.page:51 C/beginner.vala.page:78 C/c.page:138
+msgid "Color Selectors"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:77 C/beginner.py.page:54 C/beginner.vala.page:81 C/c.page:141
+msgid "Layout containers"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:79 C/beginner.py.page:56 C/beginner.vala.page:83 C/c.page:143
+msgid "Ornaments"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:81 C/beginner.py.page:58 C/beginner.vala.page:85 C/c.page:145
+msgid "Scrolling"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:83 C/beginner.py.page:60 C/beginner.vala.page:87 C/c.page:147
+msgid "Miscellaneous"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:88 C/beginner.vala.page:92 C/menubar.vala.page:198
+msgid "Exercises"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/beginner.py.page:9
+msgctxt "text"
+msgid "GTK+ widgets sample code (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/beginner.py.page:13
+msgid "A guide to GUI programming using GTK+, including code samples and practice exercises."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/beginner.py.page:25
+msgid "GTK+ widgets sample code"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/beginner.py.page:27
+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 ""
+
+#. (itstool) path: section/title
+#: C/beginner.py.page:64
+msgid "Theory pages"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/beginner.vala.page:9
+msgctxt "text"
+msgid "Tutorial for beginners (Vala)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/beginner.vala.page:13
+msgid "A beginner's guide to GUI programming using GTK+, including code samples and practice exercises."
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/beginner.vala.page:27
+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 ""
+
+#. (itstool) path: item/p
+#: C/beginner.vala.page:29
+msgid "Object oriented programming"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/beginner.vala.page:30
+msgid "The Vala programming language:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/beginner.vala.page:32
+msgid "<link href=\"https://live.gnome.org/Vala/Tutorial\";>The Vala Tutorial</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/beginner.vala.page:33
+msgid "<link href=\"https://live.gnome.org/Vala/Documentation#Sample_Code\";>Sample Vala code</link>"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/beginner.vala.page:38
+msgid "By following these tutorials you will learn the basics of GUI programming using GTK+."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/beginner.vala.page:51
+msgid "Copy and paste the code into <var>filename</var>.vala"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/beginner.vala.page:52 C/c.page:98
+msgid "In the terminal type:"
+msgstr ""
+
+#. (itstool) path: item/screen
+#: C/beginner.vala.page:53
+#, no-wrap
+msgid "valac --pkg gtk+-3.0 <var>filename</var>.vala"
+msgstr ""
+
+#. (itstool) path: item/screen
+#: C/beginner.vala.page:54 C/c.page:100
+#, no-wrap
+msgid "./<var>filename</var>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/button.c.page:8
+msgctxt "text"
+msgid "Button (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/button.c.page:20 C/button.py.page:20 C/button.vala.page:19
+msgid "A button widget which emits a signal when clicked"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/button.c.page:23 C/button.js.page:21 C/button.py.page:23
+msgid "Button"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:25 C/button.js.page:22 C/button.py.page:25 C/button.vala.page:24
+msgctxt "_"
+msgid "external ref='media/button.png' md5='8d69efbb3a0d3e043af6139b6492171c'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/button.c.page:26
+msgid "A button widget connected to a callback function that reverses its label when clicked."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/button.c.page:28
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/button.c.page:36 C/buttonbox.py.page:51 C/grid.c.page:35
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkButton.html\";>GtkButton</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/button.c.page:37
+msgid ""
+"<link 
href=\"http://developer.gnome.org/glib/stable/glib-Unicode-Manipulation.html#g-utf8-strreverse\";>Unicode "
+"Manipulation</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/button.js.page:8
+msgctxt "text"
+msgid "Button (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/button.js.page:18
+msgid "A button which can be connected to other widgets"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/button.js.page:23
+msgid "A button widget that changes its label when you click it."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/button.js.page:25
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class ButtonExample {\n"
+"\n"
+"    /* Create the application itself\n"
+"       This boilerplate code is needed to build any GTK+ application. */\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present ();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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\", this._clickHandler.bind(this));\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() {\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 ""
+
+#. (itstool) path: item/p
+#: C/button.js.page:33 C/grid.js.page:36
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Button.html\";>Gtk.Button</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/button.py.page:8
+msgctxt "text"
+msgid "Button (Python)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/button.py.page:26 C/button.vala.page:25
+msgid "A button widget connected to a simple callback function."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/button.py.page:32
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/button.py.page:36
+msgid "Useful methods for a Button widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/button.py.page:37
+msgid ""
+"In line 16 the <code>\"clicked\"</code> signal from the button is connected to the callback function "
+"<code>do_clicked()</code> using <code><var>widget</var>.connect(<var>signal</var>, <var>callback 
function</var>)</"
+"code>. See <link xref=\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/button.py.page:39
+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 ""
+
+#. (itstool) path: item/p
+#: C/button.py.page:40
+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 ""
+
+#. (itstool) path: item/p
+#: C/button.py.page:41
+msgid "To set an image (e.g. a stock image) for the button <code>button</code>:"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/button.py.page:42
+#, no-wrap
+msgid ""
+"\n"
+"image = Gtk.Image()\n"
+"image.set_from_stock(Gtk.STOCK_ABOUT, Gtk.IconSize.BUTTON)\n"
+"button.set_image(image)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/button.py.page:46
+msgid "You should not set a label for the button after this, otherwise it will show the label and not the 
image."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/button.py.page:47
+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 ""
+
+#. (itstool) path: item/p
+#: C/button.py.page:55
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkButton.html\";>GtkButton</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/button.py.page:56 C/dialog.py.page:52 C/label.py.page:106 C/linkbutton.py.page:47 
C/messagedialog.py.page:61
+#: C/radiobutton.py.page:49 C/separator.py.page:39 C/window.py.page:65
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkWindow.html\";>GtkWindow</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/button.vala.page:8
+msgctxt "text"
+msgid "Button (Vala)"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/button.vala.page:22
+msgid "Button widget"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/button.vala.page:27
+#, 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 ""
+
+#. (itstool) path: page/p
+#: C/button.vala.page:29
+msgid ""
+"In this sample we used the following: <link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Button.html\";>Gtk.Button</"
+"link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/buttonbox.js.page:8
+msgctxt "text"
+msgid "ButtonBox (JavaScript)"
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/buttonbox.js.page:14 C/colorbutton.js.page:13 C/fontchooserwidget.js.page:13 C/paned.js.page:13
+#: C/scrolledwindow.js.page:13 C/tooltip.js.page:14
+msgid "Meg Ford"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/buttonbox.js.page:19 C/buttonbox.py.page:20
+msgid "A container for arranging buttons"
+msgstr ""
+
+#. (itstool) path: page/title
+#. (itstool) path: steps/title
+#: C/buttonbox.js.page:22 C/buttonbox.py.page:23 C/tutorial.py.page:92
+msgid "ButtonBox"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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.js.page:24 C/buttonbox.py.page:25
+msgctxt "_"
+msgid "external ref='media/buttonbox_calculator.png' md5='ce0de08b7ac66f517290e33e6d33d508'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/buttonbox.js.page:25 C/buttonbox.py.page:26
+msgid "A calculator - the buttons are enclosed in horizontal ButtonBoxes."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/buttonbox.js.page:31
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class ButtonBoxExample {\n"
+"\n"
+"    // Create the application itthis\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsbuttonbox'\n"
+"        });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this.window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\n"
+"        // Create the application window\n"
+"        this.window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                    window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                    title: \"Calculator\",\n"
+"                                                    default_width: 350,\n"
+"                                                    default_height: 200,\n"
+"                                                    border_width: 10 });\n"
+"        this.entry = new Gtk.Entry();\n"
+"        this.entry.set_text('0');\n"
+"        // text aligned on the right\n"
+"        this.entry.set_alignment(1);\n"
+"        // the text in the entry cannot be modified by writing in it\n"
+"        this.entry.set_can_focus(false);\n"
+"\n"
+"        // a grid\n"
+"        this.grid = new Gtk.Grid();\n"
+"        this.grid.set_row_spacing(5);\n"
+"        \n"
+"        // to attach the entry\n"
+"        this.grid.attach(this.entry, 0, 0, 1, 1);\n"
+"        \n"
+"        // the labels for the buttons\n"
+"        this.buttons = [ 7, 8, 9, '/', 4, 5, 6, '*', 1, 2, 3, '-', 'C', 0, '=', '+' ];\n"
+"        \n"
+"        // each row is a ButtonBox, attached to the grid            \n"
+"        for (let i = 0; i &lt; 4; i++) {\n"
+"            this.hbox = Gtk.ButtonBox.new(Gtk.Orientation.HORIZONTAL);\n"
+"            this.hbox.set_spacing(5);\n"
+"            this.grid.attach(this.hbox, 0, i + 1, 1, 1);\n"
+"            // each ButtonBox has 4 buttons, connected to the callback function\n"
+"            for (let j= 0; j &lt; 4; j++) {\n"
+"                this.button = new Gtk.Button();\n"
+"                this.buttonLabel = (this.buttons[i * 4 + j].toString());\n"
+"                this.button.set_label(this.buttonLabel);\n"
+"                this.button.set_can_focus(false);\n"
+"                this.button.connect(\"clicked\", this._buttonClicked.bind(this));\n"
+"                this.hbox.add(this.button);\n"
+"            }\n"
+"        }\n"
+"            \n"
+"        // some variables for the calculations\n"
+"        this.firstNumber = 0;\n"
+"        this.secondNumber = 0;\n"
+"        this.counter = 0;\n"
+"        this.operation = \"\";\n"
+"\n"
+"        // add the grid to the window\n"
+"        this.window.add(this.grid);\n"
+"        this.window.show_all();\n"
+"    }\n"
+"\n"
+"    // callback function for all the buttons\n"
+"    _buttonClicked(button) {\n"
+"        this.button = button;\n"
+"        // for the operations\n"
+"        if (this.button.get_label() == '+') {\n"
+"            this.counter += 1 \n"
+"            if (this.counter &gt; 1)\n"
+"                this._doOperation();\n"
+"            this.entry.set_text('0');\n"
+"            this.operation = \"plus\";\n"
+"        }\n"
+"\n"
+"        else if (this.button.get_label() == '-') {\n"
+"            this.counter += 1;\n"
+"            if (this.counter &gt; 1)\n"
+"                this._doOperation();\n"
+"            this.entry.set_text('0');\n"
+"            this.operation = \"minus\";\n"
+"        }\n"
+"\n"
+"        else if (this.button.get_label() == '*') {\n"
+"            this.counter += 1; \n"
+"            if (this.counter &gt; 1)\n"
+"                this._doOperation();\n"
+"            this.entry.set_text('0');\n"
+"            this.operation = \"multiplication\";\n"
+"        }\n"
+"\n"
+"        else if (this.button.get_label() == '/') {\n"
+"            this.counter += 1 \n"
+"            if (this.counter &gt; 1)\n"
+"                this._doOperation();\n"
+"            this.entry.set_text('0');\n"
+"            this.operation = \"division\";\n"
+"        }\n"
+"\n"
+"        // for =\n"
+"        else if (this.button.get_label() == '=') {\n"
+"            this._doOperation();\n"
+"            this.entry.set_text(this.firstNumber.toString());\n"
+"            this.counter = 1;\n"
+"        }\n"
+"\n"
+"        // for Cancel\n"
+"        else if (this.button.get_label() == 'C') {\n"
+"            this.firstNumber = 0;\n"
+"            this.secondNumber = 0;\n"
+"            this.counter = 0;\n"
+"            this.entry.set_text('0');\n"
+"            this.operation = \"\";\n"
+"        }\n"
+"\n"
+"        // for a digit button\n"
+"        else {\n"
+"            this.newDigit = parseInt(this.button.get_label());\n"
+"            if (this.entry.get_text() == \"error\")\n"
+"                this.number = 0;\n"
+"            else\n"
+"                this.number = parseInt(this.entry.get_text());\n"
+"            this.number = this.number * 10 + this.newDigit;            \n"
+"            if (this.counter == 0)\n"
+"                this.firstNumber = this.number;\n"
+"            else\n"
+"                this.secondNumber = this.number;\n"
+"            this.entry.set_text(this.number.toString());\n"
+"        }\n"
+"     }\n"
+"\n"
+"     _doOperation() {\n"
+"        if (this.operation == \"plus\") {\n"
+"           this.firstNumber += this.secondNumber;\n"
+"        } else if (this.operation == \"minus\") {\n"
+"            this.firstNumber -= this.secondNumber;\n"
+"        } else if (this.operation == \"multiplication\") {\n"
+"            this.firstNumber *= this.secondNumber;\n"
+"        } else if (this.operation == \"division\") {\n"
+"            if (this.secondNumber != 0) {\n"
+"                this.firstNumber /= this.secondNumber;\n"
+"            } else {\n"
+"                this.firstNumber = 0; \n"
+"                this.secondNumber = 0;\n"
+"                this.counter = 0; \n"
+"                this.entry.set_text(\"error\");\n"
+"                this.operation = \"\";\n"
+"\n"
+"                return\n"
+"            }\n"
+"        } else {\n"
+"            this.firstNumber = 0;\n"
+"            this.secondNumber = 0;\n"
+"            this.counter = 0;\n"
+"            this.entry.set_text(\"error\");\n"
+"        }\n"
+"    }\n"
+"};\n"
+"\n"
+"// Run the application\n"
+"let app = new ButtonBoxExample();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/buttonbox.js.page:38
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.ButtonBox.html\";>GtkButtonBox</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.ButtonBox.html\";>GtkButtonBox</link>"
+
+#. (itstool) path: item/p
+#: C/buttonbox.js.page:39
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Box.html\";>GtkBox</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Box.html\";>GtkBox</link>"
+
+#. (itstool) path: item/p
+#: C/buttonbox.js.page:40
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Button.html\";>GtkButton</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Button.html\";>GtkButton</link>"
+
+#. (itstool) path: item/p
+#: C/buttonbox.js.page:41
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Entry.html\";>GtkEntry</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Entry.html\";>GtkEntry</link>"
+
+#. (itstool) path: item/p
+#: C/buttonbox.js.page:42
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html\";>GtkGrid</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html\";>GtkGrid</link>"
+
+#. (itstool) path: info/title
+#: C/buttonbox.py.page:8
+msgctxt "text"
+msgid "ButtonBox (Python)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/buttonbox.py.page:32
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/buttonbox.py.page:36
+msgid "Useful methods for a ButtonBox widget"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:38
+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 ""
+
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:39
+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 ""
+
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:40
+msgid ""
+"<code>set_child_non_homogeneous(button, is_non_homogeneous)</code> sets whether the child is exempted from "
+"homogeneous sizing. Default value is <code>False</code>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:41
+msgid "<code>set_spacing(spacing)</code> sets the spacing, in pixels, between the buttons of the box."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:49
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkButtonBox.html\";>GtkButtonBox</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkButtonBox.html\";>GtkButtonBox</link>"
+
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:50
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkBox.html\";>GtkBox</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkBox.html\";>GtkBox</link>"
+
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:52 C/entry.c.page:34
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkEntry.html\";>GtkEntry</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkEntry.html\";>GtkEntry</link>"
+
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:53 C/grid.c.page:36 C/radiobutton.c.page:37 C/spinbutton.c.page:40 
C/statusbar.c.page:40
+#: C/switch.c.page:37 C/togglebutton.c.page:40
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkGrid.html\";>GtkGrid</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkGrid.html\";>GtkGrid</link>"
+
+#. (itstool) path: info/title
+#: C/c.page:9
+msgctxt "link"
+msgid "C"
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/c.page:18
+msgid "Bastian Ilso"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/c.page:24
+msgid "Tutorials and code samples in C."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/c.page:27
+msgid "Platform Demos in C"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/c.page:31
+msgid "Prerequisites"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/c.page:33
+msgid ""
+"To compile these platform demos you will need a C compiler, for example <link 
href=\"https://gcc.gnu.org/\";>gcc</"
+"link>. You will also need GTK+ 3 including headers and pkg-config files. Linux distributions usually 
abstract GTK+ "
+"3 headers and pkg-config files into separate packages called <em>gtk3-devel</em>, <em>gtk3-dev</em> or 
similar."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/c.page:44
+msgid "Guidelines for new developers"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/c.page:46
+msgid ""
+"Beyond the prerequisites mentioned above, several tools has been developed to assist you further in 
developing "
+"your GNOME application. GNOME also recommends a specific coding style and conventions which this section 
will "
+"elaborate further upon."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/c.page:52
+msgid "Recommended tools"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/c.page:56
+msgid "<link href=\"https://wiki.gnome.org/Apps/Devhelp\";>DevHelp</link>: An API documentation browser for 
GNOME."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/c.page:60
+msgid ""
+"A GNOME IDE (Integrated Development Environment). An IDE can assist you in writing and debugging C code, 
for "
+"example <link href=\"https://wiki.gnome.org/Apps/Builder\";>Builder</link> or <link 
href=\"https://wiki.gnome.org/";
+"Apps/Anjuta\">Anjuta</link>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/c.page:66
+msgid "<link href=\"http://glade.gnome.org/\";>Glade</link>: A user interface designer for GTK+ Applications."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/c.page:70
+msgid ""
+"An IRC Client, for example <link href=\"https://wiki.gnome.org/Apps/Polari\";>Polari</link> or <link 
href=\"https://";
+"wiki.gnome.org/Apps/Empathy\">Empathy</link>. If you run into problems while following the beginner 
tutorials, "
+"join #gnome on <em>irc.gnome.org</em>."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/c.page:80
+msgid "Coding Style"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/c.page:82
+msgid ""
+"Most applications in the GNOME project is written in the <link href=\"http://en.wikipedia.org/wiki/";
+"Indent_style#GNU_style\">GNU style</link> of indentation. The tutorials and code examples presented are 
following "
+"this convention and you are recommended to do so too."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/c.page:89
+msgid "Executing Code"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/c.page:95
+msgid "Copy and paste the code into <var>filename</var>.c"
+msgstr ""
+
+#. (itstool) path: item/screen
+#: C/c.page:99
+#, no-wrap
+msgid "gcc <var>filename</var>.c `pkg-config --cflags --libs gtk+-3.0` -o <var>filename</var>"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/c.page:105
+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 ""
+
+#. (itstool) path: section/title
+#: C/c.page:117
+msgid "Widget Code Examples"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/checkbutton.c.page:8
+msgctxt "text"
+msgid "CheckButton (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/checkbutton.c.page:18
+msgid "Create widgets with a discrete ToggleButton"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/checkbutton.c.page:21 C/checkbutton.js.page:21 C/checkbutton.py.page:22 C/checkbutton.vala.page:21
+msgid "CheckButton"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:22 C/checkbutton.js.page:22 C/checkbutton.py.page:23 C/checkbutton.vala.page:22
+msgctxt "_"
+msgid "external ref='media/checkbutton.png' md5='7921a6812c87dd2b3781f4fad241e858'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/checkbutton.c.page:23 C/checkbutton.py.page:24 C/checkbutton.vala.page:23
+msgid "This CheckButton toggles the title."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/checkbutton.c.page:25
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/checkbutton.c.page:30
+msgid "<link href=\"http://developer.gnome.org/gtk3/3.2/GtkCheckButton.html\";>GtkCheckButton</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/checkbutton.js.page:8
+msgctxt "text"
+msgid "CheckButton (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/checkbutton.js.page:18
+msgid "A box which can be checked or unchecked"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/checkbutton.js.page:23
+msgid ""
+"This application has a CheckButton. Whether the box is checked dictates whether the window's title bar 
shows "
+"anything."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/checkbutton.js.page:24
+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 ""
+
+#. (itstool) path: section/title
+#: C/checkbutton.js.page:28 C/comboboxtext.js.page:30 C/combobox.js.page:33 C/guitar-tuner.js.page:55
+#: C/hello-world.js.page:53 C/hello-world.py.page:46 C/messagedialog.js.page:31 C/radiobutton.js.page:28
+#: C/scale.js.page:28 C/spinbutton.js.page:31 C/statusbar.js.page:28 C/switch.js.page:35 
C/textview.js.page:38
+#: C/togglebutton.js.page:28 C/treeview_simple_liststore.js.page:37 C/weatherAppMain.js.page:41
+msgid "Libraries to import"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:29
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/checkbutton.js.page:37 C/comboboxtext.js.page:37 C/combobox.js.page:42 C/messagedialog.js.page:39
+#: C/radiobutton.js.page:36 C/scale.js.page:36 C/spinbutton.js.page:39 C/statusbar.js.page:36 
C/switch.js.page:43
+#: C/textview.js.page:45 C/togglebutton.js.page:36 C/treeview_simple_liststore.js.page:46
+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 ""
+
+#. (itstool) path: section/title
+#: C/checkbutton.js.page:41 C/comboboxtext.js.page:41 C/combobox.js.page:46 C/messagedialog.js.page:43
+#: C/radiobutton.js.page:40 C/scale.js.page:40 C/spinbutton.js.page:43 C/statusbar.js.page:40 
C/switch.js.page:47
+#: C/textview.js.page:49 C/togglebutton.js.page:40 C/treeview_simple_liststore.js.page:50
+msgid "Creating the application window"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:42
+#, no-wrap
+msgid ""
+"\n"
+"class CheckButtonExample {\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"    this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI ();\n"
+"    }\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/checkbutton.js.page:66
+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 ""
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:67
+#, no-wrap
+msgid ""
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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 ""
+
+#. (itstool) path: section/p
+#: C/checkbutton.js.page:80
+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 ""
+
+#. (itstool) path: section/title
+#: C/checkbutton.js.page:84
+msgid "Creating the checkbutton"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:85
+#, 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\", this._toggledCB.bind(this));\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/checkbutton.js.page:96
+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 ""
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:97
+#, no-wrap
+msgid ""
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    }\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/checkbutton.js.page:102
+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 ""
+
+#. (itstool) path: section/title
+#: C/checkbutton.js.page:106
+msgid "Function which handles the checkbutton's toggling"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:107
+#, no-wrap
+msgid ""
+"\n"
+"    _toggledCB() {\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 ""
+
+#. (itstool) path: section/p
+#: C/checkbutton.js.page:120
+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 ""
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:121
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new CheckButtonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/checkbutton.js.page:126
+msgid "Finally, we create a new instance of the finished CheckButtonExample class, and set the application 
running."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:131
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class CheckButtonExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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\", this._toggledCB.bind(this));\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    }\n"
+"\n"
+"    _toggledCB() {\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 ""
+
+#. (itstool) path: section/title
+#: C/checkbutton.js.page:135 C/comboboxtext.js.page:176 C/combobox.js.page:233 C/messagedialog.js.page:189
+#: C/radiobutton.js.page:274 C/scale.js.page:208 C/spinbutton.js.page:199 C/statusbar.js.page:221
+#: C/switch.js.page:264 C/textview.js.page:248 C/togglebutton.js.page:153 
C/treeview_simple_liststore.js.page:272
+msgid "In-depth documentation"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/checkbutton.js.page:139
+msgid "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.CheckButton.html\";>Gtk.CheckButton</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/checkbutton.py.page:8
+msgctxt "text"
+msgid "CheckButton (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/checkbutton.py.page:19
+msgid "A toggle button in a window"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/checkbutton.py.page:31
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/checkbutton.py.page:36
+msgid "Useful methods for a CheckButton widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/checkbutton.py.page:37
+msgid ""
+"In line 17 the <code>\"toggled\"</code> signal is connected to the callback function 
<code>toggled_cb()</code> "
+"using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See <link 
xref="
+"\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/checkbutton.py.page:47 C/togglebutton.py.page:44
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToggleButton.html\";>GtkToggleButton</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/checkbutton.py.page:48
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCheckButton.html\";>GtkCheckButton</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/checkbutton.vala.page:8
+msgctxt "text"
+msgid "CheckButton (Vala)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/checkbutton.vala.page:18
+msgid "Create widgets with a discrete toggle button"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/checkbutton.vala.page:25
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/checkbutton.vala.page:30
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CheckButton.html\";>Gtk.CheckButton</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/colorbutton.js.page:8
+msgctxt "text"
+msgid "ColorButton (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/colorbutton.js.page:18 C/colorbutton.py.page:19 C/colorbutton.vala.page:20
+msgid "A button to launch a color selection dialog"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/colorbutton.js.page:21 C/colorbutton.py.page:22 C/colorbutton.vala.page:23
+msgid "ColorButton"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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.js.page:22 C/colorbutton.py.page:23 C/colorbutton.vala.page:24
+msgctxt "_"
+msgid "external ref='media/colorbutton.png' md5='904539d26fe367bf99f9a0961cfc9a03'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/colorbutton.js.page:23 C/colorbutton.py.page:24
+msgid ""
+"This ColorButton launches a color selection dialog and prints in the terminal the RGB values of the color 
selected."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/colorbutton.js.page:29
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gdk = '3.0';\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gdk = imports.gi.Gdk;\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class ColorbuttonExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application ({ application_id: 'org.example.jscolorbutton' });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this.window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\n"
+"\n"
+"        // Create the application window\n"
+"        this.window = new Gtk.ApplicationWindow ({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"ColorButton\",\n"
+"                                                   default_width: 150,\n"
+"                                                   default_height: 50,\n"
+"                                                   border_width: 10 });\n"
+"\n"
+"        this.button = new Gtk.ColorButton();\n"
+"        this.color = new Gdk.RGBA();\n"
+"        this.color.red = 0.0;\n"
+"        this.color.green = 0.0;\n"
+"        this.color.blue = 1.0;\n"
+"        this.color.alpha = 0.5;\n"
+"        this.button.set_rgba(this.color);\n"
+"        this.button.connect(\"color-set\", this.onColorChosen.bind(this));\n"
+"        this.label = new Gtk.Label();\n"
+"        this.label.set_text(\"Click to choose a color\");\n"
+"\n"
+"        let grid = new Gtk.Grid();\n"
+"        grid.attach(this.button, 0, 0, 2, 1);\n"
+"        grid.attach(this.label, 0, 1, 2, 1);\n"
+"        this.window.add(grid);\n"
+"        this.window.show_all();\n"
+"    }\n"
+"\n"
+"    onColorChosen() {\n"
+"        let colorName = this.color.to_string();\n"
+"        this.label.set_text(\"You chose the color \" + colorName);\n"
+"    }\n"
+"};\n"
+"\n"
+"// Run the application\n"
+"let app = new ColorbuttonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/colorbutton.js.page:36
+msgid "<link 
href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.ColorButton.html\";>GtkColorButton</link>"
+msgstr "<link 
href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.ColorButton.html\";>GtkColorButton</link>"
+
+#. (itstool) path: item/p
+#: C/colorbutton.js.page:37 C/colorbutton.py.page:45
+msgid "<link href=\"http://developer.gnome.org/gdk3/stable/gdk3-RGBA-Colors.html\";>RGBA Colors</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/colorbutton.py.page:8
+msgctxt "text"
+msgid "ColorButton (Python)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/colorbutton.py.page:30
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import Gdk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/colorbutton.py.page:34
+msgid "Useful methods for a ColorButton widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/colorbutton.py.page:35
+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 ""
+
+#. (itstool) path: section/p
+#: C/colorbutton.py.page:36
+msgid ""
+"In line 23 the <code>\"color-set\"</code> signal is connected to the callback function 
<code>on_color_chosen()</"
+"code> using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See 
<link "
+"xref=\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/colorbutton.py.page:43
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkColorButton.html\";>GtkColorButton</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/colorbutton.py.page:44
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkColorChooser.html\";>GtkColorChooser</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/colorbutton.vala.page:8
+msgctxt "text"
+msgid "ColorButton (Vala)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/colorbutton.vala.page:25
+msgid "RGB values of the selected color are shown in the label."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/colorbutton.vala.page:27
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/colorbutton.vala.page:32
+msgid "<link href=\"http://valadoc.org/gtk+-3.0/Gtk.ColorButton.html\";>Gtk.ColorButton</link>"
+msgstr "<link href=\"http://valadoc.org/gtk+-3.0/Gtk.ColorButton.html\";>Gtk.ColorButton</link>"
+
+#. (itstool) path: item/p
+#: C/colorbutton.vala.page:33
+msgid "<link href=\"http://valadoc.org/gdk-3.0/Gdk.RGBA.html\";>Gdk.RGBA</link>"
+msgstr "<link href=\"http://valadoc.org/gdk-3.0/Gdk.RGBA.html\";>Gdk.RGBA</link>"
+
+#. (itstool) path: info/title
+#: C/comboboxtext.js.page:8
+msgctxt "text"
+msgid "ComboBoxText (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/comboboxtext.js.page:20
+msgid "A text-only drop-down menu"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/comboboxtext.js.page:23
+msgid "ComboBoxText"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:24 C/combobox.c.page:26 C/combobox.py.page:24 C/combobox.vala.page:22
+msgctxt "_"
+msgid "external ref='media/combobox.png' md5='ab9e91bc1a58fe866cb00dd52159251d'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/comboboxtext.js.page:25
+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 ""
+
+#. (itstool) path: note/p
+#: C/comboboxtext.js.page:26
+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 ""
+
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:31 C/textview.js.page:39
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:42
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/comboboxtext.js.page:66 C/messagedialog.js.page:70
+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 ""
+
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:67
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/comboboxtext.js.page:79 C/combobox.js.page:83 C/messagedialog.js.page:84 C/radiobutton.js.page:79
+#: C/scale.js.page:78 C/spinbutton.js.page:81 C/switch.js.page:88 C/textview.js.page:88 
C/togglebutton.js.page:81
+#: C/treeview_simple_liststore.js.page:90
+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 ""
+
+#. (itstool) path: section/title
+#: C/comboboxtext.js.page:83
+msgid "Creating the ComboBoxText"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:84
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/comboboxtext.js.page:97
+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 ""
+
+#. (itstool) path: section/p
+#: C/comboboxtext.js.page:98
+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 ""
+
+#. (itstool) path: note/p
+#: C/comboboxtext.js.page:99
+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 ""
+
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:101
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/comboboxtext.js.page:109
+msgid "Finally, we add the ComboBoxText to the window, and tell the window to show itself and the widget 
inside it."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/comboboxtext.js.page:113 C/combobox.js.page:170 C/radiobutton.js.page:181
+msgid "Function which handles your selection"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:114
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/comboboxtext.js.page:123
+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 ""
+
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:125
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/comboboxtext.js.page:147
+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 ""
+
+#. (itstool) path: note/p
+#: C/comboboxtext.js.page:148
+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 ""
+
+#. (itstool) path: section/p
+#: C/comboboxtext.js.page:149 C/combobox.js.page:206
+msgid ""
+"After we create the MessageDialog, we connect its response signal to the _onDialogResponse function, then 
tell it "
+"to show itself."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:151
+#, no-wrap
+msgid ""
+"\n"
+"    _onDialogResponse: function () {\n"
+"\n"
+"        this._popUp.destroy ();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/comboboxtext.js.page:160 C/combobox.js.page:217
+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 ""
+
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:162
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new ComboBoxTextExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/comboboxtext.js.page:167
+msgid "Finally, we create a new instance of the finished ComboBoxTextExample class, and set the application 
running."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:172
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class ComboBoxTextExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present ();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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', this._onComboChanged.bind(this));\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"
+"    _onComboChanged() {\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', this._onDialogResponse.bind(this));\n"
+"\n"
+"            // Show the messagedialog\n"
+"            this._popUp.show();\n"
+"        }\n"
+"\n"
+"    }\n"
+"\n"
+"    _onDialogResponse() {\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 ""
+
+#. (itstool) path: item/p
+#: C/comboboxtext.js.page:183
+msgid "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ComboBoxText.html\";>Gtk.ComboBoxText</link>"
+msgstr "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ComboBoxText.html\";>Gtk.ComboBoxText</link>"
+
+#. (itstool) path: item/p
+#: C/comboboxtext.js.page:184 C/combobox.js.page:244 C/entry.js.page:33 C/messagedialog.js.page:198
+msgid "<link 
href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.MessageDialog.html\";>Gtk.MessageDialog</link>"
+msgstr "<link 
href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.MessageDialog.html\";>Gtk.MessageDialog</link>"
+
+#. (itstool) path: info/title
+#: C/combobox.c.page:8
+msgctxt "text"
+msgid "ComboBox (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/combobox.c.page:22 C/combobox.py.page:20 C/combobox.vala.page:18 C/combobox_multicolumn.py.page:19
+#: C/combobox_multicolumn.vala.page:19
+msgid "A widget used to choose from a list of items"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/combobox.c.page:25 C/combobox.js.page:25 C/combobox.vala.page:21
+msgid "ComboBox"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/combobox.c.page:27 C/combobox.vala.page:23
+msgid "This ComboBox prints to the terminal when you change your selection."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/combobox.c.page:29
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"/* This is the callback function. It is a handler function which reacts to the\n"
+" * signal. In this case, if the row selected is not the first one of the\n"
+" * ComboBox, we write its value in the terminal for the user.\n"
+" */\n"
+"static void\n"
+"on_changed (GtkComboBox *widget,\n"
+"            gpointer   user_data)\n"
+"{\n"
+"  GtkComboBox *combo_box = widget;\n"
+"\n"
+"  if (gtk_combo_box_get_active (combo_box) != 0) {\n"
+"    gchar *distro = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT(combo_box));\n"
+"    g_print (\"You chose %s\\n\", distro);\n"
+"    g_free (distro);\n"
+"  }\n"
+"\n"
+"}\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  gint i;\n"
+"  GtkWidget *view;\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *combo_box;\n"
+"\n"
+"  /* Create a window with a title, border width, and a default size. Setting the\n"
+"   * size to -1 means to use the \"natural\" default size.\n"
+"   * (the size request of the window)\n"
+"   */\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), 200, -1);\n"
+"  gtk_container_set_border_width (GTK_CONTAINER (window), 10);\n"
+"\n"
+"\n"
+"  /* Create the combo box and append your string values to it. */\n"
+"  combo_box = gtk_combo_box_text_new ();\n"
+"  const char *distros[] = {\"Select distribution\", \"Fedora\", \"Mint\", \"Suse\"};\n"
+"\n"
+" \n"
+"  /* G_N_ELEMENTS is a macro which determines the number of elements in an array.*/ \n"
+"  for (i = 0; i &lt; G_N_ELEMENTS (distros); i++){\n"
+"  \tgtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), distros[i]);\n"
+"  }\n"
+"\n"
+"  /* Choose to set the first row as the active one by default, from the beginning */\n"
+"  gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), 0);\n"
+"\n"
+"  /* Connect the signal emitted when a row is selected to the appropriate\n"
+"   * callback function.\n"
+"   */\n"
+"  g_signal_connect (combo_box,\n"
+"                    \"changed\",\n"
+"                    G_CALLBACK (on_changed),\n"
+"                    NULL);\n"
+"\n"
+"  /* Add it to the window */\n"
+"  gtk_container_add (GTK_CONTAINER (window), combo_box);\n"
+"\n"
+"  gtk_widget_show_all (window);\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 ""
+
+#. (itstool) path: item/p
+#: C/combobox.c.page:37
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkComboBoxText.html\";>GtkComboBoxText</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkComboBoxText.html\";>GtkComboBoxText</link>"
+
+#. (itstool) path: info/title
+#: C/combobox.js.page:8
+msgctxt "text"
+msgid "ComboBox (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/combobox.js.page:22
+msgid "A customizable drop-down menu"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:26 C/combobox_multicolumn.py.page:23 C/combobox_multicolumn.vala.page:23
+msgctxt "_"
+msgid "external ref='media/combobox_multicolumn.png' md5='43f16648fb11ebc7d2f70825ed0f63b3'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/combobox.js.page:27
+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 ""
+
+#. (itstool) path: page/p
+#: C/combobox.js.page:28
+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 ""
+
+#. (itstool) path: note/p
+#: C/combobox.js.page:29
+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 ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:34
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:47
+#, no-wrap
+msgid ""
+"\n"
+"class ComboBoxExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present ();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI ();\n"
+"    }\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:70
+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 ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:71
+#, no-wrap
+msgid ""
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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 ""
+
+#. (itstool) path: section/title
+#: C/combobox.js.page:87 C/treeview_simple_liststore.js.page:94
+msgid "Creating the ListStore"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:88
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:95
+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=\"https://";
+"developer.gnome.org/gtk3/3.4/gtk3-Stock-Items.html\">stock Gtk icons</link>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:96
+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 ""
+
+#. (itstool) path: item/p
+#: C/combobox.js.page:98 C/treeview_simple_liststore.js.page:107
+msgid "<file>GObject.TYPE_BOOLEAN</file> -- True or false"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/combobox.js.page:99 C/treeview_simple_liststore.js.page:108
+msgid "<file>GObject.TYPE_FLOAT</file> -- A floating point number (one with a decimal point)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/combobox.js.page:100 C/treeview_simple_liststore.js.page:109
+msgid "<file>GObject.TYPE_STRING</file> -- A string of letters and numbers"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/combobox.js.page:102 C/treeview_simple_liststore.js.page:113
+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 ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:104
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:120
+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 ""
+
+#. (itstool) path: note/p
+#: C/combobox.js.page:121
+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 ""
+
+#. (itstool) path: section/title
+#: C/combobox.js.page:125
+msgid "Creating the ComboBox"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:126
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the combobox\n"
+"        this._comboBox = new Gtk.ComboBox({\n"
+"            model: this._listStore});\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:131
+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 ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:132
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:145
+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 ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:146
+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 ""
+
+#. (itstool) path: note/p
+#: C/combobox.js.page:147
+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 ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:149
+#, 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', this._onComboChanged.bind(this));\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:156
+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 ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:158
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:166
+msgid "Finally, we add the ComboBox to the window, and tell the window to show itself and everything inside 
it."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:171
+#, no-wrap
+msgid ""
+"\n"
+"    _selected() {\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 ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:180
+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 ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:182
+#, 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', this._onDialogResponse.bind(this));\n"
+"\n"
+"            // Show the messagedialog\n"
+"            this._popUp.show();\n"
+"        }\n"
+"\n"
+"    }\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:204
+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 ""
+
+#. (itstool) path: note/p
+#: C/combobox.js.page:205
+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 ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:208
+#, no-wrap
+msgid ""
+"\n"
+"    _onDialogResponse() {\n"
+"\n"
+"        this._popUp.destroy ();\n"
+"\n"
+"    }\n"
+"\n"
+"};\n"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:219
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new ComboBoxExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:224
+msgid "Finally, we create a new instance of the finished ComboBoxExample class, and set the application 
running."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:229
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class ComboBoxExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present ();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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', this._onComboChanged.bind(this));\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"
+"    _onComboChanged() {\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', this._onDialogResponse.bind(this));\n"
+"\n"
+"            // Show the messagedialog\n"
+"            this._popUp.show();\n"
+"        }\n"
+"\n"
+"    }\n"
+"\n"
+"    _onDialogResponse() {\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 ""
+
+#. (itstool) path: item/p
+#: C/combobox.js.page:240
+msgid ""
+"<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.CellRendererPixbuf.html\";>Gtk.CellRendererPixbuf</"
+"link>"
+msgstr ""
+"<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.CellRendererPixbuf.html\";>Gtk.CellRendererPixbuf</"
+"link>"
+
+#. (itstool) path: item/p
+#: C/combobox.js.page:241 C/treeview_simple_liststore.js.page:279
+msgid ""
+"<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.CellRendererText.html\";>Gtk.CellRendererText</link>"
+msgstr ""
+"<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.CellRendererText.html\";>Gtk.CellRendererText</link>"
+
+#. (itstool) path: item/p
+#: C/combobox.js.page:242
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ComboBox.html\";>Gtk.ComboBox</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ComboBox.html\";>Gtk.ComboBox</link>"
+
+#. (itstool) path: item/p
+#: C/combobox.js.page:243 C/treeview_simple_liststore.js.page:280
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ListStore.html\";>Gtk.ListStore</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ListStore.html\";>Gtk.ListStore</link>"
+
+#. (itstool) path: item/p
+#: C/combobox.js.page:245 C/treeview_simple_liststore.js.page:281
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeIter.html\";>Gtk.TreeIter</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeIter.html\";>Gtk.TreeIter</link>"
+
+#. (itstool) path: info/title
+#: C/combobox.py.page:8 C/combobox_multicolumn.py.page:8
+msgctxt "text"
+msgid "ComboBox (Python)"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/combobox.py.page:23
+msgid "ComboBox (one column)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/combobox.py.page:25 C/combobox_multicolumn.py.page:24 C/combobox_multicolumn.vala.page:24
+msgid "This ComboBox prints to the terminal your selection when you change it."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/combobox.py.page:31
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"distros = [[\"Select distribution\"], [\"Fedora\"], [\"Mint\"], [\"Suse\"]]\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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\n"
+"        # 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\n"
+"        # 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"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/combobox.py.page:35 C/combobox_multicolumn.py.page:35
+msgid "Useful methods for a ComboBox widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/combobox.py.page:36 C/combobox_multicolumn.py.page:36
+msgid ""
+"The ComboBox widget is designed around a <em>Model/View/Controller</em> design: the <em>Model</em> stores 
the "
+"data; the <em>View</em> gets change notifications and displays the content of the model; the 
<em>Controller</em>, "
+"finally, changes the state of the model and notifies the view of these changes. For more information and 
for a "
+"list of useful methods for ComboBox see <link xref=\"model-view-controller.py\"/>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/combobox.py.page:37
+msgid ""
+"In line 35 the <code>\"changed\"</code> signal is connected to the callback function 
<code>on_changed()</code> "
+"using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See <link 
xref="
+"\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/combobox.py.page:45 C/combobox_multicolumn.py.page:44 C/model-view-controller.py.page:190
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkComboBox.html\";>GtkComboBox</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkComboBox.html\";>GtkComboBox</link>"
+
+#. (itstool) path: item/p
+#: C/combobox.py.page:46 C/combobox_multicolumn.py.page:45 C/treeview_advanced_liststore.py.page:46
+#: C/treeview_simple_liststore.py.page:47
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkListStore.html\";>GtkListStore</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkListStore.html\";>GtkListStore</link>"
+
+#. (itstool) path: item/p
+#: C/combobox.py.page:47 C/combobox_multicolumn.py.page:46 C/treeview_advanced_liststore.py.page:47
+#: C/treeview_cellrenderertoggle.py.page:47 C/treeview_simple_liststore.py.page:48 
C/treeview_treestore.py.page:47
+msgid "<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRendererText.html\";>GtkCellRendererText</link>"
+msgstr "<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRendererText.html\";>GtkCellRendererText</link>"
+
+#. (itstool) path: item/p
+#: C/combobox.py.page:48
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellLayout.html\";>GtkCellLayout</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellLayout.html\";>GtkCellLayout</link>"
+
+#. (itstool) path: item/p
+#: C/combobox.py.page:49 C/combobox_multicolumn.py.page:49 C/treeview_advanced_liststore.py.page:49
+#: C/treeview_simple_liststore.py.page:50
+msgid ""
+"<link href=\"http://git.gnome.org/browse/pygobject/tree/gi/overrides/Gtk.py\";>pygobject - Python bindings 
for "
+"GObject Introspection</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/combobox.vala.page:8 C/combobox_multicolumn.vala.page:8
+msgctxt "text"
+msgid "ComboBox (Vala)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/combobox.vala.page:25
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/combobox.vala.page:30 C/treeview_simple_liststore.vala.page:33
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ListStore.html\";>Gtk.ListStore</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ListStore.html\";>Gtk.ListStore</link>"
+
+#. (itstool) path: item/p
+#: C/combobox.vala.page:31
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ComboBox.html\";>Gtk.ComboBox</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ComboBox.html\";>Gtk.ComboBox</link>"
+
+#. (itstool) path: item/p
+#: C/combobox.vala.page:32
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellRendererText.html\";>Gtk.CellRendererText</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellRendererText.html\";>Gtk.CellRendererText</link>"
+
+#. (itstool) path: item/p
+#: C/combobox.vala.page:33
+msgid "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellLayout.set_attributes.html\";>set_attributes</link>"
+msgstr "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellLayout.set_attributes.html\";>set_attributes</link>"
+
+#. (itstool) path: page/title
+#: C/combobox_multicolumn.py.page:22 C/combobox_multicolumn.vala.page:22
+msgid "ComboBox (two columns)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/combobox_multicolumn.py.page:30
+#, 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"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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\n"
+"        # 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"
+"            print(\"You chose \" + str(actions[combo.get_active()][0]) + \"\\n\")\n"
+"        return True\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/combobox_multicolumn.py.page:37
+msgid ""
+"In line 45 the <code>\"changed\"</code> signal is connected to the callback function 
<code>on_changed()</code> "
+"using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See <link 
xref="
+"\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/combobox_multicolumn.py.page:47
+msgid ""
+"<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRendererPixbuf.html\";>GtkCellRendererPixbuf</link>"
+msgstr ""
+"<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRendererPixbuf.html\";>GtkCellRendererPixbuf</link>"
+
+#. (itstool) path: item/p
+#: C/combobox_multicolumn.py.page:48 C/combobox_multicolumn.vala.page:42 C/toolbar.py.page:58
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/gtk3-Stock-Items.html\";>Stock Items</link>"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/combobox_multicolumn.vala.page:30
+#, no-wrap
+msgid ""
+"class MyWindow : Gtk.ApplicationWindow {\n"
+"\n"
+"\tstring[] file = {\"Select\", \"New\", \"Open\", \"Save\"};\n"
+"\tstring[] stock_item = {\"\",\"gtk-new\", \"gtk-open\", \"gtk-save\"};\n"
+"\n"
+"\tenum Column {\n"
+"\t\tFILE,\n"
+"\t\tSTOCK_ITEM\t\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 (2, typeof (string), typeof (string));\n"
+"\n"
+"\t\tfor (int i = 0; i &lt; file.length; i++){\n"
+"\t\t\tGtk.TreeIter iter;\n"
+"\t\t\tliststore.append (out iter);\n"
+"\t\t\tliststore.set (iter, Column.FILE, file[i]);\n"
+"\t\t\tliststore.set (iter, Column.STOCK_ITEM, stock_item[i]);\n"
+"\t\t}\n"
+"\n"
+"\t\tGtk.ComboBox combobox = new Gtk.ComboBox.with_model (liststore);\n"
+"\n"
+"\t\t/* CellRenderers render the data. */\n"
+"\t\tGtk.CellRendererText cell = new Gtk.CellRendererText ();\n"
+"\t\tGtk.CellRendererPixbuf cell_pb = new Gtk.CellRendererPixbuf ();\n"
+"\t\t\n"
+"                /* we pack the cell into the beginning of the combobox, allocating\n"
+"\t\t * no more space than needed;\n"
+"\t\t * first the image, then the text;\n"
+"\t\t * note that it does not matter in which order they are in the model,\n"
+"\t\t * the visualization is decided by the order of the cellrenderers\n"
+"\t\t */\n"
+"\t\tcombobox.pack_start (cell_pb, false);\n"
+"\t\tcombobox.pack_start (cell, false);\n"
+"\n"
+"\t\t/* associate a property of the cellrenderer to a column in the model\n"
+"\t\t * used by the combobox\n"
+"\t\t */\n"
+"\t\tcombobox.set_attributes (cell_pb, \"stock_id\", Column.STOCK_ITEM);\n"
+"\t\tcombobox.set_attributes (cell, \"text\", Column.FILE);\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"
+"\tvoid item_changed (Gtk.ComboBox combo) {\n"
+"\t\tif (combo.get_active () !=0) {\n"
+"\t\t\tprint (\"You chose \" + file [combo.get_active ()] +\"\\n\");\n"
+"\t\t}\n"
+"\t}\n"
+"}\n"
+"\n"
+"class MyApplication : Gtk.Application {\n"
+"        protected override void activate () {\n"
+"                new MyWindow (this).show ();\n"
+"        }\n"
+"}\n"
+"\n"
+"int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/combobox_multicolumn.vala.page:38
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ComboBox.html\";>GtkComboBox</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ComboBox.html\";>GtkComboBox</link>"
+
+#. (itstool) path: item/p
+#: C/combobox_multicolumn.vala.page:39
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ListStore.html\";>GtkListStore</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ListStore.html\";>GtkListStore</link>"
+
+#. (itstool) path: item/p
+#: C/combobox_multicolumn.vala.page:40
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellRendererText.html\";>GtkCellRendererText</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellRendererText.html\";>GtkCellRendererText</link>"
+
+#. (itstool) path: item/p
+#: C/combobox_multicolumn.vala.page:41
+msgid "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellRendererPixbuf.html\";>GtkCellRendererPixbuf</link>"
+msgstr "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellRendererPixbuf.html\";>GtkCellRendererPixbuf</link>"
+
+#. (itstool) path: info/title
+#: C/cpp.page:7
+msgctxt "link"
+msgid "C++"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/cpp.page:16
+msgid "Code samples and platform demos in C++"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/cpp.page:21 C/js.page:36 C/py.page:39 C/vala.page:30
+msgid "Examples of applications"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/dialog.c.page:8
+msgctxt "text"
+msgid "Dialog (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/dialog.c.page:20 C/dialog.js.page:18 C/dialog.py.page:20 C/dialog.vala.page:18
+msgid "A popup window"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/dialog.c.page:23 C/dialog.js.page:21 C/dialog.py.page:23 C/dialog.vala.page:21
+msgid "Dialog"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:25 C/dialog.js.page:22 C/dialog.py.page:24 C/dialog.vala.page:22
+msgctxt "_"
+msgid "external ref='media/dialog.png' md5='c90a33386a600e892fe623d4072c8c38'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/dialog.c.page:26
+msgid "A dialog window that pops up when a button is pressed."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/dialog.c.page:28
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/dialog.c.page:36
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkDialog.html\";>GtkDialog</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkDialog.html\";>GtkDialog</link>"
+
+#. (itstool) path: item/p
+#: C/dialog.c.page:37 C/radiobutton.c.page:36 C/spinbutton.c.page:38 C/switch.c.page:35
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkLabel.html\";>GtkLabel</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkLabel.html\";>GtkLabel</link>"
+
+#. (itstool) path: info/title
+#: C/dialog.js.page:8
+msgctxt "text"
+msgid "Dialog (JavaScript)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/dialog.js.page:23
+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 ""
+
+#. (itstool) path: page/code
+#: C/dialog.js.page:25
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class DialogExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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\", this._createDialog.bind(this));\n"
+"\n"
+"                // Show the window and all child widgets\n"
+"                this._window.show_all();\n"
+"    }\n"
+"\n"
+"    _createDialog() {\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 = 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\", this._OKHandler.bind(this));\n"
+"\n"
+"        this._dialog.show_all();\n"
+"    }\n"
+"\n"
+"    _OKHandler(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 ""
+
+#. (itstool) path: item/p
+#: C/dialog.js.page:32
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Dialog.html\";>Gtk.Dialog</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Dialog.html\";>Gtk.Dialog</link>"
+
+#. (itstool) path: info/title
+#: C/dialog.py.page:8
+msgctxt "text"
+msgid "Dialog (Python)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/dialog.py.page:25
+msgid "A dialog with the response signal connected to a callback function."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/dialog.py.page:32
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # construct a window (the parent window)\n"
+"\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\n"
+"        # 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\n"
+"    # 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\n"
+"        # 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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/dialog.py.page:37
+msgid "Useful methods for a Dialog widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/dialog.py.page:38
+msgid ""
+"In line 16 the signal <code>\"clicked\"</code> is connected to the callback function 
<code>on_button_click()</"
+"code> using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See 
<link "
+"xref=\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/dialog.py.page:40
+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 ""
+
+#. (itstool) path: item/p
+#: C/dialog.py.page:41
+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 ""
+
+#. (itstool) path: item/p
+#: C/dialog.py.page:51 C/messagedialog.py.page:60
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkDialog.html\";>GtkDialog</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkDialog.html\";>GtkDialog</link>"
+
+#. (itstool) path: info/title
+#: C/dialog.vala.page:8
+msgctxt "text"
+msgid "Dialog (Vala)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/dialog.vala.page:23
+msgid "A dialog with the response signal hooked up to a callback function."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/dialog.vala.page:25
+#, 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 constructor 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 ""
+
+#. (itstool) path: item/p
+#: C/dialog.vala.page:32
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.html\";>Gtk.Dialog</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.html\";>Gtk.Dialog</link>"
+
+#. (itstool) path: item/p
+#: C/dialog.vala.page:33
+msgid ""
+"<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.Dialog.with_buttons.html\";>Gtk.Dialog.with_buttons</link>"
+msgstr ""
+"<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.Dialog.with_buttons.html\";>Gtk.Dialog.with_buttons</link>"
+
+#. (itstool) path: item/p
+#: C/dialog.vala.page:34 C/label.vala.page:33
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Label.html\";>Gtk.Label</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Label.html\";>Gtk.Label</link>"
+
+#. (itstool) path: item/p
+#: C/dialog.vala.page:35
+msgid "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.get_content_area.html\";>get_content_area</link>"
+msgstr "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.get_content_area.html\";>get_content_area</link>"
+
+#. (itstool) path: info/title
+#: C/entry.c.page:8
+msgctxt "text"
+msgid "Entry (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/entry.c.page:18 C/entry.py.page:25 C/entry.vala.page:18
+msgid "A single line text entry field"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/entry.c.page:21 C/entry.js.page:21 C/entry.py.page:28 C/entry.vala.page:21
+msgid "Entry"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:23 C/entry.js.page:22 C/entry.py.page:29 C/entry.vala.page:22
+msgctxt "_"
+msgid "external ref='media/entry.png' md5='8a828cffdcbaa4bad83342e109f28cc8'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/entry.c.page:24 C/entry.vala.page:23
+msgid "This application greets you in the terminal."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/entry.c.page:26
+#, 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 ""
+
+#. (itstool) path: info/title
+#: C/entry.js.page:8
+msgctxt "text"
+msgid "Entry (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/entry.js.page:18
+msgid "A single-line text entry field"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/entry.js.page:23
+msgid "This application greets you by name through a pop-up window."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/entry.js.page:25
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class EntryExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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\", this._hello.bind(this));\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    }\n"
+"\n"
+"    _hello() {\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\", this._okClicked.bind(this));\n"
+"    }\n"
+"\n"
+"    _okClicked() {\n"
+"        this._greeter.destroy();\n"
+"    }\n"
+"\n"
+"};\n"
+"\n"
+"// Run the application\n"
+"let app = new EntryExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/entry.js.page:32
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Entry.html\";>Gtk.Entry</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/entry.py.page:8
+msgctxt "text"
+msgid "Entry (Python)"
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/entry.py.page:21 C/label.py.page:22 C/model-view-controller.py.page:16 C/properties.py.page:16
+#: C/signals-callbacks.py.page:16 C/strings.py.page:16 C/textview.py.page:16 C/toolbar_builder.py.page:28
+msgid "Sebastian Pölsterl"
+msgstr "Sebastian Pölsterl"
+
+#. (itstool) path: credit/years
+#: C/entry.py.page:23 C/index.page:20 C/model-view-controller.py.page:18 C/properties.py.page:18
+#: C/signals-callbacks.py.page:18 C/strings.py.page:18 C/textview.py.page:18 C/toolbar_builder.py.page:30
+msgid "2011"
+msgstr "2011"
+
+#. (itstool) path: page/p
+#: C/entry.py.page:30
+msgid "This application greets you in the terminal with the name you provide."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/entry.py.page:36
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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"
+"        name = entry.get_text()\n"
+"        # print it in a nice form in the terminal\n"
+"        print(\"Hello \" + name + \"!\")\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/entry.py.page:40
+msgid "Useful methods for an Entry widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/entry.py.page:41
+msgid ""
+"In line 14 the signal <code>\"activate\"</code> is connected to the callback function 
<code>cb_activate()</code> "
+"using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See <link 
xref="
+"\"signals-callbacks.py\"/> for a more detailed explanation. 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 activatable icon); <code>\"icon-release\"</code> (emitted on the button release from a 
mouse "
+"click over an activatable 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 ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:43
+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 ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:44
+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 ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:45
+msgid "<code>get_text_length()</code> is self-explanatory."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:46
+msgid "<code>get_text_area()</code> gets the area where the entry's text is drawn."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:47
+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 character. The latter method is reversed by 
<code>unset_invisible_char()</code>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:48
+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 ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:49
+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 ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:50
+msgid "To set a frame around the entry: <code>set_has_frame(True)</code>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:51
+msgid ""
+"<code>set_placeholder_text(\"some text\")</code> sets the text to be displayed in the entry when it is 
empty and "
+"unfocused."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:52
+msgid "<code>set_overwrite_mode(True)</code> and <code>set_overwrite_mode(False)</code> are 
self-explanatory."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:53
+msgid "If we have <code>set_editable(False)</code> the user cannot edit the text in the widget."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:54
+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 ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:55
+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 ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:56
+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 ""
+
+#. (itstool) path: item/p
+#: C/entry.py.page:64
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkEntry.html\";>GtkEntry</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkEntry.html\";>GtkEntry</link>"
+
+#. (itstool) path: info/title
+#: C/entry.vala.page:8
+msgctxt "text"
+msgid "Entry (Vala)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/entry.vala.page:25
+#, 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 creates and runs the application. */\n"
+"int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/entry.vala.page:30
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Entry.html\";>Gtk.Entry</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Entry.html\";>Gtk.Entry</link>"
+
+#. (itstool) path: info/title
+#: C/filechooserdialog.py.page:8
+msgctxt "text"
+msgid "FileChooserDialog (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/filechooserdialog.py.page:22
+msgid "A dialog suitable for \"Open\" and \"Save\" commands"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/filechooserdialog.py.page:25 C/filechooserdialog.vala.page:24
+msgid "FileChooserDialog"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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
+msgctxt "_"
+msgid "external ref='media/filechooserdialog_save.png' md5='3a7a3b71b9d3a36066857843b68ff27f'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/filechooserdialog.py.page:27
+msgid ""
+"This FileChooserDialog saves a text document, which can be opened or written from scratch in a TextView 
(see "
+"below)."
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:28
+msgctxt "_"
+msgid "external ref='media/filechooserdialog_menu.png' md5='8a75f04127a70eba0ed68a9eb1d3bbca'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/filechooserdialog.py.page:29
+msgid "It is also possible to call a FileChooserDialog to open a new document."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/filechooserdialog.py.page:34
+msgid "Steps to recreate the example"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:36
+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 ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:37
+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 ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:38
+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 ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:39
+msgid ""
+"\"New\" and \"Quit\" actions and callback functions are quite straightforward, see <link xref=\"#code\"/>. 
See "
+"<link xref=\"signals-callbacks.py\"/> for a more detailed explanation of signals and callback functions."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:40
+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 ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:41
+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 ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:42
+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 ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:43
+msgid "Finally, the method <code>save_to_file()</code>: see <link xref=\"#code\"/>, lines 146 - 175."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/filechooserdialog.py.page:48
+msgid "XML file which creates the app-menu"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/filechooserdialog.py.page:49 C/filechooserdialog.vala.page:30
+#, 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 ""
+
+#. (itstool) path: section/code
+#: C/filechooserdialog.py.page:54
+#, 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"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(\n"
+"            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(\n"
+"            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,\n"
+"        # (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,\n"
+"        # (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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/filechooserdialog.py.page:58
+msgid "Useful methods for a FileChooserDialog"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/filechooserdialog.py.page:59
+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 ""
+
+#. (itstool) path: section/p
+#: C/filechooserdialog.py.page:60
+msgid "Besides the methods used in the <link xref=\"#code\"/>, we have:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:62
+msgid "<code>set_show_hidden(True)</code> is used to display hidden files and folders."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:63
+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 ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:64
+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 ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:65
+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 ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:73
+msgid "<link 
href=\"http://developer.gnome.org/gtk3/stable/GtkFileChooserDialog.html\";>GtkFileChooserDialog</link>"
+msgstr "<link 
href=\"http://developer.gnome.org/gtk3/stable/GtkFileChooserDialog.html\";>GtkFileChooserDialog</link>"
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:74
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkFileChooser.html\";>GtkFileChooser</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkFileChooser.html\";>GtkFileChooser</link>"
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:75 C/image.c.page:34 C/label.c.page:38 C/menubar.c.page:38 
C/scrolledwindow.c.page:35
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkWindow.html\";>GtkWindow</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkWindow.html\";>GtkWindow</link>"
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:76 C/textview.c.page:39
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkTextView.html\";>GtkTextView</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkTextView.html\";>GtkTextView</link>"
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:77 C/textview.c.page:38
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkTextBuffer.html\";>GtkTextBuffer</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkTextBuffer.html\";>GtkTextBuffer</link>"
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:78 C/scrolledwindow.c.page:36 C/textview.c.page:40
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkScrolledWindow.html\";>GtkScrolledWindow</link>"
+msgstr "<link 
href=\"http://developer.gnome.org/gtk3/stable/GtkScrolledWindow.html\";>GtkScrolledWindow</link>"
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:79
+msgid "<link href=\"http://developer.gnome.org/gio/stable/GFile.html\";>GFile</link>"
+msgstr "<link href=\"http://developer.gnome.org/gio/stable/GFile.html\";>GFile</link>"
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:81
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkBuilder.html\";>GtkBuilder</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkBuilder.html\";>GtkBuilder</link>"
+
+#. (itstool) path: info/title
+#: C/filechooserdialog.vala.page:8
+msgctxt "text"
+msgid "FileChooserDialog (Vala)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/filechooserdialog.vala.page:21
+msgid "A dialog suitable for \"Open\" and \"Save\" commands."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/filechooserdialog.vala.page:26
+msgid "Overview of the example"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/filechooserdialog.vala.page:27
+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 ""
+
+#. (itstool) path: section/title
+#: C/filechooserdialog.vala.page:29
+msgid "XML UI file which creates the app-menu"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/filechooserdialog.vala.page:32
+msgid "Vala Code"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/filechooserdialog.vala.page:33
+#, 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 ""
+
+#. (itstool) path: section/title
+#: C/filechooserdialog.vala.page:35 C/menubar.vala.page:187
+msgid "Relevant API documentation"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.vala.page:40
+msgid "<link href=\"http://valadoc.org/gtk+-3.0/Gtk.FileChooser.html\";>FileChooser</link>"
+msgstr "<link href=\"http://valadoc.org/gtk+-3.0/Gtk.FileChooser.html\";>FileChooser</link>"
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.vala.page:41
+msgid "<link href=\"http://valadoc.org/gtk+-3.0/Gtk.FileChooserDialog.html\";>FileChooserDialog</link>"
+msgstr "<link href=\"http://valadoc.org/gtk+-3.0/Gtk.FileChooserDialog.html\";>FileChooserDialog</link>"
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.vala.page:42
+msgid "<link href=\"http://valadoc.org/gtk+-3.0/Gtk.Builder.html\";>Gtk.Builder</link>"
+msgstr "<link href=\"http://valadoc.org/gtk+-3.0/Gtk.Builder.html\";>Gtk.Builder</link>"
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.vala.page:43
+msgid "<link href=\"http://valadoc.org/gio-2.0/GLib.ActionEntry.html\";>GLib.ActionEntry</link>"
+msgstr "<link href=\"http://valadoc.org/gio-2.0/GLib.ActionEntry.html\";>GLib.ActionEntry</link>"
+
+#. (itstool) path: info/title
+#: C/fontchooserwidget.js.page:8
+msgctxt "text"
+msgid "FontChooserWidget (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/fontchooserwidget.js.page:18 C/fontchooserwidget.py.page:20 C/fontchooserwidget.vala.page:18
+msgid "A widget to choose a font"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/fontchooserwidget.js.page:21 C/fontchooserwidget.py.page:23 C/fontchooserwidget.vala.page:21
+msgid "FontChooserWidget"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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.js.page:23 C/fontchooserwidget.py.page:25 C/fontchooserwidget.vala.page:23
+msgctxt "_"
+msgid "external ref='media/fontchooserwidget.png' md5='9161245e307b432ae1313e9a9941edae'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/fontchooserwidget.js.page:24 C/fontchooserwidget.py.page:26
+msgid "A FontChooserWidget with a callback function."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/fontchooserwidget.js.page:30
+#, no-wrap
+msgid ""
+"//!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class FontChooserWidgetExample {\n"
+"\n"
+"    // Create the application itthis\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application({ application_id: 'org.example.fontchooserwidget' });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this.window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\n"
+"        // Create the application window\n"
+"        this.window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                    window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                    title: \"FontChooserWidget\",\n"
+"                                                    default_width: 200,\n"
+"                                                    default_height: 200,\n"
+"                                                    border_width: 10 });\n"
+"\n"
+"        this.fontChooser = new Gtk.FontChooserWidget();\n"
+"        // a default font\n"
+"        this.fontChooser.set_font(\"Sans\");\n"
+"        // a text to preview the font\n"
+"        this.fontChooser.set_preview_text(\"This is an example of preview text!\");\n"
+"\n"
+"        // connect signal from the font chooser to the callback function\n"
+"        this.fontChooser.connect(\"notify::font\", this._fontCb.bind(this));\n"
+"\n"
+"        // add the font chooser to the window\n"
+"        this.window.add(this.fontChooser);\n"
+"        this.window.show_all();\n"
+"   }\n"
+"\n"
+"     // callback function:\n"
+"     _fontCb() {\n"
+"        // print in the terminal\n"
+"        print(\"You chose the font \" + this.fontChooser.get_font());\n"
+"    }\n"
+"};\n"
+"\n"
+"// Run the application\n"
+"let app = new FontChooserWidgetExample();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/fontchooserwidget.js.page:37 C/fontchooserwidget.py.page:47
+msgid "<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkFontChooserWidget.html\";>GtkFontChooserWidget</link>"
+msgstr ""
+"<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkFontChooserWidget.html\";>GtkFontChooserWidget</link>"
+
+#. (itstool) path: info/title
+#: C/fontchooserwidget.py.page:8
+msgctxt "text"
+msgid "FontChooserWidget (Python)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/fontchooserwidget.py.page:32
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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(\n"
+"            \"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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/fontchooserwidget.py.page:35
+msgid "Useful methods for a FontChooserWidget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/fontchooserwidget.py.page:36
+msgid ""
+"In line 16 the <code>\"notify::font\"</code> signal from the widget is connected to the callback function "
+"<code>font_cb()</code> using <code><var>widget</var>.connect(<var>signal</var>, <var>callback 
function</var>)</"
+"code>. See <link xref=\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/fontchooserwidget.py.page:38
+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 ""
+
+#. (itstool) path: item/p
+#: C/fontchooserwidget.py.page:39
+msgid "To get the selected font use <code>get_font()</code> or <code>get_font_desc()</code>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/fontchooserwidget.py.page:40
+msgid "To change the text which is shown in the preview area, use <code>set_preview_text()</code>."
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/fontchooserwidget.vala.page:8
+msgctxt "text"
+msgid "FontChooserWidget (Vala)"
+msgstr ""
+
+# TODO: Antopolski
+#. (itstool) path: credit/name
+#: C/fontchooserwidget.vala.page:13
+msgid "Tiffany Antpoolski"
+msgstr "Tiffany Antopolski"
+
+#. (itstool) path: page/p
+#: C/fontchooserwidget.vala.page:24
+msgid "A FontChooserWidget with a lambda callback function."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/fontchooserwidget.vala.page:30
+#, no-wrap
+msgid ""
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"        internal MyWindow (MyApplication app) {\n"
+"                Object (application: app, title: \"FontChooserWidget\");\n"
+"\n"
+"\t\tvar font_chooser = new Gtk.FontChooserWidget ();\n"
+"\t\tfont_chooser.set_font (\"Sans\");\n"
+"\t\tfont_chooser.set_preview_text (\"This is an example of preview text!\");\n"
+"\t\tthis.add (font_chooser);\n"
+"\n"
+"\t\tfont_chooser.notify[\"font\"].connect (() =&gt; {\n"
+"\t\t\tprint (\"font: %s\\n\", font_chooser.get_font ().to_string ());\n"
+"\t\t\tprint (\"desc: %s\\n\", font_chooser.get_font_desc ().to_string ());\n"
+"\t\t\tprint (\"face: %s\\n\", font_chooser.get_font_face ().get_face_name ());\n"
+"\t\t\tprint (\"size: %d\\n\", font_chooser.get_font_size ());\n"
+"\t\t\tprint (\"family: %s\\n\", font_chooser.get_font_family ().get_name ());\n"
+"\t\t\tprint (\"monospace: %s\\n\\n\", font_chooser.get_font_family ().is_monospace ().to_string ());\n"
+"\t\t});\n"
+"\n"
+"                this.show_all ();\n"
+"        }\n"
+"}\n"
+"\n"
+"public class MyApplication : Gtk.Application {\n"
+"        protected override void activate () {\n"
+"                new MyWindow (this).show ();\n"
+"        }\n"
+"}\n"
+"\n"
+"public int main (string[] args) {\n"
+"        return new MyApplication ().run (args);\n"
+"}\n"
+"\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/fontchooserwidget.vala.page:37
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.FontChooserWidget.html\";>GtkFontChooserWidget</link>"
+msgstr "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.FontChooserWidget.html\";>GtkFontChooserWidget</link>"
+
+#. (itstool) path: info/title
+#: C/gmenu.c.page:8
+msgctxt "text"
+msgid "GMenu (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/gmenu.c.page:18 C/gmenu.js.page:18 C/gmenu.vala.page:24
+msgid "A simple implementation of GMenuModel"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/gmenu.c.page:21 C/gmenu.js.page:21 C/gmenu.py.page:29 C/gmenu.vala.page:27
+msgid "GMenu"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:22
+msgctxt "_"
+msgid "external ref='media/gmenu.c.png' md5='f305fc3cae8d16d72b734ee53b559e33'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/gmenu.c.page:23 C/gmenu.js.page:23 C/gmenu.py.page:31 C/gmenu.vala.page:32
+msgid "A GtkApplication with a simple GMenu and SimpleActions"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/gmenu.c.page:26
+#, 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 ""
+
+#. (itstool) path: info/title
+#: C/gmenu.js.page:8
+msgctxt "text"
+msgid "GMenu (JavaScript)"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:22
+msgctxt "_"
+msgid "external ref='media/gmenu.js.png' md5='16b8bee122197771ec8498dac42f196b'"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/gmenu.js.page:25
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class Application {\n"
+"\n"
+"    //create the application\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"       this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    //create the UI (in this case it's just the ApplicationWindow\n"
+"    _buildUI() {\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() {\n"
+"        print(\"This doesn't do anything. It is only a demonstration.\");\n"
+"    }\n"
+"\n"
+"    _showAbout() {\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() {\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', () =&gt; { this._showNew(); });\n"
+"        this.application.add_action(newAction);\n"
+"\n"
+"        let aboutAction = new Gio.SimpleAction ({ name: 'about' });\n"
+"        aboutAction.connect('activate', () =&gt; { this._showAbout(); });\n"
+"        this.application.add_action(aboutAction);\n"
+"\n"
+"        let quitAction = new Gio.SimpleAction ({ name: 'quit' });\n"
+"        quitAction.connect('activate', () =&gt; { this._window.destroy(); });\n"
+"         this.application.add_action(quitAction);\n"
+"    }\n"
+"\n"
+"    //callback function for 'activate' signal\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    //callback function for 'startup' signal\n"
+"    _onStartup() {\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 ""
+
+#. (itstool) path: info/title
+#: C/gmenu.py.page:8
+msgctxt "text"
+msgid "GMenu (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/gmenu.py.page:26
+msgid "A simple implementation of GMenu"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:30
+msgctxt "_"
+msgid "external ref='media/gmenu.py.png' md5='52c68b34d5d566f37e9f803dedb6353a'"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/gmenu.py.page:37
+#, no-wrap
+msgid ""
+"\n"
+"    from gi.repository import Gtk\n"
+"from gi.repository import Gio\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"GMenu Example\", application=app)\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/gmenu.py.page:42
+msgid "Useful methods for a GSimpleAction and a GMenu"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/gmenu.py.page:44
+msgid ""
+"In line 33 the signal <code>\"activate\"</code> from the action <code>new_action</code> (not the menu!) is "
+"connected to the callback function <code>new_cb()</code> using 
<code><var>action</var>.connect(<var>signal</var>, "
+"<var>callback function</var>)</code>. See <link xref=\"signals-callbacks.py\"/> for a more detailed 
explanation."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/gmenu.py.page:46
+msgid "Useful methods for a GSimpleAction:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:48
+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 ""
+
+#. (itstool) path: item/code
+#: C/gmenu.py.page:49
+#, no-wrap
+msgid ""
+"\n"
+"action = Gio.SimpleAction.new(\"name\", parameter_type)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:51
+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 ""
+
+#. (itstool) path: item/code
+#: C/gmenu.py.page:52
+#, no-wrap
+msgid ""
+"\n"
+"action = Gio.SimpleAction.new_stateful(\"name\", parameter_type, initial_state)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:54
+msgid ""
+"where <code>initial_state</code> is defined as a GVariant - for instance 
<code>Glib.Variant.new_string('start')</"
+"code>; for a list of possibilities see <link 
href=\"http://developer.gnome.org/glib/unstable/glib-GVariant.html";
+"\">here</link>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:55
+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 ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:56
+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 ""
+
+#. (itstool) path: section/p
+#: C/gmenu.py.page:59
+msgid "Useful methods for a GMenu:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:61
+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 ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:62
+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 ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:63
+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 ""
+
+#. (itstool) path: item/code
+#: C/gmenu.py.page:64
+#, no-wrap
+msgid ""
+"\n"
+"about = Gio.MenuItem.new(\"About\", \"app.about\")\n"
+"menu.append_item(about)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:68
+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 ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:69
+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 ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:70
+msgid "To remove an item from the menu, use <code>remove(position)</code>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:71
+msgid "To set a label for the menu, use <code>set_label(label)</code>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:82
+msgid "<link href=\"http://developer.gnome.org/glib/unstable/glib-GVariantType.html\";>GVariantType</link>"
+msgstr "<link href=\"http://developer.gnome.org/glib/unstable/glib-GVariantType.html\";>GVariantType</link>"
+
+#. (itstool) path: item/p
+#: C/gmenu.py.page:83
+msgid "<link href=\"http://developer.gnome.org/glib/unstable/glib-GVariant.html\";>GVariant</link>"
+msgstr "<link href=\"http://developer.gnome.org/glib/unstable/glib-GVariant.html\";>GVariant</link>"
+
+#. (itstool) path: info/title
+#: C/gmenu.vala.page:8
+msgctxt "text"
+msgid "GMenu (Vala)"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:28
+msgctxt "_"
+msgid "external ref='media/gmenu.vala.png' md5='7a9f381fc3ed5bf8d1c50d2acb095400'"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/gmenu.vala.page:30
+msgid "<em style=\"strong\">You need to be running GTK+-3.4 or later for this to work</em>"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/gmenu.vala.page:34
+#, 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\tquit_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 ""
+
+#. (itstool) path: item/p
+#: C/gmenu.vala.page:41
+msgid "<link href=\"http://www.valadoc.org/gio-2.0/GLib.Menu.Menu.html\";>Menu</link>"
+msgstr "<link href=\"http://www.valadoc.org/gio-2.0/GLib.Menu.Menu.html\";>Menu</link>"
+
+#. (itstool) path: item/p
+#: C/gmenu.vala.page:42
+msgid "<link href=\"http://www.valadoc.org/gio-2.0/GLib.Menu.append.html\";>append</link>"
+msgstr "<link href=\"http://www.valadoc.org/gio-2.0/GLib.Menu.append.html\";>append</link>"
+
+#. (itstool) path: item/p
+#: C/gmenu.vala.page:43
+msgid "<link href=\"http://www.valadoc.org/gio-2.0/GLib.SimpleAction.html\";>SimpleAction</link>"
+msgstr "<link href=\"http://www.valadoc.org/gio-2.0/GLib.SimpleAction.html\";>SimpleAction</link>"
+
+#. (itstool) path: item/p
+#: C/gmenu.vala.page:44
+msgid "<link href=\"http://www.valadoc.org/gio-2.0/GLib.ActionMap.add_action.html\";>add_action</link>"
+msgstr "<link href=\"http://www.valadoc.org/gio-2.0/GLib.ActionMap.add_action.html\";>add_action</link>"
+
+#. (itstool) path: info/title
+#: C/grid.c.page:8
+msgctxt "text"
+msgid "Grid (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/grid.c.page:18 C/grid.js.page:22 C/grid.py.page:26 C/grid.vala.page:20
+msgid "Pack widgets in rows and columns"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/grid.c.page:21 C/grid.js.page:25 C/grid.py.page:29
+msgid "Grid"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:23 C/grid.js.page:26 C/grid.vala.page:24
+msgctxt "_"
+msgid "external ref='media/grid.png' md5='27d45da115401127456a3b854dcfc5be'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/grid.c.page:24 C/grid.vala.page:25
+msgid "A button widget connected to a progress bar."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/grid.c.page:26
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/grid.c.page:34 C/progressbar.c.page:35
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkProgressBar.html\";>GtkProgressBar</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkProgressBar.html\";>GtkProgressBar</link>"
+
+#. (itstool) path: info/title
+#: C/grid.js.page:8
+msgctxt "text"
+msgid "Grid (JavaScript)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/grid.js.page:27
+msgid "A button widget connected to a progress bar, inside of a grid which handles the layout."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/grid.js.page:29
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class GridExample {\n"
+"\n"
+"    /* Create the application itself\n"
+"       This boilerplate code is needed to build any GTK+ application. */\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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\", this._clickHandler.bind(this));\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() {\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 ""
+
+#. (itstool) path: item/p
+#: C/grid.js.page:37
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html\";>Gtk.Grid</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html\";>Gtk.Grid</link>"
+
+#. (itstool) path: item/p
+#: C/grid.js.page:38 C/progressbar.js.page:42
+msgid "<link 
href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.ProgressBar.html\";>Gtk.ProgressBar</link>"
+msgstr "<link 
href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.ProgressBar.html\";>Gtk.ProgressBar</link>"
+
+#. (itstool) path: info/title
+#: C/grid.py.page:8
+msgctxt "text"
+msgid "Grid (Python)"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:31
+msgctxt "_"
+msgid "external ref='media/grid_simple.png' md5='c806f2e69b30373d4d2e08b41d6cc1f6'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/grid.py.page:32
+msgid "Some labels in a grid."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/grid.py.page:38
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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(\n"
+"            label_bottom, label_top_left, Gtk.PositionType.BOTTOM, 2, 1)\n"
+"\n"
+"        # add the grid to the window\n"
+"        self.add(grid)\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/grid.py.page:42
+msgid "Useful methods for a Grid widget"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/grid.py.page:45
+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 ""
+
+#. (itstool) path: item/p
+#: C/grid.py.page:46
+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 ""
+
+#. (itstool) path: item/p
+#: C/grid.py.page:47
+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 ""
+
+#. (itstool) path: item/p
+#: C/grid.py.page:48
+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 ""
+
+#. (itstool) path: item/p
+#: C/grid.py.page:59 C/label.py.page:105 C/separator.c.page:41 C/separator.py.page:42 C/switch.py.page:46
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkLabel.html\";>GtkLabel</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkLabel.html\";>GtkLabel</link>"
+
+#. (itstool) path: item/p
+#: C/grid.py.page:60 C/paned.c.page:38 C/paned.py.page:44 C/scrolledwindow.py.page:47
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkImage.html\";>GtkImage</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkImage.html\";>GtkImage</link>"
+
+#. (itstool) path: item/p
+#: C/grid.py.page:61 C/radiobutton.py.page:50 C/separator.c.page:40 C/separator.py.page:41 
C/switch.py.page:47
+#: C/toolbar_builder.py.page:196
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkGrid.html\";>GtkGrid</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkGrid.html\";>GtkGrid</link>"
+
+#. (itstool) path: info/title
+#: C/grid.vala.page:8
+msgctxt "text"
+msgid "Grid (Vala)"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/grid.vala.page:23
+msgid "Grid widget"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/grid.vala.page:27
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/grid.vala.page:32
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Grid.html\";>Gtk.Grid</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Grid.html\";>Gtk.Grid</link>"
+
+#. (itstool) path: info/title
+#: C/GtkApplicationWindow.c.page:8
+msgctxt "text"
+msgid "ApplicationWindow (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/GtkApplicationWindow.c.page:18
+msgid "A toplevel window which can contain other widgets, and support GMenu"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/GtkApplicationWindow.c.page:21 C/GtkApplicationWindow.js.page:21 C/GtkApplicationWindow.py.page:28
+#: C/GtkApplicationWindow.vala.page:21
+msgid "ApplicationWindow"
+msgstr ""
+
+#. (itstool) path: page/media
+#. (itstool) path: td/media
+#. 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:22 C/GtkApplicationWindow.js.page:22 C/GtkApplicationWindow.py.page:29
+#: C/GtkApplicationWindow.vala.page:22 C/window.c.page:22 C/window.js.page:25 C/window.py.page:33
+#: C/window.vala.page:25
+msgctxt "_"
+msgid "external ref='media/window.png' md5='eb0cde3530978619c25bddfaeb453345'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/GtkApplicationWindow.c.page:23
+msgid "A minimal GtkApplication with a GtkApplicationWindow"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/GtkApplicationWindow.c.page:25
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/GtkApplicationWindow.c.page:31
+msgid "<link 
href=\"http://developer.gnome.org/gtk3/3.4/GtkApplicationWindow.html\";>GtkApplicationWindow</link>"
+msgstr "<link 
href=\"http://developer.gnome.org/gtk3/3.4/GtkApplicationWindow.html\";>GtkApplicationWindow</link>"
+
+#. (itstool) path: info/title
+#: C/GtkApplicationWindow.js.page:8
+msgctxt "text"
+msgid "ApplicationWindow (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/GtkApplicationWindow.js.page:18 C/GtkApplicationWindow.py.page:25 C/GtkApplicationWindow.vala.page:18
+msgid "GtkWindow subclass with GtkApplication support"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/GtkApplicationWindow.js.page:23
+msgid "A simple GtkApplicationWindow which can support Menus."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/GtkApplicationWindow.js.page:25
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class Application {\n"
+"\n"
+"    //create the application\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"       this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    //create the UI (in this case it's just the ApplicationWindow\n"
+"    _buildUI() {\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() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    //callback function for 'startup' signal\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"};\n"
+"\n"
+"//run the application\n"
+"let app = new Application ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/GtkApplicationWindow.py.page:8
+msgctxt "text"
+msgid "ApplicationWindow (Python)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/GtkApplicationWindow.py.page:30
+msgid "The simplest GtkApplication Window which can support <link xref=\"gmenu.py\"/>."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/GtkApplicationWindow.py.page:37
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"# a Gtk ApplicationWindow\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # constructor: the title is \"Welcome to GNOME\" and the window belongs\n"
+"    # to the application app\n"
+"\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    # constructor of the Gtk Application\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/GtkApplicationWindow.py.page:41
+msgid "Useful methods for a Gtk.ApplicationWindow widget"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/GtkApplicationWindow.py.page:44 C/window.py.page:54
+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 ""
+
+#. (itstool) path: item/p
+#: C/GtkApplicationWindow.py.page:45 C/window.py.page:55
+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 ""
+
+#. (itstool) path: info/title
+#: C/GtkApplicationWindow.vala.page:8
+msgctxt "text"
+msgid "ApplicationWindow (Vala)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/GtkApplicationWindow.vala.page:23
+msgid "The simplest GtkApplication Window which can support Menus."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/GtkApplicationWindow.vala.page:25
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/GtkApplicationWindow.vala.page:31 C/label.vala.page:31
+msgid "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Application.html.content.tpl\";>Gtk.Application</link>"
+msgstr "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Application.html.content.tpl\";>Gtk.Application</link>"
+
+#. (itstool) path: info/title
+#: C/guitar-tuner.c.page:8
+msgctxt "text"
+msgid "Guitar tuner (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/guitar-tuner.c.page:11 C/guitar-tuner.py.page:11
+msgid ""
+"Use GTK+ and GStreamer to build a simple guitar tuner application for GNOME. Shows off how to use the 
interface "
+"designer."
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/guitar-tuner.c.page:19 C/guitar-tuner.cpp.page:17 C/guitar-tuner.py.page:19 C/guitar-tuner.vala.page:18
+#: C/image-viewer.c.page:19 C/image-viewer.cpp.page:17 C/image-viewer.js.page:19 C/image-viewer.py.page:19
+#: C/image-viewer.vala.page:19 C/index.page:18 C/magic-mirror.vala.page:19 C/photo-wall.c.page:18
+#: C/record-collection.js.page:19
+msgid "Johannes Schmid"
+msgstr "Johannes Schmid"
+
+#. (itstool) path: page/title
+#: C/guitar-tuner.c.page:29 C/guitar-tuner.cpp.page:27 C/guitar-tuner.js.page:20 C/guitar-tuner.py.page:34
+#: C/guitar-tuner.vala.page:32
+msgid "Guitar tuner"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/guitar-tuner.c.page:32 C/guitar-tuner.cpp.page:30 C/guitar-tuner.py.page:37
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:34 C/guitar-tuner.cpp.page:32 C/guitar-tuner.py.page:39
+msgid "Set up a basic project in Anjuta"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:35 C/guitar-tuner.cpp.page:33 C/guitar-tuner.py.page:40
+msgid "Create a simple GUI with Anjuta's UI designer"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:36 C/guitar-tuner.cpp.page:34 C/guitar-tuner.py.page:41
+msgid "Use GStreamer to play sounds"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/guitar-tuner.c.page:38 C/guitar-tuner.cpp.page:36 C/guitar-tuner.py.page:43 C/guitar-tuner.vala.page:41
+#: C/image-viewer.js.page:39 C/image-viewer.py.page:39 C/image-viewer.vala.page:46 
C/magic-mirror.vala.page:39
+msgid "You'll need the following to be able to follow this tutorial:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:40 C/guitar-tuner.cpp.page:38 C/guitar-tuner.py.page:45 C/image-viewer.js.page:41
+#: C/image-viewer.py.page:41 C/magic-mirror.vala.page:41
+msgid "An installed copy of the <link xref=\"getting-ready\">Anjuta IDE</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:41
+msgid "Basic knowledge of the C programming language"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:45 C/guitar-tuner.cpp.page:43 C/guitar-tuner.js.page:37 C/guitar-tuner.py.page:50
+#: C/guitar-tuner.vala.page:48
+msgctxt "_"
+msgid "external ref='media/guitar-tuner.png' md5='35e615e0f5e293671d00c5c414ac2f6b'"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:48 C/guitar-tuner.cpp.page:46 C/guitar-tuner.py.page:53 C/image-viewer.c.page:42
+#: C/image-viewer.cpp.page:40 C/image-viewer.js.page:50 C/image-viewer.py.page:49 C/image-viewer.vala.page:57
+#: C/magic-mirror.vala.page:50 C/message-board.c.page:46 C/photo-wall.c.page:52 
C/record-collection.js.page:53
+msgid "Create a project in Anjuta"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:49 C/guitar-tuner.cpp.page:47 C/guitar-tuner.py.page:54 C/guitar-tuner.vala.page:52
+#: C/image-viewer.c.page:43 C/image-viewer.cpp.page:41 C/image-viewer.js.page:51 C/image-viewer.py.page:50
+#: C/image-viewer.vala.page:58 C/magic-mirror.vala.page:51 C/photo-wall.c.page:53 
C/record-collection.js.page:54
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:52 C/guitar-tuner.cpp.page:50 C/guitar-tuner.py.page:57 C/image-viewer.c.page:46
+#: C/image-viewer.cpp.page:44 C/image-viewer.js.page:54 C/image-viewer.py.page:53 C/magic-mirror.vala.page:54
+#: C/photo-wall.c.page:56 C/record-collection.js.page:57
+msgid ""
+"Start Anjuta and click <guiseq><gui>File</gui><gui>New</gui><gui>Project</gui></guiseq> to open the project 
wizard."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:55
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:58
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:62 C/image-viewer.c.page:57 C/photo-wall.c.page:71
+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 ""
+
+#. (itstool) path: item/code
+#: C/guitar-tuner.c.page:63 C/image-viewer.c.page:58 C/photo-wall.c.page:72
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;config.h&gt;\n"
+"#include &lt;gtk/gtk.h&gt;"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:71 C/guitar-tuner.cpp.page:69 C/guitar-tuner.vala.page:74 C/image-viewer.c.page:66
+#: C/image-viewer.cpp.page:66 C/image-viewer.vala.page:113 C/magic-mirror.vala.page:78
+msgid "Build the code for the first time"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:72
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:76 C/image-viewer.c.page:71
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:79
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:80 C/image-viewer.c.page:75 C/image-viewer.vala.page:123
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:83 C/image-viewer.c.page:78
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:86 C/image-viewer.c.page:81
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:90 C/guitar-tuner.cpp.page:84 C/image-viewer.c.page:85 C/image-viewer.cpp.page:82
+#: C/image-viewer.vala.page:133 C/magic-mirror.vala.page:93
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:91 C/guitar-tuner.cpp.page:85 C/image-viewer.c.page:86 C/image-viewer.cpp.page:83
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:95 C/guitar-tuner.cpp.page:89 C/guitar-tuner.py.page:96 C/guitar-tuner.vala.page:96
+msgid "Create the user interface"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:96 C/guitar-tuner.cpp.page:90
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:98 C/guitar-tuner.cpp.page:92 C/guitar-tuner.py.page:99
+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 ""
+
+#. (itstool) path: section/media
+#. 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:100 C/guitar-tuner.cpp.page:94 C/guitar-tuner.py.page:101 
C/guitar-tuner.vala.page:101
+msgctxt "_"
+msgid "external ref='media/guitar-tuner-glade.png' md5='f6606525443ab2160f53a87a454364d0'"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:104 C/guitar-tuner.cpp.page:98 C/guitar-tuner.py.page:105
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:108 C/guitar-tuner.cpp.page:102 C/guitar-tuner.py.page:109
+msgid "Now, choose a <gui>GtkButton</gui> from the palette and put it into the first part of the box."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:111 C/guitar-tuner.py.page:112
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:114 C/guitar-tuner.py.page:115
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:117 C/guitar-tuner.py.page:118 C/guitar-tuner.vala.page:122
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:120 C/guitar-tuner.py.page:121 C/guitar-tuner.vala.page:125
+msgid "Save the UI design (by clicking <guiseq><gui>File</gui><gui>Save</gui></guiseq>) and keep it open."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:126 C/guitar-tuner.vala.page:203
+msgid "Creating the signal handler"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:127 C/guitar-tuner.py.page:128
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:128
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.c.page:131
+#, no-wrap
+msgid ""
+"\n"
+"void on_button_clicked (GtkWidget* button, gpointer user_data)\n"
+"{\n"
+"\n"
+"}"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:136
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:137 C/guitar-tuner.py.page:136
+msgid "For now, we'll leave the signal handler empty while we work on writing the code to produce sounds."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:141 C/guitar-tuner.cpp.page:118 C/guitar-tuner.js.page:39 C/guitar-tuner.py.page:140
+#: C/guitar-tuner.vala.page:131
+msgid "GStreamer pipelines"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:142 C/guitar-tuner.js.page:40 C/guitar-tuner.py.page:141
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:143 C/guitar-tuner.cpp.page:121 C/guitar-tuner.js.page:41 C/guitar-tuner.py.page:142
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:144 C/guitar-tuner.cpp.page:122 C/guitar-tuner.js.page:42 C/guitar-tuner.py.page:143
+#: C/guitar-tuner.vala.page:134
+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 ""
+
+#. (itstool) path: section/media
+#. 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:145 C/guitar-tuner.cpp.page:123 C/guitar-tuner.js.page:43 C/guitar-tuner.py.page:144
+#: C/guitar-tuner.vala.page:135
+msgctxt "_"
+msgid "external ref='media/guitar-tuner-pipeline.png' md5='5adc952909d92af5dae6954781b4ad5f'"
+msgstr ""
+
+#. (itstool) path: media/p
+#: C/guitar-tuner.c.page:146 C/guitar-tuner.cpp.page:124 C/guitar-tuner.js.page:44 C/guitar-tuner.py.page:145
+#: C/guitar-tuner.vala.page:136
+msgid "An example GStreamer pipeline."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:151 C/guitar-tuner.py.page:150 C/guitar-tuner.vala.page:141
+msgid "Set up the pipeline"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:152 C/guitar-tuner.cpp.page:135 C/guitar-tuner.py.page:151
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:154
+msgid ""
+"Insert the following line into <file>main.c</file>, just below the <code>#include &lt;gtk/gtk.h&gt;</code> 
line:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.c.page:155
+#, no-wrap
+msgid "#include &lt;gst/gst.h&gt;"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:156
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.c.page:157
+#, no-wrap
+msgid "gst_init (&amp;argc, &amp;argv);"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:158
+msgid ""
+"Then, copy the following function into <file>main.c</file> above the empty <code>on_button_clicked</code> 
function:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.c.page:159
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:185
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:188
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:191
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:194
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:201 C/guitar-tuner.py.page:191
+msgid "Stopping playback"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:202
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:203
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.c.page:204
+#, 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_NULL);\n"
+"\tg_object_unref (pipeline);\n"
+"\n"
+"\treturn FALSE;\n"
+"}"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:215
+msgid ""
+"The call to <code>gst_element_set_state</code> stops the playback of the pipeline and 
<code>g_object_unref</code> "
+"unreferences the pipeline, destroying it and freeing its memory."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:219 C/guitar-tuner.py.page:208
+msgid "Define the tones"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:220
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.c.page:221
+#, no-wrap
+msgid ""
+"\n"
+"/* Frequencies of the strings */\n"
+"#define NOTE_E 329.63\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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:229 C/guitar-tuner.py.page:222
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.c.page:230
+#, no-wrap
+msgid ""
+"\n"
+"/* Callback for the buttons */\n"
+"void on_button_clicked (GtkButton* button,\n"
+"                        gpointer user_data)\n"
+"{\n"
+"\tconst gchar* text = gtk_button_get_label (button);\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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:251
+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 text of that button using <code>gtk_button_get_label</code>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:252
+msgid ""
+"The 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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:256 C/guitar-tuner.cpp.page:255 C/guitar-tuner.vala.page:253 
C/image-viewer.c.page:222
+#: C/image-viewer.cpp.page:210 C/image-viewer.vala.page:280 C/photo-wall.c.page:392
+msgid "Build and run the application"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:257 C/guitar-tuner.vala.page:254 C/image-viewer.c.page:223 
C/image-viewer.cpp.page:211
+#: C/image-viewer.vala.page:281
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:258 C/guitar-tuner.cpp.page:257 C/guitar-tuner.vala.page:255
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:262 C/guitar-tuner.cpp.page:261 C/guitar-tuner.js.page:242 
C/guitar-tuner.py.page:240
+#: C/guitar-tuner.vala.page:259 C/image-viewer.c.page:228 C/image-viewer.cpp.page:216 
C/image-viewer.js.page:316
+#: C/image-viewer.py.page:230 C/image-viewer.vala.page:288 C/magic-mirror.vala.page:150 
C/photo-wall.c.page:400
+#: C/record-collection.js.page:297
+msgid "Reference Implementation"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:263
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:267 C/guitar-tuner.cpp.page:274 C/guitar-tuner.py.page:245 
C/guitar-tuner.vala.page:270
+#: C/image-viewer.c.page:233 C/image-viewer.cpp.page:221 C/image-viewer.js.page:321 
C/image-viewer.py.page:235
+#: C/image-viewer.vala.page:293
+msgid "Next steps"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:268 C/guitar-tuner.cpp.page:275 C/guitar-tuner.py.page:246 
C/guitar-tuner.vala.page:271
+#: C/image-viewer.c.page:234 C/image-viewer.cpp.page:222 C/image-viewer.js.page:322 
C/image-viewer.py.page:236
+#: C/image-viewer.vala.page:294
+msgid "Here are some ideas for how you can extend this simple demonstration:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:271 C/guitar-tuner.cpp.page:278 C/guitar-tuner.py.page:249 
C/guitar-tuner.vala.page:274
+msgid "Have the program automatically cycle through the notes."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:274 C/guitar-tuner.cpp.page:281 C/guitar-tuner.py.page:252 
C/guitar-tuner.vala.page:277
+msgid "Make the program play recordings of real guitar strings being plucked."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:275 C/guitar-tuner.cpp.page:282 C/guitar-tuner.py.page:253 
C/guitar-tuner.vala.page:278
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:276 C/guitar-tuner.cpp.page:283 C/guitar-tuner.py.page:254 
C/guitar-tuner.vala.page:279
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:279 C/guitar-tuner.cpp.page:286 C/guitar-tuner.py.page:257 
C/guitar-tuner.vala.page:282
+msgid "Automatically analyze notes that the user plays."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:280 C/guitar-tuner.cpp.page:287 C/guitar-tuner.py.page:258 
C/guitar-tuner.vala.page:283
+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 ""
+
+#. (itstool) path: info/desc
+#: C/guitar-tuner.cpp.page:9
+msgid ""
+"Use GTKmm and GStreamermm to build a simple guitar tuner application for GNOME. Shows off how to use the 
interface "
+"designer."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:39
+msgid "Basic knowledge of the C++ programming language"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:53
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:56
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:60
+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 ""
+
+#. (itstool) path: item/code
+#: C/guitar-tuner.cpp.page:61
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtkmm.h&gt;\n"
+"#include &lt;iostream&gt;"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:70 C/image-viewer.cpp.page:67
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:74
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:77
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:80
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:105
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:109
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:112
+msgid "Save the UI design (by clicking <guiseq><gui>File</gui><gui>Save</gui></guiseq>) and close the file."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:119
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.cpp.page:129
+msgid "Using GStreamermm"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:130
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.cpp.page:132
+#, no-wrap
+msgid "\tGst::init (argc, argv);"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:133
+msgid ""
+"While we are on it, also make sure that the <file>gstreamermm.h</file> is included in <file>main.cc</file> "
+"properly."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:137
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.cpp.page:140
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:184
+msgid "The code has the following purpose:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:187
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:190
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:195
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.cpp.page:203
+msgid "Connecting the signals"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:204
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:209
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.cpp.page:211
+#, no-wrap
+msgid ""
+"\n"
+"static void\n"
+"on_button_clicked(double frequency, Sound* sound)\n"
+"{\n"
+"\tsound-&gt;start_playing (frequency);\n"
+"}\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:218
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:222
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.cpp.page:224
+#, 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"
+"                                              329.63, &amp;sound));\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:234
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:238
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:242
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:249
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:256
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:262
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.cpp.page:266
+msgid "Further Reading"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:267
+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 ""
+
+#. (itstool) path: info/title
+#: C/guitar-tuner.js.page:7
+msgctxt "text"
+msgid "Guitar tuner (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/guitar-tuner.js.page:17
+msgid "Use GTK+ and GStreamer to build a simple guitar tuner application for GNOME."
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/guitar-tuner.js.page:23
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:25
+msgid "<link xref=\"#gstreamer\">GStreamer pipelines</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:26 C/weatherAppMain.js.page:23
+msgid "<link xref=\"#script\">Script for running the application</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:27 C/weatherAppMain.js.page:24
+msgid "<link xref=\"#imports\">Libraries to import</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:28 C/weatherAppMain.js.page:25
+msgid "<link xref=\"#mainwindow\">Creating the main window for the application</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:29
+msgid "<link xref=\"#buttons\">Buttons for the tunes</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:30
+msgid "<link xref=\"#playSound\">Making the sounds with GStreamer</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:31
+msgid "<link xref=\"#connecting\">Connecting buttons to playSound</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:32
+msgid "<link xref=\"#guitarjs\">The whole program</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:33
+msgid "<link xref=\"#terminal\">Running the application form Terminal</link>"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/guitar-tuner.js.page:36 C/weatherApp.js.page:40
+msgid "After reading this tutorial, you should see this in your screen:"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.js.page:48 C/hello-world.js.page:46 C/weatherAppMain.js.page:33
+msgid "Script for running the application"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.js.page:49 C/weatherAppMain.js.page:34
+#, no-wrap
+msgid ""
+"\n"
+"  #!/usr/bin/gjs"
+msgstr ""
+"\n"
+"  #!/usr/bin/gjs"
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:51
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.js.page:56
+#, no-wrap
+msgid ""
+"\n"
+"var Gtk = imports.gi.Gtk;\n"
+"var Gst = imports.gi.Gst;\n"
+"\n"
+"const Mainloop = imports.mainloop;"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:61
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.js.page:64 C/hello-world.js.page:59 C/hello-world.py.page:52 C/hello-world.vala.page:44
+#: C/weatherAppMain.js.page:49
+msgid "Creating the main window for the application"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.js.page:65
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:75
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.js.page:78
+msgid "Buttons for the tunes"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.js.page:79
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:99
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:100
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.js.page:103
+msgid "Making the sounds with GStreamer"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.js.page:104
+#, no-wrap
+msgid ""
+"\n"
+"var frequencies = {E: 329.63, 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 = Gst.ElementFactory.make(\"audiotestsrc\",\"source\");\n"
+"  var sink = 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.NULL);\n"
+"\t  return false;\n"
+"  });\n"
+"}"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:123
+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 stop after a 500ms."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:124
+msgid ""
+"Now we have the method of playing a tune when clicking a button. Next well make the connections between 
pushing a "
+"button and playing the correct sound from that button."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.js.page:127
+msgid "Connecting buttons to playSound"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.js.page:128
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:147
+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 <code>E.connect(\"clicked\", function()"
+"{playSound(frequencies.E);});</code> The <code>connect</code> tells that when pushing E, something should 
happen. "
+"The <code>clicked</code> tells the type of the signal happening to E and then in the 
<code>function(){};</code> we "
+"call playSound with the correct note that should be associated with the button."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.js.page:157
+msgid "The whole program"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:158
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.js.page:159
+#, 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: 329.63, 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 = Gst.ElementFactory.make(\"audiotestsrc\",\"source\");\n"
+"  var sink = 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.NULL);\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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.js.page:237
+msgid "Running the application form Terminal"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:238
+msgid "To run this application open Terminal, go to the folder where your application is stored and then run"
+msgstr ""
+
+#. (itstool) path: section/screen
+#: C/guitar-tuner.js.page:238
+#, no-wrap
+msgid " <output style=\"prompt\">$ </output><input> GJS_PATH=`pwd` gjs guitarTuner.js</input> "
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:243
+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 ""
+
+#. (itstool) path: info/title
+#: C/guitar-tuner.py.page:8
+msgctxt "text"
+msgid "Guitar tuner (Python)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:46
+msgid "Basic knowledge of the Python programming language"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:60
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:63
+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 ""
+
+#. (itstool) path: item/code
+#: C/guitar-tuner.py.page:64
+#, no-wrap
+msgid ""
+"\n"
+"from gi.repository import Gtk, GdkPixbuf, Gdk\n"
+"import os, sys"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.py.page:72
+msgid "Run the code for the first time"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:73
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:77
+msgid ""
+"The <code>import</code> lines at the top include the tell Python to load the user interface and system 
libraries "
+"needed."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:81
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:84
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:87
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:92
+msgid ""
+"This code is ready to be used, so you can run it by clicking 
<guiseq><gui>Run</gui><gui>Execute</gui></guiseq>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:97
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.py.page:127
+msgid "Write the signal handler"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:129
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.py.page:131
+#, no-wrap
+msgid ""
+"\n"
+"def on_button_clicked (self, button):\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:135
+msgid ""
+"This signal handler has two arguments: the usual Python class pointer, and the <code>Gtk.Button</code> that 
called "
+"the function."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:153
+msgid "Change the import line in <file>guitar_tuner.py</file>, just at the beginning to :"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.py.page:154
+#, no-wrap
+msgid "from gi.repository import Gtk, Gst, GObject "
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:155
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.py.page:158
+#, no-wrap
+msgid "Gst.init_check(sys.argv)"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:159
+msgid "Then, copy the following function into the class in <file>guitar_tuner.py</file> somewhere:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.py.page:160
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:175
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:178
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:181
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:184
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:192
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:193
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.py.page:194
+#, no-wrap
+msgid ""
+"\n"
+"def pipeline_stop(self, pipeline):\n"
+"\tpipeline.set_state(Gst.State.NULL)\n"
+"\treturn False\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:199
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.py.page:201
+#, no-wrap
+msgid ""
+"\n"
+"LENGTH = 500\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:204
+msgid "The call to <code>pipeline.set_state</code> stops the playback of the pipeline."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:209
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.py.page:211
+#, no-wrap
+msgid ""
+"\n"
+"# Frequencies of the strings\n"
+"frequencies = {\n"
+"\t'E': 329.63,\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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.py.page:223
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:230
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:231
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.py.page:235 C/image-viewer.js.page:311 C/image-viewer.py.page:225 
C/record-collection.js.page:292
+msgid "Run the application"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:236
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:241
+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 ""
+
+#. (itstool) path: info/desc
+#: C/guitar-tuner.vala.page:10
+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 ""
+
+#. (itstool) path: synopsis/p
+#: C/guitar-tuner.vala.page:35
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:37
+msgid "Set up a basic project using the <link xref=\"getting-ready\">Anjuta IDE</link>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:38
+msgid "Create a simple GUI with <app>Anjuta</app>'s UI designer."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:39
+msgid ""
+"Use the <link href=\"http://developer.gnome.org/platform-overview/stable/gstreamer\";>GStreamer</link> 
library to "
+"play sounds."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:43 C/image-viewer.vala.page:48
+msgid "Basic knowledge of the <link href=\"https://live.gnome.org/Vala/Tutorial\";>Vala</link> programming 
language."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:44 C/image-viewer.vala.page:49
+msgid "An installed copy of <app>Anjuta</app>."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.vala.page:51
+msgid "Create a project in <app>Anjuta</app>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:55 C/image-viewer.vala.page:63
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:58
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:61
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:65
+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 ""
+
+#. (itstool) path: item/code
+#: C/guitar-tuner.vala.page:66 C/magic-mirror.vala.page:70
+#, no-wrap
+msgid ""
+"\n"
+"using GLib;\n"
+"using Gtk;"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:75
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:79 C/magic-mirror.vala.page:82
+msgid "The two <code>using</code> lines import namespaces so we don't have to name them explicitly."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:82
+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 ""
+
+#. (itstool) path: note/p
+#: C/guitar-tuner.vala.page:84
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:88
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:92
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:97
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:99
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:105
+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 ""
+
+#. (itstool) path: note/p
+#: C/guitar-tuner.vala.page:106
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:110
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:113
+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 ""
+
+#. (itstool) path: note/p
+#: C/guitar-tuner.vala.page:114
+msgid "The <gui>General</gui> tab is located in the <gui>Widgets</gui> section on the right."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:119
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:132
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:133
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:142
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:144
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.vala.page:145
+#, no-wrap
+msgid "Gst.init (ref args);"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:146
+msgid "Then, copy the following function into <file>guitar_tuner.vala</file> inside our <code>Main</code> 
class:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.vala.page:147
+#, 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.NULL);\n"
+"\t\treturn false;\n"
+"\t});\n"
+"\ttime.attach(null);\n"
+"}"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:181
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:184
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:187
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:190
+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 ""
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:193
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:204
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:205
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.vala.page:207
+#, no-wrap
+msgid ""
+"\n"
+"public void on_button_clicked (Gtk.Button sender) {\n"
+"\n"
+"}"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/guitar-tuner.vala.page:212
+msgid "You can also just type the code at the beginning of the class instead of using the drag and drop."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:213
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.vala.page:219
+msgid "Define the signal handler"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:220
+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 ""
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.vala.page:221
+#, 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 (329.63);\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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:248
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:249
+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 ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:260
+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 ""
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.vala.page:264 C/magic-mirror.vala.page:157
+msgid "Further reading"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:265
+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 ""
+
+#. (itstool) path: info/desc
+#: C/hellognome.js.page:17
+msgid "Your first GNOME application!"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/hellognome.js.page:20
+msgid "1. Hello, GNOME!"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/hellognome.js.page:22
+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 ""
+
+#. (itstool) path: note/p
+#: C/hellognome.js.page:23
+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 ""
+
+#. (itstool) path: section/title
+#: C/hellognome.js.page:29
+msgid "Let's start with a web page"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:31
+msgid "Here's some basic HTML, CSS, and JavaScript code. Does this look familiar?"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hellognome.js.page:32
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:63
+msgid "Let's save this as <file>hellognome.html</file>, and see what it looks like when we run it!"
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:65
+msgctxt "_"
+msgid "external ref='media/hellognomewebapp.png' md5='948efb6148ede3bc6b47b4b0bbe4a74f'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:67
+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 ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:68
+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 ""
+
+#. (itstool) path: section/title
+#: C/hellognome.js.page:72
+msgid "Creating a GNOME window to frame our web app"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:74
+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 ""
+
+#. (itstool) path: section/code
+#: C/hellognome.js.page:75
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+msgstr ""
+"\n"
+"#!/usr/bin/gjs\n"
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:78
+msgid "After that, we need to tell GNOME which libraries we want to import."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hellognome.js.page:79
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:85
+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 ""
+
+#. (itstool) path: item/p
+#: C/hellognome.js.page:87
+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 ""
+
+#. (itstool) path: item/p
+#: C/hellognome.js.page:88
+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 ""
+
+#. (itstool) path: item/p
+#: C/hellognome.js.page:89
+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 ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:92
+msgid "Now we create the application itself:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hellognome.js.page:93
+#, no-wrap
+msgid ""
+"\n"
+"const HelloGNOME = new Lang.Class ({\n"
+"    Name: 'Hello GNOME',\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:97
+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 ""
+
+#. (itstool) path: section/code
+#: C/hellognome.js.page:99
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:119
+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 ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:120
+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 ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:121
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/hellognome.js.page:122
+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 ""
+
+#. (itstool) path: section/title
+#: C/hellognome.js.page:126
+msgid "Designing our window's UI"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:127
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hellognome.js.page:129
+#, 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"
+"            title: \"Welcome to GNOME\",\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            window_position: Gtk.WindowPosition.CENTER });\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:142
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hellognome.js.page:143
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:151
+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 ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:152
+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 ""
+
+#. (itstool) path: section/code
+#: C/hellognome.js.page:153
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:163
+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 ""
+
+#. (itstool) path: section/code
+#: C/hellognome.js.page:164
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new HelloGNOME ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:169
+msgid "Finally, we create a new instance of our HelloGNOME class, and tell GNOME to run it."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/hellognome.js.page:173
+msgid "Running your GNOME application"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:175
+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:"
+msgstr ""
+
+#. (itstool) path: section/screen
+#: C/hellognome.js.page:176
+#, no-wrap
+msgid " <output style=\"prompt\">$ </output>gjs hellognome.js "
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:177
+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 ""
+
+#. (itstool) path: note/p
+#: C/hellognome.js.page:180
+msgid "You can use the terminal command"
+msgstr ""
+
+#. (itstool) path: note/screen
+#: C/hellognome.js.page:181
+#, no-wrap
+msgid " <output style=\"prompt\">$ </output>cd <var>(directory name)</var> "
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/hellognome.js.page:182
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:189
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:190
+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! 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 ""
+
+#. (itstool) path: section/code
+#: C/hellognome.js.page:195
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Webkit = imports.gi.WebKit;\n"
+"\n"
+"class HelloGNOME {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application ();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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 ""
+
+#. (itstool) path: info/title
+#: C/hello-world.c.page:10
+msgctxt "link"
+msgid "Hello World (C)"
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/hello-world.c.page:24
+msgid "Bastian Ilsø"
+msgstr "Bastian Ilsø"
+
+#. (itstool) path: info/desc
+#: C/hello-world.c.page:28
+msgid "Creating a small \"Hello, World\" application using GTK+."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/hello-world.c.page:31
+msgid "Hello world"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/hello-world.c.page:34
+msgid ""
+"For a detailed walk-through of creating a GTK+ dialog in C, see <link 
href=\"https://developer.gnome.org/gtk3/";
+"stable/gtk-getting-started.html\">Getting Started with GTK+</link>"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/hello-world.c.page:38
+msgid "Writing a hello world GTK+ dialog in C can be done as seen in the code sample below:"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/hello-world.c.page:39
+#, 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 *label;\n"
+"\n"
+"  window = gtk_application_window_new (app);\n"
+"  label = gtk_label_new (\"Hello GNOME!\");\n"
+"  gtk_container_add (GTK_CONTAINER (window), label);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Welcome to GNOME\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 200, 100);\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"int\n"
+"main (int    argc,\n"
+"      char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (NULL, 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"
+"\n"
+"  "
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/hello-world.c.page:43
+msgid ""
+"GtkApplication initializes GTK+. It also connects the <gui>x</gui> button that's automatically generated 
along "
+"with the window to the \"destroy\" signal. We can start building our first window. We do this by creating a 
"
+"variable called <var>window</var> and assigning it a gtk_application_window_new. The window 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. The code above will 
create "
+"a dialog window similar to what can be seen below:"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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/hello-world.c.page:51 C/hello-world.js.page:28 C/hello-world.py.page:28 C/hello-world.vala.page:28
+msgctxt "_"
+msgid "external ref='media/hello-world.png' md5='4c88a27211dfd1b33e504c9f78602f2d'"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/hello-world.js.page:9
+msgctxt "text"
+msgid "Hello World (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/hello-world.js.page:24 C/hello-world.py.page:24 C/hello-world.vala.page:24
+msgid "A basic \"hello, world\" application"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/hello-world.js.page:27 C/hello-world.py.page:27 C/hello-world.vala.page:27
+msgid "How to build, install and create a <file>tar.xz</file> of a Hello World program"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/hello-world.js.page:30 C/hello-world.py.page:30 C/hello-world.vala.page:30
+msgid "This tutorial will demonstrate how to:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/hello-world.js.page:32
+msgid "create a small \"Hello, World\" application using JavaScript and GTK+"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/hello-world.js.page:33 C/hello-world.py.page:33 C/hello-world.vala.page:33
+msgid "make the <file>.desktop</file> file"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/hello-world.js.page:34 C/hello-world.py.page:34 C/hello-world.vala.page:34
+msgid "how to set up the build system"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/hello-world.js.page:42 C/hello-world.py.page:42 C/hello-world.vala.page:40
+msgid "Create the program"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:47
+msgid "This needs to be the first line of your script:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.js.page:48
+#, no-wrap
+msgid "#!/usr/bin/gjs"
+msgstr "#!/usr/bin/gjs"
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:49
+msgid ""
+"It tells the script to use <link href=\"https://live.gnome.org/Gjs/\";>Gjs</link>. Gjs is a JavaScript 
binding for "
+"GNOME."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.js.page:54
+#, no-wrap
+msgid ""
+"const Lang = imports.lang;\n"
+"const Gtk = imports.gi.Gtk;"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:56 C/hello-world.py.page:49
+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 ""
+
+#. (itstool) path: section/code
+#: C/hello-world.js.page:60
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:92
+msgid ""
+"GtkApplication initializes GTK+. It also connects the <gui>x</gui> button that's automatically generated 
along "
+"with the window to the \"destroy\" signal."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:93
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:94 C/hello-world.py.page:73
+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 ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:95 C/hello-world.py.page:74 C/hello-world.vala.page:57
+msgid ""
+"Now we have a window which has a title and a working \"close\" button. Let's add the actual \"Hello World\" 
text."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/hello-world.js.page:98 C/hello-world.py.page:77 C/hello-world.vala.page:60
+msgid "Label for the window"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.js.page:99
+#, no-wrap
+msgid ""
+"// 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 ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:104
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.js.page:106
+#, no-wrap
+msgid ""
+"//run the application\n"
+"let app = new Application();\n"
+"app.application.run(ARGV);"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:110 C/hello-world.py.page:97 C/hello-world.vala.page:71
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/hello-world.js.page:114
+msgid "hello-world.js"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:115 C/hello-world.py.page:102 C/hello-world.vala.page:76
+msgid "The complete file:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.js.page:116
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0'\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class Application {\n"
+"\n"
+"    //create the application\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"       //connect to 'activate' and 'startup' signals to handlers.\n"
+"       this.application.connect('activate', this._onActivate.bind(this));\n"
+"       this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    //create the UI\n"
+"    _buildUI() {\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() {\n"
+"        //show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    }\n"
+"\n"
+"    //handler for 'startup' signal\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"};\n"
+"\n"
+"//run the application\n"
+"let app = new Application();\n"
+"app.application.run(ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/hello-world.js.page:119 C/hello-world.py.page:106 C/hello-world.vala.page:80
+msgid "Running the application from terminal"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:120
+msgid ""
+"To run this application, first save it as hello-world.js. Then open Terminal, go to the folder where your "
+"application is stored and run:"
+msgstr ""
+
+#. (itstool) path: section/screen
+#: C/hello-world.js.page:121
+#, no-wrap
+msgid "<output style=\"prompt\">$ </output><input>gjs hello-world.js</input>"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/hello-world.js.page:127 C/hello-world.py.page:112 C/hello-world.vala.page:89
+msgid "The <file>.desktop.in</file> file"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:128 C/hello-world.py.page:113 C/hello-world.vala.page:90
+msgid ""
+"Running applications from the Terminal is useful at the beginning of the application making process. To 
have fully "
+"working <link href=\"https://developer.gnome.org/integration-guide/stable/mime.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 ""
+
+#. (itstool) path: note/p
+#: C/hello-world.js.page:131
+msgid ""
+"Before continuing, resave <file>hello-world.js</file> as <file>hello-world</file>. Then run this in the 
command "
+"line:"
+msgstr ""
+
+#. (itstool) path: note/screen
+#: C/hello-world.js.page:132
+#, no-wrap
+msgid "<output style=\"prompt\">$ </output><input>chmod +x hello-world</input>"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:135 C/hello-world.py.page:115 C/hello-world.vala.page:92
+msgid "The example shows you the minimum requirements for a <code>.desktop.in</code> file."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.js.page:136 C/hello-world.py.page:116 C/hello-world.vala.page:93
+#, 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/hello-world\n"
+"Icon=application-default-icon\n"
+"Terminal=false\n"
+"Type=Application\n"
+"StartupNotify=true\n"
+"Categories=GNOME;GTK;Utility;\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:138 C/hello-world.py.page:118 C/hello-world.vala.page:95
+msgid "Now let's go through some parts of the <code>.desktop.in</code> file."
+msgstr ""
+
+#. (itstool) path: item/title
+#. (itstool) path: td/p
+#: C/hello-world.js.page:140 C/hello-world.py.page:120 C/hello-world.vala.page:97 
C/toolbar_builder.py.page:95
+#: C/toolbar_builder.vala.page:78
+msgid "Name"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/hello-world.js.page:140 C/hello-world.py.page:120 C/hello-world.vala.page:97
+msgid "The application name."
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/hello-world.js.page:141 C/hello-world.py.page:121 C/hello-world.vala.page:98
+msgid "Comment"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/hello-world.js.page:141 C/hello-world.py.page:121 C/hello-world.vala.page:98
+msgid "A short description of the application."
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/hello-world.js.page:142 C/hello-world.py.page:122 C/hello-world.vala.page:99
+msgid "Exec"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/hello-world.js.page:142 C/hello-world.py.page:122 C/hello-world.vala.page:99
+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>hello-world</file> file and the file takes care of the rest."
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/hello-world.js.page:143 C/hello-world.py.page:123 C/hello-world.vala.page:100
+msgid "Terminal"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/hello-world.js.page:143 C/hello-world.py.page:123 C/hello-world.vala.page:100
+msgid "Specifies whether the command in the Exec key runs in a terminal window."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:146 C/hello-world.py.page:126 C/hello-world.vala.page:103
+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>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:147 C/hello-world.py.page:127 C/hello-world.vala.page:104
+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=\"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 ""
+
+#. (itstool) path: section/title
+#: C/hello-world.js.page:150 C/hello-world.py.page:130 C/hello-world.vala.page:107
+msgid "The build system"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:151 C/hello-world.py.page:131 C/hello-world.vala.page:108
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:152 C/hello-world.py.page:132 C/hello-world.vala.page:109
+msgid "For this you need to have the following files:"
+msgstr ""
+
+#. (itstool) path: section/title
+#. (itstool) path: item/p
+#. (itstool) path: section/p
+#: C/hello-world.js.page:155 C/hello-world.py.page:135 C/hello-world.vala.page:112 
C/weatherAutotools.js.page:40
+#: C/weatherAutotools.js.page:138
+msgid "autogen.sh"
+msgstr "autogen.sh"
+
+#. (itstool) path: section/code
+#: C/hello-world.js.page:156 C/hello-world.py.page:136 C/hello-world.vala.page:113
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:158 C/hello-world.py.page:138 C/hello-world.vala.page:115
+msgid "After the <file>autogen.sh</file> file is ready and saved, run:"
+msgstr ""
+
+#. (itstool) path: section/screen
+#: C/hello-world.js.page:159 C/hello-world.py.page:139 C/hello-world.vala.page:116
+#, no-wrap
+msgid "<output style=\"prompt\">$ </output><input>chmod +x autogen.sh</input>"
+msgstr ""
+
+#. (itstool) path: section/title
+#. (itstool) path: item/p
+#. (itstool) path: section/p
+#: C/hello-world.js.page:163 C/hello-world.py.page:143 C/hello-world.vala.page:120 
C/weatherAutotools.js.page:38
+#: C/weatherAutotools.js.page:64
+msgid "Makefile.am"
+msgstr "Makefile.am"
+
+#. (itstool) path: section/code
+#: C/hello-world.js.page:164
+#, no-wrap
+msgid ""
+"# The actual runnable program is set to the SCRIPTS primitive.\n"
+"# # Prefix bin_ tells where to copy this\n"
+"bin_SCRIPTS = hello-world\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"
+"\thello-world.desktop\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#. (itstool) path: item/p
+#. (itstool) path: section/p
+#: C/hello-world.js.page:168 C/hello-world.py.page:148 C/hello-world.vala.page:125 
C/weatherAutotools.js.page:39
+#: C/weatherAutotools.js.page:131
+msgid "configure.ac"
+msgstr "configure.ac"
+
+#. (itstool) path: section/code
+#: C/hello-world.js.page:169 C/hello-world.py.page:149
+#, 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 hello-world.desktop])\n"
+"AC_OUTPUT\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/hello-world.js.page:173 C/hello-world.py.page:153 C/hello-world.vala.page:130
+msgid "README"
+msgstr "README"
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:174 C/hello-world.py.page:154 C/hello-world.vala.page:131
+msgid "Information users should read first. This file can be blank."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:176 C/hello-world.py.page:156
+msgid ""
+"When you have the <file>hello-world</file>, <file>hello-world.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 ""
+
+#. (itstool) path: section/code
+#: C/hello-world.js.page:177 C/hello-world.py.page:157
+#, no-wrap
+msgid ""
+"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"
+"hello-world.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 hello-world.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"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/hello-world.py.page:9
+msgctxt "text"
+msgid "Hello World (Python)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/hello-world.py.page:32
+msgid "create a small \"Hello, World\" application using Python and GTK+"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.py.page:47
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.py.page:53
+#, no-wrap
+msgid ""
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\n"
+"    # constructor for a Gtk.ApplicationWindow\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Hello World!\", application=app)\n"
+"        self.set_default_size(200, 100)\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)"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.py.page:71 C/hello-world.vala.page:54
+msgid ""
+"Gtk.Application initializes GTK+. It also connects the <gui>x</gui> button that's automatically generated 
along "
+"with the window to the \"destroy\" signal."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.py.page:72
+msgid ""
+"We can start building our first window. We do this by creating a class called <var>MyWindow</var> and 
assigning it "
+"a Gtk.ApplicationWindow."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.py.page:78
+#, no-wrap
+msgid ""
+"# Add a label widget to your window\n"
+"\n"
+"        # create a label\n"
+"        label = Gtk.Label()\n"
+"\n"
+"        # set the text of the label\n"
+"        label.set_text(\"Hello GNOME!\")\n"
+"\n"
+"        # add the label to the window\n"
+"        self.add(label)"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.py.page:89
+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 variable called <var>label</var> and set the text that the label will hold. Finally, we create and 
run "
+"the application:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.py.page:91
+#, no-wrap
+msgid ""
+"#run the application\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/hello-world.py.page:101
+msgid "hello-world.py"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.py.page:103 C/label.py.page:39
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # constructor for a Gtk.ApplicationWindow\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/hello-world.py.page:107
+msgid ""
+"To run this application, first save it as hello-world.py. Then open Terminal, go to the folder where your "
+"application is stored and run:"
+msgstr ""
+
+#. (itstool) path: section/screen
+#: C/hello-world.py.page:108
+#, no-wrap
+msgid "<output style=\"prompt\">$ </output><input>python hello-world.py</input>"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.py.page:144
+#, no-wrap
+msgid ""
+"# The actual runnable program is set to the SCRIPTS primitive.\n"
+"# # Prefix bin_ tells where to copy this\n"
+"bin_SCRIPTS = hello-world.py\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"
+"\thello-world.desktop\n"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/hello-world.vala.page:9
+msgctxt "text"
+msgid "Hello World (Vala)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/hello-world.vala.page:32
+msgid "create a small \"Hello, World\" application using GTK+"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.vala.page:45
+#, no-wrap
+msgid ""
+"class MyApplication : Gtk.Application {\n"
+"        protected override void activate () {\n"
+"                var window = new Gtk.ApplicationWindow (this);\n"
+"                window.set_title (\"Welcome to GNOME\");\n"
+"                window.set_default_size (200, 100);\n"
+"                window.show_all ();\n"
+"        }\n"
+"}"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:55
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:56
+msgid ""
+"We give the window a title using <code>set_title</code>. 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 ""
+
+#. (itstool) path: section/code
+#: C/hello-world.vala.page:61
+#, no-wrap
+msgid ""
+"var label = new Gtk.Label (\"Hello GNOME!\");\n"
+"                window.add (label);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:65
+msgid "Finally, we create and run the application:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.vala.page:67
+#, no-wrap
+msgid ""
+"int main (string[] args) {\n"
+"        return new MyApplication ().run (args);\n"
+"}"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/hello-world.vala.page:75
+msgid "hello-world.vala"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.vala.page:77
+#, no-wrap
+msgid ""
+"public class MyApplication : Gtk.Application {\n"
+"\tprotected override void activate () {\n"
+"\t\tvar window = new Gtk.ApplicationWindow (this);\n"
+"\t\tvar label = new Gtk.Label (\"Hello GNOME!\");\n"
+"\t\twindow.add (label);\n"
+"\t\twindow.set_title (\"Welcome to GNOME\");\n"
+"\t\twindow.set_default_size (200, 100);\n"
+"\t\twindow.show_all ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:81
+msgid ""
+"To run this application, first save it as hello-world.vala. Then open Terminal, go to the folder where your 
"
+"application is stored."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:82
+msgid "Compile the program:"
+msgstr ""
+
+#. (itstool) path: section/screen
+#: C/hello-world.vala.page:83
+#, no-wrap
+msgid "valac --pkg gtk+-3.0 <file>hello-world.vala</file>"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:84
+msgid "Run the program:"
+msgstr ""
+
+#. (itstool) path: section/screen
+#: C/hello-world.vala.page:85
+#, no-wrap
+msgid "./<var>hello-world</var>"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.vala.page:121
+#, no-wrap
+msgid ""
+"# The actual runnable program is set to the SCRIPTS primitive.\n"
+"# # Prefix bin_ tells where to copy this\n"
+"bin_PROGRAMS = hello-world\n"
+"hello_world_CFLAGS = $(gtk_CFLAGS)\n"
+"hello_world_LDADD = $(gtk_LIBS)\n"
+"hello_world_VALAFLAGS = --pkg gtk+-3.0\n"
+"hello_world_SOURCES = hello-world.vala\n"
+"\n"
+"desktopdir = $(datadir)/applications\n"
+"desktop_DATA = \\\n"
+"\thello-world.desktop\n"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/hello-world.vala.page:126
+#, 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_PROG_CC\n"
+"AM_PROG_VALAC([0.16])\n"
+"PKG_CHECK_MODULES(gtk, gtk+-3.0)\n"
+"AC_CONFIG_FILES([Makefile hello-world.desktop])\n"
+"\n"
+"AC_OUTPUT\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:133
+msgid ""
+"When you have the <file>hello-world.c</file>, <file>hello-world.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 ""
+
+#. (itstool) path: section/code
+#: C/hello-world.vala.page:134
+#, no-wrap
+msgid ""
+"To build and install this program:\n"
+"\n"
+"./autogen.sh --prefix=/home/your_username/.local\n"
+"make\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"
+"depcomp\n"
+"hello-world\n"
+"hello-world.c\n"
+"hello-world.desktop\n"
+"hello_world-hello-world.o\n"
+"hello_world_vala.stamp\n"
+"install-sh\n"
+"missing\n"
+"Makefile.in\n"
+"Makefile\n"
+"\n"
+"Running \"make\" links all the appropriate libraries.\n"
+"\n"
+"Running \"make install\", installs the application in /home/your_username/.local/bin\n"
+"and installs the hello-world.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"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/image.c.page:8
+msgctxt "text"
+msgid "Image (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/image.c.page:18 C/image.js.page:17 C/image.py.page:25 C/image.vala.page:18
+msgid "A widget displaying an image"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/image.c.page:21 C/image.js.page:20 C/image.py.page:28 C/image.vala.page:21
+msgid "Image"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:22 C/image.js.page:21 C/image.py.page:29 C/image.vala.page:22
+msgctxt "_"
+msgid "external ref='media/image.png' md5='9416aa74d9d6a857783f7a36338e7a02'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/image.c.page:23 C/image.js.page:22 C/image.py.page:30 C/image.vala.page:23
+msgid "This GtkApplication displays an image file from the current directory."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/image.c.page:24 C/image.js.page:23 C/image.vala.page:24
+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!"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/image.c.page:28
+#, no-wrap
+msgid ""
+"#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 ""
+
+#. (itstool) path: item/p
+#: C/image.c.page:35
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkImage.html\";>GtkImage</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/image.js.page:7
+msgctxt "text"
+msgid "Image (JavaScript)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/image.js.page:27
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class ImageExample {\n"
+"\n"
+"    /* Create the application itself\n"
+"       This boilerplate code is needed to build any GTK+ application. */\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jsimage',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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_height: 300,\n"
+"            default_width: 300\n"
+"        });\n"
+"\n"
+"        // Create the label\n"
+"        this.jsimage = new Gtk.Image ({file: \"gnome-image.png\"});\n"
+"        this._window.add (this.jsimage);\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 ImageExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image.js.page:34
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html\";>Gtk.Image</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/image.py.page:8
+msgctxt "text"
+msgid "Image (Python)"
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/image.py.page:20
+msgid "Sindhu S"
+msgstr "Sindhu S"
+
+#. (itstool) path: credit/years
+#: C/image.py.page:22
+msgid "2014"
+msgstr "2014"
+
+#. (itstool) path: note/p
+#: C/image.py.page:32
+msgid ""
+"If the image file is not loaded successfully, the image will contain a \"broken image\" icon. 
<file>filename.png</"
+"file> needs to be in the current directory for this code to work."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image.py.page:43
+#, no-wrap
+msgid ""
+"\n"
+"  from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # create a window\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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"
+"\n"
+"  "
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image.py.page:47
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image.py.page:51
+#, 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"
+"\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()\n"
+"  "
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/image.py.page:78
+msgid ""
+"To use this code snippet, you will need to add the code that imports <code>Gtk</code> and 
<code>GdkPixbuf</code> "
+"from <code>gi.repository</code> and lines that instantiate the <code>MyApplication</code> window."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/image.py.page:85
+msgid "Useful methods for an Image widget"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image.py.page:89
+msgid ""
+"To load an image over a network use <code>set_from_pixbuf(pixbuf)</code>, where <code>pixbuf</code> is a 
<link "
+"href=\"https://developer.gnome.org/gdk-pixbuf/unstable/index.html\";> GdkPixbuf</link>."
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/image.py.page:93
+#, 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"
+"\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)\n"
+"        "
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image.py.page:115
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image.py.page:119
+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 ""
+
+#. (itstool) path: item/p
+#: C/image.py.page:131
+msgid "<link href=\"https://developer.gnome.org/gtk3/unstable/GtkImage.html\";> GtkImage</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image.py.page:135
+msgid "<link href=\"https://developer.gnome.org/gtk3/unstable/GtkWindow.html\";> GtkWindow</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/image.vala.page:8
+msgctxt "text"
+msgid "Image (Vala)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/image.vala.page:27
+#, no-wrap
+msgid ""
+"public class MyWindow : Gtk.ApplicationWindow {\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"Welcome to GNOME\");\n"
+"\n"
+"\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"
+"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 ""
+
+#. (itstool) path: item/p
+#: C/image.vala.page:32 C/separator.vala.page:40
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Application.html\";>GtkApplication</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image.vala.page:33
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ApplicationWindow.html\";>GtkApplicationWindow</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image.vala.page:34 C/paned.vala.page:38
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Image.html\";>GtkImage</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/image-viewer.c.page:8
+msgctxt "text"
+msgid "Image viewer (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/image-viewer.c.page:11
+msgid "A little bit more than a simple \"Hello world\" Gtk application."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/image-viewer.c.page:29 C/image-viewer.cpp.page:27 C/image-viewer.js.page:29 C/image-viewer.py.page:29
+#: C/image-viewer.vala.page:37
+msgid "Image viewer"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/image-viewer.c.page:32 C/image-viewer.cpp.page:30 C/message-board.c.page:29 
C/record-collection.js.page:32
+msgid "In this tutorial, you will learn:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:34
+msgid "Some basic concepts of C/GObject programming"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:35
+msgid "How to write a Gtk application in C"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:39 C/image-viewer.cpp.page:37 C/image-viewer.js.page:47 C/image-viewer.py.page:46
+#: C/image-viewer.vala.page:54
+msgctxt "_"
+msgid "external ref='media/image-viewer.png' md5='7720360611243b14283b83527be968c2'"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:49
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:52
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.c.page:67
+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:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:74
+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 ""
+
+#. (itstool) path: section/title
+#: C/image-viewer.c.page:90 C/image-viewer.cpp.page:87 C/image-viewer.vala.page:139
+msgid "Creating the user interface"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.c.page:91
+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>:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.c.page:94
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:129
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:134
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:140
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:145
+msgid "The last <code>g_signal_connect()</code> makes sure that the application exits when the window is 
closed."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:148
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/image-viewer.c.page:155 C/image-viewer.cpp.page:142 C/image-viewer.vala.page:210
+msgid "Showing the image"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.c.page:156
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.c.page:159
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.c.page:192 C/image-viewer.cpp.page:178 C/image-viewer.js.page:283 
C/image-viewer.py.page:197
+msgid "This is a bit more complicated than anything we've attempted so far, so let's break it down:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:194
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:200
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:204 C/image-viewer.cpp.page:186 C/image-viewer.js.page:290 
C/image-viewer.py.page:204
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:207
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:210
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:212
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:215
+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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.c.page:224 C/image-viewer.cpp.page:212
+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!"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.c.page:229
+msgid ""
+"If you run into problems with the tutorial, compare your code with this <link 
href=\"image-viewer/image-viewer.c"
+"\">reference code</link>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:237 C/image-viewer.cpp.page:225 C/image-viewer.js.page:325 
C/image-viewer.py.page:239
+#: C/image-viewer.vala.page:298
+msgid ""
+"Have the user select a directory rather than a file, and provide controls to cycle through all of the 
images in a "
+"directory."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:240 C/image-viewer.cpp.page:228 C/image-viewer.js.page:328 
C/image-viewer.py.page:242
+#: C/image-viewer.vala.page:301
+msgid ""
+"Apply random filters and effects to the image when it is loaded and allow the user to save the modified 
image."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:241 C/image-viewer.cpp.page:229 C/image-viewer.js.page:329 
C/image-viewer.py.page:243
+#: C/image-viewer.vala.page:302
+msgid "<link href=\"http://www.gegl.org/api.html\";>GEGL</link> provides powerful image manipulation 
capabilities."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:244 C/image-viewer.cpp.page:232 C/image-viewer.js.page:332 
C/image-viewer.py.page:246
+#: C/image-viewer.vala.page:305
+msgid "Allow the user to load images from network shares, scanners, and other more complicated sources."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:245 C/image-viewer.cpp.page:233 C/image-viewer.js.page:333 
C/image-viewer.py.page:247
+#: C/image-viewer.vala.page:306
+msgid ""
+"You can use <link href=\"http://library.gnome.org/devel/gio/unstable/\";>GIO</link> to handle network file "
+"transfers and the like, and <link href=\"http://library.gnome.org/devel/gnome-scan/unstable/\";>GNOME 
Scan</link> "
+"to handle scanning."
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/image-viewer.cpp.page:9
+msgid "A little bit more than a simple \"Hello world\" GTKmm application."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:32
+msgid "Some basic concepts of C++/GObject programming"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:33
+msgid "How to write a Gtk application in C++"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:47
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:50
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:55
+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:"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/image-viewer.cpp.page:56
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtkmm.h&gt;\n"
+"#include &lt;iostream&gt;\n"
+"\n"
+"#include \"config.h\"&gt;"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:70
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:73
+msgid "The <code>main</code> function creates a new (empty) window and sets the window title."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:76
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.cpp.page:88
+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>:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.cpp.page:91
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:121
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:124
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:130
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:134
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.cpp.page:143
+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 ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.cpp.page:146
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:181
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:185
+msgid "The next two lines add an <em>Open</em> and a <em>Close</em> button to the dialog."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:187
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:192
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:193
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:197
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:200
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:203
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.cpp.page:217
+msgid ""
+"If you run into problems with the tutorial, compare your code with this <link 
href=\"image-viewer/image-viewer.cc"
+"\">reference code</link>."
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/image-viewer.js.page:8
+msgctxt "text"
+msgid "Image viewer (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/image-viewer.js.page:11
+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 ""
+
+#. (itstool) path: credit/name
+#: C/image-viewer.js.page:15 C/image-viewer.py.page:15
+msgid "Jonh Wendell"
+msgstr "Jonh Wendell"
+
+#. (itstool) path: synopsis/p
+#: C/image-viewer.js.page:32 C/image-viewer.py.page:32
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:34
+msgid "Write a basic GTK user interface in JavaScript"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:35 C/image-viewer.py.page:35
+msgid "Deal with events by connecting signals to signal handlers"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:36 C/image-viewer.py.page:36
+msgid "Lay out GTK user interfaces using containers"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:37 C/image-viewer.py.page:37
+msgid "Load and display image files"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:42
+msgid "An installed copy of the <em>gjs</em> interpreter"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:43
+msgid "Basic knowledge of any object-orientated programming language"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:57
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:60
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:67
+msgid "JavaScript basics: Hello World"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:68
+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>:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:69
+#, no-wrap
+msgid "print (\"Hello world!\");"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:70
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:74
+msgid "Classes in JavaScript"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:75
+msgid "This is the standard way to define a class in JavaScript:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:76
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:98
+msgid "This defines a class called <code>MyClass</code>. Let's go through each part of the class definition:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:101
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:104
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:107
+msgid ""
+"The first method defined here is called <code>_init</code>, and we specify that it is a function with no 
arguments:"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/image-viewer.js.page:108
+#, no-wrap
+msgid "_init: function ()"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:109
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:112
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:115
+msgid "Note how the class definition (prototype) is arranged; each function definition is separated by a 
comma."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:119
+msgid "Now that MyClass has been defined, we can play with it:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:120
+#, no-wrap
+msgid ""
+"\n"
+"var o = new MyClass ();\n"
+"o.aMethod (\"Hello\", \"world\");\n"
+"o.propertyA = \"Just changed its value!\";\n"
+"o.dumpProperties ();"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:125
+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)."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:126
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:131 C/image-viewer.py.page:70
+msgid "A first Gtk application"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:132
+msgid "Let's see what a very basic Gtk application looks like in JavaScript:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:133
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:142 C/image-viewer.py.page:95
+msgid "Let's take a look at what's happening:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:145 C/image-viewer.py.page:98
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:148
+msgid "<code>Gtk.init</code> initializes the Gtk library; this statement is mandatory for all Gtk programs."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:151
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:152
+msgid "The next line explicitly shows the window. In Gtk, every widget is hidden by default."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:153
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:156
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:161
+msgid "Adding classes"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:162
+msgid ""
+"The proper way of doing Gtk programming is by using classes. Let's rewrite the simple code you just wrote 
using "
+"classes:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:163
+#, no-wrap
+msgid ""
+"\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 (null, null);\n"
+"var iv = new ImageViewer ();\n"
+"Gtk.main ();"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:181
+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>)."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:182
+msgid "This code is modular and can be split into multiple files easily. This makes it cleaner and easier to 
read."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:186 C/image-viewer.py.page:119
+msgid "Signals"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:187 C/image-viewer.py.page:120
+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 ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:188
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:194 C/image-viewer.py.page:127
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:195
+msgid "The syntax for connecting any signal to a function is:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:196
+#, no-wrap
+msgid ""
+"\n"
+"object.connect (&lt;signal_name&gt;, &lt;function_to_be_called&gt;);"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:198
+msgid ""
+"You can find signal definitions for any object in the <link href=\"https://developer.gnome.org/gtk3/stable/";
+"gtkobjects.html\">GTK class reference</link>."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/image-viewer.js.page:201
+msgid "You can simplify the code by making use of an inline function definition:"
+msgstr ""
+
+#. (itstool) path: note/code
+#: C/image-viewer.js.page:202
+#, no-wrap
+msgid ""
+"\n"
+"b.connect (\"clicked\", function () { print (\"you clicked me!\"); });"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:209
+msgid "Closing the window"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:210
+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)."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:211
+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>:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:212
+#, no-wrap
+msgid "this.window.connect (\"hide\", Gtk.main_quit);"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:213
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:217 C/image-viewer.py.page:131
+msgid "Containers: Laying-out the user interface"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:218 C/image-viewer.py.page:132
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:219 C/image-viewer.py.page:133
+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 ""
+
+#. (itstool) path: note/p
+#: C/image-viewer.js.page:221 C/image-viewer.py.page:135
+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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:223
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:224
+#, no-wrap
+msgid ""
+"\n"
+"var main_box = new Gtk.Box ({orientation: Gtk.Orientation.VERTICAL, spacing: 0});\n"
+"this.window.add (main_box);"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:227
+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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:228 C/image-viewer.py.page:146
+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)."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:232 C/image-viewer.py.page:150
+msgid "Packing: Adding widgets to the container"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:233
+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 ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:234
+#, no-wrap
+msgid ""
+"\n"
+"this.image = new Gtk.Image ();\n"
+"main_box.pack_start (this.image, true, true, 0);"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:237
+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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:238
+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>)."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:239 C/image-viewer.py.page:158
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:240 C/image-viewer.py.page:159
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:241 C/image-viewer.py.page:160
+msgid "Now insert these two lines, below the two you just added:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:242
+#, no-wrap
+msgid ""
+"\n"
+"var open_button = new Gtk.Button ({label: \"Open a picture...\"});\n"
+"main_box.pack_start (open_button, false, false, 0);"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:245
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:246
+msgid "Finally, we must change the <code>this.window.show ();</code> line to read:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:247
+#, no-wrap
+msgid "this.window.show_all ();"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:248
+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.)"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:252 C/image-viewer.py.page:169
+msgid "Loading the image: Connecting to the button's <code>clicked</code> signal"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:253
+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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:254
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:255
+#, no-wrap
+msgid ""
+"\n"
+"open_button.connect (\"clicked\", Lang.bind (this, this._openClicked));"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:257
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:258
+#, no-wrap
+msgid "const Lang = imports.lang;"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:262 C/image-viewer.py.page:180
+msgid "Loading the image: Writing the signal's callback"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:263
+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):"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:264
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:286
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:289 C/image-viewer.py.page:203
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:293 C/image-viewer.py.page:207
+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)."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:296 C/image-viewer.py.page:210
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:299
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:301 C/image-viewer.py.page:215
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:304 C/image-viewer.py.page:218 C/image-viewer.vala.page:273
+msgid "In the final line of this method, we destroy the <gui>Open</gui> dialog because we don't need it any 
more."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:312
+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!"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:317
+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 ""
+
+#. (itstool) path: info/title
+#: C/image-viewer.py.page:8
+msgctxt "text"
+msgid "Image viewer (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/image-viewer.py.page:11
+msgid "A little bit more than a simple \"Hello world\" application - write an image viewer in GTK."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:34
+msgid "Write a basic GTK user interface in Python"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:42
+msgid "Basic knowledge of the python programming language"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:56
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:59
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:64
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:71
+msgid "Let's see what a very basic Gtk application looks like in Python:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.py.page:72
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:101
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:106
+msgid ""
+"Next, <code>destroy</code> is defined which just quits the application. It is called by the 
<code>destroy</code> "
+"signal connected above."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:110
+msgid "The rest of the file does initialisation for Gtk and displays the GUI."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:114
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.py.page:121
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:137
+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 ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.py.page:138
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:145
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:151
+msgid ""
+"To add some widgets to the <code>Gtk.Box</code>, insert the following code directly below the 
<code>window.add "
+"(box)</code> line:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.py.page:152
+#, no-wrap
+msgid ""
+"\n"
+"self.image = Gtk.Image()\n"
+"box.pack_start (self.image, False, False, 0)"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:155
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:157
+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 ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.py.page:161
+#, no-wrap
+msgid ""
+"\n"
+"button = Gtk.Button (\"Open a picture...\")\n"
+"box.pack_start (button, False, False, 0)\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:165
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:170
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:171
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.py.page:172
+#, no-wrap
+msgid ""
+"\n"
+"button.connect_after('clicked', self.on_open_clicked)\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:175
+msgid ""
+"This will connect the <code>clicked</code> signal to <code>on_open_clicked</code> method that we will 
define below."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:181
+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 ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.py.page:182
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:200
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:213
+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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:226
+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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:231
+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 ""
+
+#. (itstool) path: info/title
+#: C/image-viewer.vala.page:8
+msgctxt "text"
+msgid "Image viewer (Vala)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/image-viewer.vala.page:11
+msgid "A little bit more than a simple \"Hello world\" GTK+ application."
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/image-viewer.vala.page:23
+msgid "Philip Chimento"
+msgstr "Philip Chimento"
+
+#. (itstool) path: synopsis/p
+#: C/image-viewer.vala.page:39
+msgid "In this tutorial you will create an application which opens and displays an image file. You will 
learn:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:41
+msgid "How to set up a basic project using the <link xref=\"getting-ready\">Anjuta IDE</link>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:42
+msgid ""
+"How to write a <link href=\"http://developer.gnome.org/platform-overview/stable/gtk\";>Gtk 
application</link> in "
+"Vala"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:43
+msgid "Some basic concepts of <link href=\"http://developer.gnome.org/gobject/stable/\";>GObject</link> 
programming"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:50
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:66
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:70
+msgid ""
+"Make sure that <gui>Use GtkBuilder for user interface</gui> is unchecked as we will create the UI manually 
in this "
+"tutorial."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/image-viewer.vala.page:71
+msgid ""
+"You will learn how to use the interface builder in the <link xref=\"guitar-tuner.vala\">Guitar-Tuner</link> 
"
+"tutorial."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:75
+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:"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/image-viewer.vala.page:78
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:114
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:119
+msgid "The two <code>using</code> lines at the top import namespaces so we don't have to name them 
explicitly."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:122
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:127
+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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:134 C/magic-mirror.vala.page:94
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:140
+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>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:144
+msgid "Add the following lines to the top of the <code>Main</code> class:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.vala.page:145
+#, no-wrap
+msgid ""
+"\n"
+"private Window window;\n"
+"private Image image;\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:150
+msgid "Now replace the current constructor with the one below:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.vala.page:151
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:176
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:180
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:184
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:191
+msgid "We need to define what happens when the user clicks on the button. GTK uses the concept of 
<em>signals</em>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:192
+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)."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:195
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:199
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:203
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:211
+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 ""
+
+#. (itstool) path: section/code
+#: C/image-viewer.vala.page:214
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:237
+msgid "This is a bit complicated, so let's break it down:"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/image-viewer.vala.page:238
+msgid ""
+"A signal handler is a type of callback method that is called when a signal is emitted. Here the terms are 
used "
+"interchangeably."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:241
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:243
+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:"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/image-viewer.vala.page:244
+#, no-wrap
+msgid ""
+"\n"
+"        button.clicked.connect (on_open_image);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:248
+msgid "The <code>on_open_image</code> method takes the button that emitted the signal as an argument:"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/image-viewer.vala.page:249
+#, no-wrap
+msgid ""
+"\n"
+"        public void on_open_image (Button self)\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:254
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:256
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:260
+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 ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:265
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:270
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:274
+msgid "Destroying automatically hides the dialog."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:283
+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!"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:289
+msgid ""
+"If you run into problems with the tutorial, compare your code with this <link 
href=\"image-viewer/image-viewer.vala"
+"\">reference code</link>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:296
+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."
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/index.page:8
+msgid "GNOME Documentation Team"
+msgstr ""
+
+#. (itstool) path: credit/years
+#: C/index.page:10
+msgid "2010, 2011"
+msgstr "2010, 2011"
+
+#. (itstool) path: credit/name
+#: C/index.page:13 C/message-board.c.page:15
+msgid "Shaun McCance"
+msgstr "Shaun McCance"
+
+#. (itstool) path: credit/years
+#: C/index.page:15 C/message-board.c.page:17
+msgid "2010"
+msgstr "2010"
+
+#. (itstool) path: page/title
+#: C/index.page:28
+msgid "GNOME Developer Platform Demos"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/index.page:30
+msgid ""
+"This guide includes a variety of coding examples, such writing an image viewer or weather application. Each 
demo "
+"comes with code that you can try, and explains how each example works. They are a great way to get started 
with "
+"the GNOME developer platform."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/index.page:36
+msgid "Pick a Language"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/index.page:37
+msgid "These developer demos are available in a range of programming languages. Pick one to get started:"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/js.page:8
+msgctxt "link"
+msgid "JavaScript"
+msgstr "JavaScript"
+
+#. (itstool) path: credit/name
+#: C/js.page:21
+msgid "Ekaterina Gerasimova"
+msgstr "Ekaterina Gerasimova"
+
+#. (itstool) path: page/title
+#: C/js.page:26
+msgid "Tutorials, code samples and platform demos in JavaScript"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/js.page:31
+msgid "Code samples and tutorials"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/label.c.page:8
+msgctxt "text"
+msgid "Label (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/label.c.page:19 C/label.vala.page:18
+msgid "A widget which displays text"
+msgstr ""
+
+#. (itstool) path: page/title
+#. (itstool) path: td/p
+#: C/label.c.page:22 C/label.js.page:21 C/label.py.page:30 C/label.vala.page:21 C/toolbar_builder.py.page:98
+#: C/toolbar_builder.vala.page:81
+msgid "Label"
+msgstr ""
+
+#. (itstool) path: td/media
+#. (itstool) path: page/media
+#. 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:26 C/label.js.page:22 C/label.py.page:31 C/label.vala.page:22
+msgctxt "_"
+msgid "external ref='media/label.png' md5='734975c18653d88379f983e4501c3fc0'"
+msgstr ""
+
+#. (itstool) path: td/p
+#. (itstool) path: page/p
+#: C/label.c.page:27 C/label.py.page:32 C/label.vala.page:23
+msgid "A simple label"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/label.c.page:32
+#, no-wrap
+msgid ""
+"#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 ""
+
+#. (itstool) path: item/p
+#: C/label.c.page:39
+msgid "<link href=\"http://developer.gnome.org/gtk3/3.4/GtkLabel.html\";>GtkLabel</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/label.js.page:8
+msgctxt "text"
+msgid "Label (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/label.js.page:18
+msgid "A label which can contain text"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/label.js.page:23
+msgid "A label displaying a friendly message."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/label.js.page:25
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class LabelExample {\n"
+"\n"
+"    /* Create the application itself\n"
+"       This boilerplate code is needed to build any GTK+ application. */\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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_height: 100,\n"
+"            default_width: 200\n"
+"        });\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 ""
+
+#. (itstool) path: item/p
+#: C/label.js.page:32
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Label.html\";>Gtk.Label</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/label.py.page:9
+msgctxt "text"
+msgid "Label (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/label.py.page:27
+msgid "A widget that displays a small to medium amount of text"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/label.py.page:41
+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 ""
+
+#. (itstool) path: note/p
+#: C/label.py.page:43
+msgid "The highlighted lines indicate code that is different from the previous snippet."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/label.py.page:45
+#, no-wrap
+msgid ""
+"\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"
+"<e:hi>\n"
+"class MyLabel(Gtk.Label):\n"
+"    def __init__(self):\n"
+"        Gtk.Label.__init__(self)\n"
+"        self.set_text(\"Hello GNOME!\")\n"
+"</e:hi>\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"
+"\n"
+"        # create an instance of MyLabel\n"
+"<e:hi>\n"
+"        label = MyLabel()\n"
+"</e:hi>\n"
+"        # and add it to the window\n"
+"<e:hi>\n"
+"        win.add(label)\n"
+"</e:hi>\n"
+"        # show the window and everything on it\n"
+"        win.show_all()"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/label.py.page:82
+msgid "Useful methods for a Label widget"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/label.py.page:85
+msgid "An explanation of how to work with strings in GTK+ can be found in <link xref=\"strings.py\"/>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/label.py.page:89
+msgid "<code>set_line_wrap(True)</code> breaks lines if the text of the label exceeds the size of the 
widget."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/label.py.page:90
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/label.py.page:91
+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:"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/label.py.page:92
+#, no-wrap
+msgid ""
+"\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"
+"                 \"on the &lt;a href=\\\"http://www.gtk.org\\\"; \"\n"
+"                 \"title=\\\"Click to find out more\\\"&gt;internet&lt;/a&gt;.\")"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/label.vala.page:8
+msgctxt "text"
+msgid "Label (Vala)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/label.vala.page:25
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: p/link
+#: C/legal.xml:3
+msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License"
+msgstr ""
+
+#. (itstool) path: license/p
+#: C/legal.xml:3
+msgid ""
+"This work is licensed under a <_:link-1/>. 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 ""
+
+#. (itstool) path: info/desc
+#: C/license.page:8
+msgid "Legal information."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/license.page:11
+msgid "License"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/license.page:12
+msgid "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 Unported license."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/license.page:20
+msgid "You are free:"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/license.page:25
+msgid "<em>To share</em>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/license.page:26
+msgid "To copy, distribute and transmit the work."
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/license.page:29
+msgid "<em>To remix</em>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/license.page:30
+msgid "To adapt the work."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/license.page:33
+msgid "Under the following conditions:"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/license.page:38
+msgid "<em>Attribution</em>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/license.page:39
+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)."
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/license.page:46
+msgid "<em>Share Alike</em>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/license.page:47
+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."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/license.page:53
+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>."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/license.page:60
+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."
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/linkbutton.c.page:8
+msgctxt "text"
+msgid "LinkButton (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/linkbutton.c.page:18 C/linkbutton.vala.page:18
+msgid "Create buttons bound to a URL"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/linkbutton.c.page:21 C/linkbutton.js.page:21 C/linkbutton.py.page:22 C/linkbutton.vala.page:21
+msgid "LinkButton"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:23 C/linkbutton.js.page:22 C/linkbutton.py.page:24 C/linkbutton.vala.page:22
+msgctxt "_"
+msgid "external ref='media/linkbutton.png' md5='3712eae8953e87c65a6aa74503b8e32b'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/linkbutton.c.page:24
+msgid "This button links to the GNOME live webpage."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/linkbutton.c.page:26
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/linkbutton.c.page:34
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkLinkButton.html\";>GtkLinkButton</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/linkbutton.js.page:8
+msgctxt "text"
+msgid "LinkButton (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/linkbutton.js.page:18
+msgid "A button that links to a web page"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/linkbutton.js.page:23
+msgid "A button that links to live.gnome.org."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/linkbutton.js.page:25
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class LinkButtonExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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 ""
+
+#. (itstool) path: item/p
+#: C/linkbutton.js.page:32
+msgid "<link 
href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.LinkButton.html\";>Gtk.LinkButton</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/linkbutton.py.page:8
+msgctxt "text"
+msgid "LinkButton (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/linkbutton.py.page:19
+msgid "A button bound to an URL"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/linkbutton.py.page:25
+msgid "A button that links to a web page."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/linkbutton.py.page:32
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/linkbutton.py.page:36
+msgid "Useful methods for a LinkButton widget"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/linkbutton.py.page:38
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/linkbutton.py.page:39
+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>)."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/linkbutton.py.page:40
+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\"/>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/linkbutton.py.page:48
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkLinkButton.html\";>GtkLinkButton</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/linkbutton.vala.page:8
+msgctxt "text"
+msgid "LinkButton (Vala)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/linkbutton.vala.page:23
+msgid "This button links to GNOME live."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/linkbutton.vala.page:25
+#, no-wrap
+msgid ""
+"/* 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 ""
+
+#. (itstool) path: item/p
+#: C/linkbutton.vala.page:30
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.LinkButton.html\";>Gtk.LinkButton</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/magic-mirror.vala.page:8
+msgctxt "text"
+msgid "Magic mirror (Vala)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/magic-mirror.vala.page:11
+msgid "Use your webcam as a mirror using the GStreamer framework and GTK+"
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/magic-mirror.vala.page:15
+msgid "Daniel G. Siegel"
+msgstr "Daniel G. Siegel"
+
+#. (itstool) path: page/title
+#: C/magic-mirror.vala.page:29
+msgid "Magic mirror"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/magic-mirror.vala.page:32
+msgid ""
+"<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 ""
+
+#. (itstool) path: synopsis/p
+#: C/magic-mirror.vala.page:33
+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 ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:35
+msgid "Create a GTK+ application"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:36
+msgid "Access your webcam using GStreamer and embed the result into a window"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:37
+msgid "Grab photos off your webcam"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:42
+msgid "Installed copies of GTK, GStreamer, and a Vala compiler"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:43
+msgid "Basic knowledge of an object-oriented programming language"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:47
+msgctxt "_"
+msgid "external ref='media/magic-mirror.png' md5='8171faea6ed3b6ddac0da084c29e4e22'"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:57
+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>magic-mirror</file> as project name and directory."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:60
+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 ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:65
+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 ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:69
+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 ""
+
+#. (itstool) path: section/p
+#: C/magic-mirror.vala.page:79
+msgid ""
+"The code loads an (empty) window and shows it. More details are given below; skip this list if you 
understand the "
+"basics:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:85
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:89
+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 ""
+
+#. (itstool) path: section/title
+#: C/magic-mirror.vala.page:98
+msgid "Access the webcam video stream with GStreamer"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/magic-mirror.vala.page:99
+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 ""
+
+#. (itstool) path: section/code
+#: C/magic-mirror.vala.page:101
+#, no-wrap
+msgid ""
+"\n"
+"using GLib;\n"
+"using Gtk;\n"
+"\n"
+"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 ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:126
+msgid ""
+"First we remove the window we created before because GStreamer will take care of showing the picture on 
screen."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:130
+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?"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:137
+msgid ""
+"Of course it is also possible to integrate the video more tightly into other windows but that is an 
advanced topic "
+"that includes some details of the X Window System we will omit here."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:141
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/magic-mirror.vala.page:151
+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 ""
+
+#. (itstool) path: section/p
+#: C/magic-mirror.vala.page:158
+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 ""
+
+#. (itstool) path: section/title
+#: C/magic-mirror.vala.page:163
+msgid "Conclusion"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/magic-mirror.vala.page:164
+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."
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/menubar.c.page:8
+msgctxt "text"
+msgid "MenuBar (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/menubar.c.page:20 C/menubar.py.page:25 C/menubar.vala.page:20
+msgid "A widget which holds GtkMenuItem widgets"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/menubar.c.page:23 C/menubar.vala.page:23
+msgid "MenuBar"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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.c.page:25 C/menubar.py.page:29 C/menubar.vala.page:24
+msgctxt "_"
+msgid "external ref='media/menubar.png' md5='7b642aaa1628d5e43ab85ac230ac1c78'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/menubar.c.page:26 C/menubar.py.page:30 C/menubar.vala.page:25
+msgid "A MenuBar created using XML and GtkBuilder."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/menubar.c.page:27
+msgid ""
+"For a more in-depth look at this sample, please do not hesitate to check out the <link 
xref=\"menubar.vala\">Vala "
+"MenuBar</link> and/or <link xref=\"menubar.py\">Python MenuBar</link> tutorials."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/menubar.c.page:31
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the \"copy\" action */\n"
+"static void\n"
+"copy_callback (GSimpleAction *simple,\n"
+"            GVariant      *parameter,\n"
+"            gpointer       user_data)\n"
+"{\n"
+"   g_print (\"\\\"Copy\\\" activated\\n\");\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the \"paste\" action */\n"
+"static void\n"
+"paste_callback (GSimpleAction *simple,\n"
+"            GVariant      *parameter,\n"
+"            gpointer       user_data)\n"
+"{\n"
+"   g_print (\"\\\"Paste\\\" activated\\n\");\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the \"shape\" action */\n"
+"static void\n"
+"shape_callback (GSimpleAction *simple,\n"
+"            GVariant      *parameter,\n"
+"            gpointer       user_data)\n"
+"{\n"
+"   /* We first gather the value of the GVariant instance with a string type.\n"
+"    * The overall goal here is to see if shape is set to line, triangle, etc,\n"
+"    * and put that value within the variable \"answer\".\n"
+"    */\n"
+"   const gchar *answer = g_variant_get_string (parameter, NULL);\n"
+"   g_printf (\"Shape is set to %s.\\n\", answer);\n"
+"   /* Note that we set the state of the action */\n"
+"   g_simple_action_set_state (simple, parameter);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function in which closes the about_dialog created below */\n"
+"static void\n"
+"on_close (GtkDialog *dialog,\n"
+"          gint       response_id,\n"
+"          gpointer   user_data)\n"
+"{\n"
+"  gtk_widget_destroy (GTK_WIDGET (dialog));\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the about action (see aboutdialog.c example) */\n"
+"static void\n"
+"about_callback (GSimpleAction *simple,\n"
+"            GVariant      *parameter,\n"
+"            gpointer       user_data)\n"
+"{\n"
+"   GtkWidget *about_dialog;\n"
+"\n"
+"   about_dialog = gtk_about_dialog_new ();\n"
+"\n"
+"   const gchar *authors[] = {\"GNOME Documentation Team\", NULL};\n"
+"   const gchar *documenters[] = {\"GNOME Documentation Team\", NULL};\n"
+"\n"
+"   /* Fill in the about_dialog with the desired information */\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"
+"   /* The \"response\" signal is emitted when the dialog receives a delete event,\n"
+"    * therefore we connect that signal to the on_close callback function\n"
+"    * created above.\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 *copy_action;\n"
+"  GSimpleAction *paste_action;\n"
+"  GSimpleAction *shape_action;\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), \"MenuBar Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);\n"
+"\n"
+"  /* Begin creating the \"copy\" action.\n"
+"   * Note that it is an action without a state.\n"
+"   */\n"
+"  copy_action = g_simple_action_new (\"copy\", NULL);\n"
+"  /* Connected to a callback function */\n"
+"  g_signal_connect (copy_action, \"activate\", G_CALLBACK (copy_callback),\n"
+"                    GTK_WINDOW (window));\n"
+"  /* Added to the window */\n"
+"  g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (copy_action));\n"
+"\n"
+"  /* Begin creating the \"paste\" action.\n"
+"   * Note that it is an action without a state.\n"
+"   */\n"
+"  paste_action = g_simple_action_new (\"paste\", NULL);\n"
+"  /* Connect the action to a callback function */\n"
+"  g_signal_connect (paste_action, \"activate\", G_CALLBACK (paste_callback),\n"
+"                    GTK_WINDOW (window));\n"
+"  /* Add it to the window */\n"
+"  g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (paste_action));\n"
+"\n"
+"  /* Begin creating the \"shape\" action.\n"
+"   * Note that it is an action with a state.\n"
+"   * First we state that the parameter type of the simple action is a string.\n"
+"   * When using g_variant_type_new, it is appropriate to free the return value\n"
+"   * once you're done with it.\n"
+"   */\n"
+"  GVariantType *type_string = g_variant_type_new (\"s\");\n"
+"  /* parameters for the g_simple_action_new_stateful are: (name, parameter type,\n"
+"   * initial state).\n"
+"   */\n"
+"  shape_action = g_simple_action_new_stateful (\"shape\", type_string,\n"
+"                                               g_variant_new_string (\"line\"));\n"
+"  /* Connect the action to a callback function */\n"
+"  g_signal_connect (shape_action, \"activate\", G_CALLBACK (shape_callback),\n"
+"                    GTK_WINDOW (window));\n"
+"  /* Add it to the window */\n"
+"  g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (shape_action));\n"
+"  g_variant_type_free (type_string);\n"
+"\n"
+"  /* Begin creating the \"about\" action.\n"
+"   * Note that it is an action without a state.\n"
+"   */\n"
+"  about_action = g_simple_action_new (\"about\", NULL);\n"
+"  /* Connect the action to a callback function */\n"
+"  g_signal_connect (about_action, \"activate\", G_CALLBACK (about_callback),\n"
+"                    GTK_WINDOW (window));\n"
+"  /* Add it to the window */\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 \"new\" action */\n"
+"static void\n"
+"new_callback (GSimpleAction *simple,\n"
+"         GVariant      *parameter,\n"
+"         gpointer       user_data)\n"
+"{\n"
+"  g_print (\"You clicked \\\"New\\\"\\n\");\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the \"quit\" action */\n"
+"static void\n"
+"quit_callback (GSimpleAction *simple,\n"
+"         GVariant      *parameter,\n"
+"         gpointer       user_data)\n"
+"{\n"
+"  GApplication *application = user_data;\n"
+"\n"
+"  g_print (\"You clicked \\\"Quit\\\"\\n\");\n"
+"  g_application_quit (application);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the \"state\" action */\n"
+"static void\n"
+"state_callback (GSimpleAction *simple,\n"
+"         GVariant      *parameter,\n"
+"         gpointer       user_data)\n"
+"{\n"
+"   /* The two possibilities in this case for the \"answer\" variable are either\n"
+"    * \"on\" or \"off\".\n"
+"    */\n"
+"   const gchar *answer = g_variant_get_string (parameter, NULL);\n"
+"   /* We print the information to the user */\n"
+"   g_printf (\"State is set to %s.\\n\", answer);\n"
+"   /* Note that we set the state of the action */\n"
+"   g_simple_action_set_state (simple, parameter);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the \"awesome\" action */\n"
+"static void\n"
+"awesome_callback (GSimpleAction *simple,\n"
+"         GVariant      *parameter,\n"
+"         gpointer       user_data)\n"
+"{\n"
+"  GVariant *action_state = g_action_get_state (G_ACTION (simple));\n"
+"  gboolean active = g_variant_get_boolean (action_state);\n"
+"  GVariant *new_state = g_variant_new_boolean (!active);\n"
+"  /* Set the new state for the action.\n"
+"   * (Keeps track of whether it was last checked or unchecked).\n"
+"   */\n"
+"  g_simple_action_set_state (simple, new_state);\n"
+"\n"
+"  if (active)\n"
+"     g_print (\"You unchecked \\\"Awesome\\\"\\n\");\n"
+"  else\n"
+"     g_print (\"You checked \\\"Awesome\\\"\\n\");\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"
+"  /* Initialize variables */\n"
+"  GSimpleAction *new_action;\n"
+"  GSimpleAction *quit_action;\n"
+"  GSimpleAction *state_action;\n"
+"  GSimpleAction *awesome_action;\n"
+"\n"
+"  GtkBuilder *builder;\n"
+"\n"
+"  GError *error = NULL;\n"
+"\n"
+"  /* Begin creating the \"new\" action.\n"
+"   * Note that it is an action without a state.\n"
+"   */\n"
+"  new_action = g_simple_action_new (\"new\", NULL);\n"
+"  g_signal_connect (new_action, \"activate\", G_CALLBACK (new_callback), app);\n"
+"  /* It is added to the overall application */\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (new_action));\n"
+"\n"
+"  /* Begin creating the \"quit\" action.\n"
+"   * Note that it is an action without a state.\n"
+"   */\n"
+"  quit_action = g_simple_action_new (\"quit\", NULL);\n"
+"  g_signal_connect (quit_action, \"activate\", G_CALLBACK (quit_callback), app);\n"
+"  /* It is added to the overall application */\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (quit_action));\n"
+"\n"
+"  /* Begin creating the \"state\" action.\n"
+"   * Note that it is an action with a state.\n"
+"   */\n"
+"  GVariantType *type_string2 = g_variant_type_new (\"s\");\n"
+"  state_action = g_simple_action_new_stateful (\"state\", type_string2,\n"
+"                                               g_variant_new_string (\"off\"));\n"
+"  g_signal_connect (state_action, \"activate\", G_CALLBACK (state_callback), app);\n"
+"  /* It is added to the overall application */\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (state_action));\n"
+"  g_variant_type_free (type_string2);\n"
+"\n"
+"  /* Begin creating the \"awesome\" action.\n"
+"   * Note that it is an action with a state.\n"
+"   */\n"
+"  awesome_action = g_simple_action_new_stateful (\"awesome\", NULL, g_variant_new_boolean (FALSE));\n"
+"  g_signal_connect (awesome_action, \"activate\", G_CALLBACK (awesome_callback), app);\n"
+"  /* It is added to the overall application */\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (awesome_action));\n"
+"\n"
+"  /* A builder to add the User Interface designed with GLADE to the grid: */\n"
+"  builder = gtk_builder_new ();\n"
+"  /* Get the file (if it is there):\n"
+"   * Note: you must make sure that the file is in the current directory for\n"
+"   * this to work. The function used here returns a non-null value within\n"
+"   * our variable \"error\" if an error is indeed found.\n"
+"   */\n"
+"  gtk_builder_add_from_file (builder, \"menubar.ui\", &amp;error);\n"
+"  if (error != NULL) {\n"
+"     g_print (\"%s\\n\", error-&gt;message);\n"
+"     g_error_free (error);\n"
+"  }\n"
+"\n"
+"  /* Extract the menubar */\n"
+"  GObject *menubar = gtk_builder_get_object (builder, \"menubar\");\n"
+"  gtk_application_set_menubar (GTK_APPLICATION (app), G_MENU_MODEL (menubar));\n"
+"\n"
+"  /* Extract the appmenu */\n"
+"  GObject *appmenu = gtk_builder_get_object (builder, \"appmenu\");\n"
+"  gtk_application_set_app_menu (GTK_APPLICATION (app), G_MENU_MODEL (appmenu));\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 ""
+
+#. (itstool) path: item/p
+#: C/menubar.c.page:37 C/scrolledwindow.c.page:34
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkApplication.html\";>GtkApplication</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkApplication.html\";>GtkApplication</link>"
+
+#. (itstool) path: item/p
+#: C/menubar.c.page:40
+msgid "<link href=\"http://developer.gnome.org/gtk/stable/GtkAboutDialog.html\";>GtkAboutDialog</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk/stable/GtkAboutDialog.html\";>GtkAboutDialog</link>"
+
+#. (itstool) path: item/p
+#: C/menubar.c.page:41
+msgid "<link href=\"http://developer.gnome.org/glib/stable/glib-GVariantType.html\";>GtkVariantType</link>"
+msgstr "<link href=\"http://developer.gnome.org/glib/stable/glib-GVariantType.html\";>GtkVariantType</link>"
+
+#. (itstool) path: info/title
+#: C/menubar.py.page:8
+msgctxt "text"
+msgid "MenuBar (Python)"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/menubar.py.page:28
+msgid "MenuBar created using XML and GtkBuilder"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:34 C/menubar.vala.page:29
+msgid "Create a MenuBar using XML"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:35 C/menubar.vala.page:30
+msgid "To create the menubar using XML:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.py.page:37 C/menubar.vala.page:32
+msgid "Create <file>menubar.ui</file> using your favorite text editor."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.py.page:38 C/menubar.vala.page:33
+msgid "Enter the following line at the top of the file:"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/menubar.py.page:39 C/menubar.vala.page:34
+#, no-wrap
+msgid ""
+"\n"
+"&lt;?xml version=\"1.0\"? encoding=\"UTF-8\"?&gt;"
+msgstr ""
+"\n"
+"&lt;?xml version=\"1.0\"? encoding=\"UTF-8\"?&gt;"
+
+#. (itstool) path: item/p
+#: C/menubar.py.page:42 C/menubar.vala.page:37
+msgid ""
+"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 ""
+
+#. (itstool) path: item/code
+#: C/menubar.py.page:43 C/menubar.vala.page:38
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/menubar.py.page:45
+msgid "Now we will create the .py file and use GtkBuilder to import the <file>menubar.ui</file> we just 
created."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:49 C/menubar.vala.page:43
+msgid "Add the MenuBar to the window using GtkBuilder"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:50
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"MenuBar Example\", application=app)\n"
+"        self.set_default_size(200, 200)\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:51
+msgid "Now run the python application. It should look like the picture at the top of this page."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:55 C/menubar.vala.page:51
+msgid "Add items to the menus"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:56 C/menubar.vala.page:52
+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):"
+msgstr ""
+
+#. (itstool) path: listing/title
+#: C/menubar.py.page:59
+msgid "menubar.ui"
+msgstr ""
+
+#. (itstool) path: listing/code
+#. (itstool) path: section/code
+#: C/menubar.py.page:60 C/menubar.vala.page:53
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:88
+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 ""
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:93 C/menubar.vala.page:87
+msgid "Setup actions"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:95
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:96
+#, no-wrap
+msgid ""
+"\n"
+"new_action = Gio.SimpleAction.new(\"new\", None)\n"
+"new_action.connect(\"activate\", self.new_callback)"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:100
+msgid "And we create the callback function of \"new\" as"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:101
+#, no-wrap
+msgid ""
+"\n"
+"def new_callback(self, action, parameter):\n"
+"    print \"You clicked \\\"New\\\"\""
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:105
+msgid ""
+"Now, in the XML file, we connect the menu items to the actions in the XML file by adding the \"action\" 
attribute:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:106
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:112
+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 ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:114
+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"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:115
+#, no-wrap
+msgid ""
+"\n"
+"self.add_action(new_action)"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:118
+msgid "See <link xref=\"signals-callbacks.py\"/> for a more detailed explanation of signals and callbacks."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:122 C/menubar.vala.page:139
+msgid "Actions: Application or Window?"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:123 C/menubar.vala.page:140
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:125 C/menubar.vala.page:143
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:127
+msgid ""
+"The complete example files contain both application actions and window actions. 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 application 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 ""
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:131 C/menubar.vala.page:133
+msgid "Choices submenu and items with state"
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:132 C/menubar.vala.page:134
+msgctxt "_"
+msgid "external ref='media/menubar_choices.png' md5='47cdfa12caf85ba20dd3e835bd7f893f'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:133
+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 ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:135
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:136
+#, no-wrap
+msgid ""
+"\n"
+"shape_action = Gio.SimpleAction.new_stateful(\"shape\", GLib.VariantType.new('s'), 
GLib.Variant.new_string('line'))"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:139
+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)"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:141
+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 ""
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:143
+#, no-wrap
+msgid ""
+"\n"
+"shape_action.connect(\"activate\", self.shape_callback)\n"
+"self.add_action(shape_action)"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:150 C/menubar.vala.page:154
+msgid "Complete XML UI file for this example"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:151 C/menubar.vala.page:155
+#, 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;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 ""
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:155
+msgid "Complete Python file for this example"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:156
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import GLib\n"
+"from gi.repository import Gio\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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(\n"
+"            \"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"
+"        print(\"Shape is set to\", parameter.get_string())\n"
+"        # Note that we set the state of the action!\n"
+"        action.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(\n"
+"            \"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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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(\n"
+"            \"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(\n"
+"            \"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 ""
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:159
+msgid "Mnemonics and Accelerators"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:160 C/menubar.vala.page:162
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:161 C/menubar.vala.page:163
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:163 C/menubar.vala.page:168
+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 ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:164 C/menubar.vala.page:169
+msgid ""
+"<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 ""
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:166 C/menubar.vala.page:171
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:174 C/menubar.vala.page:179
+msgid "Translatable strings"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:175 C/menubar.vala.page:180
+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 translatable. To make a label translatable, 
simple "
+"set <code>translatable=\"yes\"</code>:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:179
+#, no-wrap
+msgid "&lt;attribute name=\"label\" translatable=\"yes\"&gt;Quit&lt;/attribute&gt;"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.py.page:186
+msgid "<link href=\"http://developer.gnome.org/gio/unstable/GSimpleAction.html\";>GSimpleAction</link>"
+msgstr "<link href=\"http://developer.gnome.org/gio/unstable/GSimpleAction.html\";>GSimpleAction</link>"
+
+#. (itstool) path: item/p
+#: C/menubar.py.page:187 C/toolbar_builder.py.page:197
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkBuilder.html\";>GtkBuilder</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkBuilder.html\";>GtkBuilder</link>"
+
+#. (itstool) path: info/title
+#: C/menubar.vala.page:8
+msgctxt "text"
+msgid "MenuBar (Vala)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.vala.page:40
+msgid "Now we will create the .vala file and use GtkBuilder to import the <file>menubar.ui</file> we just 
created."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubar.vala.page:44
+#, no-wrap
+msgid ""
+"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 ""
+
+#. (itstool) path: section/p
+#: C/menubar.vala.page:45
+msgid "Now, compile the vala file, and run it. The application should look like the picture at the top of 
this page."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.vala.page:80
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/menubar.vala.page:82
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.vala.page:88
+msgid "This is a three step process."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.vala.page:90
+msgid "First we create the ActionEntry array in the MyApplication class. An ActionEntry consists of:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.vala.page:93
+msgid "the \"action name\" (mandatory)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.vala.page:94
+msgid "the callback function to connect to the \"activate\" signal of the action (if applicable)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.vala.page:95
+msgid "the type of the parameter that must be passed to the activate function for the action (if applicable)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.vala.page:96
+msgid "the initial state for this action (if applicable)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.vala.page:97
+msgid "the callback to connect to \"change-state\" signal (if applicable)"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/menubar.vala.page:99
+#, no-wrap
+msgid ""
+"\n"
+"const ActionEntry[] actions = {\n"
+"    { \"new\", new_cb }, // {\"action name\", callback_function}\n"
+"    { \"quit\", quit_cb }\n"
+"};"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.vala.page:106
+msgid "Second, we create the callback functions the actions are connected to."
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/menubar.vala.page:107
+#, no-wrap
+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 ();\n"
+"}"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.vala.page:118
+msgid "And lastly, we connect the menu items to the actions in the XML file by adding the \"action\" 
attribute:"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/menubar.vala.page:119
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/menubar.vala.page:135
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.vala.page:146
+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 application 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 ""
+
+#. (itstool) path: section/title
+#: C/menubar.vala.page:157
+msgid "Complete Vala file for this example"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubar.vala.page:158
+#, no-wrap
+msgid ""
+"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\tthis.quit ();\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 ""
+
+#. (itstool) path: section/title
+#: C/menubar.vala.page:161
+msgid "Mnemonics"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/menubar.vala.page:167
+msgid "Accelerators"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubar.vala.page:183
+msgid ""
+"<code mime=\"application/xml\">&lt;attribute name=\"label\" 
translatable=\"yes\"&gt;Quit&lt;/attribute&gt;</code>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubar.vala.page:192
+msgid "<link href=\"http://valadoc.org/gio-2.0/GLib.ActionEntry.html\";>Glib.ActionEntry</link>"
+msgstr "<link href=\"http://valadoc.org/gio-2.0/GLib.ActionEntry.html\";>Glib.ActionEntry</link>"
+
+#. (itstool) path: item/p
+#: C/menubar.vala.page:193
+msgid "<link href=\"http://valadoc.org/gio-2.0/Gtk.Builder.html\";>Gtk.Builder</link>"
+msgstr "<link href=\"http://valadoc.org/gio-2.0/Gtk.Builder.html\";>Gtk.Builder</link>"
+
+#. (itstool) path: info/title
+#: C/menubutton.c.page:8 C/menubutton.py.page:8
+msgctxt "text"
+msgid "MenuButton"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/menubutton.c.page:18 C/menubutton.js.page:18 C/menubutton.py.page:25 C/menubutton.vala.page:18
+msgid "A widget that shows a menu when clicked on"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/menubutton.c.page:21 C/menubutton.js.page:21 C/menubutton.py.page:28 C/menubutton.vala.page:21
+msgid "MenuButton"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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.c.page:22 C/menubutton.js.page:22 C/menubutton.py.page:29 C/menubutton.vala.page:22
+msgctxt "_"
+msgid "external ref='media/menubutton.png' md5='99eedc5ef2d6c56d32ca9ae7f3f3320f'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/menubutton.c.page:23 C/menubutton.js.page:23 C/menubutton.py.page:30 C/menubutton.vala.page:23
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/menubutton.c.page:25 C/menubutton.js.page:27
+msgid "You need to be running GNOME 3.6 or later for the MenuButton to work."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubutton.c.page:31
+#, no-wrap
+msgid ""
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"/* Callback function for the undo action */\n"
+"static void\n"
+"about_callback (GSimpleAction *simple,\n"
+"               GVariant      *parameter,\n"
+"               gpointer       user_data)\n"
+"{\n"
+"  g_print (\"You clicked \\\"About\\\"\\n\");\n"
+"}\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GMenu *submenu;\n"
+"  GtkWidget *grid;\n"
+"  GMenu *menumodel;\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *menubutton;\n"
+"  GSimpleAction *about_action;\n"
+"\n"
+"  window = gtk_application_window_new (app);\n"
+"  grid = gtk_grid_new ();\n"
+"\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"MenuButton Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);\n"
+"\n"
+"  menubutton = gtk_menu_button_new ();\n"
+"  gtk_widget_set_size_request (menubutton, 80, 35);\n"
+"\n"
+"  gtk_grid_attach (GTK_GRID (grid), menubutton, 0, 0, 1, 1);\n"
+"  gtk_container_add (GTK_CONTAINER (window), grid);\n"
+"\n"
+"  menumodel = g_menu_new ();\n"
+"  g_menu_append (menumodel, \"New\", \"app.new\");\n"
+"  g_menu_append (menumodel, \"About\", \"win.about\");\n"
+"\n"
+"  submenu = g_menu_new ();\n"
+"  g_menu_append_submenu (menumodel, \"Other\", G_MENU_MODEL (submenu));\n"
+"  g_menu_append (submenu, \"Quit\", \"app.quit\");\n"
+"  gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (menubutton), G_MENU_MODEL (menumodel));\n"
+"\n"
+"  about_action = g_simple_action_new (\"about\", NULL);\n"
+"  g_signal_connect (about_action, \"activate\", G_CALLBACK (about_callback),\n"
+"                    GTK_WINDOW (window));\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"
+"static void\n"
+"new_callback (GSimpleAction *simple,\n"
+"              GVariant      *parameter,\n"
+"              gpointer       user_data)\n"
+"{\n"
+"  g_print (\"You clicked \\\"New\\\"\\n\");\n"
+"}\n"
+"\n"
+"static void\n"
+"quit_callback (GSimpleAction *simple,\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 (GApplication *app,\n"
+"         gpointer      user_data)\n"
+"{\n"
+"  GSimpleAction *new_action;\n"
+"  GSimpleAction *quit_action;\n"
+"\n"
+"  new_action = g_simple_action_new (\"new\", NULL);\n"
+"  g_signal_connect (new_action, \"activate\", G_CALLBACK (new_callback), app);\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (new_action));\n"
+"\n"
+"  quit_action = g_simple_action_new (\"quit\", NULL);\n"
+"  g_signal_connect (quit_action, \"activate\", G_CALLBACK (quit_callback), app);\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (quit_action));\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"
+"  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"
+"  return status;\n"
+"}\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubutton.c.page:38
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMenuButton.html\";>GtkMenuButton</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMenuButton.html\";>GtkMenuButton</link>"
+
+#. (itstool) path: item/p
+#: C/menubutton.c.page:39
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMenu.html\";>GtkMenu</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMenu.html\";>GtkMenu</link>"
+
+#. (itstool) path: item/p
+#: C/menubutton.c.page:40
+msgid "<link href=\"https://developer.gnome.org/gio/unstable/GMenuModel.html\";>GMenuModel</link>"
+msgstr "<link href=\"https://developer.gnome.org/gio/unstable/GMenuModel.html\";>GMenuModel</link>"
+
+#. (itstool) path: item/p
+#: C/menubutton.c.page:41
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkArrow.html\";>GtkArrow</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkArrow.html\";>GtkArrow</link>"
+
+#. (itstool) path: info/title
+#: C/menubutton.js.page:8
+msgctxt "text"
+msgid "MenuButton (JavaScript)"
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/menubutton.js.page:13
+msgid "Anna Zacchi"
+msgstr "Anna Zacchi"
+
+#. (itstool) path: page/code
+#: C/menubutton.js.page:28
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class Application {\n"
+"\n"
+"    //create the application\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    //create the UI (in this case it's just the ApplicationWindow)\n"
+"    _buildUI() {\n"
+"        this._window = new Gtk.ApplicationWindow({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"MenuButton Example\" });\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 = Gtk.Menu.new_from_model(this.menuModel);\n"
+"\n"
+"        this.menu.show();\n"
+"        this._menuButton.set_menu_model (this.menuModel);\n"
+"        this._menuButton.set_size_request(80, 35);\n"
+"        this._menuButton.show();\n"
+"\n"
+"        this._window.show_all();\n"
+"    }\n"
+"\n"
+"    _showNew() {\n"
+"        print(\"You clicked \\\"New\\\"\");\n"
+"    }\n"
+"\n"
+"    _showAbout() {\n"
+"        print(\"You clicked \\\"About\\\"\");\n"
+"    }\n"
+"\n"
+"    //create the menu items and connect the signals to the callback functions.\n"
+"    _initMenus() {\n"
+"        let newAction = new Gio.SimpleAction({ name: 'new' });\n"
+"        newAction.connect('activate', () =&gt; { this._showNew(); });\n"
+"        this.application.add_action(newAction);\n"
+"\n"
+"        let aboutAction = new Gio.SimpleAction({ name: 'about' });\n"
+"        aboutAction.connect('activate', () =&gt; { this._showAbout(); });\n"
+"        this.application.add_action(aboutAction);\n"
+"\n"
+"        let quitAction = new Gio.SimpleAction({ name: 'quit' });\n"
+"        quitAction.connect('activate', () =&gt; { this._window.destroy(); });\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() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    //callback function for 'startup' signal\n"
+"    _onStartup() {\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 ""
+
+#. (itstool) path: item/p
+#: C/menubutton.js.page:33 C/menubutton.vala.page:33
+msgid "<link href=\"http://developer.gnome.org/gtk3/3.5/gtk3-GtkMenuButton.html\";>MenuButton</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/3.5/gtk3-GtkMenuButton.html\";>MenuButton</link>"
+
+#. (itstool) path: note/p
+#: C/menubutton.py.page:32 C/menubutton.vala.page:27
+msgid "You need to be running GNOME 3.6 for the MenuButton to work."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/menubutton.py.page:38
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import Gio\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/menubutton.py.page:42
+msgid "Useful methods for a MenuButton widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubutton.py.page:43
+msgid ""
+"In line 33 the signal <code>\"activate\"</code> from the action <code>about_action</code> is connected to 
the "
+"callback function <code>about_callback()</code> using <code><var>action</var>.connect(<var>signal</var>, "
+"<var>callback function</var>)</code>. See <link xref=\"signals-callbacks.py\"/> for a more detailed 
explanation."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubutton.py.page:45
+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'."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubutton.py.page:47
+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>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/menubutton.py.page:49
+msgid ""
+"<code>set_align_widget(alignment)</code> and <code>set_direction(direction)</code> can be used to set these 
"
+"properties."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/menubutton.py.page:56
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMenuButton.html\";>MenuButton</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMenuButton.html\";>MenuButton</link>"
+
+#. (itstool) path: info/title
+#: C/menubutton.vala.page:8
+msgctxt "text"
+msgid "MenuButton (Vala)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/menubutton.vala.page:28
+#, no-wrap
+msgid ""
+"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 ""
+
+#. (itstool) path: info/title
+#: C/message-board.c.page:8
+msgctxt "text"
+msgid "Message board (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/message-board.c.page:11
+msgid "A simple program using WebKitGTK+ and the DOM."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/message-board.c.page:26
+msgid "Message board"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:31
+msgid "How to display a web page with WebKit."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:32
+msgid "How to manipulate the contents of a web page using WebKit's DOM functions."
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/message-board.c.page:35
+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+."
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:41
+msgctxt "_"
+msgid "external ref='media/message-board.ogv' md5='beb80c4538776dc2cdd26c95abea5027'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:48
+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 ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:53
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:59
+msgid ""
+"In Anjuta, click <guiseq><gui>File</gui><gui>New</gui> <gui>Project</gui></guiseq> to open the new project "
+"assistant."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:61
+msgid "Select <gui>GTK+ (simple)</gui> on the <gui>C</gui> tab, and click <gui>Continue</gui>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:63
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:66
+msgid ""
+"Disable the <gui>Use GtkBuilder for user interface</gui> option as this tutorial builds the user-interface "
+"manually."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:69
+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>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:75
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/message-board.c.page:82
+#, no-wrap
+msgid "#include &lt;webkit/webkit.h&gt;"
+msgstr "#include &lt;webkit/webkit.h&gt;"
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:84
+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>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:90
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/message-board.c.page:96
+msgid "Lay out your window and web view"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:98
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/message-board.c.page:103
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:138
+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 ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:144
+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 ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:150
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:157
+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 ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:164
+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:"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/message-board.c.page:170
+msgid "<code>WEBKIT_WEB_VIEW (view)</code>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:171
+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."
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/message-board.c.page:176
+msgid "<code>\"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;\"</code>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:177
+msgid "The simplest HTML file you could possibly write."
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/message-board.c.page:180
+msgid "<code>\"text/html\"</code>"
+msgstr "<code>\"text/html\"</code>"
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:181
+msgid "The MIME type of the content you provided. In this case, you're using plain HTML."
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/message-board.c.page:185
+msgid "<code>\"UTF-8\"</code>"
+msgstr "<code>\"UTF-8\"</code>"
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:186
+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."
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/message-board.c.page:191
+msgid "<code>NULL</code>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:192
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/message-board.c.page:199
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:207
+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>.)"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:211
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/message-board.c.page:217
+msgid "Hook up signals"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:219
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/message-board.c.page:226
+#, no-wrap
+msgid ""
+"\n"
+"g_signal_connect (entry, \"activate\", G_CALLBACK (entry_activate_cb), view);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:230
+msgid ""
+"You then have to actually define <code>entry_activate_cb</code>. Define it as follows, anywhere above "
+"<code>create_window</code>:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/message-board.c.page:233
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:253
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:259
+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 ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:270
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:283
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/message-board.c.page:290
+msgid "Make it look better with CSS"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:292
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:299
+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 ""
+
+#. (itstool) path: section/code
+#: C/message-board.c.page:308
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:321
+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 ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:326
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/message-board.c.page:332
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:342
+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 ""
+
+#. (itstool) path: section/code
+#: C/message-board.c.page:345
+#, no-wrap
+msgid ""
+"\n"
+"gchar *tmp, *css;\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:349
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:356
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:363
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/message-board.c.page:369
+msgid "Learn more"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/message-board.c.page:371
+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:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:377
+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 ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:383
+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 ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:391
+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 ""
+
+#. (itstool) path: item/p
+#: C/message-board.c.page:398
+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 ""
+
+#. (itstool) path: info/title
+#: C/messagedialog.c.page:8
+msgctxt "text"
+msgid "MessageDialog (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/messagedialog.c.page:19 C/messagedialog.py.page:19 C/messagedialog.vala.page:18
+msgid "A message window"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/messagedialog.c.page:22 C/messagedialog.js.page:24 C/messagedialog.py.page:22 
C/messagedialog.vala.page:21
+msgid "MessageDialog"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:24 C/messagedialog.js.page:25 C/messagedialog.py.page:23 
C/messagedialog.vala.page:22
+msgctxt "_"
+msgid "external ref='media/messagedialog.png' md5='1956288274018e2386d9cba96a2101de'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/messagedialog.c.page:25 C/messagedialog.vala.page:23
+msgid "A modal message dialog which can cause the world to explode."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/messagedialog.c.page:26
+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."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/messagedialog.c.page:30
+#, 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 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 ""
+
+#. (itstool) path: item/p
+#: C/messagedialog.c.page:37
+msgid "<link href=\"http://developer.gnome.org/gio/stable/GApplication.html\";>GApplication</link>"
+msgstr "<link href=\"http://developer.gnome.org/gio/stable/GApplication.html\";>GApplication</link>"
+
+#. (itstool) path: item/p
+#: C/messagedialog.c.page:39
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkMessageDialog.html\";>GtkMessageDialog</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkMessageDialog.html\";>GtkMessageDialog</link>"
+
+#. (itstool) path: item/p
+#: C/messagedialog.c.page:40
+msgid ""
+"<link 
href=\"http://developer.gnome.org/gio/stable/GSimpleAction.html#g-simple-action-new\";>GSimpleAction</link>"
+msgstr ""
+"<link 
href=\"http://developer.gnome.org/gio/stable/GSimpleAction.html#g-simple-action-new\";>GSimpleAction</link>"
+
+#. (itstool) path: info/title
+#: C/messagedialog.js.page:8
+msgctxt "text"
+msgid "MessageDialog (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/messagedialog.js.page:21
+msgid "A popup message attached to a window"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/messagedialog.js.page:26
+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 it's attached to. This one can cause the world to explode (or at 
least it "
+"says that it can). To make the popup appear when you run this sample, click on \"Message\" inside of its "
+"application menu -- that's the menu that appears when you click on an application's name in the upper-left 
screen "
+"corner, next to Activities."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/messagedialog.js.page:27
+msgid ""
+"The difference between a MessageDialog and a <link xref=\"dialog.js\">Dialog</link> is that a Dialog can 
contain "
+"whatever widgets and content you want to put in it, whereas a MessageDialog is just a convenient way to 
make "
+"popups appear with a basic message and buttons."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:32 C/radiobutton.js.page:29 C/scale.js.page:29 C/spinbutton.js.page:32
+#: C/statusbar.js.page:29 C/switch.js.page:36 C/togglebutton.js.page:29
+#, 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 ""
+
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:44
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: note/p
+#: C/messagedialog.js.page:71 C/switch.js.page:76
+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 ""
+
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:72
+#, 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 ""
+
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:86
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/messagedialog.js.page:92
+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>."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/messagedialog.js.page:96
+msgid "Creating the application's menu"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:97
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/messagedialog.js.page:122
+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 GMenu 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: Message, 
and "
+"Quit."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/messagedialog.js.page:126
+msgid "Creating the MessageDialog"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:127
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/messagedialog.js.page:142
+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 that, we can set what kind of buttons it has and what kind of message it 
is "
+"(which determines what icon appears next to the message), and write out the text inside it, before 
connecting its "
+"\"response\" signal to the callback function which handles it."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/messagedialog.js.page:143
+msgid "Here are some resources for making your own MessageDialogs:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/messagedialog.js.page:145
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkMessageDialog.html#GtkButtonsType\";>List of button 
types</"
+"link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/messagedialog.js.page:146
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkMessageDialog.html#GtkMessageType\";>List of message 
types</"
+"link>"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:150
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/messagedialog.js.page:173
+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 them to it for it to work). Here we use a simple switch to change 
the "
+"\"warning label\"'s text, depending on which option you select. The DELETE_EVENT occurs if you press Escape 
to "
+"cancel the MessageDialog, instead of clicking OK or Cancel. Whatever you select, the popup is destroyed 
afterwards."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:175
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new MessageDialogExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/messagedialog.js.page:180
+msgid ""
+"Finally, we create a new instance of the finished MessageDialogExample class, and set the application 
running."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:185
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class MessageDialogExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsmessagedialog',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup() {\n"
+"        this._initMenus();\n"
+"        this._buildUI ();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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"
+"\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"
+"        });\n"
+"        this._window.add (this.warningLabel);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    }\n"
+"\n"
+"    // Build the application menu, including the button that calls the dialog\n"
+"    _initMenus() {\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', () =&gt; { this._showMessageDialog(); });\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', () =&gt; { this._window.destroy(); });\n"
+"        this.application.add_action(quitAction);\n"
+"    }\n"
+"\n"
+"    _showMessageDialog() {\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', this._response_cb.bind(this));\n"
+"        this._messageDialog.show();\n"
+"    }\n"
+"\n"
+"    // Callback function (aka signal handler) for the response signal\n"
+"    _response_cb(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"
+"// Run the application\n"
+"let app = new MessageDialogExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/messagedialog.py.page:8
+msgctxt "text"
+msgid "MessageDialog (Python)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/messagedialog.py.page:24
+msgid "A message dialog which prints messages on the terminal, depending on your choices."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/messagedialog.py.page:31
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import Gio\n"
+"import sys\n"
+"\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"
+"            print(\"*boom*\")\n"
+"        # 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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/messagedialog.py.page:36
+msgid "Useful methods for a MessageDialog widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/messagedialog.py.page:37
+msgid ""
+"In line 18 the signal <code>\"activate\"</code> is connected to the callback function 
<code>message_cb()</code> "
+"using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See <link 
xref="
+"\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:39
+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 ""
+
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:40
+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 ""
+
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:41
+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 ""
+
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:42
+msgid "We could substitute the default image of the MessageDialog with another image using"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/messagedialog.py.page:43
+#, 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)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:48
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:49
+msgid ""
+"<code>format_secondary_text(\"some secondary message\")</code> sets a secondary message. The primary text 
becomes "
+"bold."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:59
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMessageDialog.html\";>GtkMessageDialog</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:63
+msgid "<link href=\"http://developer.gnome.org/gio/unstable/GActionMap.html\";>GActionMap</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/messagedialog.vala.page:8
+msgctxt "text"
+msgid "MessageDialog (Vala)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/messagedialog.vala.page:25
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/messagedialog.vala.page:31
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ResponseType.html\";>Gtk.ResponseType</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ResponseType.html\";>Gtk.ResponseType</link>"
+
+#. (itstool) path: item/p
+#: C/messagedialog.vala.page:32
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.MessageDialog.html\";>Gtk.MessageDialog</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.MessageDialog.html\";>Gtk.MessageDialog</link>"
+
+#. (itstool) path: item/p
+#: C/messagedialog.vala.page:33
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.DialogFlags.html\";>Gtk.DialogFlags</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.DialogFlags.html\";>Gtk.DialogFlags</link>"
+
+#. (itstool) path: item/p
+#: C/messagedialog.vala.page:34
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.MessageType.html\";>Gtk.MessageType</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.MessageType.html\";>Gtk.MessageType</link>"
+
+#. (itstool) path: item/p
+#: C/messagedialog.vala.page:35
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ButtonsType.html\";>Gtk.ButtonsType</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ButtonsType.html\";>Gtk.ButtonsType</link>"
+
+#. (itstool) path: info/title
+#: C/model-view-controller.py.page:9
+msgctxt "text"
+msgid "The Model/View/Controller design (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#. (itstool) path: page/title
+#: C/model-view-controller.py.page:14 C/model-view-controller.py.page:27
+msgid "The Model/View/Controller design"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/model-view-controller.py.page:32 C/properties.py.page:32 C/signals-callbacks.py.page:32
+msgid "Overview"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:34
+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>)."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/model-view-controller.py.page:39
+msgid "The Model"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:41
+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)."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:43
+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>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:45
+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>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:47
+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 ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:49
+msgid "Useful methods for a <code>Gtk.TreeModel</code>:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:51
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:52
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:53
+msgid ""
+"<code>iter_has_child(treeiter)</code> returns <code>True</code> if <code>treeiter</code> has children, "
+"<code>False</code> otherwise."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:54
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:55
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:58
+msgid "Useful methods for a <code>Gtk.ListStore</code>:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:60
+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 ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:61 C/model-view-controller.py.page:67
+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 ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:64
+msgid "Useful methods for a <code>Gtk.TreeStore</code>:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:66
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/model-view-controller.py.page:73
+msgid "The View: the TreeView case"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:75
+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>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:77
+msgid "The <code>Gtk.TreeViewColumn</code> is used to organize the vertical columns."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:79
+msgid "Useful methods for a <code>Gtk.TreeView</code>:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:81
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:82
+msgid ""
+"<code>get_model()</code> returns the model this tree view is based on, <code>None</code> if the model is 
unset."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:83
+msgid "<code>append_column(column)</code> appends <code>column</code> to the list of columns."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:84
+msgid "<code>get_selection()</code> gets the <code>Gtk.TreeSelection</code> associated with this tree view."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:87
+msgid "Useful methods for a <code>Gtk.TreeViewColumn</code>:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:89
+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>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:90
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:91
+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 ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:92
+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 column header clickable."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:93
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:94
+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>."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/model-view-controller.py.page:100
+msgid "The View: the ComboBox case"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:102
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:104
+msgid "Useful methods for a <code>Gtk.ComboBox</code>:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:106
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:107
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:108
+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 ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:109
+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)."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:110
+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 laid out in a grid."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:113
+msgid "Useful methods for a <code>Gtk.ComboBoxText</code>:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:115
+msgid ""
+"The static method <code>new_with_entry()</code> creates a new empty <code>Gtk.ComboBoxText</code> with an 
entry."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:116
+msgid "<code>append_text(text)</code> appends <code>text</code> to the list of strings stored in this combo 
box."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:117
+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 ""
+
+#. (itstool) path: section/title
+#: C/model-view-controller.py.page:123
+msgid "The View: the Cellrenderers"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:125
+msgid "The View makes use of <code>Gtk.CellRenderer</code>s of various types to draw the data."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:127
+msgid "Implementations of <code>Gtk.CellRenderer</code> and useful methods:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:129
+msgid "<code>Gtk.CellRendererText</code> - renders text in a cell"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:130
+msgid "<code>Gtk.CellRendererToggle</code> - renders a toggle or radio button in a cell. Useful methods:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:132
+msgid "<code>set_active(setting)</code> - activates or deactivates a cell renderer"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:133
+msgid "<code>get_active()</code> - returns whether the cell renderer is active"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:134
+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 ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:135
+msgid "<code>get_radio()</code> - returns whether we are rendering radio toggles rather than checkboxes."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:138
+msgid "<code>Gtk.CellRendererPixbuf</code> - renders an image in a cell"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:139
+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 ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:140
+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 ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:141
+msgid "<code>Gtk.CellRendererSpinner</code> - renders a spinning animation in a cell"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:142
+msgid "<code>Gtk.CellRendererSpin</code> - renders a spin button in a cell"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:143
+msgid "<code>Gtk.CellRendererAccel</code> - renders a keyboard accelerator in a cell"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/model-view-controller.py.page:149
+msgid "The Controller: the Selection"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:151
+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 ""
+
+#. (itstool) path: section/code
+#: C/model-view-controller.py.page:153
+#, no-wrap
+msgid ""
+"\n"
+"select = tree.get_selection()\n"
+"select.connect(\"changed\", on_tree_selection_changed)\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:158
+msgid "Then to retrieve data for the row selected:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/model-view-controller.py.page:160
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:167
+msgid "Useful methods for a <code>Gtk.TreeSelection</code>:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:170
+msgid "<code>set_mode(type)</code> sets the type of selection, where type is one of"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:172
+msgid "<code>Gtk.SelectionMode.NONE</code> - no selection is possible"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:173
+msgid "<code>Gtk.SelectionMode.SINGLE</code> - zero or one element may be selected"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:174
+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 ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:175
+msgid ""
+"<code>Gtk.SelectionMode.MULTIPLE</code> -any number of elements may be selected. Clicks toggle the state of 
an "
+"item. 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 ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:178
+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 ""
+
+#. (itstool) path: section/title
+#: C/model-view-controller.py.page:184 C/properties.py.page:57 C/signals-callbacks.py.page:46 
C/strings.py.page:112
+msgid "References"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:187 C/treeview_advanced_liststore.py.page:45
+#: C/treeview_cellrenderertoggle.py.page:45 C/treeview_simple_liststore.py.page:46 
C/treeview_treestore.py.page:45
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeModel.html\";>GtkTreeModel</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeModel.html\";>GtkTreeModel</link>"
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:188 C/treeview_advanced_liststore.py.page:44
+#: C/treeview_cellrenderertoggle.py.page:44 C/treeview_simple_liststore.py.page:45 
C/treeview_treestore.py.page:44
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeView.html\";>GtkTreeView</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeView.html\";>GtkTreeView</link>"
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:189 C/treeview_advanced_liststore.py.page:48
+#: C/treeview_cellrenderertoggle.py.page:49 C/treeview_simple_liststore.py.page:49 
C/treeview_treestore.py.page:48
+msgid "<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeViewColumn.html\";>GtkTreeViewColumn</link>"
+msgstr "<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeViewColumn.html\";>GtkTreeViewColumn</link>"
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:191
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRenderer.html\";>GtkCellRenderer</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRenderer.html\";>GtkCellRenderer</link>"
+
+#. (itstool) path: info/title
+#: C/paned.c.page:8
+msgctxt "text"
+msgid "Paned (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/paned.c.page:18 C/paned.js.page:18 C/paned.py.page:19 C/paned.vala.page:18
+msgid "A widget with two adjustable panes"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/paned.c.page:21 C/paned.js.page:21 C/paned.py.page:22 C/paned.vala.page:21
+msgid "Paned"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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.c.page:22 C/paned.js.page:22 C/paned.py.page:23 C/paned.vala.page:22
+msgctxt "_"
+msgid "external ref='media/paned.png' md5='8c7e1df065395c9aafcd65036a293d8a'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/paned.c.page:23 C/paned.js.page:23 C/paned.py.page:24 C/paned.vala.page:23
+msgid "Two images in two adjustable panes, horizontally aligned."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/paned.c.page:29
+#, no-wrap
+msgid ""
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *paned;\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *image1;\n"
+"  GtkWidget *image2;\n"
+"\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Paned Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 450, 350);\n"
+"\n"
+"  paned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);\n"
+"  image1 = gtk_image_new_from_file (\"gnome-image.png\");\n"
+"  image2 = gtk_image_new_from_file (\"tux.png\");\n"
+"\n"
+"  gtk_paned_add1 (GTK_PANED (paned), image1);\n"
+"  gtk_paned_add2 (GTK_PANED (paned), image2);\n"
+"\n"
+"  gtk_container_add (GTK_CONTAINER (window), paned);\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"
+"  return status;\n"
+"}\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/paned.c.page:36 C/paned.py.page:42
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkPaned.html\";>GtkPaned</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkPaned.html\";>GtkPaned</link>"
+
+#. (itstool) path: item/p
+#: C/paned.c.page:37 C/paned.js.page:37 C/paned.py.page:43 C/paned.vala.page:37
+msgid ""
+"<link 
href=\"http://developer.gnome.org/gtk3/stable/gtk3-Standard-Enumerations.html#GtkOrientation\";>Standard "
+"Enumerations</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/paned.js.page:8
+msgctxt "text"
+msgid "Paned (JavaScript)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/paned.js.page:29
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class PanedExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application({ application_id: 'org.example.panedexample' });\n"
+"\n"
+"       // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this.window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\n"
+"        // Create the application window\n"
+"        this.window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                    window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                    title: \"Paned Window Example\",\n"
+"                                                    default_width: 450,\n"
+"                                                    default_height: 350,\n"
+"                                                    border_width: 10 });\n"
+"\n"
+"        // a new widget with two adjustable panes,\n"
+"        // one on the left and one on the right\n"
+"        this.paned = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL);\n"
+"\n"
+"        // two images\n"
+"        this.image1 = new Gtk.Image();\n"
+"        this.image1.set_from_file(\"gnome-image.png\");\n"
+"        this.image2 = new Gtk.Image();\n"
+"        this.image2.set_from_file(\"tux.png\");\n"
+"\n"
+"        // add the first image to the left pane\n"
+"        this.paned.add1(this.image1);\n"
+"        // add the second image to the right pane\n"
+"        this.paned.add2(this.image2)\n"
+"\n"
+"        // add the panes to the window\n"
+"        this.window.add(this.paned)\n"
+"        this.window.show_all();\n"
+"    }\n"
+"};\n"
+"\n"
+"// Run the application\n"
+"let app = new PanedExample();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/paned.js.page:36
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Paned.html\";>GtkPaned</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Paned.html\";>GtkPaned</link>"
+
+#. (itstool) path: item/p
+#: C/paned.js.page:38 C/scrolledwindow.js.page:38
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html\";>GtkImage</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html\";>GtkImage</link>"
+
+#. (itstool) path: info/title
+#: C/paned.py.page:8
+msgctxt "text"
+msgid "Paned (Python)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/paned.py.page:30
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/paned.py.page:34
+msgid "Useful methods for a Paned widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/paned.py.page:35
+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 ""
+
+#. (itstool) path: info/title
+#: C/paned.vala.page:8
+msgctxt "text"
+msgid "Paned (Vala)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/paned.vala.page:29
+#, no-wrap
+msgid ""
+"/* 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\tvar window = new Gtk.ApplicationWindow (this);\n"
+"\t\twindow.title = \"Paned Example\";\n"
+"\t\twindow.set_default_size (450,350);\n"
+"\n"
+"\t\t// a new widget with two adjustable panes,\n"
+"\t\t// one on the left and one on the right\n"
+"\t\tvar paned = new Gtk.Paned (Gtk.Orientation.HORIZONTAL);\n"
+"\n"
+"\t\t/* two images */\n"
+"\t\tvar image1 = new Gtk.Image ();\n"
+"\t\timage1.set_from_file (\"gnome-image.png\");\n"
+"\t\tvar image2 = new Gtk.Image ();\n"
+"\t\timage2.set_from_file (\"tux.png\");\n"
+"\n"
+"\t\t/* add the first image to the left pane */\n"
+"\t\tpaned.add1 (image1);\n"
+"\n"
+"\t\t/* add the second image to the right pane */\n"
+"\t\tpaned.add2 (image2);\n"
+"\n"
+"\t\t/* add the panes to the window */\n"
+"\t\twindow.add (paned);\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 ""
+
+#. (itstool) path: item/p
+#: C/paned.vala.page:36
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Paned.html\";>GtkPaned</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Paned.html\";>GtkPaned</link>"
+
+#. (itstool) path: info/title
+#: C/photo-wall.c.page:7
+msgctxt "text"
+msgid "Photo wall (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/photo-wall.c.page:10
+msgid "A Clutter image viewer"
+msgstr ""
+
+#. (itstool) path: credit/name
+#: C/photo-wall.c.page:14
+msgid "Chris Kühl"
+msgstr "Chris Kühl"
+
+#. (itstool) path: page/title
+#: C/photo-wall.c.page:28
+msgid "Photo wall"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/photo-wall.c.page:31
+msgid "For this example we will build a simple image viewer using Clutter. You will learn:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:33
+msgid "How to size and position <code>ClutterActor</code>s"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:34
+msgid "How to place an image in a <code>ClutterActor</code>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:35
+msgid "How to do simple transitions using Clutter's animation framework"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:36
+msgid "How to make <code>ClutterActor</code>s respond to mouse events"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:37
+msgid "How to get file names from a directory"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:42 C/record-collection.js.page:40
+msgid "Introduction"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:43
+msgid ""
+"Clutter is a library for creating dynamic user interfaces using OpenGL for hardware acceleration. This 
example "
+"demonstrates a small, but central, part of the Clutter library to create a simple but attractive image 
viewing "
+"program."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:46
+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>GPtrArray</code>, a dynamic array of pointers, to hold the 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 ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:59
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:62
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:67
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:80
+msgid "A look at Photo Wall"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:81
+msgid "Our image viewer presents the user with a wall of images."
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:84
+msgctxt "_"
+msgid "external ref='media/photo-wall.png' md5='f19590d97e8ec029cda3c44b769c11cd'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:85
+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."
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:87
+msgctxt "_"
+msgid "external ref='media/photo-wall-focused.png' md5='9f1ceecf3a28c1e468597b093a10cbae'"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:91
+msgid "Initial setup"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:92
+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>:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/photo-wall.c.page:95
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gdk-pixbuf/gdk-pixbuf.h&gt;\n"
+"#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 IMAGE_DIR_PATH \"./berlin_images/\"\n"
+"\n"
+"static GPtrArray *img_paths;\n"
+"\n"
+"static ClutterPoint unfocused_pos;\n"
+"\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:119
+msgid "Jumping into the code"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:120
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/photo-wall.c.page:123
+#, no-wrap
+msgid ""
+"\n"
+"int\n"
+"main(int argc, char *argv[])\n"
+"{\n"
+"    ClutterColor stage_color = { 16, 16, 16, 255 };\n"
+"    ClutterActor *stage = NULL;\n"
+"\n"
+"    if (clutter_init (&amp;argc, &amp;argv) != CLUTTER_INIT_SUCCESS)\n"
+"        return 1;\n"
+"\n"
+"    stage = clutter_stage_new();\n"
+"    clutter_actor_set_size(stage, STAGE_WIDTH, STAGE_HEIGHT);\n"
+"    clutter_actor_set_background_color(stage, &amp;stage_color);\n"
+"    clutter_stage_set_title(CLUTTER_STAGE (stage), \"Photo Wall\");\n"
+"    g_signal_connect(stage, \"destroy\", G_CALLBACK(clutter_main_quit), NULL);\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"
+"            const char *img_path = g_ptr_array_index(img_paths, (row * COL_COUNT) + col);\n"
+"            GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file_at_size(img_path, STAGE_HEIGHT, STAGE_HEIGHT, 
NULL);\n"
+"            ClutterContent *image = clutter_image_new ();\n"
+"            ClutterActor *actor = clutter_actor_new ();\n"
+"\n"
+"            if (pixbuf != NULL)\n"
+"            {\n"
+"                clutter_image_set_data(CLUTTER_IMAGE(image),\n"
+"                                       gdk_pixbuf_get_pixels(pixbuf),\n"
+"                                       gdk_pixbuf_get_has_alpha(pixbuf)\n"
+"                                           ? COGL_PIXEL_FORMAT_RGBA_8888\n"
+"                                           : COGL_PIXEL_FORMAT_RGB_888,\n"
+"                                       gdk_pixbuf_get_width(pixbuf),\n"
+"                                       gdk_pixbuf_get_height(pixbuf),\n"
+"                                       gdk_pixbuf_get_rowstride(pixbuf),\n"
+"                                       NULL);\n"
+"            }\n"
+"\n"
+"            clutter_actor_set_content(actor, image);\n"
+"            g_object_unref(image);\n"
+"            g_object_unref(pixbuf);\n"
+"\n"
+"            initialize_actor(actor, row, col);\n"
+"            clutter_actor_add_child(stage, 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"
+"    g_ptr_array_unref(img_paths);\n"
+"\n"
+"    return 0;\n"
+"}"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:185
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:186
+msgid "Line 7: You must initialize Clutter. If you forget to do this, you will get very strange errors. Be 
warned."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:187
+msgid ""
+"Lines 10‒14: Here we create a new <code>ClutterStage</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 ""
+
+#. (itstool) path: note/p
+#: C/photo-wall.c.page:188
+msgid ""
+"A <code>ClutterStage</code> is the top-level <code>ClutterActor</code> onto which other 
<code>ClutterActor</code>s "
+"are placed."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:190
+msgid "Line 16: Here we call our function for getting the image file paths. We'll look at this in a bit."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:191
+msgid ""
+"Lines 18‒49: 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 ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:192
+msgid "Line 52: Show the stage and <em>all its children</em>, meaning our images."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:193
+msgid "Line 55: Start the Clutter main loop."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:198
+msgid "Setting up our image actors"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/photo-wall.c.page:199
+msgid "In Clutter, an actor is the most basic visual element. Basically, everything you see is an actor."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:200
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/photo-wall.c.page:203
+#, no-wrap
+msgid ""
+"\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"
+"        const char *img_path = g_ptr_array_index(img_paths, (row * COL_COUNT) + col);\n"
+"        GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file_at_size(img_path, STAGE_HEIGHT, STAGE_HEIGHT, NULL);\n"
+"        ClutterContent *image = clutter_image_new ();\n"
+"        ClutterActor *actor = clutter_actor_new ();\n"
+"\n"
+"        if (pixbuf != NULL)\n"
+"        {\n"
+"            clutter_image_set_data(CLUTTER_IMAGE(image),\n"
+"                                   gdk_pixbuf_get_pixels(pixbuf),\n"
+"                                   gdk_pixbuf_get_has_alpha(pixbuf)\n"
+"                                       ? COGL_PIXEL_FORMAT_RGBA_8888\n"
+"                                       : COGL_PIXEL_FORMAT_RGB_888,\n"
+"                                   gdk_pixbuf_get_width(pixbuf),\n"
+"                                   gdk_pixbuf_get_height(pixbuf),\n"
+"                                   gdk_pixbuf_get_rowstride(pixbuf),\n"
+"                                   NULL);\n"
+"        }\n"
+"\n"
+"        clutter_actor_set_content(actor, image);\n"
+"        g_object_unref(image);\n"
+"        g_object_unref(pixbuf);\n"
+"\n"
+"        initialize_actor(actor, row, col);\n"
+"        clutter_actor_add_child(stage, actor);\n"
+"    }\n"
+"}\n"
+"\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:239
+msgid ""
+"Line 7: Here we want to get the path at the <var>n</var>th location in the <code>GPtrArray</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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:241
+msgid ""
+"Line 8‒23: 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 ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:243
+msgid ""
+"Line 47: 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 ""
+
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:249
+msgid "Loading the images"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:250
+msgid "Let's take a short break from Clutter to see how we can get the file names from our image directory."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/photo-wall.c.page:251
+#, no-wrap
+msgid ""
+"\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"
+"    img_paths = g_ptr_array_new_with_free_func (g_free);\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"
+"            g_ptr_array_add (img_paths, path);\n"
+"        }\n"
+"        filename = g_dir_read_name(dir);\n"
+"    }\n"
+"}"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:279
+msgid "Lines 5 and 12: This opens our directory or, if an error occurred, returns after printing an error 
message."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:280
+msgid ""
+"Lines 16‒25: 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 ""
+
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:285
+msgid "Set up the actors"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:286
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/photo-wall.c.page:289
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:305
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:308
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:311
+msgid "At this point we've got a wall of images that are ready to be viewed."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:315
+msgid "Reacting to the clicks"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/photo-wall.c.page:319
+#, no-wrap
+msgid ""
+"\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"
+"    ClutterActorIter iter;\n"
+"    ClutterActor *child;\n"
+"\n"
+"    /* Reset the focus state on all the images */\n"
+"    clutter_actor_iter_init (&amp;iter, clutter_actor_get_parent(actor));\n"
+"    while (clutter_actor_iter_next(&amp;iter, &amp;child))\n"
+"      clutter_actor_set_reactive(child, is_focused);\n"
+"\n"
+"    clutter_actor_save_easing_state(actor);\n"
+"    clutter_actor_set_easing_duration(actor, ANIMATION_DURATION_MS);\n"
+"\n"
+"    if(is_focused)\n"
+"    {\n"
+"        /* Restore the old location and size. */\n"
+"        clutter_actor_set_position(actor, unfocused_pos.x, unfocused_pos.y);\n"
+"        clutter_actor_set_size(actor, THUMBNAIL_SIZE, THUMBNAIL_SIZE);\n"
+"    }\n"
+"    else\n"
+"    {\n"
+"        /* Save the current location before animating. */\n"
+"        clutter_actor_get_position(actor, &amp;unfocused_pos.x, &amp;unfocused_pos.y);\n"
+"        /* Only the currently focused image should receive events. */\n"
+"        clutter_actor_set_reactive(actor, TRUE);\n"
+"\n"
+"        /* Put the focused image on top. */\n"
+"        clutter_actor_set_child_above_sibling(clutter_actor_get_parent(actor), actor, NULL);\n"
+"\n"
+"        clutter_actor_set_position(actor, (STAGE_WIDTH - STAGE_HEIGHT) / 2.0, 0);\n"
+"        clutter_actor_set_size(actor, STAGE_HEIGHT, STAGE_HEIGHT);\n"
+"    }\n"
+"\n"
+"    clutter_actor_restore_easing_state(actor);\n"
+"\n"
+"    /* Toggle our flag. */\n"
+"    is_focused = !is_focused;\n"
+"\n"
+"    return TRUE;\n"
+"}"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:366
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/photo-wall.c.page:368
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/photo-wall.c.page:369
+msgid ""
+"The <code>user_data</code> is what one uses to pass data into 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 ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:373
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:374
+msgid "Line 12‒14: These set the image actors to receive events if they are focused."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:375
+msgid "Line 16‒17: Here we set the animation duration and save the current state."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:376
+msgid ""
+"Lines 21‒23: Reaching this code means that one image currently has focus and we want to return to wall 
mode. "
+"Setting a position on a <code>ClutterActor</code> begins an animation with the duration that we set in line 
17."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:378
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:379
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:380
+msgid ""
+"Lines 27‒36: This is where we save the current position of the image, set it to receive events and then 
make it "
+"appear above the other images and start animating it to fill the stage."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:381
+msgid "Line 39: Here we restore the easing state to what was set before we changed it in line 16."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:382
+msgid "Line 42: Here we toggle the <code>is_focused</code> flag to the current state."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:383
+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 ""
+
+#. (itstool) path: note/p
+#: C/photo-wall.c.page:385
+msgid "Remember, however, that to receive events the <code>ClutterActor</code>s must be set 
<code>reactive</code>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:393
+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 ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:395
+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 ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:396
+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 ""
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:401
+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 ""
+
+#. (itstool) path: info/title
+#: C/progressbar.c.page:8
+msgctxt "text"
+msgid "ProgressBar (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/progressbar.c.page:19 C/progressbar.vala.page:18
+msgid "A widget which indicates progress visually"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/progressbar.c.page:22 C/progressbar.js.page:20 C/progressbar.py.page:22 C/progressbar.vala.page:21
+msgid "ProgressBar"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:24 C/progressbar.vala.page:22
+msgctxt "_"
+msgid "external ref='media/progressbar_fill.ogv' md5='287763d1d3f4a328212ea2243910f5e4'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/progressbar.c.page:25 C/progressbar.vala.page:23
+msgid "This ProgressBar \"fills in\" by a fraction of the bar until it is full."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/progressbar.c.page:27
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/progressbar.c.page:36
+msgid ""
+"<link 
href=\"http://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#g-timeout-add\";>G_Timeout</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/progressbar.js.page:7
+msgctxt "text"
+msgid "ProgressBar (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/progressbar.js.page:17
+msgid "A bar which animates to indicate progress"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:21 C/progressbar.py.page:23
+msgctxt "_"
+msgid "external ref='media/progressbar.ogv' md5='36deab3dd4b5be968828fa2ef416d612'"
+msgstr ""
+
+#. (itstool) path: div/p
+#: C/progressbar.js.page:25 C/progressbar.py.page:27
+msgid "Pressing any key stops and starts this ProgressBar."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/progressbar.js.page:32 C/progressbar.py.page:34
+msgid "This ProgressBar is stopped and started by pressing any key."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/progressbar.js.page:34
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class ProgressBarExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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,\n"
+"                                         this._barPulse.bind(this));\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\", this._onKeyPress.bind(this));\n"
+"\n"
+"            // Show the window and all child widgets\n"
+"            this._window.show_all();\n"
+"    }\n"
+"\n"
+"    // Pulse the progressbar (unless it has been disabled by a keypress)\n"
+"    _barPulse() {\n"
+"        this.progressBar.pulse();\n"
+"        return true;\n"
+"    }\n"
+"\n"
+"    // Start or stop the progressbar when a key is pressed\n"
+"    _onKeyPress() {\n"
+"        if (this.sourceID == 0)\n"
+"            this.sourceID = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100,\n"
+"                                             this._barPulse.bind(this));\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 ""
+
+#. (itstool) path: item/p
+#: C/progressbar.js.page:39
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/GLib.html\";>GLib</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/GLib.html\";>GLib</link>"
+
+#. (itstool) path: info/title
+#: C/progressbar.py.page:8
+msgctxt "text"
+msgid "ProgressBar (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/progressbar.py.page:19
+msgid "A widget which indicates progress visually."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/progressbar.py.page:41
+#, no-wrap
+msgid ""
+"from gi.repository import GLib\n"
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"ProgressBar Example\", application=app)\n"
+"        self.set_default_size(220, 20)\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/progressbar.py.page:46
+msgid "Useful methods for a ProgressBar widget"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/progressbar.py.page:48
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/progressbar.py.page:49
+msgid ""
+"To set a text and show it (superimposed over the bar) use <code>set_text(<var>\"text\"</var>)</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 ""
+
+#. (itstool) path: item/p
+#: C/progressbar.py.page:57
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkProgressBar.html\";>GtkProgressBar</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkProgressBar.html\";>GtkProgressBar</link>"
+
+#. (itstool) path: item/p
+#: C/progressbar.py.page:58
+msgid ""
+"<link href=\"http://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html\";>GLib - The Main Event 
Loop</"
+"link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/progressbar.py.page:59
+msgid "<link href=\"http://developer.gnome.org/gdk/stable/gdk-Keyboard-Handling\";>Gdk - Key Values</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/progressbar.vala.page:8
+msgctxt "text"
+msgid "ProgressBar (Vala)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/progressbar.vala.page:25
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/progressbar.vala.page:30
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ProgressBar.html\";>Gtk.ProgressBar</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ProgressBar.html\";>Gtk.ProgressBar</link>"
+
+#. (itstool) path: item/p
+#: C/progressbar.vala.page:31
+msgid "<link href=\"http://www.valadoc.org/glib-2.0/GLib.Timeout.html\";>GLib.Timeout</link>"
+msgstr "<link href=\"http://www.valadoc.org/glib-2.0/GLib.Timeout.html\";>GLib.Timeout</link>"
+
+#. (itstool) path: info/title
+#: C/properties.py.page:9
+msgctxt "text"
+msgid "Properties (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/properties.py.page:14
+msgid "An explanation of properties, getters and setters."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/properties.py.page:27
+msgid "Properties"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/properties.py.page:34
+msgid ""
+"<em>Properties</em> describe the configuration and state of widgets. Each widget has its own particular set 
of "
+"properties. For example, a widget such as a button has the property <code>label</code> 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 with the text “Hello World”, an angle of 25 degrees, 
and "
+"aligned to the right, you can use:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/properties.py.page:41
+#, no-wrap
+msgid ""
+"\n"
+"label = Gtk.Label(label=\"Hello World\", angle=25, halign=Gtk.Align.END)"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/properties.py.page:44
+msgid "Alternatively, you can define these properties separately by using the method associated with it."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/properties.py.page:45
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/properties.py.page:51
+msgid ""
+"Once you have created such a label, you can get the text of the label with <code>label.get_label()</code>, 
and "
+"analogously for the other properties."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/properties.py.page:53
+msgid ""
+"Instead of using getters and setters you can also get and set the properties with 
<code>get_property(<var>\"prop-"
+"name\"</var>)</code> and <code>set_property(<var>\"prop-name\"</var>, <var>value</var>)</code>, 
respectively."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/properties.py.page:59
+msgid ""
+"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.html\";>Basics - 
Properties</link> in "
+"Python GTK+ 3 Tutorial"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/py.page:7
+msgctxt "link"
+msgid "Python"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/py.page:21
+msgid "Tutorials, code samples and platform demos in Python"
+msgstr ""
+
+#. (itstool) path: section/title
+#. (itstool) path: page/title
+#: C/py.page:26 C/tutorial.py.page:31
+msgid "Tutorial for beginners"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/radiobutton.c.page:8
+msgctxt "text"
+msgid "RadioButton (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/radiobutton.c.page:20
+msgid "A choice from multiple checkbuttons"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/radiobutton.c.page:23 C/radiobutton.js.page:21 C/radiobutton.py.page:23 C/radiobutton.vala.page:24
+msgid "RadioButton"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:25 C/radiobutton.py.page:24 C/radiobutton.vala.page:25
+msgctxt "_"
+msgid "external ref='media/radiobutton.png' md5='d115460280d8e41493dd98054b5822a5'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/radiobutton.c.page:26
+msgid "These radiobuttons report their activity in the terminal."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/radiobutton.c.page:28
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/radiobutton.c.page:38 C/switch.c.page:36
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkSwitch.html\";>GtkSwitch</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkSwitch.html\";>GtkSwitch</link>"
+
+#. (itstool) path: info/title
+#: C/radiobutton.js.page:8
+msgctxt "text"
+msgid "RadioButton (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/radiobutton.js.page:18
+msgid "Only one can be selected at a time"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:22
+msgctxt "_"
+msgid "external ref='media/radiobuttontravel.png' md5='0c5f01ee160bb42716ccf5dccbd080c0'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/radiobutton.js.page:23
+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."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/radiobutton.js.page:24
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:41
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:67 C/togglebutton.js.page:67
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:68
+#, 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"
+"            border_width: 20,\n"
+"            title: \"Travel Planning\"});\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/radiobutton.js.page:83
+msgid "Creating the radiobuttons"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:84
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:89
+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 ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:91
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:102
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:103
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:105
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:114
+msgid "Here we create the label for the second group of buttons, and then create them all the same way."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/radiobutton.js.page:118 C/textview.js.page:132
+msgid "Creating the rest of the user interface"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:120
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:130
+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 ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:131
+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=\"https://developer.gnome.org/gtk3/3.4/gtk3-Stock-Items.html\";>stock button 
types</"
+"link>."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:133
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:167
+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 ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:168
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:170
+#, no-wrap
+msgid ""
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:176
+msgid "Finally, we tell the window and everything inside it to become visible when the application is run."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:182
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:201
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:203
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:247
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:249
+#, no-wrap
+msgid ""
+"\n"
+"    _clearTravelPopUp: function () {\n"
+"\n"
+"        this._travel.destroy();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:258
+msgid "This function is called when the MessageDialog's OK button is pressed. It simply makes the popup go 
away."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:260
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new RadioButtonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:265 C/togglebutton.js.page:144
+msgid "Finally, we create a new instance of the finished RadioButtonExample class, and set the application 
running."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:270
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class RadioButtonExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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', this._okClicked.bind(this));\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"
+"    _okClicked() {\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\", this._clearTravelPopUp.bind(this));\n"
+"\n"
+"    }\n"
+"\n"
+"    _messageText() {\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"
+"    _clearTravelPopUp() {\n"
+"        this._travel.destroy();\n"
+"    }\n"
+"};\n"
+"\n"
+"// Run the application\n"
+"let app = new RadioButtonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/radiobutton.js.page:278 C/statusbar.js.page:225 C/textview.js.page:252
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Button.html\";>Gtk.Button</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Button.html\";>Gtk.Button</link>"
+
+#. (itstool) path: item/p
+#: C/radiobutton.js.page:279 C/scale.js.page:213 C/spinbutton.js.page:204 C/switch.js.page:270 
C/textview.js.page:253
+#: C/togglebutton.js.page:157
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html\";>Gtk.Grid</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html\";>Gtk.Grid</link>"
+
+#. (itstool) path: item/p
+#: C/radiobutton.js.page:280 C/scale.js.page:214 C/spinbutton.js.page:205 C/switch.js.page:272 
C/textview.js.page:254
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Label.html\";>Gtk.Label</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Label.html\";>Gtk.Label</link>"
+
+#. (itstool) path: item/p
+#: C/radiobutton.js.page:281 C/textview.js.page:255
+msgid "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.RadioButton.html\";>Gtk.RadioButton</link>"
+msgstr "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.RadioButton.html\";>Gtk.RadioButton</link>"
+
+#. (itstool) path: info/title
+#: C/radiobutton.py.page:8
+msgctxt "text"
+msgid "RadioButton (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/radiobutton.py.page:20
+msgid "Mutually exclusive buttons."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/radiobutton.py.page:25
+msgid "Three RadioButtons. You can see in the terminal if they are turned off or on."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.py.page:31
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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(\n"
+"            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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/radiobutton.py.page:35
+msgid "Useful methods for a RadioButton widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.py.page:36
+msgid ""
+"In line 16 the signal <code>\"toggled\"</code> is connected to the callback function 
<code>toggled_cb()</code> "
+"using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See <link 
xref="
+"\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.py.page:38
+msgid ""
+"As seen in <link xref=\"properties.py\"/>, instead of <code>button1 = Gtk.RadioButton(label=\"Button 
1\")</code> "
+"we could create the button and label it with"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/radiobutton.py.page:39
+#, no-wrap
+msgid ""
+"\n"
+"button1 = Gtk.RadioButton()\n"
+"button1.set_label(\"Button 1\")."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/radiobutton.py.page:42
+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 argument is the group of the radiobuttons, which we can get with "
+"<code>get_group()</code>, the second argument is the label)."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/radiobutton.py.page:51
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkRadioButton.html\";>GtkRadioButton</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkRadioButton.html\";>GtkRadioButton</link>"
+
+#. (itstool) path: info/title
+#: C/radiobutton.vala.page:8
+msgctxt "text"
+msgid "RadioButton (Vala)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/radiobutton.vala.page:21
+msgid "A choice from multiple CheckButtons."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/radiobutton.vala.page:26
+msgid "These RadioButtons report their activity in the terminal."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/radiobutton.vala.page:28
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/radiobutton.vala.page:33
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.RadioButton.html\";>Gtk.RadioButton</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.RadioButton.html\";>Gtk.RadioButton</link>"
+
+#. (itstool) path: info/title
+#: C/record-collection.js.page:8
+msgctxt "text"
+msgid "Record collection (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/record-collection.js.page:11
+msgid "Create a small database application for ordering your music collection"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/record-collection.js.page:29
+msgid "Record collection"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:34
+msgid "How to connect to a database using libgda"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:35
+msgid "How to insert and browse records in a database table"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:41
+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 ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:44
+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 ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:47
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:60
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:63
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/record-collection.js.page:69
+msgid "Program Structure"
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:70
+msgctxt "_"
+msgid "external ref='media/record-collection.png' md5='2d645997687ed5aacd36aafafc16e072'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:71
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/record-collection.js.page:76
+msgid "Starting the fun"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:77
+msgid "Let's start by examining the skeleton of the program:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/record-collection.js.page:78
+#, no-wrap
+msgid ""
+"\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 (null, null);\n"
+"\n"
+"var demo = new Demo ();\n"
+"\n"
+"Gtk.main ();"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:103
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:104
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:105
+msgid "Lines 19‒23: Start the application."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/record-collection.js.page:110
+msgid "Designing the application"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:111
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/record-collection.js.page:112
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:162
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:163
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:164
+msgid "Line 39: Create the widget (<code>TextView</code>) where we will show the contents of the table."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:165
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/record-collection.js.page:170
+msgid "Connecting to and initializing the database"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:171
+msgid "The code which makes the connection to the database is in the <code>setupDatabase</code> method 
below:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/record-collection.js.page:174
+#, no-wrap
+msgid ""
+"\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 = this.connection.execute_select_command (\"select * from demo\");\n"
+"    } catch (e) {\n"
+"      this.connection.execute_non_select_command (\"create table demo (id integer, name varchar(100))\");\n"
+"    }\n"
+"  },"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:188
+msgid ""
+"Lines 2‒3: Create the GDA's <code>Connection</code> object. We must supply to its constructor some 
properties:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:191
+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)."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:194
+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)."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/record-collection.js.page:198
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:202
+msgid ""
+"Line 4: Open the connection. In the SQLite provider, if the database does not exist, it will be created in 
this "
+"step."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:204
+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)."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:205
+msgid ""
+"In order to run the SQL commands above we are using the GDA connection methods 
<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 ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:209
+msgid "At this point we have the database set up, and are ready to use it."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/record-collection.js.page:213
+msgid "Selecting"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:214
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/record-collection.js.page:217
+#, no-wrap
+msgid ""
+"\n"
+"  selectData: function () {\n"
+"    var dm = this.connection.execute_select_command  (\"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 ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:235
+msgid ""
+"Line 2: The <code>SELECT</code> command. We are using the GDA connection's 
<code>execute_select_command</code> "
+"method for that. It returns a <code>DataModel</code> object, which is later used to retrieve the rows."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:236
+msgid ""
+"Line 3: Create an <code>Iter</code> object, which is used to iterate over the <code>DataModel</code>'s 
records."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:237
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:239
+msgid "Lines 8‒9: We do two things in each line:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:241
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:242
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:245
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:246
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:247
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/record-collection.js.page:252
+msgid "Inserting"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:253
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/record-collection.js.page:256
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:274
+msgid ""
+"We have learned how to use the GDA connection's methods <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 ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:278
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:279
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:280
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:281
+msgid ""
+"Line 8: Set the name of the table on which the built statement will operate (it will generate <code>INSERT 
INTO "
+"demo</code>)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:282
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:283
+msgid "Line 11: Get the dynamically generated <code>Statement</code> object, which represents a SQL 
statement."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:284
+msgid "Line 12: Finally, execute the SQL statement (<code>INSERT</code>)."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:285
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:286
+msgid "Line 15: Refresh the view on the screen by doing another <code>SELECT</code>."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/record-collection.js.page:288
+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 ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:293
+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 ""
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:298
+msgid ""
+"If you run into problems with the tutorial, compare your code with this <link 
href=\"record-collection/record-"
+"collection.js\">reference code</link>."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/response-type.page:17
+msgid "enum ResponseType"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/response-type.page:21
+msgid "ResponseType.NONE = -1"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/response-type.page:22
+msgid "Returned if an action widget has no response id, or if the dialog gets programmatically hidden or 
destroyed"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/response-type.page:25
+msgid "ResponseType.REJECT = -2"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/response-type.page:26 C/response-type.page:30
+msgid "Generic response id, not used by GTK+ dialogs"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/response-type.page:29
+msgid "ResponseType.ACCEPT = -3"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/response-type.page:33
+msgid "ResponseType.DELETE_EVENT = -4"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/response-type.page:34
+msgid "Returned if the dialog is deleted"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/response-type.page:37
+msgid "ResponseType.OK = -5"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/response-type.page:38
+msgid "Returned by OK buttons in GTK+ dialogs"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/response-type.page:41
+msgid "ResponseType.CANCEL = -6"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/response-type.page:42
+msgid "Returned by Cancel buttons in GTK+ dialogs"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/response-type.page:45
+msgid "ResponseType.CLOSE = -7"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/response-type.page:46
+msgid "Returned by Close buttons in GTK+ dialogs"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/response-type.page:49
+msgid "ResponseType.YES = -8"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/response-type.page:50
+msgid "Returned by Yes buttons in GTK+ dialogs"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/response-type.page:53
+msgid "ResponseType.NO = -9"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/response-type.page:54
+msgid "Returned by No buttons in GTK+ dialogs"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/response-type.page:57
+msgid "ResponseType.APPLY = -10"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/response-type.page:58
+msgid "Returned by Apply buttons in GTK+ dialogs"
+msgstr ""
+
+#. (itstool) path: item/title
+#: C/response-type.page:61
+msgid "ResponseType.HELP = -11"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/response-type.page:62
+msgid "Returned by Help buttons in GTK+ dialogs"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/scale.c.page:8
+msgctxt "text"
+msgid "Scale (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/scale.c.page:20 C/scale.py.page:20 C/scale.vala.page:20
+msgid "A slider widget for selecting a value from a range"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/scale.c.page:23 C/scale.js.page:21 C/scale.py.page:23 C/scale.vala.page:23
+msgid "Scale"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:25
+msgctxt "_"
+msgid "external ref='media/scale2.png' md5='ae2ba0a6675f3d9cdcd961cdf32f1a5c'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/scale.c.page:26 C/scale.py.page:25 C/scale.vala.page:25
+msgid "Slide the scales!"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/scale.c.page:28
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/scale.c.page:36
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkScale.html\";>GtkScale</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkScale.html\";>GtkScale</link>"
+
+#. (itstool) path: item/p
+#: C/scale.c.page:37
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkRange.html\";>GtkRange</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkRange.html\";>GtkRange</link>"
+
+#. (itstool) path: item/p
+#: C/scale.c.page:38 C/spinbutton.c.page:39
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkAdjustment.html\";>GtkAdjustment</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkAdjustment.html\";>GtkAdjustment</link>"
+
+#. (itstool) path: item/p
+#: C/scale.c.page:39
+msgid ""
+"<link 
href=\"http://developer.gnome.org/glib/stable/glib-String-Utility-Functions.html#g-strdup-printf\";>String "
+"Utility Functions</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/scale.js.page:8
+msgctxt "text"
+msgid "Scale (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/scale.js.page:18
+msgid "A slider which corresponds to a numerical value"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:22
+msgctxt "_"
+msgid "external ref='media/scalepenguins.png' md5='2dbe6a833fec86fde71a5ddb421e2cd5'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/scale.js.page:23
+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."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/scale.js.page:24
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scale.js.page:41
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/scale.js.page:66
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scale.js.page:67
+#, 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"
+"            border_width: 20,\n"
+"            title: \"Birds on a Floe\"});\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/scale.js.page:82
+msgid "Creating the scales"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scale.js.page:83
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/scale.js.page:92
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/scale.js.page:93
+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 ""
+
+#. (itstool) path: section/code
+#: C/scale.js.page:95
+#, no-wrap
+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 ""
+
+#. (itstool) path: section/p
+#: C/scale.js.page:105
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scale.js.page:107
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/scale.js.page:117
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scale.js.page:119
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/scale.js.page:133
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/scale.js.page:134
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scale.js.page:136
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/scale.js.page:149
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scale.js.page:150
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/scale.js.page:158
+msgid "Finally, we add the Grid to the window, then tell the window to show itself and all the widgets 
inside of it."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/scale.js.page:162
+msgid "Function which handles the scales' values changing"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scale.js.page:164
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/scale.js.page:192
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scale.js.page:194
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new ScaleExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/scale.js.page:199
+msgid "Finally, we create a new instance of the finished ScaleExample class, and set the application 
running."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scale.js.page:204
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class ScaleExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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\", this._recalc.bind(this));\n"
+"        this._vScale.connect (\"value-changed\", this._recalc.bind(this));\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"
+"    _recalc() {\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"
+"// Run the application\n"
+"let app = new ScaleExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scale.js.page:210 C/spinbutton.js.page:201
+msgid "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Adjustment.html\";>Gtk.Adjustment</link>"
+msgstr "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Adjustment.html\";>Gtk.Adjustment</link>"
+
+#. (itstool) path: item/p
+#: C/scale.js.page:215
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Scale.html\";>Gtk.Scale</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Scale.html\";>Gtk.Scale</link>"
+
+#. (itstool) path: info/title
+#: C/scale.py.page:8
+msgctxt "text"
+msgid "Scale (Python)"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:24 C/scale.vala.page:24
+msgctxt "_"
+msgid "external ref='media/scale.png' md5='462c52a53b773cb9e8c62c646bf88452'"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scale.py.page:31
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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(\n"
+"            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\n"
+"        # below)\n"
+"        self.h_scale.set_hexpand(True)\n"
+"        # that is aligned at the top of the space allowed in the grid (see\n"
+"        # 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(\n"
+"            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(\n"
+"            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\n"
+"    # 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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/scale.py.page:35
+msgid "Useful methods for a Scale widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/scale.py.page:36
+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 ""
+
+#. (itstool) path: section/p
+#: C/scale.py.page:37
+msgid ""
+"In line 28 the signal <code>\"value-changed\"</code> is connected to the callback function 
<code>scale_moved()</"
+"code> using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See 
<link "
+"xref=\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scale.py.page:39
+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 ""
+
+#. (itstool) path: item/p
+#: C/scale.py.page:40
+msgid "Use <code>set_draw_value(False)</code> to avoid displaying the current value as a string next to the 
slider."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scale.py.page:41
+msgid "To highlight the part of the scale between the origin and the current value:"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/scale.py.page:42
+#, no-wrap
+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)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scale.py.page:46
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scale.py.page:48
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scale.py.page:49
+msgid "<code>set_digits(digits)</code> sets the precision of the scale at <code>digits</code> digits."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scale.py.page:57
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkScale.html\";>GtkScale</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkScale.html\";>GtkScale</link>"
+
+#. (itstool) path: item/p
+#: C/scale.py.page:58 C/spinbutton.py.page:50
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkAdjustment.html\";>GtkAdjustment</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkAdjustment.html\";>GtkAdjustment</link>"
+
+#. (itstool) path: item/p
+#: C/scale.py.page:59 C/scrolledwindow.js.page:37 C/scrolledwindow.py.page:46 C/textview.py.page:100
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/gtk3-Standard-Enumerations.html\";>Standard 
Enumerations</"
+"link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/scale.vala.page:8
+msgctxt "text"
+msgid "Scale (Vala)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/scale.vala.page:27
+#, no-wrap
+msgid ""
+"/* 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 parameter 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 ""
+
+#. (itstool) path: item/p
+#: C/scale.vala.page:32
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Scale.html\";>Gtk.Scale</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Scale.html\";>Gtk.Scale</link>"
+
+#. (itstool) path: item/p
+#: C/scale.vala.page:33
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Adjustment.html\";>Gtk.Adjustment</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Adjustment.html\";>Gtk.Adjustment</link>"
+
+#. (itstool) path: item/p
+#: C/scale.vala.page:34
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.PositionType.html\";>Gtk.PositionType</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.PositionType.html\";>Gtk.PositionType</link>"
+
+#. (itstool) path: item/p
+#: C/scale.vala.page:35
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Orientation.html\";>Gtk.Orientation</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Orientation.html\";>Gtk.Orientation</link>"
+
+#. (itstool) path: info/title
+#: C/scrolledwindow.c.page:8
+msgctxt "text"
+msgid "ScrolledWindow (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/scrolledwindow.c.page:20 C/scrolledwindow.js.page:18 C/scrolledwindow.py.page:19 
C/scrolledwindow.vala.page:19
+msgid "Adds scrollbars to its child widget"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/scrolledwindow.c.page:23 C/scrolledwindow.js.page:21 C/scrolledwindow.py.page:22 
C/scrolledwindow.vala.page:22
+msgid "ScrolledWindow"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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.c.page:25 C/scrolledwindow.js.page:22 C/scrolledwindow.py.page:23 
C/scrolledwindow.vala.page:23
+msgctxt "_"
+msgid "external ref='media/scrolledwindow.png' md5='697bb3205d5c4fb0b4ea8db435843157'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/scrolledwindow.c.page:26 C/scrolledwindow.js.page:23 C/scrolledwindow.py.page:24 
C/scrolledwindow.vala.page:24
+msgid "An image in a scrolled window."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/scrolledwindow.c.page:28
+#, no-wrap
+msgid ""
+"\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 *scrolled_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), \"ScrolledWindow Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 220, 200);\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"
+"  /* Set the border width */\n"
+"  gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);\n"
+"  /* Extract our desired image from a file that we have */\n"
+"  image = gtk_image_new_from_file (\"gnome-image.png\");\n"
+"  /* And add it to the scrolled window */\n"
+"  gtk_container_add (GTK_CONTAINER (scrolled_window), image);\n"
+"  /* Set the policy of the horizontal and vertical scrollbars to automatic.\n"
+"   * What this means is that the scrollbars are only present if needed.\n"
+"   */\n"
+"  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),\n"
+"                                  GTK_POLICY_AUTOMATIC,\n"
+"                                  GTK_POLICY_AUTOMATIC);\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 ""
+
+#. (itstool) path: item/p
+#: C/scrolledwindow.c.page:37
+msgid ""
+"<link 
href=\"http://developer.gnome.org/gtk/stable/gtk3-Standard-Enumerations.html#GtkPolicyType\";>GtkPolicyType</"
+"link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/scrolledwindow.js.page:8
+msgctxt "text"
+msgid "ScrolledWindow (JavaScript)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scrolledwindow.js.page:29
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class ScrolledWindowExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jscrolledwindow'\n"
+"        });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this.window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\n"
+"        // Create the application window\n"
+"        this.window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"ScrolledWindow Example\",\n"
+"            default_width: 200,\n"
+"            default_height: 200,\n"
+"            border_width: 10\n"
+"        });\n"
+"        // the scrolledwindow\n"
+"        this.scrolledWindow = new Gtk.ScrolledWindow();\n"
+"        this.scrolledWindow.set_border_width(10);\n"
+"        // there is always the scrollbar (otherwise: AUTOMATIC - only if needed - or NEVER)\n"
+"        this.scrolledWindow.set_policy(Gtk.PolicyType.ALWAYS, Gtk.PolicyType.ALWAYS);\n"
+"        // an image - slightly larger than the window\n"
+"        this.image = new Gtk.Image();\n"
+"        this.image.set_from_file(\"gnome-image.png\");\n"
+"\n"
+"        // add the image to the scrolledwindow\n"
+"        this.scrolledWindow.add_with_viewport(this.image);\n"
+"\n"
+"        // add the scrolledwindow to the window\n"
+"        this.window.add(this.scrolledWindow);\n"
+"        this.window.show_all();\n"
+"    }\n"
+"};\n"
+"\n"
+"// Run the application\n"
+"let app = new ScrolledWindowExample();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scrolledwindow.js.page:36
+msgid "<link 
href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.ScrolledWindow.html\";>GtkScrolledWindow</link>"
+msgstr ""
+"<link 
href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.ScrolledWindow.html\";>GtkScrolledWindow</link>"
+
+#. (itstool) path: info/title
+#: C/scrolledwindow.py.page:8
+msgctxt "text"
+msgid "ScrolledWindow (Python)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/scrolledwindow.py.page:30
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(\n"
+"            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\n"
+"        # - or NEVER)\n"
+"        scrolled_window.set_policy(\n"
+"            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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/scrolledwindow.py.page:33
+msgid "Useful methods for a ScrolledWindow widget"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scrolledwindow.py.page:35
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scrolledwindow.py.page:36
+msgid ""
+"<code>add_with_viewport(widget)</code> is used to add the Gtk.Widget <code>widget</code> without native 
scrolling "
+"capabilities inside the window."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scrolledwindow.py.page:37
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scrolledwindow.py.page:38
+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>.)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/scrolledwindow.py.page:45 C/textview.py.page:99
+msgid "<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkScrolledWindow.html\";>GtkScrolledWindow</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/scrolledwindow.vala.page:8
+msgctxt "text"
+msgid "ScrolledWindow (Vala)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/scrolledwindow.vala.page:26
+#, no-wrap
+msgid ""
+"/* 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 ""
+
+#. (itstool) path: item/p
+#: C/scrolledwindow.vala.page:31 C/textview.vala.page:37
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ScrolledWindow.html\";>Gtk.ScrolledWindow</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ScrolledWindow.html\";>Gtk.ScrolledWindow</link>"
+
+#. (itstool) path: item/p
+#: C/scrolledwindow.vala.page:32 C/textview.vala.page:39
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.PolicyType.html\";>Gtk.PolicyType</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.PolicyType.html\";>Gtk.PolicyType</link>"
+
+#. (itstool) path: info/title
+#: C/separator.c.page:8
+msgctxt "text"
+msgid "Separator (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/separator.c.page:19 C/separator.py.page:20 C/separator.vala.page:21
+msgid "A separator widget"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/separator.c.page:22 C/separator.py.page:23 C/separator.vala.page:24
+msgid "Separator"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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.c.page:24 C/separator.py.page:25 C/separator.vala.page:26
+msgctxt "_"
+msgid "external ref='media/separator.png' md5='8769b27662ce5c77f99e9ce33751a21a'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/separator.c.page:25 C/separator.py.page:26 C/separator.vala.page:27
+msgid "A horizontal and a vertical separator divide some labels."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/separator.c.page:31
+#, no-wrap
+msgid ""
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *grid;\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *label1;\n"
+"  GtkWidget *label2;\n"
+"  GtkWidget *label3;\n"
+"  GtkWidget *hseparator;\n"
+"  GtkWidget *vseparator;\n"
+"\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Separator Example\");\n"
+"\n"
+"  label1 = gtk_label_new (\"Below, a horizontal separator.\");\n"
+"  label2 = gtk_label_new (\"On the right, a vertical separator.\");\n"
+"  label3 = gtk_label_new (\"On the left, a vertical separator.\");\n"
+"\n"
+"  vseparator = gtk_separator_new (GTK_ORIENTATION_VERTICAL);\n"
+"  hseparator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);\n"
+"\n"
+"  grid = gtk_grid_new ();\n"
+"\n"
+"  gtk_grid_attach (GTK_GRID (grid), label1, 0, 0, 3, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), hseparator, 0, 1, 3, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), label2, 0, 2, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), vseparator, 1, 2, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), label3, 2, 2, 1, 1);\n"
+"\n"
+"  gtk_grid_set_column_homogeneous (GTK_GRID (grid), TRUE);\n"
+"\n"
+"  gtk_container_add (GTK_CONTAINER (window), grid);\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"
+"  return status;\n"
+"}\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/separator.c.page:35 C/separator.py.page:36 C/separator.vala.page:37
+msgid "API Reference"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/separator.c.page:39 C/separator.py.page:40
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSeparator.html\";>GtkSeparator</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSeparator.html\";>GtkSeparator</link>"
+
+#. (itstool) path: info/title
+#: C/separator.py.page:8
+msgctxt "text"
+msgid "Separator (Python)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/separator.py.page:32
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: info/title
+#: C/separator.vala.page:8
+msgctxt "text"
+msgid "Separator (Vala)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/separator.vala.page:33
+#, no-wrap
+msgid ""
+"/* This is the application. */\n"
+"public class Application : Gtk.Application {\n"
+"\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 = \"Separator Example\";\n"
+"\n"
+"\t\tvar label1 = new Gtk.Label (\"Below, a horizontal separator.\");\n"
+"\t\tvar label2 = new Gtk.Label (\"On the right, a vertical separator.\");\n"
+"\t\tvar label3 = new Gtk.Label (\"On the left, a vertical separator.\");\n"
+"\n"
+"\t\tvar hseparator = new Gtk.Separator (Gtk.Orientation.HORIZONTAL);\n"
+"\t\tvar vseparator = new Gtk.Separator (Gtk.Orientation.VERTICAL);\n"
+"\n"
+"\t\tvar grid = new Gtk.Grid();\n"
+"\n"
+"\t\tgrid.attach (label1, 0, 0, 3, 1);\n"
+"\t\tgrid.attach (hseparator, 0, 1, 3, 1);\n"
+"\t\tgrid.attach (label2, 0, 2, 1, 1);\n"
+"\t\tgrid.attach (vseparator, 1, 2, 1, 1);\n"
+"\t\tgrid.attach (label3, 2, 2, 1, 1);\n"
+"\n"
+"\t\tgrid.set_column_homogeneous(true);\n"
+"\n"
+"\t\twindow.add (grid);\n"
+"\t\tthis.add_window (window);\n"
+"\n"
+"\t\twindow.show_all ();\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 ""
+
+#. (itstool) path: item/p
+#: C/separator.vala.page:41
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>GtkWindow</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>GtkWindow</link>"
+
+#. (itstool) path: item/p
+#: C/separator.vala.page:42
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Separator.html\";>GtkSeparator</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Separator.html\";>GtkSeparator</link>"
+
+#. (itstool) path: item/p
+#: C/separator.vala.page:43
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Grid.html\";>GtkGrid</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Grid.html\";>GtkGrid</link>"
+
+#. (itstool) path: item/p
+#: C/separator.vala.page:44
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Label.html\";>GtkLabel</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Label.html\";>GtkLabel</link>"
+
+#. (itstool) path: page/title
+#: C/set-up-gedit.js.page:19
+msgid "Set up gedit for JavaScript development"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/set-up-gedit.js.page:20
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/set-up-gedit.js.page:23
+msgid "Making code clearer"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/set-up-gedit.js.page:24
+msgid ""
+"Click on <gui>Edit</gui> in gedit's menu bar, then click on <gui>Preferences</gui>. You should see 
something like "
+"this:"
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:25
+msgctxt "_"
+msgid "external ref='media/geditview.png' md5='f1438295662d95f56fcd1d8200efaaf2'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/set-up-gedit.js.page:26
+msgid "Here are the options you want to make sure are turned on."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/set-up-gedit.js.page:28
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/set-up-gedit.js.page:29
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/set-up-gedit.js.page:30
+msgid "<gui>Highlight matching brackets</gui> helps you make sure you didn't leave out a bracket by 
accident."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/set-up-gedit.js.page:35
+msgid "Making editing easier"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/set-up-gedit.js.page:36
+msgid ""
+"In gedit's <gui>Preferences</gui> dialog, click on the <gui>Editor</gui> tab. You should see something like 
this:"
+msgstr ""
+
+#. (itstool) path: section/media
+#. 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:37
+msgctxt "_"
+msgid "external ref='media/gediteditor.png' md5='50db1ee8f2c545744879ee9fba5b4b24'"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/set-up-gedit.js.page:38
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/set-up-gedit.js.page:39
+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>."
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/signals-callbacks.py.page:9
+msgctxt "text"
+msgid "Signals and callbacks (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/signals-callbacks.py.page:14
+msgid "An explanation of signals and callbacks in GTK+."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/signals-callbacks.py.page:27
+msgid "Signals and callbacks"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/signals-callbacks.py.page:34
+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+."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/signals-callbacks.py.page:36
+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 ""
+
+#. (itstool) path: section/p
+#: C/signals-callbacks.py.page:38
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/signals-callbacks.py.page:40
+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>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/signals-callbacks.py.page:47
+msgid "<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Signals</link> in GObject 
documentation"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/signals-callbacks.py.page:48
+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"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/spinbutton.c.page:8
+msgctxt "text"
+msgid "SpinButton (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/spinbutton.c.page:21
+msgid "Retrieve an integer or floating point number"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/spinbutton.c.page:24 C/spinbutton.js.page:24 C/spinbutton.py.page:23 C/spinbutton.vala.page:23
+msgid "SpinButton"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:26 C/spinbutton.py.page:24 C/spinbutton.vala.page:24
+msgctxt "_"
+msgid "external ref='media/spinbutton.png' md5='993cbb7d9bd271a329727a926195712a'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/spinbutton.c.page:27 C/spinbutton.py.page:25 C/spinbutton.vala.page:25
+msgid "Choose a number, by entering it or by clicking on the -/+ buttons!"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/spinbutton.c.page:29
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/spinbutton.c.page:37
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkSpinButton.html\";>GtkSpinButton</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkSpinButton.html\";>GtkSpinButton</link>"
+
+#. (itstool) path: info/title
+#: C/spinbutton.js.page:8
+msgctxt "text"
+msgid "SpinButton (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/spinbutton.js.page:21
+msgid "A number entry field that has + and - buttons"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:25
+msgctxt "_"
+msgid "external ref='media/spinbuttonkittens.png' md5='577cce8a902140aacbab73fe8a76a010'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/spinbutton.js.page:26
+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."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/spinbutton.js.page:27
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:44
+#, no-wrap
+msgid ""
+"\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"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:69
+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 ""
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:70
+#, 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"
+"            border_width: 20,\n"
+"            title: \"Kitten Feeder\"});\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/spinbutton.js.page:85
+msgid "Creating the SpinButtons"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:86
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:92
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:93
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:95
+#, no-wrap
+msgid ""
+"\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"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:112
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:113
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/spinbutton.js.page:114
+msgid "For the kitties' sake, please don't use set_digits to allow a decimal number of kittens."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/spinbutton.js.page:118
+msgid "Creating the rest of the UI"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:120
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:129
+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 ""
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:131
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:155
+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 ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:156
+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 ""
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:158
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:166 C/switch.js.page:154
+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 ""
+
+#. (itstool) path: section/title
+#: C/spinbutton.js.page:170
+msgid "Function which handles the SpinButtons' numerical values being adjusted"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:172
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:183
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:185
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new SpinButtonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:190
+msgid "Finally, we create a new instance of the finished SpinButtonExample class, and set the application 
running."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:195
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class SpinButtonExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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\", this._newValue.bind(this));\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\", this._newValue.bind(this));\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"
+"    _newValue() {\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"
+"// Run the application\n"
+"let app = new SpinButtonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/spinbutton.js.page:206
+msgid "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.SpinButton.html\";>Gtk.SpinButton</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/spinbutton.py.page:8
+msgctxt "text"
+msgid "SpinButton (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/spinbutton.py.page:20
+msgid "Retrieve an integer or floating-point number from the user."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/spinbutton.py.page:31
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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\n"
+"    # text of the label\n"
+"    def spin_selected(self, event):\n"
+"        self.label.set_text(\n"
+"            \"The number you selected is \" + str(self.spin.get_value_as_int()) + \".\")\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/spinbutton.py.page:35
+msgid "Useful methods for a SpinButton widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.py.page:36
+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 ""
+
+#. (itstool) path: section/p
+#: C/spinbutton.py.page:37
+msgid ""
+"In line 23 the signal <code>\"value-changed\"</code> is connected to the callback function 
<code>spin_selected()</"
+"code> using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See 
<link "
+"xref=\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/spinbutton.py.page:39
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/spinbutton.py.page:40
+msgid "<code>set_digits(digits)</code> sets the precision to be displayed by the spinbutton, up to 20 
digits."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/spinbutton.py.page:41
+msgid "To get the value of the spinbutton as an integer, use <code>get_value_as_int()</code>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/spinbutton.py.page:49
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSpinButton.html\";>GtkSpinButton</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/spinbutton.vala.page:8
+msgctxt "text"
+msgid "SpinButton (Vala)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/spinbutton.vala.page:20
+msgid "Retrieve an integer or floating point number."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/spinbutton.vala.page:27
+#, 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\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 ""
+
+#. (itstool) path: item/p
+#: C/spinbutton.vala.page:32
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.SpinButton.html\";>Gtk.SpinButton</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/spinner.c.page:8
+msgctxt "text"
+msgid "Spinner (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/spinner.c.page:19 C/spinner.js.page:18 C/spinner.py.page:19 C/spinner.vala.page:18
+msgid "A spinner animation"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/spinner.c.page:22 C/spinner.js.page:21 C/spinner.py.page:22 C/spinner.vala.page:21
+msgid "Spinner"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:24 C/spinner.js.page:22 C/spinner.py.page:23 C/spinner.vala.page:22
+msgctxt "_"
+msgid "external ref='media/spinner.png' md5='d04f2d81f1d72c6c2f97e8729947dfed'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/spinner.c.page:25 C/spinner.js.page:23 C/spinner.py.page:24 C/spinner.vala.page:23
+msgid "This Spinner is stopped and started by pressing the spacebar."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/spinner.c.page:27
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/spinner.c.page:35
+msgid ""
+"<link 
href=\"http://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.html#g-object-get\";>GObject</"
+"link>"
+msgstr ""
+"<link 
href=\"http://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.html#g-object-get\";>GObject</"
+"link>"
+
+#. (itstool) path: item/p
+#: C/spinner.c.page:36 C/togglebutton.c.page:38
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkSpinner.html\";>GtkSpinner</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkSpinner.html\";>GtkSpinner</link>"
+
+#. (itstool) path: info/title
+#: C/spinner.js.page:8
+msgctxt "text"
+msgid "Spinner (JavaScript)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/spinner.js.page:25
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gdk = '3.0';\n"
+"imports.gi.versions.Gtk = '3.0';\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"
+"\n"
+"class SpinnerExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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"
+"\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\", this._onKeyPress.bind(this));\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    }\n"
+"\n"
+"    _onKeyPress(widget, event) {\n"
+"\n"
+"        // Get the value of the key that was pressed\n"
+"        let [, keyval] = event.get_keyval();\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"
+"// Run the application\n"
+"let app = new SpinnerExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/spinner.js.page:30
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gdk.html\";>Gdk - Key Values</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/spinner.js.page:33 C/togglebutton.js.page:158
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Spinner.html\";>Gtk.Spinner</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Spinner.html\";>Gtk.Spinner</link>"
+
+#. (itstool) path: info/title
+#: C/spinner.py.page:8
+msgctxt "text"
+msgid "Spinner (Python)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/spinner.py.page:31
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import Gdk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: note/p
+#: C/spinner.py.page:33
+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 ""
+
+#. (itstool) path: item/p
+#: C/spinner.py.page:42 C/togglebutton.py.page:46
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSpinner.html\";>GtkSpinner</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSpinner.html\";>GtkSpinner</link>"
+
+#. (itstool) path: item/p
+#: C/spinner.py.page:43
+msgid "<link href=\"http://developer.gnome.org/gdk/stable/gdk-Keyboard-Handling.html\";>Key Values</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/spinner.vala.page:8
+msgctxt "text"
+msgid "Spinner (Vala)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/spinner.vala.page:25
+#, no-wrap
+msgid ""
+"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 ""
+
+#. (itstool) path: item/p
+#: C/spinner.vala.page:30
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Widget.html\";>Gtk.Widget</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Widget.html\";>Gtk.Widget</link>"
+
+#. (itstool) path: item/p
+#: C/spinner.vala.page:31
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Spinner.html\";>Gtk.Spinner</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Spinner.html\";>Gtk.Spinner</link>"
+
+#. (itstool) path: item/p
+#: C/spinner.vala.page:32
+msgid "<link href=\"http://www.valadoc.org/gdk-3.0/Gdk.keyval_name.html\";>Gdk.keyval_name</link>"
+msgstr "<link href=\"http://www.valadoc.org/gdk-3.0/Gdk.keyval_name.html\";>Gdk.keyval_name</link>"
+
+#. (itstool) path: info/title
+#: C/statusbar.c.page:8
+msgctxt "text"
+msgid "Statusbar (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/statusbar.c.page:22 C/statusbar.py.page:20 C/statusbar.vala.page:21
+msgid "Report messages of minor importance to the user"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/statusbar.c.page:25 C/statusbar.js.page:21 C/statusbar.py.page:23 C/statusbar.vala.page:24
+msgid "Statusbar"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:27
+msgctxt "_"
+msgid "external ref='media/statusbar3.png' md5='60c71604fb44656237ee66dfb39a8689'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/statusbar.c.page:28
+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 ""
+
+#. (itstool) path: page/code
+#: C/statusbar.c.page:30
+#, 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"
+"  guaranteed 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 ""
+
+#. (itstool) path: item/p
+#: C/statusbar.c.page:38
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkStatusbar.html\";>GtkStatusBar</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkStatusbar.html\";>GtkStatusBar</link>"
+
+#. (itstool) path: item/p
+#: C/statusbar.c.page:39
+msgid ""
+"<link href=\"http://developer.gnome.org/glib/stable/glib-String-Utility-Functions.html#g-snprintf\";>String 
Utility "
+"Functions</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/statusbar.js.page:8
+msgctxt "text"
+msgid "Statusbar (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/statusbar.js.page:18
+msgid "Show notifications in a dedicated statusbar"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:22
+msgctxt "_"
+msgid "external ref='media/statusbar2.png' md5='ff6f7e5b270827ca98b2d5f7087aa766'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/statusbar.js.page:23
+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."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/statusbar.js.page:24
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/statusbar.js.page:41
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/statusbar.js.page:67
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/statusbar.js.page:68
+#, 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: 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 ""
+
+#. (itstool) path: section/p
+#: C/statusbar.js.page:84
+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 Gtk.Paned 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 ""
+
+#. (itstool) path: section/title
+#: C/statusbar.js.page:88
+msgid "Creating the buttons"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/statusbar.js.page:89
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/statusbar.js.page:107
+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=\"https://developer.gnome.org/gtk3/3.4/gtk3-Stock-Items.html\";>stock buttons</link>, which are 
automatically "
+"translated into any language GNOME supports."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/statusbar.js.page:109
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/statusbar.js.page:125
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/statusbar.js.page:129
+msgid "Creating the statusbar"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/statusbar.js.page:130
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/statusbar.js.page:146
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/statusbar.js.page:147
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/statusbar.js.page:148
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/statusbar.js.page:149
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/statusbar.js.page:161
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/statusbar.js.page:165
+msgid "Functions for interacting with the statusbar"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/statusbar.js.page:166
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/statusbar.js.page:206
+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 ""
+
+#. (itstool) path: section/code
+#: C/statusbar.js.page:207
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new StatusbarExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/statusbar.js.page:212
+msgid "Finally, we create a new instance of the finished StatusbarExample class, and set the application 
running."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/statusbar.js.page:217
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class StatusbarExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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\", this._clicked.bind(this));\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\", this._back.bind(this));\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\", this._clear.bind(this));\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"
+"    _clicked() {\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"
+"    _back() {\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"
+"    _clear() {\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"
+"// Run the application\n"
+"let app = new StatusbarExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/statusbar.js.page:226
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Frame.html\";>Gtk.Frame</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Frame.html\";>Gtk.Frame</link>"
+
+#. (itstool) path: item/p
+#: C/statusbar.js.page:227
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Paned.html\";>Gtk.Paned</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Paned.html\";>Gtk.Paned</link>"
+
+#. (itstool) path: item/p
+#: C/statusbar.js.page:228
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Statusbar.html\";>Gtk.Statusbar</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Statusbar.html\";>Gtk.Statusbar</link>"
+
+#. (itstool) path: info/title
+#: C/statusbar.py.page:8
+msgctxt "text"
+msgid "Statusbar (Python)"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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 C/statusbar.vala.page:25
+msgctxt "_"
+msgid "external ref='media/statusbar.png' md5='eb1aca55315d6cda57b12a5f36058ba8'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/statusbar.py.page:25
+msgid "This statusbar tells you if you click the button or if you press any key (and which key)."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/statusbar.py.page:32
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import Gdk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"\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(\n"
+"            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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: note/p
+#: C/statusbar.py.page:34
+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 ""
+
+#. (itstool) path: section/title
+#: C/statusbar.py.page:40
+msgid "Useful methods for a Statusbar widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/statusbar.py.page:41
+msgid ""
+"In line 17 the signal <code>\"clicked\"</code> is connected to the callback function 
<code>button_clicked_cb()</"
+"code> using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See 
<link "
+"xref=\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/statusbar.py.page:43
+msgid ""
+"<code>pop(context_id)</code> removes the first message in the statusbar stack with the given 
<code>context_id</"
+"code>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/statusbar.py.page:44
+msgid ""
+"<code>remove_all(context_id)</code> removes all the messages in the statusbar stack with the given "
+"<code>context_id</code>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/statusbar.py.page:45
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/statusbar.py.page:53
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkStatusbar.html\";>GtkStatusbar</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkStatusbar.html\";>GtkStatusbar</link>"
+
+#. (itstool) path: item/p
+#: C/statusbar.py.page:54
+msgid "<link href=\"http://developer.gnome.org/gdk/stable/gdk-Keyboard-Handling.html\";>Gdk - Key 
Values</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/statusbar.vala.page:8
+msgctxt "text"
+msgid "Statusbar (Vala)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/statusbar.vala.page:26
+msgid "This statusbar tells you what's going on."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/statusbar.vala.page:28
+#, no-wrap
+msgid ""
+"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 ""
+
+#. (itstool) path: item/p
+#: C/statusbar.vala.page:33
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Statusbar.html\";>Gtk.Statusbar</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Statusbar.html\";>Gtk.Statusbar</link>"
+
+#. (itstool) path: info/title
+#: C/strings.py.page:9
+msgctxt "text"
+msgid "Strings (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/strings.py.page:14
+msgid "An explanation of how to deal with strings in Python and GTK+."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/strings.py.page:27
+msgid "Strings"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/strings.py.page:31
+msgid "GNOME strongly encourages the use of Python 3 for writing applications!"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/strings.py.page:34
+msgid "Strings in Python 2"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/strings.py.page:36
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/strings.py.page:38
+#, no-wrap
+msgid ""
+"\n"
+"&gt;&gt;&gt; unicode_string = u\"Fu\\u00dfb\\u00e4lle\"\n"
+"&gt;&gt;&gt; print unicode_string\n"
+"Fußbälle\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/strings.py.page:44
+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>):"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/strings.py.page:46
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/strings.py.page:57
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/strings.py.page:62
+msgid "Strings in Python 3"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/strings.py.page:64
+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. Conceptually, "
+"<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 ""
+
+#. (itstool) path: section/p
+#: C/strings.py.page:66
+msgid ""
+"In addition, it is no longer possible to mix Unicode strings with encoded strings, because it will result 
in a "
+"<code>TypeError</code>:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/strings.py.page:68
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/strings.py.page:83
+msgid "Unicode in GTK+"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/strings.py.page:85
+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:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/strings.py.page:87
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/strings.py.page:96
+msgid "Furthermore:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/strings.py.page:98
+#, no-wrap
+msgid ""
+"\n"
+"&gt;&gt;&gt; txt == unicode_string"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/strings.py.page:101
+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)."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/strings.py.page:103
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/strings.py.page:105
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/strings.py.page:107
+msgid ""
+"String encoding is more consistent in Python 3.x 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 ""
+
+#. (itstool) path: section/p
+#: C/strings.py.page:114
+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 ""
+
+#. (itstool) path: info/title
+#: C/switch.c.page:8
+msgctxt "text"
+msgid "Switch (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/switch.c.page:18 C/switch.py.page:19 C/switch.vala.page:22
+msgid "A \"light switch\" style toggle"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/switch.c.page:21 C/switch.js.page:21 C/switch.py.page:22 C/switch.vala.page:25
+msgid "Switch"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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 C/switch.py.page:23 C/switch.vala.page:26
+msgctxt "_"
+msgid "external ref='media/switch_off.png' md5='211a2962708800697ad5373dcc86ad6d'"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:24 C/switch.py.page:24 C/switch.vala.page:27
+msgctxt "_"
+msgid "external ref='media/switch_on.png' md5='95e8769f758c2d95ace0fa8ecf30b29d'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/switch.c.page:25
+msgid "This switch toggles the title of the window."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/switch.c.page:27
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: info/title
+#: C/switch.js.page:8
+msgctxt "text"
+msgid "Switch (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/switch.js.page:18
+msgid "A sliding switch that can be flipped on and off"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:22
+msgctxt "_"
+msgid "external ref='media/switchanimals.png' md5='513ae15dcf68e15eef30b76420b8c714'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/switch.js.page:23
+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>."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/switch.js.page:24
+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:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/switch.js.page:26
+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>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/switch.js.page:27
+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>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/switch.js.page:28
+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>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/switch.js.page:29
+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>"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/switch.js.page:31
+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>"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/switch.js.page:48
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/switch.js.page:75
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/switch.js.page:77
+#, 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"
+"            border_width: 20,\n"
+"            title: \"Animal Creator\"});\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/switch.js.page:92
+msgid "Creating the switches"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/switch.js.page:93
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the image widget and set its default picture\n"
+"        this._image = new Gtk.Image ({file: \"redfox.png\"});\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/switch.js.page:98
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/switch.js.page:100
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/switch.js.page:120
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/switch.js.page:121
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/switch.js.page:123
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/switch.js.page:145
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/switch.js.page:146
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/switch.js.page:158
+msgid "Function which handles the switches being flipped"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/switch.js.page:160
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/switch.js.page:181
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/switch.js.page:185
+msgid "Creating the AboutDialog"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/switch.js.page:186
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/switch.js.page:212
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/switch.js.page:214
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/switch.js.page:248
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/switch.js.page:250
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new SwitchExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/switch.js.page:255
+msgid "Finally, we create a new instance of the finished SwitchExample class, and set the application 
running."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/switch.js.page:260
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class SwitchExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal creates the menu and builds the UI\n"
+"    _onStartup() {\n"
+"        this._initMenus();\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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', this._switchFlip.bind(this));\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', this._switchFlip.bind(this));\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"
+"    _switchFlip() {\n"
+"\n"
+"        // Change the picture depending on which switches are flipped\n"
+"        if (this._flySwitch.get_active()) {\n"
+"\n"
+"            if (this._birdSwitch.get_active())\n"
+"                this._image.set_from_file (\"muteswan.png\");\n"
+"            else\n"
+"                this._image.set_from_file (\"fruitbat.png\");\n"
+"        } else {\n"
+"\n"
+"            if (this._birdSwitch.get_active())\n"
+"                this._image.set_from_file (\"gentoopenguin.png\");\n"
+"            else\n"
+"                this._image.set_from_file (\"redfox.png\");\n"
+"        }\n"
+"    }\n"
+"\n"
+"    _initMenus() {\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', () =&gt; { this._showAbout(); });\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', () =&gt; { this._window.destroy(); });\n"
+"        this.application.add_action(quitAction);\n"
+"    }\n"
+"\n"
+"    _showAbout() {\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"
+"// Run the application\n"
+"let app = new SwitchExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/switch.js.page:271
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html\";>Gtk.Image</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html\";>Gtk.Image</link>"
+
+#. (itstool) path: item/p
+#: C/switch.js.page:273
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Switch.html\";>Gtk.Switch</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Switch.html\";>Gtk.Switch</link>"
+
+#. (itstool) path: info/title
+#: C/switch.py.page:8
+msgctxt "text"
+msgid "Switch (Python)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/switch.py.page:26
+msgid "This Switch makes the title appears and disappear."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/switch.py.page:33
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"\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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/switch.py.page:37
+msgid "Useful methods for a Switch widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/switch.py.page:38
+msgid ""
+"In line 17 the signal <code>\"notify::active\"</code> is connected to the callback function 
<code>activate_cb()</"
+"code> using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See 
<link "
+"xref=\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/switch.py.page:45
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSwitch.html\";>GtkSwitch</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSwitch.html\";>GtkSwitch</link>"
+
+#. (itstool) path: info/title
+#: C/switch.vala.page:8
+msgctxt "text"
+msgid "Switch (Vala)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/switch.vala.page:29
+msgid "This Switch toggles the title."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/switch.vala.page:31
+#, no-wrap
+msgid ""
+"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 ""
+
+#. (itstool) path: item/p
+#: C/switch.vala.page:36
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Switch.html\";>Gtk.Switch</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Switch.html\";>Gtk.Switch</link>"
+
+#. (itstool) path: info/title
+#: C/textview.c.page:8
+msgctxt "text"
+msgid "TextView (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/textview.c.page:18 C/textview.vala.page:18
+msgid "Widget which displays a GtkTextBuffer"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/textview.c.page:21 C/textview.vala.page:21
+msgid "TextView widget"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/textview.c.page:22 C/textview.py.page:33 C/textview.vala.page:22
+msgid "If we press \"enter\", we have a new line."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/textview.c.page:23 C/textview.vala.page:23
+msgid ""
+"If we press \"enter\" more times then there are lines in the default sized window, then a vertical 
scrollbar "
+"appears."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/textview.c.page:24 C/textview.vala.page:24
+msgid "If we write a long sentence, the text will wrap breaking lines between words."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/textview.c.page:25
+msgid ""
+"If we have a loooooooooooooooooooooooooooooooooooong (that was long) word, a* horizontal scrollbar will 
appear."
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:27 C/textview.py.page:39 C/textview.vala.page:27
+msgctxt "_"
+msgid "external ref='media/textview.png' md5='049e859ed1af2d7c93d8cb5cfd9f7792'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/textview.c.page:28 C/textview.vala.page:28
+msgid "This is an example of Gtk.TextView"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/textview.c.page:30
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/textview.c.page:41
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkContainer.html\";>GtkContainer</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkContainer.html\";>GtkContainer</link>"
+
+#. (itstool) path: info/title
+#: C/textview.js.page:8
+msgctxt "text"
+msgid "TextView (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/textview.js.page:22
+msgid "A multiline text editor"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/textview.js.page:25 C/textview.py.page:30
+msgid "TextView"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:26
+msgctxt "_"
+msgid "external ref='media/textviewpenguinchat.png' md5='0dd6f6aa44aaeab7901bd90162ed4c9a'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/textview.js.page:27
+msgid "A TextView is really (or at least usually) a nested set of three objects."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.js.page:29
+msgid ""
+"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 ""
+
+#. (itstool) path: item/p
+#: C/textview.js.page:30
+msgid ""
+"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 ""
+
+#. (itstool) path: item/p
+#: C/textview.js.page:31
+msgid ""
+"Since the automatic resizing can make a TextView unwieldy, you normally place it inside of a 
ScrolledWindow. "
+"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 ""
+
+#. (itstool) path: page/p
+#: C/textview.js.page:33
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/textview.js.page:34
+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>."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/textview.js.page:50
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/textview.js.page:74
+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 ""
+
+#. (itstool) path: section/code
+#: C/textview.js.page:75
+#, 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 ""
+
+#. (itstool) path: section/title
+#: C/textview.js.page:92
+msgid "Creating the TextView"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/textview.js.page:93
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/textview.js.page:102
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/textview.js.page:104
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/textview.js.page:113
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/textview.js.page:114
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/textview.js.page:116
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/textview.js.page:128
+msgid ""
+"Here we create a ScrolledWindow, 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 ""
+
+#. (itstool) path: section/code
+#: C/textview.js.page:134
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/textview.js.page:144
+msgid "The first <link xref=\"grid.js\">Grid</link> we create only has the Label and the ScrolledWindow 
inside it."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/textview.js.page:146
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/textview.js.page:163
+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 ""
+
+#. (itstool) path: section/code
+#: C/textview.js.page:165
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/textview.js.page:174
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/textview.js.page:179
+msgid "Function which handles the penguin's response"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/textview.js.page:180
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/textview.js.page:231
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/textview.js.page:232
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/textview.js.page:234
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new TextViewExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/textview.js.page:239
+msgid "Finally, we create a new instance of the finished TextViewExample class, and set the application 
running."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/textview.js.page:244
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class TextViewExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jstextview'\n"
+"        });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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', this._chat.bind(this));\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"
+"    _chat() {\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"
+"// Run the application\n"
+"let app = new TextViewExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.js.page:256
+msgid ""
+"<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ScrolledWindow.html\";>Gtk.ScrolledWindow</link>"
+msgstr ""
+"<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ScrolledWindow.html\";>Gtk.ScrolledWindow</link>"
+
+#. (itstool) path: item/p
+#: C/textview.js.page:257
+msgid "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextBuffer.html\";>Gtk.TextBuffer</link>"
+msgstr "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextBuffer.html\";>Gtk.TextBuffer</link>"
+
+#. (itstool) path: item/p
+#: C/textview.js.page:258
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextView.html\";>Gtk.TextView</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextView.html\";>Gtk.TextView</link>"
+
+#. (itstool) path: info/title
+#: C/textview.py.page:8
+msgctxt "text"
+msgid "TextView (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/textview.py.page:27
+msgid "Widget that displays a GtkTextBuffer"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/textview.py.page:32
+msgid "This is an example of Gtk.TextView."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/textview.py.page:34
+msgid ""
+"But we can also have a new line if we write a long sentence (the text will wrap breaking lines between 
words)."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/textview.py.page:35
+msgid "If we have a loooooooooooooooooooooooooooooooooooong"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/textview.py.page:36
+msgid "(that was long)"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/textview.py.page:37
+msgid "word, an horizontal scrollbar will appear."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/textview.py.page:46
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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(\n"
+"            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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/textview.py.page:50
+msgid "Useful methods for a TextView widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/textview.py.page:51
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/textview.py.page:52
+msgid "Methods for a TextView widget:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:54
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:55
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:56
+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)."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/textview.py.page:58
+msgid "Methods for a TextBuffer widget:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:60
+msgid ""
+"<code>get_insert()</code> returns the <code>Gtk.TextMark</code> that represents the cursor, that is the 
insertion "
+"point."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:61
+msgid "<code>get_selection_bound()</code> returns the <code>Gtk.TextMark</code> that represents the 
selection bound."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:62
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:63
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:64
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:65
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:67
+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:"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/textview.py.page:68
+#, no-wrap
+msgid ""
+"\n"
+"tag = textbuffer.create_tag(\"orange_bg\", background=\"orange\")\n"
+"textbuffer.apply_tag(tag, start_iter, end_iter)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:71
+msgid "The following are some of the common styles applied to text:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:73
+msgid "Background colour (\"background\" property)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:74
+msgid "Foreground colour (\"foreground\" property)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:75
+msgid "Underline (\"underline\" property)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:76
+msgid "Bold (\"weight\" property)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:77
+msgid "Italics (\"style\" property)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:78
+msgid "Strikethrough (\"strikethrough\" property)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:79
+msgid "Justification (\"justification\" property)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:80
+msgid "Size (\"size\" and \"size-points\" properties)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:81
+msgid "Text wrapping (\"wrap-mode\" property)"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:83
+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>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/textview.py.page:85
+msgid "Methods for a TextIter widget"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:87
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:88
+msgid ""
+"<code>backward_search(needle, flags, limit)</code> does the same as <code>forward_search()</code>, but 
moving "
+"backwards."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/textview.py.page:96
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTextView.html\";>GtkTextView</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTextView.html\";>GtkTextView</link>"
+
+#. (itstool) path: item/p
+#: C/textview.py.page:97
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTextBuffer.html\";>GtkTextBuffer</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTextBuffer.html\";>GtkTextBuffer</link>"
+
+#. (itstool) path: item/p
+#: C/textview.py.page:98
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTextTag.html\";>GtkTextTag</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTextTag.html\";>GtkTextTag</link>"
+
+#. (itstool) path: info/title
+#: C/textview.vala.page:8
+msgctxt "text"
+msgid "TextView (Vala)"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/textview.vala.page:25
+msgid "If we have a loooooooooooooooooooooooooooooooooooong word, a horizontal scrollbar will appear."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/textview.vala.page:30
+#, no-wrap
+msgid ""
+"/* 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\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 ""
+
+#. (itstool) path: item/p
+#: C/textview.vala.page:35
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TextBuffer.html\";>Gtk.TextBuffer</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TextBuffer.html\";>Gtk.TextBuffer</link>"
+
+#. (itstool) path: item/p
+#: C/textview.vala.page:36
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TextView.html\";>Gtk.TextView</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TextView.html\";>Gtk.TextView</link>"
+
+#. (itstool) path: item/p
+#: C/textview.vala.page:38
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WrapMode.html\";>Gtk.WrapMode</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WrapMode.html\";>Gtk.WrapMode</link>"
+
+#. (itstool) path: info/title
+#: C/togglebutton.c.page:8
+msgctxt "text"
+msgid "ToggleButton (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/togglebutton.c.page:22 C/togglebutton.py.page:19 C/togglebutton.vala.page:21
+msgid "A button which retains state"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/togglebutton.c.page:25 C/togglebutton.js.page:21 C/togglebutton.py.page:22 C/togglebutton.vala.page:24
+msgid "ToggleButton"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:27 C/togglebutton.js.page:22 C/togglebutton.py.page:23 C/togglebutton.vala.page:25
+msgctxt "_"
+msgid "external ref='media/togglebutton.png' md5='791e062613d4f9bd5936390b0aa18448'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/togglebutton.c.page:28 C/togglebutton.py.page:24 C/togglebutton.vala.page:26
+msgid "When this ToggleButton is in an active state, the spinner spins."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/togglebutton.c.page:30
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/togglebutton.c.page:39
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkToggleButton.html\";>GtkTogglebutton</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkToggleButton.html\";>GtkTogglebutton</link>"
+
+#. (itstool) path: info/title
+#: C/togglebutton.js.page:8
+msgctxt "text"
+msgid "ToggleButton (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/togglebutton.js.page:18
+msgid "Stays pressed until you click it again"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/togglebutton.js.page:23
+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."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/togglebutton.js.page:24
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:41
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:68
+#, 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: 300,\n"
+"            default_width: 300,\n"
+"            border_width: 30,\n"
+"            title: \"ToggleButton Example\"});\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/togglebutton.js.page:85
+msgid "Creating the ToggleButton and other widgets"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:86
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/togglebutton.js.page:91
+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 ""
+
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:93
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/togglebutton.js.page:99
+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 ""
+
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:101
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/togglebutton.js.page:109
+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 ""
+
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:111
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/togglebutton.js.page:119
+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 ""
+
+#. (itstool) path: section/title
+#: C/togglebutton.js.page:123
+msgid "Making something happen when the ToggleButton is toggled"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:125
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/togglebutton.js.page:137
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:139
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new ToggleButtonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:149
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class ToggleButtonExample {\n"
+"\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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', this._onToggle.bind(this));\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"
+"    _onToggle() {\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"
+"// Run the application\n"
+"let app = new ToggleButtonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/togglebutton.js.page:159
+msgid "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ToggleButton.html\";>Gtk.ToggleButton</link>"
+msgstr "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ToggleButton.html\";>Gtk.ToggleButton</link>"
+
+#. (itstool) path: info/title
+#: C/togglebutton.py.page:8
+msgctxt "text"
+msgid "ToggleButton (Python)"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/togglebutton.py.page:31
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    # a window\n"
+"\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(\n"
+"            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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/togglebutton.py.page:36
+msgid "Useful methods for a ToggleButton widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/togglebutton.py.page:37
+msgid ""
+"In line 22 the signal <code>\"toggled\"</code> is connected to the callback function 
<code>toggled_cb()</code> "
+"using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See <link 
xref="
+"\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/togglebutton.py.page:45 C/toolbar.py.page:60 C/toolbar_builder.py.page:198 C/widget_drawing.py.page:38
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkWidget.html\";>GtkWidget</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkWidget.html\";>GtkWidget</link>"
+
+#. (itstool) path: info/title
+#: C/togglebutton.vala.page:8
+msgctxt "text"
+msgid "ToggleButton (Vala)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/togglebutton.vala.page:28
+#, 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 ""
+
+#. (itstool) path: item/p
+#: C/togglebutton.vala.page:33
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ToggleButton.html\";>Gtk.ToggleButton</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ToggleButton.html\";>Gtk.ToggleButton</link>"
+
+#. (itstool) path: info/title
+#: C/toolbar.c.page:8
+msgctxt "text"
+msgid "Toolbar (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/toolbar.c.page:20 C/toolbar.vala.page:19 C/toolbar_builder.vala.page:20
+msgid "A bar of buttons"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/toolbar.c.page:23 C/toolbar.js.page:21 C/toolbar.py.page:23 C/toolbar.vala.page:22
+msgid "Toolbar"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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.c.page:25 C/toolbar.js.page:22 C/toolbar.py.page:25 C/toolbar.vala.page:24 
C/toolbar_builder.py.page:38
+#: C/toolbar_builder.vala.page:25
+msgctxt "_"
+msgid "external ref='media/toolbar.png' md5='f0350855eedf6343952b72d6d906f738'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/toolbar.c.page:26 C/toolbar.js.page:23 C/toolbar.vala.page:25
+msgid ""
+"Toolbar can contain either text or stock icons. In this sample we use stock icons. This example has 
fullscreen "
+"functionality."
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/toolbar.c.page:27
+msgid "This example uses SimpleActions (window and app). App actions can easily be added to the app menu."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/toolbar.c.page:29
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"/* Declare these two Toolbuttons, as they will be used in both the fullscreen\n"
+" * action callback as well as the activate function.\n"
+" */\n"
+"GtkToolItem *fullscreen_button;\n"
+"GtkToolItem *leavefullscreen_button;\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the undo action */\n"
+"static void\n"
+"undo_callback (GSimpleAction *simple,\n"
+"               GVariant      *parameter,\n"
+"               gpointer       user_data)\n"
+"{\n"
+"  g_print (\"You clicked \\\"Undo\\\".\\n\");\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the fullscreen action */\n"
+"static void\n"
+"fullscreen_callback (GSimpleAction *simple,\n"
+"                     GVariant      *parameter,\n"
+"                     gpointer       user_data)\n"
+"{\n"
+"  GdkWindow *window = gtk_widget_get_window (GTK_WIDGET (user_data));\n"
+"\n"
+"  GdkWindowState current_state = gdk_window_get_state (window);\n"
+"\n"
+"  /* If the window is currently in fullscreen mode */\n"
+"  if ( (current_state &amp; GDK_WINDOW_STATE_FULLSCREEN) != 0)\n"
+"    {\n"
+"      /* Minimize the window and change to the fullscreen button */\n"
+"      gdk_window_unfullscreen (window);\n"
+"      gtk_widget_hide (GTK_WIDGET(leavefullscreen_button));\n"
+"      gtk_widget_show (GTK_WIDGET(fullscreen_button));\n"
+"    }\n"
+"  else\n"
+"    {\n"
+"      /* Maximize the window, and change to the unfullscreen button */\n"
+"      gdk_window_fullscreen (window);\n"
+"      gtk_widget_hide (GTK_WIDGET (fullscreen_button));\n"
+"      gtk_widget_show (GTK_WIDGET (leavefullscreen_button));\n"
+"    }\n"
+"}\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  /* Initialize variables */\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *grid;\n"
+"  GtkWidget *toolbar;\n"
+"\n"
+"  GtkToolItem *new_button;\n"
+"  GtkToolItem *open_button;\n"
+"  GtkToolItem *undo_button;\n"
+"\n"
+"  GtkStyleContext *style_context;\n"
+"\n"
+"  GSimpleAction *undo_action;\n"
+"  GSimpleAction *fullscreen_action;\n"
+"  GSimpleAction *leavefullscreen_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), \"Toolbar Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 400, 200);\n"
+"\n"
+"  /* Here we begin to create the toolbar */\n"
+"  toolbar = gtk_toolbar_new ();\n"
+"  /* Set the toolbar to be the primary toolbar of the application */\n"
+"  style_context = gtk_widget_get_style_context (toolbar);\n"
+"  gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_PRIMARY_TOOLBAR);\n"
+"\n"
+"  /* Create a button for the \"new\" action, with a stock image */\n"
+"  new_button = gtk_tool_button_new_from_stock (GTK_STOCK_NEW);\n"
+"  /* Show the \"new\" button's label */\n"
+"  gtk_tool_item_set_is_important (new_button, TRUE);\n"
+"  /* Insert the button in the desired position within the toolbar */\n"
+"  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), new_button, 0);\n"
+"  /* Show the button */\n"
+"  gtk_widget_show (GTK_WIDGET (new_button));\n"
+"  /* Set the action name for the \"new\" action. We use \"app.new\" to\n"
+"   * indicate that the action controls the application.\n"
+"   */\n"
+"  gtk_actionable_set_action_name (GTK_ACTIONABLE (new_button), \"app.new\");\n"
+"\n"
+"  /* Repeat the same steps for the \"open\" action */\n"
+"  open_button = gtk_tool_button_new_from_stock (GTK_STOCK_OPEN);\n"
+"  gtk_tool_item_set_is_important (open_button, TRUE);\n"
+"  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), open_button, 1);\n"
+"  gtk_widget_show (GTK_WIDGET (open_button));\n"
+"  gtk_actionable_set_action_name (GTK_ACTIONABLE (open_button), \"app.open\");\n"
+"\n"
+"  /* Repeat the same steps for the \"undo\" action */\n"
+"  undo_button = gtk_tool_button_new_from_stock (GTK_STOCK_UNDO);\n"
+"  gtk_tool_item_set_is_important (undo_button, TRUE);\n"
+"  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), undo_button, 2);\n"
+"  gtk_widget_show (GTK_WIDGET (undo_button));\n"
+"  /* In this case, we use \"win.undo\" to indicate that\n"
+"   * the action controls only the window\n"
+"   */\n"
+"  gtk_actionable_set_action_name (GTK_ACTIONABLE (undo_button), \"win.undo\");\n"
+"\n"
+"  /* Repeat the same steps for the \"fullscreen\" action */\n"
+"  fullscreen_button = gtk_tool_button_new_from_stock (GTK_STOCK_FULLSCREEN);\n"
+"  gtk_tool_item_set_is_important (fullscreen_button, TRUE);\n"
+"  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), fullscreen_button, 3);\n"
+"  gtk_widget_show (GTK_WIDGET (fullscreen_button));\n"
+"  gtk_actionable_set_action_name (GTK_ACTIONABLE (fullscreen_button),\n"
+"                                  \"win.fullscreen\");\n"
+"\n"
+"  /*Repeat the same steps for the \"leavefullscreen\" action */\n"
+"  leavefullscreen_button = gtk_tool_button_new_from_stock (GTK_STOCK_LEAVE_FULLSCREEN);\n"
+"  gtk_tool_item_set_is_important (leavefullscreen_button, TRUE);\n"
+"  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), leavefullscreen_button, 3);\n"
+"  /* The only difference here is that we don't show the leavefullscreen button,\n"
+"   * as it will later replace the fullscreen button.\n"
+"   */\n"
+"  gtk_actionable_set_action_name (GTK_ACTIONABLE (leavefullscreen_button),\n"
+"                                  \"win.leavefullscreen\");\n"
+"\n"
+"  /* Once we've created the bare-bones of the toolbar, we make\n"
+"   * sure it has enough horizontal space.\n"
+"   */\n"
+"  gtk_widget_set_hexpand (toolbar, TRUE);\n"
+"  gtk_widget_show (toolbar);\n"
+"\n"
+"  /* Attach the toolbar to the grid and add it to the overall window */\n"
+"  grid = gtk_grid_new ();\n"
+"  gtk_grid_attach (GTK_GRID (grid), toolbar, 0, 0, 1, 1);\n"
+"  gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (grid));\n"
+"  gtk_widget_show (GTK_WIDGET (grid));\n"
+"\n"
+"  /* Use the action names to create the actions that control the window, and\n"
+"   * connect them to the appropriate callbackfunctions.\n"
+"   */\n"
+"  undo_action = g_simple_action_new (\"undo\", NULL);\n"
+"  g_signal_connect (undo_action, \"activate\", G_CALLBACK (undo_callback),\n"
+"                    GTK_WINDOW (window));\n"
+"  g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (undo_action));\n"
+"\n"
+"  fullscreen_action = g_simple_action_new (\"fullscreen\", NULL);\n"
+"  g_signal_connect (fullscreen_action, \"activate\", G_CALLBACK (fullscreen_callback),\n"
+"                    GTK_WINDOW (window));\n"
+"  g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (fullscreen_action));\n"
+"\n"
+"  leavefullscreen_action = g_simple_action_new (\"leavefullscreen\", NULL);\n"
+"  g_signal_connect (leavefullscreen_action, \"activate\", G_CALLBACK (fullscreen_callback),\n"
+"                    GTK_WINDOW (window));\n"
+"  g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (leavefullscreen_action));\n"
+"\n"
+"  gtk_widget_show (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the new action */\n"
+"static void\n"
+"new_callback (GSimpleAction *simple,\n"
+"              GVariant      *parameter,\n"
+"              gpointer       user_data)\n"
+"{\n"
+"  g_print (\"You clicked \\\"New\\\".\\n\");\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the open action */\n"
+"static void\n"
+"open_callback (GSimpleAction *simple,\n"
+"               GVariant      *parameter,\n"
+"               gpointer       user_data)\n"
+"{\n"
+"  g_print (\"You clicked \\\"Open\\\".\\n\");\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* In this function, we create the actions in which control the window, and\n"
+" * connect their signals to the appropriate callback function.\n"
+" */\n"
+"static void\n"
+"startup (GApplication *app,\n"
+"         gpointer      user_data)\n"
+"{\n"
+"  GSimpleAction *new_action;\n"
+"  GSimpleAction *open_action;\n"
+"\n"
+"  new_action = g_simple_action_new (\"new\", NULL);\n"
+"  g_signal_connect (new_action, \"activate\", G_CALLBACK (new_callback), app);\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (new_action));\n"
+"\n"
+"  open_action = g_simple_action_new (\"open\", NULL);\n"
+"  g_signal_connect (open_action, \"activate\", G_CALLBACK (open_callback), app);\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (open_action));\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 ""
+
+#. (itstool) path: item/p
+#: C/toolbar.c.page:35 C/tooltip.c.page:39 C/tooltip.py.page:60
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkToolbar.html\";>GtkToolbar</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkToolbar.html\";>GtkToolbar</link>"
+
+#. (itstool) path: item/p
+#: C/toolbar.c.page:36
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkToolButton.html\";>GtkToolbutton</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkToolButton.html\";>GtkToolbutton</link>"
+
+#. (itstool) path: info/title
+#: C/toolbar.js.page:8
+msgctxt "text"
+msgid "Toolbar (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/toolbar.js.page:18
+msgid "A bar of tools"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/toolbar.js.page:24 C/toolbar.vala.page:26
+msgid "This example uses SimpleActions (window and app). App actions can easily be added the the app menu."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/toolbar.js.page:26
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gdk = '3.0';\n"
+"imports.gi.versions.Gtk = '3.0';\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"
+"\n"
+"class Application {\n"
+"\n"
+"    //create the application\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"       this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    //create the UI (in this case it's just the ApplicationWindow\n"
+"    _buildUI() {\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Toolbar Example\",\n"
+"            default_height: 200,\n"
+"            default_width: 400\n"
+"        });\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() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    //callback function for 'startup' signal\n"
+"    _onStartup() {\n"
+"        this._initMenus();\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    //create the toolbar, its toolbuttons and their actions\n"
+"    _createToolbar() {\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', () =&gt; { this._newCB(); });\n"
+"        this.application.add_action(newAction);//note: this action is added to the app\n"
+"\n"
+"        this._newButton = 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', () =&gt; { this._openCB(); });\n"
+"        this.application.add_action(openAction);\n"
+"\n"
+"        this._openButton = 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', () =&gt; { this._undoCB(); });\n"
+"        this._window.add_action(undoAction);//note this action is added to the window\n"
+"\n"
+"        this._undoButton = 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', () =&gt; {\n"
+"            this._fullscreenToggleCB();\n"
+"        });\n"
+"        this._window.add_action(fullscreenToggleAction);\n"
+"\n"
+"        this._fullscreenButton = 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 = 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() {\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', () =&gt; { this._window.destroy(); });\n"
+"        this.application.add_action(quitAction);\n"
+"    }\n"
+"\n"
+"    _newCB() {\n"
+"        print(\"You clicked 'New'.\");\n"
+"    }\n"
+"\n"
+"    _openCB() {\n"
+"        print(\"You clicked 'Open'.\");\n"
+"    }\n"
+"\n"
+"    _undoCB() {\n"
+"        print (\"You clicked 'Undo'.\");\n"
+"    }\n"
+"\n"
+"    _fullscreenToggleCB() {\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"
+"        } 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 ""
+
+#. (itstool) path: item/p
+#: C/toolbar.js.page:31
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Window.html\";>Gtk.Window</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Window.html\";>Gtk.Window</link>"
+
+#. (itstool) path: item/p
+#: C/toolbar.js.page:32
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Toolbar.html\";>Gtk.Toolbar</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Toolbar.html\";>Gtk.Toolbar</link>"
+
+#. (itstool) path: item/p
+#: C/toolbar.js.page:33
+msgid "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ToolButton.html\";>Gtk.ToolButton</link>"
+msgstr "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ToolButton.html\";>Gtk.ToolButton</link>"
+
+#. (itstool) path: item/p
+#: C/toolbar.js.page:34
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.html\";>Gtk Stock items</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar.js.page:35
+msgid "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gdk.WindowState.html\";>Gdk.WindowState</link>"
+msgstr "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gdk.WindowState.html\";>Gdk.WindowState</link>"
+
+#. (itstool) path: info/title
+#: C/toolbar.py.page:8
+msgctxt "text"
+msgid "Toolbar (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/toolbar.py.page:20 C/toolbar_builder.py.page:33
+msgid "A bar of buttons and other widgets"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/toolbar.py.page:26
+msgid "An example of toolbar with buttons (from stock icons)."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/toolbar.py.page:33
+#, 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"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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(\n"
+"            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\n"
+"        # is a bit flag\n"
+"        is_fullscreen = self.get_window().get_state(\n"
+"        ) &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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/toolbar.py.page:37
+msgid "Useful methods for a Toolbar widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/toolbar.py.page:38
+msgid ""
+"In line 32 the signal <code>\"activate\"</code> from the action <code>undo_action</code> is connected to 
the "
+"callback function <code>undo_callback()</code> using <code><var>action</var>.connect(<var>signal</var>, "
+"<var>callback function</var>)</code>. See <link xref=\"signals-callbacks.py\"/> for a more detailed 
explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar.py.page:41
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar.py.page:42
+msgid "<code>get_item_index(tool_item)</code> retrieves the position of <code>tool_item</code> on the 
toolbar."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar.py.page:43
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar.py.page:44
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar.py.page:45
+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 ""
+
+#. (itstool) path: item/p
+#: C/toolbar.py.page:46
+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>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar.py.page:55
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToolbar.html\";>GtkToolbar</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToolbar.html\";>GtkToolbar</link>"
+
+#. (itstool) path: item/p
+#: C/toolbar.py.page:56
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToolButton.html\";>GtkToolButton</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToolButton.html\";>GtkToolButton</link>"
+
+#. (itstool) path: item/p
+#: C/toolbar.py.page:57
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToolItem.html\";>GtkToolItem</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToolItem.html\";>GtkToolItem</link>"
+
+#. (itstool) path: item/p
+#: C/toolbar.py.page:59
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkActionable.html\";>GtkActionable</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkActionable.html\";>GtkActionable</link>"
+
+#. (itstool) path: item/p
+#: C/toolbar.py.page:61 C/toolbar_builder.py.page:199
+msgid ""
+"<link 
href=\"http://developer.gnome.org/gdk3/unstable/gdk3-Event-Structures.html#GdkEventWindowState\";>Event "
+"Structures</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/toolbar.vala.page:8
+msgctxt "text"
+msgid "Toolbar (Vala)"
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/toolbar.vala.page:28
+#, 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/* Constructor */\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 ""
+
+#. (itstool) path: item/p
+#: C/toolbar.vala.page:34 C/toolbar_builder.vala.page:151 C/tooltip.vala.page:40
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Toolbar.html\";>Gtk.Toolbar</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Toolbar.html\";>Gtk.Toolbar</link>"
+
+#. (itstool) path: item/p
+#: C/toolbar.vala.page:35 C/toolbar_builder.vala.page:152
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ToolButton.html\";>Gtk.Toolbutton</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ToolButton.html\";>Gtk.Toolbutton</link>"
+
+#. (itstool) path: item/p
+#: C/toolbar.vala.page:36 C/toolbar_builder.vala.page:153
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Stock.html\";>Gtk.Stock</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Stock.html\";>Gtk.Stock</link>"
+
+#. (itstool) path: info/title
+#: C/toolbar_builder.py.page:8
+msgctxt "text"
+msgid "Toolbar created using Glade (Python)"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/toolbar_builder.py.page:36 C/toolbar_builder.vala.page:23
+msgid "Toolbar created using Glade"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/toolbar_builder.py.page:39
+msgid ""
+"This example is similar to <link xref=\"toolbar.py\"/>, except we use Glade to create the toolbar in an XML 
.ui "
+"file."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/toolbar_builder.py.page:44
+msgid "Creating the toolbar with Glade"
+msgstr ""
+
+#. (itstool) path: section/p
+#. (itstool) path: page/p
+#: C/toolbar_builder.py.page:45 C/toolbar_builder.vala.page:28
+msgid "To create the toolbar using the <link href=\"http://glade.gnome.org/\";>Glade Interface 
Designer</link>:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:49 C/toolbar_builder.vala.page:32
+msgid "Open Glade, and save the file as <file>toolbar_builder.ui</file>"
+msgstr ""
+
+#. (itstool) path: p/media
+#. 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:50 C/toolbar_builder.vala.page:33
+msgctxt "_"
+msgid "external ref='media/glade_ui.png' md5='baea74fe213bc12ea934f64f6977215a'"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:50 C/toolbar_builder.vala.page:33
+msgid "<media type=\"image\" src=\"media/glade_ui.png\" width=\"900\"> Screenshot of Glade ui </media>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:55 C/toolbar_builder.vala.page:38
+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 ""
+
+#. (itstool) path: p/media
+#. 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:56 C/toolbar_builder.vala.page:39
+msgctxt "_"
+msgid "external ref='media/glade_select_toolbar.png' md5='f7b5b224050b2e387eb04362fc99df00'"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:56 C/toolbar_builder.vala.page:39
+msgid "<media type=\"image\" src=\"media/glade_select_toolbar.png\"> Screenshot of toolbar icon in Glade ui 
</media>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:61 C/toolbar_builder.vala.page:44
+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 ""
+
+#. (itstool) path: p/media
+#. 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:62 C/toolbar_builder.vala.page:45
+msgctxt "_"
+msgid "external ref='media/glade_toolbar_general.png' md5='e31daba6e8a3e526aca89d5f1622edaa'"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:62 C/toolbar_builder.vala.page:45
+msgid "<media type=\"image\" src=\"media/glade_toolbar_general.png\"> Screenshot of General tab </media>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:67 C/toolbar_builder.vala.page:50
+msgid "Under the <gui>Common</gui> tab, set <gui>Horizontal Expand</gui> to <gui>Yes</gui>."
+msgstr ""
+
+#. (itstool) path: p/media
+#. 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:68 C/toolbar_builder.vala.page:51
+msgctxt "_"
+msgid "external ref='media/glade_toolbar_common.png' md5='d5ec6cc0218ca98e195dbd033feb9ac5'"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:68 C/toolbar_builder.vala.page:51
+msgid "<media type=\"image\" src=\"media/glade_toolbar_common.png\"> Screenshot of Common tab </media>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:73 C/toolbar_builder.vala.page:56
+msgid ""
+"Right click on the toolbar in the top right and select <gui>Edit</gui>. The <gui>Tool Bar Editor</gui> 
window will "
+"appear."
+msgstr ""
+
+#. (itstool) path: p/media
+#. 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:74 C/toolbar_builder.vala.page:57
+msgctxt "_"
+msgid "external ref='media/glade_toolbar_edit.png' md5='feb1e2b7040d24a4d030f94cf07c81fd'"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:74 C/toolbar_builder.vala.page:57
+msgid ""
+"<media type=\"image\" src=\"media/glade_toolbar_edit.png\"> Screenshot of where to right click to edit 
toolbar. </"
+"media>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:79 C/toolbar_builder.vala.page:62
+msgid ""
+"We want to add 5 ToolButtons: New, Open, Undo, Fullscreen and Leave Fullscreen. First, we will add the New "
+"ToolButton."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:82 C/toolbar_builder.vala.page:65
+msgid "Under <gui>Hierarchy</gui> tab, click <gui>Add</gui>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:83 C/toolbar_builder.vala.page:66
+msgid "Change the name of the ToolItem to <input>new_button</input>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:84 C/toolbar_builder.vala.page:67
+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 ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:85 C/toolbar_builder.vala.page:68
+msgid "Enter the <gui>action name</gui>: <input>app.new</input>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:86 C/toolbar_builder.vala.page:69
+msgid "Change the <gui>Label</gui> to <input>New</input>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:87 C/toolbar_builder.vala.page:70
+msgid "Select the <gui>New</gui> Stock Id from the drop down menu, or type <input>gtk-new</input>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:89 C/toolbar_builder.vala.page:72
+msgid "Repeat the above steps for the remaining ToolButtons, with the following properties:"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:96 C/toolbar_builder.vala.page:79
+msgid "Is important"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:97 C/toolbar_builder.vala.page:80
+msgid "Action name"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:99 C/toolbar_builder.vala.page:82
+msgid "Stock Id"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:104 C/toolbar_builder.vala.page:87
+msgid "open_button"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:105 C/toolbar_builder.py.page:112 C/toolbar_builder.py.page:119
+#: C/toolbar_builder.py.page:126 C/toolbar_builder.vala.page:88 C/toolbar_builder.vala.page:95
+#: C/toolbar_builder.vala.page:102 C/toolbar_builder.vala.page:109
+msgid "Yes"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:106 C/toolbar_builder.vala.page:89
+msgid "app.open"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:107 C/toolbar_builder.vala.page:90
+msgid "Open"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:108 C/toolbar_builder.vala.page:91
+msgid "gtk-open"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:111 C/toolbar_builder.vala.page:94
+msgid "undo_button"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:113 C/toolbar_builder.vala.page:96
+msgid "win.undo"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:114 C/toolbar_builder.vala.page:97
+msgid "Undo"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:115 C/toolbar_builder.vala.page:98
+msgid "gtk-undo"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:118 C/toolbar_builder.vala.page:101
+msgid "fullscreen_button"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:120 C/toolbar_builder.py.page:127 C/toolbar_builder.vala.page:103
+#: C/toolbar_builder.vala.page:110
+msgid "win.fullscreen"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:121 C/toolbar_builder.vala.page:104
+msgid "Fullscreen"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:122 C/toolbar_builder.vala.page:105
+msgid "gtk-fullscreen"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:125 C/toolbar_builder.vala.page:108
+msgid "leave_fullscreen_button"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:128 C/toolbar_builder.vala.page:111
+msgid "Leave Fullscreen"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:129 C/toolbar_builder.vala.page:112
+msgid "gtk-leave-fullscreen"
+msgstr ""
+
+#. (itstool) path: item/media
+#. 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:133 C/toolbar_builder.vala.page:116
+msgctxt "_"
+msgid "external ref='media/glade_toolbar_editor.png' md5='8af65241e5ca47d5494a7b36640e6f1c'"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:138 C/toolbar_builder.vala.page:121
+msgid "Close the <gui>Tool Bar Editor</gui>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:141
+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."
+msgstr ""
+
+#. (itstool) path: p/media
+#. 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:142 C/toolbar_builder.vala.page:125
+msgctxt "_"
+msgid "external ref='media/glade_visible_no.png' md5='dc6c025aa825f4d772fbd283d6330026'"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:142 C/toolbar_builder.vala.page:125
+msgid "<media type=\"image\" src=\"media/glade_visible_no.png\"> Setting the visible property to No </media>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:147 C/toolbar_builder.vala.page:130
+msgid "Save your work, and close Glade."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:150 C/toolbar_builder.vala.page:133
+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>:"
+msgstr ""
+
+#. (itstool) path: item/code
+#: C/toolbar_builder.py.page:151 C/toolbar_builder.vala.page:134
+#, no-wrap
+msgid ""
+"\n"
+"  &lt;style&gt;\n"
+"     &lt;class name=\"primary-toolbar\"/&gt;\n"
+"  &lt;/style&gt;\n"
+"  "
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:156 C/toolbar_builder.vala.page:139
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#. (itstool) path: page/code
+#: C/toolbar_builder.py.page:159 C/toolbar_builder.vala.page:142
+#, no-wrap
+msgid ""
+"&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 ""
+
+#. (itstool) path: section/p
+#. (itstool) path: page/p
+#: C/toolbar_builder.py.page:166 C/toolbar_builder.vala.page:144
+msgid "We now create the code below, which adds the toolbar from the file we just created."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/toolbar_builder.py.page:167
+#, 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"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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(\n"
+"            \"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\n"
+"        # is a bit flag\n"
+"        is_fullscreen = self.get_window().get_state(\n"
+"        ) &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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/toolbar_builder.py.page:172
+msgid "Useful methods for Gtk.Builder"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/toolbar_builder.py.page:173
+msgid "For the useful methods for a Toolbar widget, see <link xref=\"toolbar.py\"/>"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/toolbar_builder.py.page:175
+msgid "Gtk.Builder builds an interface from an XML UI definition."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:178
+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 ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:179
+msgid ""
+"<code>add_from_string(string)</code> parses the given string and merges it with the current contents of the 
Gtk."
+"Builder."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:180
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:181
+msgid ""
+"<code>add_objects_from_string(string, 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 ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:182
+msgid ""
+"<code>get_object(object_id)</code> retrieves the widget with the id <code>object_id</code> from the loaded 
objects "
+"in the builder."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:183
+msgid "<code>get_objects()</code> returns all loaded objects."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:184
+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. In line 39 the signal 
<code>"
+"\"activate\"</code> from the action <code>undo_action</code> is connected to the callback function "
+"<code>undo_callback()</code> using <code><var>action</var>.connect(<var>signal</var>, <var>callback 
function</"
+"var>)</code>. See <link xref=\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/toolbar_builder.vala.page:8
+msgctxt "text"
+msgid "Toolbar created using Glade (Vala)"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/toolbar_builder.vala.page:26
+msgid ""
+"This example is similar to <link xref=\"toolbar.vala\"/>, except we use Glade to create the toolbar in an 
XML ui "
+"file."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.vala.page:124
+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 ""
+
+#. (itstool) path: page/code
+#: C/toolbar_builder.vala.page:145
+#, 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/* Constructor */\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 ""
+
+#. (itstool) path: info/title
+#: C/tooltip.c.page:8
+msgctxt "text"
+msgid "Tooltip (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/tooltip.c.page:19 C/tooltip.js.page:19 C/tooltip.py.page:20 C/tooltip.vala.page:19
+msgid "Add tips to your widgets"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/tooltip.c.page:22 C/tooltip.js.page:22 C/tooltip.py.page:23 C/tooltip.vala.page:22
+msgid "Tooltip"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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.c.page:23 C/tooltip.js.page:23 C/tooltip.py.page:24 C/tooltip.vala.page:23
+msgctxt "_"
+msgid "external ref='media/tooltip.png' md5='41e35860a51e39cb48c71e57bb8fb1d0'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/tooltip.c.page:24 C/tooltip.js.page:24 C/tooltip.py.page:25 C/tooltip.vala.page:24
+msgid "A toolbar with a tooltip (with an image) for a button."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/tooltip.c.page:26
+msgid "This example builds on the <link xref=\"toolbar.c\">Toolbar</link> example."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/tooltip.c.page:31
+#, no-wrap
+msgid ""
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"static gboolean \n"
+"undo_tooltip_callback (GtkStatusIcon *status_icon,\n"
+"                       gint           x,\n"
+"                       gint           y,\n"
+"                       gboolean       keyboard_mode,\n"
+"                       GtkTooltip    *tooltip,\n"
+"                       gpointer       user_data)\n"
+"{\n"
+"  /* set the text for the tooltip */\n"
+"  gtk_tooltip_set_text (tooltip, \"Undo your last action\");\n"
+"   \n"
+"  /* set an icon fot the tooltip */\n"
+"  gtk_tooltip_set_icon_from_stock(tooltip, \"gtk-undo\", GTK_ICON_SIZE_MENU);\n"
+"\n"
+"  /* show the tooltip */\n"
+"  return TRUE;\n"
+"}\n"
+"\n"
+"\n"
+"static void\n"
+"undo_callback (GSimpleAction *simple,\n"
+"               GVariant      *parameter,\n"
+"               gpointer       user_data)\n"
+"{\n"
+"  g_print (\"You clicked \\\"Undo\\\".\\n\");\n"
+"}\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *grid;\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *toolbar;\n"
+"\n"
+"  GtkToolItem *new_button;\n"
+"  GtkToolItem *open_button;\n"
+"  GtkToolItem *undo_button;\n"
+"\n"
+"  GtkStyleContext *style_context;\n"
+"\n"
+"  GSimpleAction *undo_action;\n"
+"\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Toolbar with Tooltips Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 400, 200);\n"
+"\n"
+"  /* Here we begin to create the toolbar */\n"
+"  toolbar = gtk_toolbar_new ();\n"
+"\n"
+"  /* Set the toolbar to be the primary toolbar of the application */\n"
+"  style_context = gtk_widget_get_style_context (toolbar);\n"
+"  gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_PRIMARY_TOOLBAR);\n"
+"\n"
+"  /* Create a button for the \"new\" action, with a stock image */\n"
+"  new_button = gtk_tool_button_new_from_stock (GTK_STOCK_NEW);\n"
+"  gtk_tool_item_set_is_important (new_button, TRUE);\n"
+"  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), new_button, 0);\n"
+"  gtk_widget_show (GTK_WIDGET (new_button));\n"
+"\n"
+"  /* Set the action name for the \"new\" action. We use \"app.new\" to\n"
+"   * indicate that the action controls the application.\n"
+"   */\n"
+"  gtk_actionable_set_action_name (GTK_ACTIONABLE (new_button), \"app.new\");\n"
+"\n"
+"  /*******************************\n"
+"   * Tooltip for the New ToolItem:\n"
+"   * a tooltip with text\n"
+"   *******************************/\n"
+"   gtk_tool_item_set_tooltip_text (new_button, \"Create a new file\");  \n"
+"\n"
+"  /* \"Open\" */\n"
+"  open_button = gtk_tool_button_new_from_stock (GTK_STOCK_OPEN);\n"
+"  gtk_tool_item_set_is_important (open_button, TRUE);\n"
+"  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), open_button, 1);\n"
+"  gtk_widget_show (GTK_WIDGET (open_button));\n"
+"  gtk_actionable_set_action_name (GTK_ACTIONABLE (open_button), \"app.open\");\n"
+"\n"
+"  /*******************************\n"
+"   * Tooltip for the Open ToolItem:\n"
+"   * a tooltip using Pango markup \n"
+"   * language\n"
+"   *******************************/\n"
+"  gtk_tool_item_set_tooltip_text (open_button, \"Open an &lt;i&gt;existing&lt;/i&gt; file\");\n"
+"\n"
+"  /* \"Undo\" */\n"
+"  undo_button = gtk_tool_button_new_from_stock (GTK_STOCK_UNDO);\n"
+"  gtk_tool_item_set_is_important (undo_button, TRUE);\n"
+"  gtk_toolbar_insert (GTK_TOOLBAR (toolbar), undo_button, 2);\n"
+"  gtk_widget_show (GTK_WIDGET (undo_button));\n"
+"\n"
+"  /* In this case, we use \"win.undo\" to indicate that\n"
+"   * the action controls only the window\n"
+"   */\n"
+"  gtk_actionable_set_action_name (GTK_ACTIONABLE (undo_button), \"win.undo\");\n"
+"\n"
+"  /*******************************\n"
+"   * Tooltip for the Undo ToolItem:\n"
+"   * a tooltip with an image\n"
+"   *******************************/\n"
+"  gtk_widget_set_has_tooltip (GTK_WIDGET (undo_button), TRUE);\n"
+"\n"
+"  // Next, we connect the query_tooltip signal\n"
+"  g_signal_connect (undo_button, \"query-tooltip\", G_CALLBACK (undo_tooltip_callback), NULL);\n"
+"\n"
+"  gtk_widget_set_hexpand (toolbar, TRUE);\n"
+"  gtk_widget_show (toolbar);\n"
+"\n"
+"  grid = gtk_grid_new ();\n"
+"  gtk_grid_attach (GTK_GRID (grid), toolbar, 0, 0, 1, 1);\n"
+"  gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (grid));\n"
+"  gtk_widget_show (GTK_WIDGET (grid));\n"
+"\n"
+"  /* Use the action names to create the actions that control the window, and\n"
+"   * connect them to the appropriate callbackfunctions.\n"
+"   */\n"
+"  undo_action = g_simple_action_new (\"undo\", NULL);\n"
+"  g_signal_connect (undo_action, \"activate\", G_CALLBACK (undo_callback),\n"
+"                    GTK_WINDOW (window));\n"
+"  g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (undo_action));\n"
+"\n"
+"  gtk_widget_show (window);\n"
+"}\n"
+"\n"
+"\n"
+"/* Callback function for the new action */\n"
+"static void\n"
+"new_callback (GSimpleAction *simple,\n"
+"              GVariant      *parameter,\n"
+"              gpointer       user_data)\n"
+"{\n"
+"  g_print (\"You clicked \\\"New\\\".\\n\");\n"
+"}\n"
+"\n"
+"\n"
+"/* Callback function for the open action */\n"
+"static void\n"
+"open_callback (GSimpleAction *simple,\n"
+"               GVariant      *parameter,\n"
+"               gpointer       user_data)\n"
+"{\n"
+"  g_print (\"You clicked \\\"Open\\\".\\n\");\n"
+"}\n"
+"\n"
+"\n"
+"/* In this function, we create the actions in which control the window, and\n"
+" * connect their signals to the appropriate callback function.\n"
+" */\n"
+"static void\n"
+"startup (GApplication *app,\n"
+"         gpointer      user_data)\n"
+"{\n"
+"  GSimpleAction *new_action;\n"
+"  GSimpleAction *open_action;\n"
+"\n"
+"  new_action = g_simple_action_new (\"new\", NULL);\n"
+"  g_signal_connect (new_action, \"activate\", G_CALLBACK (new_callback), app);\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (new_action));\n"
+"\n"
+"  open_action = g_simple_action_new (\"open\", NULL);\n"
+"  g_signal_connect (open_action, \"activate\", G_CALLBACK (open_callback), app);\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (open_action));\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 ""
+
+#. (itstool) path: item/p
+#: C/tooltip.c.page:38 C/tooltip.py.page:59
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkTooltip.html\";>GtkTooltip</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkTooltip.html\";>GtkTooltip</link>"
+
+#. (itstool) path: item/p
+#: C/tooltip.c.page:40 C/tooltip.py.page:61
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/GtkWidget.html\";>GtkWidget</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/stable/GtkWidget.html\";>GtkWidget</link>"
+
+#. (itstool) path: item/p
+#: C/tooltip.c.page:41 C/tooltip.js.page:40 C/tooltip.py.page:62
+msgid "<link href=\"http://developer.gnome.org/gtk3/stable/gtk3-Stock-Items.html\";>Stock Items</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/tooltip.js.page:8
+msgctxt "text"
+msgid "Tooltip (JavaScript)"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/tooltip.js.page:25
+msgid "This example builds on the <link xref=\"toolbar.js\">Toolbar</link> example."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/tooltip.js.page:30
+#, no-wrap
+msgid ""
+"//!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gdk = '3.0';\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gdk = imports.gi.Gdk;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk; \n"
+"\n"
+"class TooltipExample {\n"
+"    // Create the application \n"
+"    constructor() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jstooltip'\n"
+"        });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate() {\n"
+"        this.window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\n"
+"\n"
+"        // Create the application window\n"
+"        this.window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Toolbar with Tooltips Example\",\n"
+"            default_width: 400,\n"
+"            default_height: 200,\n"
+"            border_width: 10\n"
+"        });\n"
+"\n"
+"        this.grid = new Gtk.Grid();\n"
+"\n"
+"        this.toolbar = this._createToolbar();\n"
+"        this.toolbar.set_hexpand(true);\n"
+"        this.toolbar.show();\n"
+"\n"
+"        this.grid.attach(this.toolbar, 0, 0, 1, 1);\n"
+"\n"
+"        this.window.add(this.grid);\n"
+"\n"
+"        this._newAction = new Gio.SimpleAction({ name: \"new\" });\n"
+"        this._newAction.connect(\"activate\", this._newCallback.bind(this));\n"
+"        this.window.add_action(this._newAction);\n"
+"\n"
+"        this._openAction = new Gio.SimpleAction({ name: \"open\" });\n"
+"        this._openAction.connect(\"activate\", this._openCallback.bind(this));\n"
+"        this.window.add_action(this._openAction);\n"
+"\n"
+"        this._undoAction = new Gio.SimpleAction({ name: \"undo\" });\n"
+"        this._undoAction.connect(\"activate\", this._undoCallback.bind(this));\n"
+"        this.window.add_action(this._undoAction);\n"
+"\n"
+"        this._fullScreenAction = new Gio.SimpleAction({ name: \"fullscreenToggle\" });\n"
+"        this._fullScreenAction.connect(\"activate\",\n"
+"                                       this._fullScreenCallback.bind(this));\n"
+"        this.window.add_action(this._fullScreenAction);\n"
+"\n"
+"        this.window.show_all();\n"
+"    }\n"
+"\n"
+"    _createToolbar() {\n"
+"        this.toolbar = new Gtk.Toolbar();\n"
+"        this.toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR);\n"
+"\n"
+"        // button for the \"new\" action\n"
+"        this.newButton = Gtk.ToolButton.new_from_stock(Gtk.STOCK_NEW);\n"
+"        // with a tooltip with a given text        \n"
+"        this.newButton.set_tooltip_text(\"Create a new file\");\n"
+"        this.newButton.set_is_important(true);\n"
+"        this.toolbar.insert(this.newButton, 0);\n"
+"        this.newButton.show();\n"
+"        this.newButton.set_action_name(\"win.new\");\n"
+"\n"
+"        // button for the \"open\" action\n"
+"        this.openButton = Gtk.ToolButton.new_from_stock(Gtk.STOCK_OPEN);\n"
+"        // with a tooltip with a given text in the Pango markup language        \n"
+"        this.openButton.set_tooltip_markup(\"Open an &lt;i&gt;existing&lt;/i&gt; file\");\n"
+"        this.openButton.set_is_important(true);\n"
+"        this.toolbar.insert(this.openButton, 1);\n"
+"        this.openButton.show();\n"
+"        this.openButton.set_action_name(\"win.open\");\n"
+"\n"
+"        // button for the \"undo\" action\n"
+"        this.undoButton = Gtk.ToolButton.new_from_stock(Gtk.STOCK_UNDO);\n"
+"        // with a tooltip with an image\n"
+"        // set true the property \"has-tooltip\"        \n"
+"        this.undoButton.set_property(\"has-tooltip\", true);\n"
+"        // connect to the callback function that for the tooltip\n"
+"        // with the signal \"query-tooltip\"\n"
+"        this.undoButton.connect(\"query-tooltip\", this._undoTooltipCallback.bind(this));\n"
+"        this.undoButton.set_is_important(true);\n"
+"        this.toolbar.insert(this.undoButton, 2);\n"
+"        this.undoButton.show();\n"
+"        this.undoButton.set_action_name(\"win.undo\");\n"
+"\n"
+"        // button for the \"fullscreen/leave fullscreen\" action\n"
+"        this.fullscreenButton = Gtk.ToolButton.new_from_stock(Gtk.STOCK_FULLSCREEN);\n"
+"        this.fullscreenButton.set_is_important(true);\n"
+"        this.toolbar.insert(this.fullscreenButton, 3);\n"
+"        this.fullscreenButton.set_action_name(\"win.fullscreenToggle\");\n"
+"\n"
+"        return this.toolbar;\n"
+"    }\n"
+"\n"
+"    _newCallback(action, parameter) {\n"
+"        print(\"You clicked \\\"New\\\".\");\n"
+"    }\n"
+"\n"
+"    _openCallback(action, parameter) {\n"
+"        print(\"You clicked \\\"Open\\\".\");\n"
+"    }\n"
+"\n"
+"    // the callback function for the tooltip of the \"undo\" button\n"
+"    _undoTooltipCallback(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.STOCK_UNDO, Gtk.IconSize.MENU);\n"
+"        // show the tooltip\n"
+"        return true;\n"
+"    }\n"
+"\n"
+"    _undoCallback(action, parameter) {\n"
+"        print(\"You clicked \\\"Undo\\\".\");\n"
+"    }\n"
+"\n"
+"    _fullScreenCallback() {\n"
+"        if ((this.window.get_window().get_state() &amp; Gdk.WindowState.FULLSCREEN) != 0 ){\n"
+"            this.fullscreenButton.set_stock_id(Gtk.STOCK_FULLSCREEN);\n"
+"            this.fullscreenButton.set_tooltip_text(\"Make your window fullscreen\");\n"
+"            this.window.unfullscreen();\n"
+"        } else {\n"
+"            this.fullscreenButton.set_stock_id(Gtk.STOCK_LEAVE_FULLSCREEN);\n"
+"            this.fullscreenButton.set_tooltip_text(\"Leave fullscreen\");\n"
+"            this.window.fullscreen();\n"
+"        }\n"
+"    }\n"
+"};\n"
+"\n"
+"// Run the application\n"
+"let app = new TooltipExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/tooltip.js.page:37
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Tooltip.html\";>GtkTooltip</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Tooltip.html\";>GtkTooltip</link>"
+
+#. (itstool) path: item/p
+#: C/tooltip.js.page:38
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Toolbar.html\";>GtkToolbar</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Toolbar.html\";>GtkToolbar</link>"
+
+#. (itstool) path: item/p
+#: C/tooltip.js.page:39
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Widget.html\";>GtkWidget</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Widget.html\";>GtkWidget</link>"
+
+#. (itstool) path: info/title
+#: C/tooltip.py.page:8
+msgctxt "text"
+msgid "Tooltip (Python)"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/tooltip.py.page:26
+msgid "This example builds on the <link xref=\"toolbar.py\">Toolbar</link> example."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/tooltip.py.page:32
+#, 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"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(\n"
+"            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(\n"
+"            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(\n"
+"        ) &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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/tooltip.py.page:36
+msgid "Useful methods for a Tooltip widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/tooltip.py.page:38
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/tooltip.py.page:39
+msgid "For more complex tooltips, for instance for a tooltip with an image:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/tooltip.py.page:41
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/tooltip.py.page:42
+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 ""
+
+#. (itstool) path: item/p
+#: C/tooltip.py.page:43
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/tooltip.py.page:46
+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:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/tooltip.py.page:48
+msgid "Set <code>\"has-tooltip\"</code> and connect to <code>\"query-tooltip\"</code> as before."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/tooltip.py.page:49
+msgid "Use <code>set_tooltip_window()</code> on the widget to set a GtkWindow created by you as tooltip 
window."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/tooltip.py.page:50
+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."
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/tooltip.vala.page:8
+msgctxt "text"
+msgid "Tooltip (Vala)"
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/tooltip.vala.page:25
+msgid "This example builds on the <link xref=\"toolbar.vala\">Toolbar</link> example."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/tooltip.vala.page:31
+#, 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/* Constructor */\n"
+"\tinternal MyWindow (MyApplication app) {\n"
+"\t\tObject (application: app, title: \"Toolbar with Tooltips 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/* Callback for query_tooltip signal */\n"
+"\tbool undo_tooltip_callback (int x, int y, bool keyboard_tooltip, Gtk.Tooltip tooltip) {\n"
+"\n"
+"\t\t/* set the text for the tooltip */\n"
+"        \ttooltip.set_text (\"Undo your last action\");\n"
+"\t\t\n"
+"\t\t/* set an icon fot the tooltip */\n"
+"\t\ttooltip.set_icon_from_stock(\"gtk-undo\", Gtk.IconSize.MENU);\n"
+"\n"
+"        \t/* show the tooltip */\n"
+"        \treturn true;\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"
+"\n"
+"\t\t/* tooltip with text */\n"
+"\t\tnew_button.set_tooltip_text (\"Create a new file\");\n"
+"\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"
+"\n"
+"\t\t/* a tooltip using Pango markup language */\n"
+"\t\topen_button.set_tooltip_markup (\"Open an &lt;i&gt;existing&lt;/i&gt; file\");\n"
+"\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\n"
+"\t\t/* For a tooltip to have an image, first we must set_has_tooltip to be 'true' */\t\n"
+"\t\t(undo_button as Gtk.Widget).set_has_tooltip (true);\n"
+"\n"
+"\t\t/* Connect the query_tooltip signal to the callback */\n"
+"\t\tundo_button.query_tooltip.connect (undo_tooltip_callback);\n"
+"\t\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 ""
+
+#. (itstool) path: item/p
+#: C/tooltip.vala.page:39
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Tooltip.html\";>Gtk.Tooltip</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Tooltip.html\";>Gtk.Tooltip</link>"
+
+#. (itstool) path: item/p
+#: C/tooltip.vala.page:41
+msgid "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Widget.query_tooltip.html\";>Gtk.Widget.query_tooltip</link>"
+msgstr "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Widget.query_tooltip.html\";>Gtk.Widget.query_tooltip</link>"
+
+#. (itstool) path: item/p
+#: C/tooltip.vala.page:42
+msgid ""
+"<link href=\"https://developer.gnome.org/gtk3/3.4/gtk3-Stock-Items.html#GTK-STOCK-UNDO:CAPS\";>Stock 
Items</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/treeview_advanced_liststore.py.page:8
+msgctxt "text"
+msgid "Simple Treeview with ListStore (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/treeview_advanced_liststore.py.page:19
+msgid "A TreeView displaying a ListStore (more complex example)"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/treeview_advanced_liststore.py.page:22
+msgid "More Complex Treeview with ListStore"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:23
+msgctxt "_"
+msgid "external ref='media/treeview_advanced_liststore.png' md5='102b512197fb9aa4ed9a16462f6af911'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/treeview_advanced_liststore.py.page:24 C/treeview_simple_liststore.py.page:25
+msgid "This TreeView displays a simple ListStore with the selection \"changed\" signal connected."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_advanced_liststore.py.page:31
+#, 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"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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(\n"
+"            self.entry, self.button_add, Gtk.PositionType.RIGHT, 1, 1)\n"
+"        grid.attach_next_to(\n"
+"            self.button_remove, self.entry, Gtk.PositionType.RIGHT, 1, 1)\n"
+"        grid.attach_next_to(\n"
+"            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\n"
+"        # 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"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/treeview_advanced_liststore.py.page:35 C/treeview_cellrenderertoggle.py.page:35
+#: C/treeview_simple_liststore.py.page:36 C/treeview_treestore.py.page:36
+msgid "Useful methods for a TreeView widget"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/treeview_advanced_liststore.py.page:36 C/treeview_cellrenderertoggle.py.page:36 
C/treeview_treestore.py.page:37
+msgid ""
+"The TreeView widget is designed around a <em>Model/View/Controller</em> design: the <em>Model</em> stores 
the "
+"data; the <em>View</em> gets change notifications and displays the content of the model; the 
<em>Controller</em>, "
+"finally, changes the state of the model and notifies the view of these changes. For more information and 
for a "
+"list of useful methods for TreeModel see <link xref=\"model-view-controller.py\"/>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/treeview_advanced_liststore.py.page:37
+msgid ""
+"In line 36 the <code>\"changed\"</code> signal is connected to the callback function 
<code>on_changed()</code> "
+"using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See <link 
xref="
+"\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/treeview_cellrenderertoggle.py.page:8 C/treeview_treestore.py.page:8
+msgctxt "text"
+msgid "TreeView with TreeStore (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/treeview_cellrenderertoggle.py.page:19
+msgid "A TreeView displaying a TreeStore (more complex example, with CellRendererToggle)"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/treeview_cellrenderertoggle.py.page:22
+msgid "More Complex TreeView with TreeStore"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:23
+msgctxt "_"
+msgid "external ref='media/treeview_cellrenderertoggle.png' md5='ade9b9437f8f83150acf37610dab834d'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/treeview_cellrenderertoggle.py.page:24
+msgid "This TreeView displays a TreeStore with two columns, one of which is rendered as a toggle."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_cellrenderertoggle.py.page:31
+#, 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],\n"
+"             [\"Macbeth\", True], [\"Othello\", False]],\n"
+"         [\"Tolkien, J.R.R.\", [\"The Lord of the Rings\", False]]]\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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\n"
+"            # 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\n"
+"        # book)\n"
+"        elif len(path) != 1:\n"
+"            # get the first child of the parent of the book (the first book of\n"
+"            # 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"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_cellrenderertoggle.py.page:37
+msgid ""
+"In line 48 the <code>\"toggled\"</code> signal is connected to the callback function 
<code>on_toggled()</code> "
+"using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See <link 
xref="
+"\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/treeview_cellrenderertoggle.py.page:46 C/treeview_treestore.py.page:46
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeStore.html\";>GtkTreeStore</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeStore.html\";>GtkTreeStore</link>"
+
+#. (itstool) path: item/p
+#: C/treeview_cellrenderertoggle.py.page:48
+msgid ""
+"<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRendererToggle.html\";>GtkCellRendererToggle</link>"
+msgstr ""
+"<link 
href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRendererToggle.html\";>GtkCellRendererToggle</link>"
+
+#. (itstool) path: info/title
+#: C/treeview_simple_liststore.js.page:8
+msgctxt "text"
+msgid "TreeView with ListStore (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/treeview_simple_liststore.js.page:21
+msgid "A widget that shows a separate list of items"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/treeview_simple_liststore.js.page:24
+msgid "TreeView with ListStore"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:25
+msgctxt "_"
+msgid "external ref='media/treeview_simple_liststore_penguins.png' md5='d750a0b9fddf8e508753cc639839871d'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/treeview_simple_liststore.js.page:26
+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 ""
+
+#. (itstool) path: page/p
+#: C/treeview_simple_liststore.js.page:27
+msgid "The TreeView is not just a single widget, but contains a number of smaller ones:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:29
+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 ""
+
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:30
+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 ""
+
+#. (itstool) path: page/p
+#: C/treeview_simple_liststore.js.page:32
+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 ""
+
+#. (itstool) path: note/p
+#: C/treeview_simple_liststore.js.page:33
+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 ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:38
+#, 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 ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:51
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:76
+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 ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:77
+#, 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: 250,\n"
+"            default_width: 100,\n"
+"            border_width: 20,\n"
+"            title: \"My Phone Book\"});\n"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:95
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:104
+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.)"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:105
+msgid "The GObject data types you can use include:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:110
+msgid "<file>gtk.gdk.Pixbuf</file> -- A picture"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:112
+msgid "In this case, we're making a ListStore of four columns, each one containing string values."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:115
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:132
+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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:133
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:135
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:142
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:143
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/treeview_simple_liststore.js.page:148
+msgid "Creating the TreeView"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:149
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the treeview\n"
+"        this._treeView = new Gtk.TreeView ({\n"
+"            expand: true,\n"
+"            model: this._listStore });\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:155
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:157
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:163
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:165
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:178
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/treeview_simple_liststore.js.page:179
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:181
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:191
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:193
+msgid "The first parameter is which CellRenderer we're going to use to render what we're pulling in."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:194
+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."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:195
+msgid "The third parameter is which of the ListStore's columns we're pulling that information in from."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:197
+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."
+msgstr ""
+
+#. (itstool) path: note/p
+#: C/treeview_simple_liststore.js.page:198
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/treeview_simple_liststore.js.page:202
+msgid "Building the rest of the UI"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:203
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:213
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:214
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:216
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:231
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/treeview_simple_liststore.js.page:235
+msgid "Function which handles a changed selection"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:237
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:254
+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."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:255
+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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:256
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:258
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new TreeViewExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:263
+msgid "Finally, we create a new instance of the finished TreeViewExample class, and set the application 
running."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:268
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Pango = imports.gi.Pango;\n"
+"\n"
+"class TreeViewExample {\n"
+"    // Create the application itself\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"        this.application.connect('startup', this._onStartup.bind(this));\n"
+"    }\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate() {\n"
+"        this._window.present();\n"
+"    }\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI() {\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', this._onSelectionChanged.bind(this));\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"
+"    _onSelectionChanged() {\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"
+"// Run the application\n"
+"let app = new TreeViewExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:282
+msgid "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeSelection.html\";>Gtk.TreeSelection</link>"
+msgstr "<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeSelection.html\";>Gtk.TreeSelection</link>"
+
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:283
+msgid "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeView.html\";>Gtk.TreeView</link>"
+msgstr "<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeView.html\";>Gtk.TreeView</link>"
+
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:284
+msgid ""
+"<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeViewColumn.html\";>Gtk.TreeViewColumn</link>"
+msgstr ""
+"<link 
href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeViewColumn.html\";>Gtk.TreeViewColumn</link>"
+
+#. (itstool) path: info/title
+#: C/treeview_simple_liststore.py.page:8
+msgctxt "text"
+msgid "Simple TreeView with ListStore (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/treeview_simple_liststore.py.page:20
+msgid "A TreeView displaying a ListStore (simpler example)"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/treeview_simple_liststore.py.page:23
+msgid "Simple TreeView with ListStore"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:24 C/treeview_simple_liststore.vala.page:24
+msgctxt "_"
+msgid "external ref='media/treeview_simple_liststore.png' md5='2dc501a2b95b094da985d37b66aee90c'"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.py.page:32
+#, no-wrap
+msgid ""
+"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"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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\n"
+"        # 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, column in enumerate(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(column, 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\" %\n"
+"                            (model[iter][0],  model[iter][1], model[iter][2]))\n"
+"        return True\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.py.page:37
+msgid ""
+"The TreeView widget is designed around a <em>Model/View/Controller</em> design: the <em>Model</em> stores 
the "
+"data; the <em>View</em> gets change notifications and displays the content of the model; the 
<em>Controller</em>, "
+"finally, changes the state of the model and notifies the view of these changes. For more information, and 
for a "
+"list of useful methods for TreeModel, see <link xref=\"model-view-controller.py\"/>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.py.page:38
+msgid ""
+"In line 44 the <code>\"changed\"</code> signal is connected to the callback function 
<code>on_changed()</code> "
+"using <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. See <link 
xref="
+"\"signals-callbacks.py\"/> for a more detailed explanation."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.py.page:51
+msgid "<link href=\"http://developer.gnome.org/pango/stable/pango-Fonts.html\";>Fonts</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/treeview_simple_liststore.vala.page:8
+msgctxt "text"
+msgid "Simple Treeview with ListStore (Vala)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/treeview_simple_liststore.vala.page:20
+msgid "A widget can display any TreeModel implementation (lists and trees)"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/treeview_simple_liststore.vala.page:23
+msgid "Simple Treeview with ListStore"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/treeview_simple_liststore.vala.page:25
+msgid "This TreeView displays a simple ListStore with the Selection \"changed\" signal connected."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/treeview_simple_liststore.vala.page:27
+#, no-wrap
+msgid ""
+"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 ""
+
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.vala.page:32
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TreeView.html\";>Gtk.TreeView</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TreeView.html\";>Gtk.TreeView</link>"
+
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.vala.page:34
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TreeSelection.html\";>Gtk.TreeSelection</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TreeSelection.html\";>Gtk.TreeSelection</link>"
+
+#. (itstool) path: info/desc
+#: C/treeview_treestore.py.page:20
+msgid "A TreeView displaying a TreeStore (simpler example)"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/treeview_treestore.py.page:23
+msgid "Simpler TreeView with TreeStore"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:24
+msgctxt "_"
+msgid "external ref='media/treeview_treestore.png' md5='5ca87bc4acd55c527b3fb5fd46779d85'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/treeview_treestore.py.page:25
+msgid "This TreeView displays a TreeStore."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/treeview_treestore.py.page:32
+#, 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\", \"Anna Karenina\"],\n"
+"         [\"Shakespeare, William\", \"Hamlet\", \"Macbeth\", \"Othello\"],\n"
+"         [\"Tolkien, J.R.R.\", \"The Lord of the Rings\"]]\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\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(\n"
+"            \"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"
+"\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 ""
+
+#. (itstool) path: info/title
+#: C/tutorial.py.page:9
+msgctxt "text"
+msgid "Tutorial for beginners (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/tutorial.py.page:13
+msgid "A tutorial for beginners who want to learn how to program GUIs using GTK+ in Python."
+msgstr ""
+
+#. (itstool) path: credit/years
+#: C/tutorial.py.page:22
+msgid "2012 2013"
+msgstr "2012 2013"
+
+#. (itstool) path: credit/name
+#: C/tutorial.py.page:25
+msgid "Jim Campbell"
+msgstr "Jim Campbell"
+
+#. (itstool) path: synopsis/p
+#: C/tutorial.py.page:34
+msgid "By following these tutorials you will learn the basics of GUI programming using GTK+ in Python."
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/tutorial.py.page:36
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/tutorial.py.page:42
+msgid "To run the code samples"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/tutorial.py.page:44
+msgid "To run the code samples in the tutorial:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/tutorial.py.page:46
+msgid "Type or copy and paste the code into a file, and save the file with a name like 
<var>filename</var>.py"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/tutorial.py.page:47
+msgid "To execute the code, type in the terminal:"
+msgstr ""
+
+#. (itstool) path: item/screen
+#: C/tutorial.py.page:48
+#, no-wrap
+msgid "python <var>filename</var>.py"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/tutorial.py.page:51
+msgid ""
+"After executing the code, you will either see the widget on your screen, or (if you have mistyped some of 
the "
+"code) you will see an error message that will help you identify the problem."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/tutorial.py.page:55
+msgid "A path through the widgets (with some theory)"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/tutorial.py.page:56
+msgid ""
+"The tutorial will walk you through increasingly complex examples and programming theory, but you can also 
feel "
+"free to just go directly to the tutorial that is most helpful to you."
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:58
+msgid "Tutorial"
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:60
+msgid "Basic windows"
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:65
+msgid "Images and labels"
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:71
+msgid "Introduction to properties"
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:75
+msgid "Grid, separator and scrolling"
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:82
+msgid "Signals, callbacks and buttons"
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:96
+msgid "Other display widgets"
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:102
+msgid "Entry widgets"
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:108
+msgid "A widget to write and display text"
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:112
+msgid "Dialogs"
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:118
+msgid "Menus, Toolbars and Tooltips (also: using Glade and GtkBuilder)"
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:133
+msgid "TreeViews and ComboBoxes (using the M/V/C design)"
+msgstr ""
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:143
+msgid "Custom widget"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/vala.page:7
+msgctxt "link"
+msgid "Vala"
+msgstr "Vala"
+
+#. (itstool) path: page/title
+#: C/vala.page:21
+msgid "Tutorials, code samples and platform demos in Vala"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/vala.page:26
+msgid "Code samples and tutorial"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/weatherApp.js.page:7
+msgctxt "text"
+msgid "Weather application (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/weatherApp.js.page:22
+msgid ""
+"How to plan an application that uses asynchronous calls. Asynchronous calls will be presented through a 
weather "
+"application."
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/weatherApp.js.page:27
+msgid "Weather application"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/weatherApp.js.page:29
+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:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherApp.js.page:32
+msgid "<link xref=\"#planningUi\">Planning the graphical user interface</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherApp.js.page:33
+msgid "<link xref=\"#asynchronous\">Asynchronous calls</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherApp.js.page:34
+msgid "<link xref=\"#main\">The main program file</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherApp.js.page:35
+msgid "<link xref=\"#main\">Local library GeoNames</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherApp.js.page:36
+msgid "<link xref=\"#main\">Autotools and Icons</link>"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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:41
+msgctxt "_"
+msgid "external ref='media/weatherAppJs.png' md5='1fe859ac4854273d72ea8fc9203639b2'"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/weatherApp.js.page:44
+msgid "Planning the graphical user interface"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherApp.js.page:45
+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 ""
+
+#. (itstool) path: section/title
+#: C/weatherApp.js.page:48
+msgid "Asynchronous calls"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherApp.js.page:49
+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 ""
+
+#. (itstool) path: section/p
+#: C/weatherApp.js.page:52
+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 ""
+
+#. (itstool) path: section/title
+#: C/weatherApp.js.page:55
+msgid "The different parts of the program"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/weatherAppMain.js.page:19
+msgid "The main program file"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/weatherAppMain.js.page:21
+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 ""
+
+#. (itstool) path: item/p
+#: C/weatherAppMain.js.page:26
+msgid "<link xref=\"#widgets\">Adding a grid and all the necessary widgets to it</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherAppMain.js.page:27
+msgid "<link xref=\"#asynccall\">Requesting the weather information asynchronously</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherAppMain.js.page:28
+msgid "<link xref=\"#connectingbuttons\">Connecting signals to button and entry</link>."
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherAppMain.js.page:29
+msgid "<link xref=\"#weatherapp.js\">weatherapp.js</link>"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:36
+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 ""
+
+#. (itstool) path: section/code
+#: C/weatherAppMain.js.page:42
+#, no-wrap
+msgid ""
+"\n"
+"var Gtk = imports.gi.Gtk;\n"
+"const WeatherService = imports.geonames;"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:45
+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."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/weatherAppMain.js.page:50
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/weatherAppMain.js.page:64
+msgid "Adding a grid and all the necessary widgets to it"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/weatherAppMain.js.page:65
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:91
+msgid ""
+"In this section we create the grid we are going to use for positioning the widgets. All the buttons, labels 
and "
+"entries 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 ""
+
+#. (itstool) path: section/title
+#: C/weatherAppMain.js.page:95
+msgid "Requesting the weather information asynchronously"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/weatherAppMain.js.page:96
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:121
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/weatherAppMain.js.page:125
+msgid "Connecting signals to button and entry."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/weatherAppMain.js.page:126
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:138
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/weatherAppMain.js.page:142
+msgid "Weatherapp.js"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:143
+msgid "Weatherapp.js file looks like this:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/weatherAppMain.js.page:144
+#, no-wrap
+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 ""
+
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:229
+msgid "Running until you have all the autotools files ready. :"
+msgstr ""
+
+#. (itstool) path: section/screen
+#: C/weatherAppMain.js.page:231
+#, no-wrap
+msgid " <output style=\"prompt\">$ </output><input> GJS_PATH=`pwd` gjs weatherapp.js</input>"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:232
+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 ""
+
+#. (itstool) path: page/title
+#: C/weatherAutotools.js.page:19
+msgid "Autotools and Icons"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/weatherAutotools.js.page:21
+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:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherAutotools.js.page:24
+msgid "<link xref=\"#autotools\"> Autotools</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherAutotools.js.page:25
+msgid "<link xref=\"#icons\">Custom icons for your application</link>"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/weatherAutotools.js.page:32
+msgid "Autotools and necessary files"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:33
+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 overview on the subject."
+msgstr ""
+
+#. (itstool) path: item/p
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:36 C/weatherAutotools.js.page:42
+msgid "weatherapp.desktop"
+msgstr ""
+
+#. (itstool) path: item/p
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:37 C/weatherAutotools.js.page:57
+msgid "weatherapp.sh.in"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/weatherAutotools.js.page:43
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:55
+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 ""
+
+#. (itstool) path: section/code
+#: C/weatherAutotools.js.page:58
+#, no-wrap
+msgid ""
+"\n"
+"#!/bin/sh\n"
+"export GJS_PATH=@bindir@\n"
+"gjs @bindir@/weatherapp.js"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:62
+msgid "This file is a template to the file Makefile will do to be run from .desktop."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/weatherAutotools.js.page:65
+#, 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 ""
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:125
+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 ""
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:126
+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 ""
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:127
+msgid "EXTRA_DIST are the files that are to be distributed"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:128
+msgid "do_subst block is bits and pieces that need to be where they are"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:129
+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 by the install-icons: bit"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/weatherAutotools.js.page:132
+#, 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 ""
+
+#. (itstool) path: section/code
+#: C/weatherAutotools.js.page:139
+#, no-wrap
+msgid ""
+"\n"
+"#!/bin/sh\n"
+"# This will run autoconf, automake, etc. for us\n"
+"autoreconf --force --install"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/weatherAutotools.js.page:145
+msgid "Custom icons for your application"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:146
+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"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:147
+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"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:148
+msgid "appicondir=$(datadir)/icons/hicolor/scalable/apps"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:149
+msgid "appicon_DATA=weather-icon.svg"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/weatherGeonames.js.page:19
+msgid "Local library geoNames"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/weatherGeonames.js.page:21
+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:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherGeonames.js.page:24
+msgid "<link xref=\"#geonamesimports\">Local library for getting the weather</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherGeonames.js.page:25
+msgid "<link xref=\"#geonamesfunction\">Creating function geoNames</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherGeonames.js.page:26
+msgid "<link xref=\"#geonamesmethods\">Methods for geoNames</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/weatherGeonames.js.page:27
+msgid "<link xref=\"#geonames.js\">geonames.js </link>"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/weatherGeonames.js.page:32
+msgid "Local library for getting the weather"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherGeonames.js.page:33
+msgid "For this we need a new file that will be our local library."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/weatherGeonames.js.page:34
+#, 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"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherGeonames.js.page:39
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/weatherGeonames.js.page:43
+msgid "Creating function GeoNames"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/weatherGeonames.js.page:44
+#, no-wrap
+msgid ""
+"\n"
+"function GeoNames(station) {\n"
+"  this.station = station;\n"
+"}\n"
+"\n"
+"GeoNames.prototype = {\n"
+"\n"
+"}\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherGeonames.js.page:53
+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{}"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/weatherGeonames.js.page:57
+msgid "Methods for GeoNames"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/weatherGeonames.js.page:58
+#, no-wrap
+msgid ""
+"\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 ""
+
+#. (itstool) path: section/p
+#: C/weatherGeonames.js.page:97
+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."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/weatherGeonames.js.page:102
+msgid "geonames.js"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/weatherGeonames.js.page:103
+msgid "Here is the entire code for our local library. The main program file calls this asynchronously."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/weatherGeonames.js.page:104
+#, 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 ""
+
+#. (itstool) path: info/title
+#: C/widget_drawing.py.page:8
+msgctxt "text"
+msgid "Widget (Python)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/widget_drawing.py.page:18
+msgid "A widget that uses the Cairo library to draw"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/widget_drawing.py.page:21
+msgid "Widget"
+msgstr ""
+
+#. (itstool) path: page/media
+#. 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/widget_drawing.py.page:22
+msgctxt "_"
+msgid "external ref='media/widget_drawing.png' md5='d00abd8cb9e158018c57fd75b81dfe58'"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/widget_drawing.py.page:23
+msgid "Enter an angle, visualize it."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/widget_drawing.py.page:30
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"from gi.repository import cairo\n"
+"import sys\n"
+"import math\n"
+"\n"
+"\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Choose an angle\", application=app)\n"
+"        self.set_default_size(400, 400)\n"
+"        self.set_border_width(10)\n"
+"\n"
+"        # a default angle\n"
+"        self.angle = 360\n"
+"\n"
+"        grid = Gtk.Grid()\n"
+"\n"
+"        # a spinbutton that takes the value of an angle\n"
+"        ad = Gtk.Adjustment(360, 0, 360, 1, 0, 0)\n"
+"        self.spin = Gtk.SpinButton(adjustment=ad, climb_rate=1, digits=0)\n"
+"        self.spin.connect(\"value-changed\", self.get_angle)\n"
+"\n"
+"        # a drawing area for drawing whatever we want\n"
+"        self.darea = Gtk.DrawingArea()\n"
+"        # that we describe in the method draw(), connected to the signal \"draw\"\n"
+"        self.darea.connect(\"draw\", self.draw)\n"
+"        # we have to request a minimum size of the drawing area, or it will\n"
+"        # disappear\n"
+"        self.darea.set_size_request(300, 300)\n"
+"\n"
+"        grid.attach(self.spin, 0, 0, 1, 1)\n"
+"        grid.attach(self.darea, 0, 1, 1, 1)\n"
+"\n"
+"        self.add(grid)\n"
+"\n"
+"    # whenever we get a new angle in the spinbutton\n"
+"    def get_angle(self, event):\n"
+"        self.angle = self.spin.get_value_as_int()\n"
+"        # redraw what is in the drawing area\n"
+"        self.darea.queue_draw()\n"
+"\n"
+"    def draw(self, darea, cr):\n"
+"        # a 10-pixels-wide line\n"
+"        cr.set_line_width(10)\n"
+"        # red\n"
+"        cr.set_source_rgba(0.5, 0.0, 0.0, 1.0)\n"
+"\n"
+"        # get the width and height of the drawing area\n"
+"        w = self.darea.get_allocated_width()\n"
+"        h = self.darea.get_allocated_height()\n"
+"\n"
+"        # move to the center of the drawing area\n"
+"        # (translate from the top left corner to w/2, h/2)\n"
+"        cr.translate(w / 2, h / 2)\n"
+"        # draw a line to (55, 0)\n"
+"        cr.line_to(55, 0)\n"
+"        # and get back to (0, 0)\n"
+"        cr.line_to(0, 0)\n"
+"        # draw an arc centered in the origin, 50 pixels wide, from the angle 0\n"
+"        # (in radians) to the angle given by the spinbutton (in degrees)\n"
+"        cr.arc(0, 0, 50, 0, self.angle * (math.pi / 180))\n"
+"        # draw a line back to the origin\n"
+"        cr.line_to(0, 0)\n"
+"        # drawing the path, and keeping the path for future use\n"
+"        cr.stroke_preserve()\n"
+"\n"
+"        # set a colour\n"
+"        cr.set_source_rgba(0.0, 0.5, 0.5, 1.0)\n"
+"        # and use it to fill the path (that we had kept)\n"
+"        cr.fill()\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: item/p
+#: C/widget_drawing.py.page:39
+msgid "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkDrawingArea.html\";>GtkDrawingArea</link>"
+msgstr "<link href=\"http://developer.gnome.org/gtk3/unstable/GtkDrawingArea.html\";>GtkDrawingArea</link>"
+
+#. (itstool) path: item/p
+#: C/widget_drawing.py.page:40
+msgid "<link href=\"http://www.tortall.net/mu/wiki/CairoTutorial\";>The Cairo Tutorial for Python 
Programmers</link>"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/window.c.page:8
+msgctxt "text"
+msgid "Window (C)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/window.c.page:18 C/window.py.page:25 C/window.vala.page:18
+msgid "A toplevel window which can contain other widgets"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/window.c.page:21 C/window.js.page:21 C/window.py.page:28 C/window.vala.page:21
+msgid "Window"
+msgstr ""
+
+#. (itstool) path: page/p
+#: C/window.c.page:24
+msgid ""
+"A minimal GtkApplication. Use <link xref=\"GtkApplicationWindow.c\">Application Window</link> if you need 
GMenu "
+"support."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/window.c.page:28
+#, 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"
+"\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 ""
+
+#. (itstool) path: info/title
+#: C/window.js.page:8
+msgctxt "text"
+msgid "Window (JavaScript)"
+msgstr ""
+
+#. (itstool) path: info/desc
+#: C/window.js.page:18
+msgid "A basic window which can contain other widgets"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/window.js.page:26
+msgid "A minimal GtkApplication"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/window.js.page:29
+msgid "Use <link xref=\"GtkApplicationWindow.js\">ApplicationWindow</link> if you need GMenu support."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/window.js.page:33
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0';\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"\n"
+"class Application {\n"
+"    //create the application\n"
+"    constructor() {\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', this._onActivate.bind(this));\n"
+"    }\n"
+"\n"
+"    //callback function for 'activate' signal\n"
+"    _onActivate() {\n"
+"        let 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 ""
+
+#. (itstool) path: page/p
+#: C/window.js.page:35
+msgid "In this example we used the following:"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/window.js.page:40
+msgid "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Window.html\";>Gtk.Window</link>"
+msgstr "<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Window.html\";>Gtk.Window</link>"
+
+#. (itstool) path: info/title
+#: C/window.py.page:8
+msgctxt "text"
+msgid "Window (Python)"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/window.py.page:34
+msgid "A minimal GTK+ Application: a window with a title."
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/window.py.page:37
+msgid "Use <link xref=\"GtkApplicationWindow.py\"/> if you need <link xref=\"gmenu.py\"/> support."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/window.py.page:47
+#, no-wrap
+msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"\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 ""
+
+#. (itstool) path: section/title
+#: C/window.py.page:52
+msgid "Useful methods for a Window widget"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/window.vala.page:8
+msgctxt "text"
+msgid "Window (Vala)"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/window.vala.page:26
+msgid "The simplest Gtk.Application"
+msgstr ""
+
+#. (itstool) path: td/p
+#: C/window.vala.page:29
+msgid "Use <link xref=\"GtkApplicationWindow.vala\">Application Window</link> if you need GMenu support."
+msgstr ""
+
+#. (itstool) path: page/code
+#: C/window.vala.page:33
+#, no-wrap
+msgid ""
+"/* 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 ""
+
+#. (itstool) path: item/p
+#: C/window.vala.page:39
+msgid "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>Gtk.Window</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/window.vala.page:41
+msgid "The enum <link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html\";>Gtk.WindowPosition</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/window.vala.page:43
+msgid ""
+"The method <link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.set_default_size.html\";>set_default_size</link>"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/window.vala.page:45
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Container.border_width.html\";>border_width</link>"
+msgstr "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Container.border_width.html\";>border_width</link>"
+
+#. (itstool) path: item/p
+#: C/window.vala.page:47
+msgid "<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.window_position.html\";>window_position</link>"
+msgstr "<link 
href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.window_position.html\";>window_position</link>"
+
+#. (itstool) path: credit/name
+#: C/custom-gsource.c.page:11
+msgid "Philip Withnall"
+msgstr "Philip Withnall"
+
+#. (itstool) path: credit/years
+#: C/custom-gsource.c.page:13
+msgid "2015"
+msgstr "2015"
+
+#. (itstool) path: info/desc
+#: C/custom-gsource.c.page:18
+msgid "Tutorial for writing a custom <code>GSource</code> implementation"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/custom-gsource.c.page:23
+msgid "Custom GSources"
+msgstr ""
+
+#. (itstool) path: synopsis/title
+#: C/custom-gsource.c.page:26
+msgid "Summary"
+msgstr ""
+
+#. (itstool) path: synopsis/p
+#: C/custom-gsource.c.page:28
+msgid ""
+"This article is a tutorial on creating a custom <code>GSource</code>. For the reference documentation, see 
the "
+"<link href=\"https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#GSource\";>GLib API 
reference</"
+"link>."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:37
+msgid "What is <code>GSource</code>?"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:39
+msgid ""
+"A <link 
href=\"https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#GSource\";><code>GSource</"
+"code></link> is an expected event with an associated callback function which will be invoked when that 
event is "
+"received. An event could be a timeout or data being received on a socket, for example."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:46
+msgid ""
+"GLib contains various types of <code>GSource</code>, but also allows applications to define their own, 
allowing "
+"custom events to be integrated into the main loop."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:52
+msgid ""
+"The structure of a <code>GSource</code> and its virtual functions are documented in detail in the <link 
href="
+"\"https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#GSourceFuncs\";>GLib API 
reference</link>."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:61
+msgid "A Message Queue Source"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:63
+msgid ""
+"As a running example, a message queue source will be used which dispatches its callback whenever a message 
is "
+"enqueued to a queue internal to the source (potentially from another thread)."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:69
+msgid ""
+"This type of source is useful for efficiently transferring large numbers of messages between main contexts. 
The "
+"alternative is transferring each message as a separate idle <code>GSource</code> using 
<code>g_source_attach()</"
+"code>. For large numbers of messages, this means a lot of allocations and frees of <code>GSource</code>s."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:78
+msgid "Structure"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:80
+msgid ""
+"Firstly, a structure for the source needs to be declared. This must contain a <code>GSource</code> as its 
parent, "
+"followed by the private fields for the source: the queue and a function to call to free each message once 
finished "
+"with."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:86
+#, no-wrap
+msgid ""
+"\n"
+"typedef struct {\n"
+"  GSource         parent;\n"
+"  GAsyncQueue    *queue;  /* owned */\n"
+"  GDestroyNotify  destroy_message;\n"
+"} MessageQueueSource;"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:95
+msgid "Prepare Function"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:97
+msgid ""
+"Next, the prepare function for the source must be defined. This determines whether the source is ready to 
be "
+"dispatched. As this source is using an in-memory queue, this can be determined by checking the queue’s 
length: if "
+"there are elements in the queue, the source can be dispatched to handle them."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:104
+#, no-wrap
+msgid ""
+"\n"
+"return (g_async_queue_length (message_queue_source-&gt;queue) &gt; 0);"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:109
+msgid "Check Function"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:111
+msgid ""
+"As this source has no file descriptors, the prepare and check functions essentially have the same job, so a 
check "
+"function is not needed. Setting the field to <code>NULL</code> in <code>GSourceFuncs</code> bypasses the 
check "
+"function for this source type."
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:120
+msgid "Dispatch Function"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:122
+msgid ""
+"For this source, the dispatch function is where the complexity lies. It needs to dequeue a message from the 
queue, "
+"then pass that message to the <code>GSource</code>’s callback function. No messages may be queued: even 
through "
+"the prepare function returned true, another source wrapping the same queue may have been dispatched in the 
mean "
+"time and taken the final message from the queue. Further, if no callback has been set for the 
<code>GSource</code> "
+"(which is allowed), the message must be destroyed and silently dropped."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:133
+msgid ""
+"If both a message and callback are set, the callback can be invoked on the message and its return value 
propagated "
+"as the return value of the dispatch function. This is <code>FALSE</code> to destroy the 
<code>GSource</code> and "
+"<code>TRUE</code> to keep it alive, just as for <code>GSourceFunc</code> — these semantics are the same for 
all "
+"dispatch function implementations."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:141
+#, no-wrap
+msgid ""
+"\n"
+"/* Pop a message off the queue. */\n"
+"message = g_async_queue_try_pop (message_queue_source-&gt;queue);\n"
+"\n"
+"/* If there was no message, bail. */\n"
+"if (message == NULL)\n"
+"  {\n"
+"    /* Keep the source around to handle the next message. */\n"
+"    return TRUE;\n"
+"  }\n"
+"\n"
+"/* @func may be %NULL if no callback was specified.\n"
+" * If so, drop the message. */\n"
+"if (func == NULL)\n"
+"  {\n"
+"    if (message_queue_source-&gt;destroy_message != NULL)\n"
+"      {\n"
+"        message_queue_source-&gt;destroy_message (message);\n"
+"      }\n"
+"\n"
+"    /* Keep the source around to consume the next message. */\n"
+"    return TRUE;\n"
+"  }\n"
+"\n"
+"return func (message, user_data);"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:169
+msgid "Callback Functions"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:171
+msgid ""
+"The callback from a <code>GSource</code> does not have to have type <code>GSourceFunc</code>. It can be 
whatever "
+"function type is called in the source’s dispatch function, as long as that type is sufficiently documented."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:178
+msgid ""
+"Normally, <code>g_source_set_callback()</code> is used to set the callback function for a source instance. 
With "
+"its <code>GDestroyNotify</code>, a strong reference can be held to keep an object alive while the source is 
still "
+"alive:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:184
+#, no-wrap
+msgid ""
+"\n"
+"g_source_set_callback (source, callback_func,\n"
+"                       g_object_ref (object_to_strong_ref),\n"
+"                       (GDestroyNotify) g_object_unref);"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:189
+msgid ""
+"However, <code>GSource</code> has a layer of indirection for retrieving this callback, exposed as "
+"<code>g_source_set_callback_indirect()</code>. This allows GObject to set a <code>GClosure</code> as the 
callback "
+"for a source, which allows for sources which are automatically destroyed when an object is finalized — a 
<em>weak</"
+"em> reference, in contrast to the <em>strong</em> reference above:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:197
+#, no-wrap
+msgid ""
+"\n"
+"g_source_set_closure (source,\n"
+"                      g_cclosure_new_object (callback_func,\n"
+"                                             object_to_weak_ref));"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:202
+msgid ""
+"It also allows for a generic, closure-based ‘dummy’ callback, which can be used when a source needs to 
exist but "
+"no action needs to be performed in its callback:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:207
+#, no-wrap
+msgid ""
+"\n"
+"g_source_set_dummy_callback (source);"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:212
+msgid "Constructor"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:214
+msgid ""
+"Finally, the <code>GSourceFuncs</code> definition of the <code>GSource</code> can be written, alongside a "
+"construction function. It is typical practice to expose new source types simply as <code>GSource</code>s, 
not as "
+"the subtype structure; so the constructor returns a <code>GSource*</code>."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:222
+msgid ""
+"The example constructor here also demonstrates use of a child source to support cancellation conveniently. 
If the "
+"<code>GCancellable</code> is cancelled, the application’s callback will be dispatched and can check for "
+"cancellation. (The application code will need to make a pointer to the <code>GCancellable</code> available 
to its "
+"callback, as a field of the callback’s user data set in <code>g_source_set_callback()</code>)."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:230
+#, no-wrap
+msgid ""
+"\n"
+"GSource *\n"
+"message_queue_source_new (GAsyncQueue    *queue,\n"
+"                          GDestroyNotify  destroy_message,\n"
+"                          GCancellable   *cancellable)\n"
+"{\n"
+"  GSource *source;  /* alias of @message_queue_source */\n"
+"  MessageQueueSource *message_queue_source;  /* alias of @source */\n"
+"\n"
+"  g_return_val_if_fail (queue != NULL, NULL);\n"
+"  g_return_val_if_fail (cancellable == NULL ||\n"
+"                        G_IS_CANCELLABLE (cancellable), NULL);\n"
+"\n"
+"  source = g_source_new (&amp;message_queue_source_funcs,\n"
+"                         sizeof (MessageQueueSource));\n"
+"  message_queue_source = (MessageQueueSource *) source;\n"
+"\n"
+"  /* The caller can overwrite this name with something more useful later. */\n"
+"  g_source_set_name (source, \"MessageQueueSource\");\n"
+"\n"
+"  message_queue_source-&gt;queue = g_async_queue_ref (queue);\n"
+"  message_queue_source-&gt;destroy_message = destroy_message;\n"
+"\n"
+"  /* Add a cancellable source. */\n"
+"  if (cancellable != NULL)\n"
+"    {\n"
+"      GSource *cancellable_source;\n"
+"\n"
+"      cancellable_source = g_cancellable_source_new (cancellable);\n"
+"      g_source_set_dummy_callback (cancellable_source);\n"
+"      g_source_add_child_source (source, cancellable_source);\n"
+"      g_source_unref (cancellable_source);\n"
+"    }\n"
+"\n"
+"  return source;\n"
+"}"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:270
+msgid "Complete Example"
+msgstr ""
+
+#. (itstool) path: listing/title
+#: C/custom-gsource.c.page:273
+msgid "Complete Example Code"
+msgstr ""
+
+#. (itstool) path: listing/code
+#: C/custom-gsource.c.page:275
+#, no-wrap
+msgid ""
+"/**\n"
+" * MessageQueueSource:\n"
+" *\n"
+" * This is a #GSource which wraps a #GAsyncQueue and is dispatched whenever a\n"
+" * message can be pulled off the queue. Messages can be enqueued from any\n"
+" * thread.\n"
+" *\n"
+" * The callbacks dispatched by a #MessageQueueSource have type\n"
+" * #MessageQueueSourceFunc.\n"
+" *\n"
+" * #MessageQueueSource supports adding a #GCancellable child source which will\n"
+" * additionally dispatch if a provided #GCancellable is cancelled.\n"
+" */\n"
+"typedef struct {\n"
+"  GSource         parent;\n"
+"  GAsyncQueue    *queue;  /* owned */\n"
+"  GDestroyNotify  destroy_message;\n"
+"} MessageQueueSource;\n"
+"\n"
+"/**\n"
+" * MessageQueueSourceFunc:\n"
+" * @message: (transfer full) (nullable): message pulled off the queue\n"
+" * @user_data: user data provided to g_source_set_callback()\n"
+" *\n"
+" * Callback function type for #MessageQueueSource.\n"
+" */\n"
+"typedef gboolean (*MessageQueueSourceFunc) (gpointer message,\n"
+"                                            gpointer user_data);\n"
+"\n"
+"static gboolean\n"
+"message_queue_source_prepare (GSource *source,\n"
+"                              gint    *timeout_)\n"
+"{\n"
+"  MessageQueueSource *message_queue_source = (MessageQueueSource *) source;\n"
+"\n"
+"  return (g_async_queue_length (message_queue_source-&gt;queue) &gt; 0);\n"
+"}\n"
+"\n"
+"static gboolean\n"
+"message_queue_source_dispatch (GSource     *source,\n"
+"                               GSourceFunc  callback,\n"
+"                               gpointer     user_data)\n"
+"{\n"
+"  MessageQueueSource *message_queue_source = (MessageQueueSource *) source;\n"
+"  gpointer message;\n"
+"  MessageQueueSourceFunc func = (MessageQueueSourceFunc) callback;\n"
+"\n"
+"  /* Pop a message off the queue. */\n"
+"  message = g_async_queue_try_pop (message_queue_source-&gt;queue);\n"
+"\n"
+"  /* If there was no message, bail. */\n"
+"  if (message == NULL)\n"
+"    {\n"
+"      /* Keep the source around to handle the next message. */\n"
+"      return TRUE;\n"
+"    }\n"
+"\n"
+"  /* @func may be %NULL if no callback was specified.\n"
+"   * If so, drop the message. */\n"
+"  if (func == NULL)\n"
+"    {\n"
+"      if (message_queue_source-&gt;destroy_message != NULL)\n"
+"        {\n"
+"          message_queue_source-&gt;destroy_message (message);\n"
+"        }\n"
+"\n"
+"      /* Keep the source around to consume the next message. */\n"
+"      return TRUE;\n"
+"    }\n"
+"\n"
+"  return func (message, user_data);\n"
+"}\n"
+"\n"
+"static void\n"
+"message_queue_source_finalize (GSource *source)\n"
+"{\n"
+"  MessageQueueSource *message_queue_source = (MessageQueueSource *) source;\n"
+"\n"
+"  g_async_queue_unref (message_queue_source-&gt;queue);\n"
+"}\n"
+"\n"
+"static gboolean\n"
+"message_queue_source_closure_callback (gpointer message,\n"
+"                                       gpointer user_data)\n"
+"{\n"
+"  GClosure *closure = user_data;\n"
+"  GValue param_value = G_VALUE_INIT;\n"
+"  GValue result_value = G_VALUE_INIT;\n"
+"  gboolean retval;\n"
+"\n"
+"  /* The invoked function is responsible for freeing @message. */\n"
+"  g_value_init (&amp;result_value, G_TYPE_BOOLEAN);\n"
+"  g_value_init (&amp;param_value, G_TYPE_POINTER);\n"
+"  g_value_set_pointer (&amp;param_value, message);\n"
+"\n"
+"  g_closure_invoke (closure, &amp;result_value, 1, &amp;param_value, NULL);\n"
+"  retval = g_value_get_boolean (&amp;result_value);\n"
+"\n"
+"  g_value_unset (&amp;param_value);\n"
+"  g_value_unset (&amp;result_value);\n"
+"\n"
+"  return retval;\n"
+"}\n"
+"\n"
+"static GSourceFuncs message_queue_source_funcs =\n"
+"  {\n"
+"    message_queue_source_prepare,\n"
+"    NULL,  /* check */\n"
+"    message_queue_source_dispatch,\n"
+"    message_queue_source_finalize,\n"
+"    (GSourceFunc) message_queue_source_closure_callback,\n"
+"    NULL,\n"
+"  };\n"
+"\n"
+"/**\n"
+" * message_queue_source_new:\n"
+" * @queue: the queue to check\n"
+" * @destroy_message: (nullable): function to free a message, or %NULL\n"
+" * @cancellable: (nullable): a #GCancellable, or %NULL\n"
+" *\n"
+" * Create a new #MessageQueueSource, a type of #GSource which dispatches for\n"
+" * each message queued to it.\n"
+" *\n"
+" * If a callback function of type #MessageQueueSourceFunc is connected to the\n"
+" * returned #GSource using g_source_set_callback(), it will be invoked for each\n"
+" * message, with the message passed as its first argument. It is responsible for\n"
+" * freeing the message. If no callback is set, messages are automatically freed\n"
+" * as they are queued.\n"
+" *\n"
+" * Returns: (transfer full): a new #MessageQueueSource\n"
+" */\n"
+"GSource *\n"
+"message_queue_source_new (GAsyncQueue    *queue,\n"
+"                          GDestroyNotify  destroy_message,\n"
+"                          GCancellable   *cancellable)\n"
+"{\n"
+"  GSource *source;  /* alias of @message_queue_source */\n"
+"  MessageQueueSource *message_queue_source;  /* alias of @source */\n"
+"\n"
+"  g_return_val_if_fail (queue != NULL, NULL);\n"
+"  g_return_val_if_fail (cancellable == NULL ||\n"
+"                        G_IS_CANCELLABLE (cancellable), NULL);\n"
+"\n"
+"  source = g_source_new (&amp;message_queue_source_funcs,\n"
+"                         sizeof (MessageQueueSource));\n"
+"  message_queue_source = (MessageQueueSource *) source;\n"
+"\n"
+"  /* The caller can overwrite this name with something more useful later. */\n"
+"  g_source_set_name (source, \"MessageQueueSource\");\n"
+"\n"
+"  message_queue_source-&gt;queue = g_async_queue_ref (queue);\n"
+"  message_queue_source-&gt;destroy_message = destroy_message;\n"
+"\n"
+"  /* Add a cancellable source. */\n"
+"  if (cancellable != NULL)\n"
+"    {\n"
+"      GSource *cancellable_source;\n"
+"\n"
+"      cancellable_source = g_cancellable_source_new (cancellable);\n"
+"      g_source_set_dummy_callback (cancellable_source);\n"
+"      g_source_add_child_source (source, cancellable_source);\n"
+"      g_source_unref (cancellable_source);\n"
+"    }\n"
+"\n"
+"  return source;\n"
+"}\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:282
+msgid "Further Examples"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:284
+msgid ""
+"Sources can be more complex than the example given above. In <link 
href=\"http://nice.freedesktop.org/\";>libnice</"
+"link>, a custom <code>GSource</code> is needed to poll a set of sockets which changes dynamically. The "
+"implementation is given as <code>ComponentSource</code> in <link 
href=\"http://cgit.freedesktop.org/libnice/";
+"libnice/tree/agent/component.c#n941\">component.c</link> and demonstrates a more complex use of the prepare 
"
+"function."
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:293
+msgid ""
+"Another example is a custom source to interface GnuTLS with GLib in its <code>GTlsConnection</code> "
+"implementation. <link 
href=\"https://git.gnome.org/browse/glib-networking/tree/tls/gnutls/gtlsconnection-gnutls.";
+"c#n871\"><code>GTlsConnectionGnutlsSource</code></link> synchronizes the main thread and a TLS worker 
thread which "
+"performs the blocking TLS operations."
+msgstr ""



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