[gnome-devel-docs] Update French translation



commit b0b4ba535c40bcaadaf6ced162d68fc531bac054
Author: Alexandre Franke <alexandre franke gmail com>
Date:   Sat Sep 19 22:53:37 2015 +0200

    Update French translation

 platform-demos/fr/fr.po |56482 +++++++++++++++++++++++++++++++++++------------
 1 files changed, 41827 insertions(+), 14655 deletions(-)
---
diff --git a/platform-demos/fr/fr.po b/platform-demos/fr/fr.po
index 46e786e..33de15c 100644
--- a/platform-demos/fr/fr.po
+++ b/platform-demos/fr/fr.po
@@ -10,1752 +10,5869 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: gnome-devel-docs master\n"
-"POT-Creation-Date: 2012-09-30 09:29+0000\n"
-"PO-Revision-Date: 2012-08-29 10:50+0100\n"
-"Last-Translator: AlainLojewski <allomervan gmail com>\n"
+"POT-Creation-Date: 2015-09-14 06:42+0000\n"
+"PO-Revision-Date: 2014-03-16 21:24+0100\n"
+"Last-Translator: Luis Menina <liberforce freeside fr>\n"
 "Language-Team: French <gnomefr traduc org>\n"
 "Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Lokalize 1.2\n"
-"X-Poedit-Language: French\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/window.vala.page:24(None) C/window.py.page:30(None)
-#: C/window.js.page:24(None) C/window.c.page:21(None)
-#: C/GtkApplicationWindow.vala.page:21(None)
-#: C/GtkApplicationWindow.py.page:26(None)
-#: C/GtkApplicationWindow.js.page:21(None)
-#: C/GtkApplicationWindow.c.page:21(None)
-msgid "@@image: 'media/window.png'; md5=eb0cde3530978619c25bddfaeb453345"
-msgstr "@@image: 'media/window.png'; md5=eb0cde3530978619c25bddfaeb453345"
+"X-Generator: Poedit 1.5.7\n"
 
-#: C/window.vala.page:7(title)
-msgid "Window (Vala)"
-msgstr "Fenêtre (Vala)"
+#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
+msgctxt "_"
+msgid "translator-credits"
+msgstr ""
+"Luc Rebert, <traduc rebert name>, 2011\n"
+"Alain Lojewski, <allomervan gmail com>, 2011-2012\n"
+"Luc Pionchon <pionchon luc gmail com>, 2011\n"
+"Bruno Brouard <annoa b gmail com>, 2011-12\n"
+"Luis Menina <liberforce freeside fr>, 2014"
+
+#. (itstool) path: 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:95
+#, fuzzy
+#| msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+msgctxt "_"
+msgid ""
+"external ref='media/02_jsgrid_01.png' md5='3fdc22d361cf801f71557fdc76ae5b49'"
+msgstr "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
 
-#: C/window.vala.page:12(name) C/window.py.page:12(name)
-#: C/window.c.page:12(name) C/vala.page:10(name) C/tutorial.py.page:14(name)
-#: C/translate.page:10(name) C/treeview_simple_liststore.vala.page:14(name)
-#: C/toolbar_builder.vala.page:14(name) C/toolbar_builder.py.page:14(name)
-#: C/toolbar.vala.page:13(name) C/toolbar.js.page:12(name)
-#: C/togglebutton.vala.page:15(name) C/textview.vala.page:12(name)
-#: C/switch.vala.page:16(name) C/statusbar.vala.page:15(name)
-#: C/spinner.vala.page:12(name) C/spinbutton.vala.page:14(name)
-#: C/scrolledwindow.vala.page:13(name) C/scale.vala.page:14(name)
-#: C/radiobutton.vala.page:15(name) C/py.page:10(name)
-#: C/progressbar.vala.page:12(name) C/messagedialog.vala.page:12(name)
-#: C/menubutton.py.page:12(name) C/menubutton.vala.page:12(name)
-#: C/menubar.vala.page:14(name) C/menubar.py.page:14(name)
-#: C/linkbutton.vala.page:12(name) C/label.vala.page:12(name)
-#: C/js.page:11(name) C/index.page:22(name) C/image-viewer.vala.page:26(name)
-#: C/image.vala.page:12(name) C/helloWorld.js.page:19(name)
-#: C/guitar-tuner.vala.page:21(name) C/GtkApplicationWindow.vala.page:12(name)
-#: C/GtkApplicationWindow.py.page:12(name)
-#: C/GtkApplicationWindow.js.page:12(name)
-#: C/GtkApplicationWindow.c.page:12(name) C/grid.vala.page:14(name)
-#: C/grid.py.page:13(name) C/gmenu.vala.page:19(name) C/gmenu.py.page:12(name)
-#: C/gmenu.js.page:12(name) C/gmenu.c.page:12(name)
-#: C/filechooserdialog.vala.page:15(name) C/entry.vala.page:12(name)
-#: C/documentation.page:10(name) C/dialog.vala.page:12(name)
-#: C/cpp.page:10(name) C/combobox.vala.page:12(name)
-#: C/colorbutton.vala.page:14(name) C/checkbutton.vala.page:12(name)
-#: C/checkbutton.c.page:12(name) C/c.page:10(name) C/button.vala.page:13(name)
-#: C/bug-filing.page:9(name) C/beginner.vala.page:14(name)
-#: C/beginner.py.page:14(name) C/aboutdialog.vala.page:20(name)
-msgid "Tiffany Antopolski"
-msgstr "Tiffany Antopolski"
+#. (itstool) path: 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:150
+#, fuzzy
+#| msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+msgctxt "_"
+msgid ""
+"external ref='media/02_jsgrid_02.png' md5='07db86b0043ba5c3c24a90d7322bd81e'"
+msgstr "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+
+#. (itstool) path: 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:167
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
+msgctxt "_"
+msgid ""
+"external ref='media/02_jsgrid_03.png' md5='817351e73c687d47253c56ed06b6629f'"
+msgstr "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
 
-#: C/window.vala.page:13(email) C/window.py.page:13(email)
-#: C/window.c.page:13(email) C/vala.page:11(email)
-#: C/tutorial.py.page:15(email) C/translate.page:11(email)
-#: C/treeview_simple_liststore.vala.page:15(email)
-#: C/toolbar_builder.vala.page:15(email) C/toolbar_builder.py.page:15(email)
-#: C/toolbar.vala.page:14(email) C/toolbar.js.page:13(email)
-#: C/togglebutton.vala.page:16(email) C/textview.vala.page:13(email)
-#: C/switch.vala.page:17(email) C/statusbar.vala.page:16(email)
-#: C/spinner.vala.page:13(email) C/spinbutton.vala.page:15(email)
-#: C/scrolledwindow.vala.page:14(email) C/scale.vala.page:15(email)
-#: C/radiobutton.vala.page:16(email) C/py.page:11(email)
-#: C/progressbar.vala.page:13(email) C/messagedialog.vala.page:13(email)
-#: C/menubutton.py.page:13(email) C/menubutton.vala.page:13(email)
-#: C/menubar.vala.page:15(email) C/menubar.py.page:15(email)
-#: C/linkbutton.vala.page:13(email) C/label.vala.page:13(email)
-#: C/js.page:12(email) C/index.page:23(email)
-#: C/image-viewer.vala.page:27(email) C/image.vala.page:13(email)
-#: C/helloWorld.js.page:20(email) C/guitar-tuner.vala.page:22(email)
-#: C/GtkApplicationWindow.vala.page:13(email)
-#: C/GtkApplicationWindow.py.page:13(email)
-#: C/GtkApplicationWindow.js.page:13(email)
-#: C/GtkApplicationWindow.c.page:13(email) C/grid.vala.page:15(email)
-#: C/grid.py.page:14(email) C/gmenu.vala.page:20(email)
-#: C/gmenu.py.page:13(email) C/gmenu.js.page:13(email)
-#: C/gmenu.c.page:13(email) C/filechooserdialog.vala.page:16(email)
-#: C/entry.vala.page:13(email) C/documentation.page:11(email)
-#: C/dialog.vala.page:13(email) C/cpp.page:11(email)
-#: C/combobox.vala.page:13(email) C/colorbutton.vala.page:15(email)
-#: C/checkbutton.vala.page:13(email) C/c.page:11(email)
-#: C/button.vala.page:14(email) C/beginner.vala.page:15(email)
-#: C/beginner.py.page:15(email) C/aboutdialog.vala.page:21(email)
-msgid "tiffany antopolski gmail com"
-msgstr "tiffany antopolski gmail com"
-
-#: C/window.vala.page:14(years) C/window.py.page:14(years)
-#: C/window.py.page:19(years) C/window.js.page:14(years)
-#: C/window.c.page:14(years) C/weatherGeonames.js.page:12(years)
-#: C/weatherAutotools.js.page:12(years) C/weatherAppMain.js.page:12(years)
-#: C/weatherApp.js.page:13(years) C/tutorial.py.page:16(years)
-#: C/tutorial.py.page:21(years) C/treeview_treestore.py.page:14(years)
-#: C/treeview_simple_liststore.vala.page:16(years)
-#: C/treeview_simple_liststore.py.page:16(years)
-#: C/treeview_simple_liststore.js.page:17(years)
-#: C/treeview_cellrenderertoggle.py.page:14(years)
-#: C/treeview_advanced_liststore.py.page:17(years) C/tooltip.py.page:15(years)
-#: C/toolbar_builder.vala.page:16(years) C/toolbar_builder.py.page:16(years)
-#: C/toolbar_builder.py.page:22(years) C/toolbar.vala.page:15(years)
-#: C/toolbar.py.page:15(years) C/toolbar.js.page:14(years)
-#: C/togglebutton.vala.page:17(years) C/togglebutton.py.page:17(years)
-#: C/togglebutton.js.page:14(years) C/togglebutton.c.page:18(years)
-#: C/textview.vala.page:14(years) C/textview.py.page:22(years)
-#: C/textview.js.page:18(years) C/textview.c.page:14(years)
-#: C/switch.vala.page:18(years) C/switch.py.page:19(years)
-#: C/switch.js.page:14(years) C/switch.c.page:14(years)
-#: C/strings.py.page:21(years) C/statusbar.vala.page:17(years)
-#: C/statusbar.py.page:17(years) C/statusbar.js.page:14(years)
-#: C/statusbar.c.page:18(years) C/spinner.vala.page:14(years)
-#: C/spinner.py.page:14(years) C/spinner.js.page:14(years)
-#: C/spinner.c.page:15(years) C/spinbutton.vala.page:16(years)
-#: C/spinbutton.py.page:15(years) C/spinbutton.js.page:17(years)
-#: C/spinbutton.c.page:17(years) C/signals-callbacks.py.page:21(years)
-#: C/set-up-gedit.js.page:13(years) C/separator.py.page:15(years)
-#: C/scrolledwindow.vala.page:15(years) C/scrolledwindow.py.page:14(years)
-#: C/scale.vala.page:16(years) C/scale.py.page:15(years)
-#: C/scale.js.page:14(years) C/scale.c.page:16(years)
-#: C/radiobutton.vala.page:17(years) C/radiobutton.py.page:18(years)
-#: C/radiobutton.js.page:14(years) C/radiobutton.c.page:16(years)
-#: C/properties.py.page:21(years) C/progressbar.vala.page:14(years)
-#: C/progressbar.py.page:14(years) C/progressbar.js.page:13(years)
-#: C/progressbar.c.page:15(years) C/paned.py.page:14(years)
-#: C/model-view-controller.py.page:21(years)
-#: C/messagedialog.vala.page:14(years) C/messagedialog.py.page:15(years)
-#: C/messagedialog.js.page:17(years) C/messagedialog.c.page:15(years)
-#: C/menubutton.py.page:14(years) C/menubutton.py.page:20(years)
-#: C/menubutton.vala.page:14(years) C/menubutton.js.page:14(years)
-#: C/menubar.vala.page:16(years) C/menubar.py.page:16(years)
-#: C/menubar.py.page:21(years) C/linkbutton.vala.page:14(years)
-#: C/linkbutton.py.page:15(years) C/linkbutton.js.page:14(years)
-#: C/linkbutton.c.page:14(years) C/label.vala.page:14(years)
-#: C/label.py.page:15(years) C/label.py.page:20(years)
-#: C/label.js.page:14(years) C/label.c.page:15(years)
-#: C/image.vala.page:14(years) C/image.py.page:14(years)
-#: C/image.js.page:13(years) C/image.c.page:14(years)
-#: C/helloWorld.js.page:16(years) C/hellognome.js.page:13(years)
-#: C/guitar-tuner.js.page:13(years) C/GtkApplicationWindow.vala.page:14(years)
-#: C/GtkApplicationWindow.py.page:14(years)
-#: C/GtkApplicationWindow.py.page:19(years)
-#: C/GtkApplicationWindow.js.page:14(years)
-#: C/GtkApplicationWindow.c.page:14(years) C/grid.vala.page:16(years)
-#: C/grid.py.page:15(years) C/grid.py.page:21(years) C/grid.js.page:14(years)
-#: C/grid.c.page:14(years) C/gmenu.vala.page:15(years)
-#: C/gmenu.py.page:14(years) C/gmenu.py.page:20(years)
-#: C/gmenu.js.page:14(years) C/gmenu.c.page:14(years)
-#: C/fontchooserwidget.py.page:15(years)
-#: C/filechooserdialog.vala.page:17(years)
-#: C/filechooserdialog.py.page:17(years) C/entry.vala.page:14(years)
-#: C/entry.py.page:14(years) C/entry.js.page:14(years)
-#: C/entry.c.page:14(years) C/dialog.vala.page:14(years)
-#: C/dialog.py.page:15(years) C/dialog.js.page:14(years)
-#: C/dialog.c.page:16(years) C/combobox_multicolumn.py.page:15(years)
-#: C/combobox.vala.page:14(years) C/combobox.py.page:14(years)
-#: C/combobox.js.page:18(years) C/comboboxtext.js.page:16(years)
-#: C/colorbutton.vala.page:16(years) C/colorbutton.py.page:14(years)
-#: C/checkbutton.vala.page:14(years) C/checkbutton.py.page:15(years)
-#: checkbutton/C.js.page:14(years) C/checkbutton.c.page:14(years)
-#: C/buttonbox.py.page:15(years) C/button.vala.page:15(years)
-#: C/button.py.page:15(years) C/button.js.page:14(years)
-#: C/button.c.page:16(years) C/beginner.js.page:12(years)
-#: C/aboutdialog.vala.page:16(years) C/aboutdialog.py.page:15(years)
-#: C/aboutdialog.js.page:13(years) C/aboutdialog.c.page:16(years)
-#: C/03_getting_the_signal.js.page:17(years)
-#: C/02_welcome_to_the_grid.js.page:16(years)
+#. (itstool) path: 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:197
+#, fuzzy
+#| msgid "@@image: 'media/glade_ui.png'; md5=baea74fe213bc12ea934f64f6977215a"
+msgctxt "_"
+msgid ""
+"external ref='media/02_jsgrid_04.png' md5='eeaead27cee2851877fc3cfe66177f07'"
+msgstr "@@image: 'media/glade_ui.png'; md5=baea74fe213bc12ea934f64f6977215a"
+
+#. (itstool) path: 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:206
+#, fuzzy
+#| msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+msgctxt "_"
+msgid ""
+"external ref='media/02_jsgrid_05.png' md5='a3ad12f432d5977fc1f66302ad5b7498'"
+msgstr "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+
+#. (itstool) path: 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:217
+#, fuzzy
+#| msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+msgctxt "_"
+msgid ""
+"external ref='media/02_jsgrid_06.png' md5='450e48dbf6b8f5ce1c208e4812e1714b'"
+msgstr "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+
+#. (itstool) path: 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:227
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
+msgctxt "_"
+msgid ""
+"external ref='media/02_jsgrid_07.png' md5='0b304d70728903fbb2601d55bf00fdb9'"
+msgstr "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
+
+#. (itstool) path: 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:249
+#, fuzzy
+#| msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+msgctxt "_"
+msgid ""
+"external ref='media/02_jsgrid_08.png' md5='78890beb47bd11360154b8ca4d50d1ff'"
+msgstr "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+
+#. (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"
 
-#: C/window.vala.page:17(desc) C/window.py.page:22(desc)
-#: C/window.c.page:17(desc)
-msgid "A toplevel window which can contain other widgets"
+#. (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 ""
-"Une fenêtre de niveau supérieur qui peut contenir d'autres éléments "
-"graphiques"
+"Apprenez à disposer les éléments d'interface graphique, comme les images ou "
+"les étiquettes."
 
-#: C/window.vala.page:20(title) C/window.py.page:25(title)
-#: C/window.js.page:20(title) C/window.c.page:20(title)
-msgid "Window"
-msgstr "Fenêtre"
+#. (itstool) path: page/title
+#: C/02_welcome_to_the_grid.js.page:23
+msgid "2. Welcome to the Grid"
+msgstr "2. Bienvenue devant la Grid"
 
-#: C/window.vala.page:25(p)
-msgid "The simplest Gtk.Application"
-msgstr "La plus simple des applications Gtk.Application"
+#. (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 ""
+"Ce tutoriel vous montrera comment créer des composants graphiques basiques, "
+"ou des parties de l'interface utilisateur de GNOME, comme les images ou les "
+"étiquettes. Vous apprendrez ensuite comment les arranger tous dans une "
+"grille, qui vous permet de placer les widgets où vous le souhaitez."
 
-#: C/window.vala.page:28(p)
+#. (itstool) path: note/p
+#: C/02_welcome_to_the_grid.js.page:26
 msgid ""
-"Use <link xref=\"GtkApplicationWindow.vala\">Application Window</link> if "
-"you need GMenu support."
+"Have you taken <link xref=\"hellognome.js\">the first tutorial in this "
+"series</link> already? You'll want to do so before continuing."
 msgstr ""
-"Utilisez <link xref=\"GtkApplicationWindow.vala\">Application Window</link> "
-"si vous avez besoin de la prise en charge de GMenu."
+"Avez vous lu <link xref=\"hellognome.js\">le premier tutoriel de cette "
+"série</link> ? Faites le avant de continuer."
 
-#: C/window.vala.page:33(p) C/window.py.page:60(p) C/window.c.page:29(p)
-#: C/treeview_treestore.py.page:39(p)
-#: C/treeview_simple_liststore.vala.page:27(p)
-#: C/treeview_simple_liststore.py.page:41(p)
-#: C/treeview_simdes ple_liststore.js.page:272(p)
-#: C/treeview_cellrenderertoggle.py.page:39(p)
-#: C/treeview_advanced_liststore.py.page:43(p) C/tooltip.py.page:53(p)
-#: C/toolbar_builder.vala.page:146(p) C/toolbar_builder.py.page:189(p)
-#: C/toolbar.vala.page:29(p) C/toolbar.py.page:50(p) C/toolbar.js.page:26(p)
-#: C/togglebutton.vala.page:28(p) C/togglebutton.py.page:43(p)
-#: C/togglebutton.c.page:31(p) C/textview.vala.page:30(p)
-#: C/textview.py.page:93(p) C/textview.c.page:31(p) C/switch.vala.page:31(p)
-#: C/switch.py.page:46(p) C/switch.c.page:28(p) C/statusbar.vala.page:28(p)
-#: C/statusbar.py.page:50(p) C/statusbar.c.page:31(p)
-#: C/spinner.vala.page:25(p) C/spinner.py.page:38(p) C/spinner.js.page:25(p)
-#: C/spinner.c.page:28(p) C/spinbutton.vala.page:27(p)
-#: C/spinbutton.py.page:45(p) C/spinbutton.c.page:30(p)
-#: C/separator.py.page:35(p) C/scrolledwindow.vala.page:26(p)
-#: C/scrolledwindow.py.page:41(p) C/scale.vala.page:27(p)
-#: C/scale.py.page:53(p) C/scale.c.page:29(p) C/radiobutton.vala.page:28(p)
-#: C/radiobutton.py.page:49(p) C/radiobutton.c.page:29(p)
-#: C/progressbar.vala.page:25(p) C/progressbar.py.page:53(p)
-#: C/progressbar.js.page:34(p) C/progressbar.c.page:28(p)
-#: C/paned.py.page:38(p) C/messagedialog.vala.page:26(p)
-#: C/messagedialog.py.page:54(p) C/messagedialog.js.page:189(p)
-#: C/messagedialog.c.page:31(p) C/menubutton.py.page:50(p)
-#: C/menubutton.vala.page:28(p) C/menubutton.js.page:28(p)
-#: C/menubar.vala.page:187(p) C/menubar.py.page:181(p)
-#: C/linkbutton.vala.page:25(p) C/linkbutton.py.page:44(p)
-#: C/linkbutton.js.page:25(p) C/linkbutton.c.page:27(p)
-#: C/label.vala.page:26(p) C/label.py.page:86(p) C/label.js.page:25(p)
-#: C/label.c.page:32(p) C/image.vala.page:27(p) C/image.py.page:98(p)
-#: C/image.js.page:27(p) C/image.c.page:28(p)
-#: C/GtkApplicationWindow.vala.page:26(p) C/GtkApplicationWindow.py.page:48(p)
-#: C/GtkApplicationWindow.js.page:26(p) C/GtkApplicationWindow.c.page:25(p)
-#: C/grid.vala.page:27(p) C/grid.py.page:53(p) C/grid.js.page:29(p)
-#: C/grid.c.page:27(p) C/gmenu.vala.page:37(p) C/gmenu.py.page:74(p)
-#: C/gmenu.js.page:25(p) C/gmenu.c.page:27(p)
-#: C/fontchooserwidget.py.page:43(p) C/filechooserdialog.vala.page:35(p)
-#: C/filechooserdialog.py.page:69(p) C/entry.vala.page:25(p)
-#: C/entry.py.page:59(p) C/entry.js.page:25(p) C/entry.c.page:27(p)
-#: C/dialog.vala.page:27(p) C/dialog.py.page:45(p) C/dialog.js.page:25(p)
-#: C/dialog.c.page:29(p) C/combobox_multicolumn.py.page:41(p)
-#: C/combobox.vala.page:25(p) C/combobox.py.page:38(p)
-#: C/combobox.js.page:233(p) C/comboboxtext.js.page:176(p)
-#: C/colorbutton.vala.page:27(p) C/colorbutton.py.page:38(p)
-#: C/checkbutton.vala.page:25(p) C/checkbutton.py.page:44(p)
-#: C/checkbutton.c.page:25(p) C/buttonbox.py.page:45(p) C/button.py.page:50(p)
-#: C/button.js.page:26(p) C/button.c.page:29(p) C/aboutdialog.vala.page:34(p)
-#: C/aboutdialog.py.page:41(p) C/aboutdialog.js.page:24(p)
-#: C/aboutdialog.c.page:30(p)
-msgid "In this sample we used the following:"
-msgstr "Dans cet exemple, les éléments suivants sont utilisés :"
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:32
+msgid "Going native"
+msgstr "Côté natif"
 
-#: C/window.vala.page:37(link) C/window.js.page:38(link)
-#: C/treeview_simple_liststore.js.page:276(link)
-#: C/togglebutton.js.page:154(link) C/textview.js.page:249(link)
-#: C/switch.js.page:267(link) C/statusbar.js.page:222(link)
-#: C/spinner.js.page:30(link) C/spinbutton.js.page:201(link)
-#: C/scale.js.page:210(link) C/radiobutton.js.page:275(link)
-#: C/progressbar.js.page:39(link) C/messagedialog.js.page:195(link)
-#: C/linkbutton.js.page:29(link) C/label.vala.page:30(link)
-#: C/label.js.page:29(link) C/image.js.page:31(link)
-#: C/GtkApplicationWindow.vala.page:30(link)
-#: C/GtkApplicationWindow.js.page:30(link) C/grid.js.page:33(link)
-#: C/gmenu.vala.page:41(link) C/entry.js.page:29(link)
-#: C/dialog.js.page:29(link) C/combobox.js.page:237(link)
-#: C/comboboxtext.js.page:180(link) C/checkbutton.js.page:137(link)
-#: C/button.js.page:30(link) C/aboutdialog.vala.page:38(link)
-#: C/aboutdialog.js.page:31(link)
-msgid "Gtk.Application"
-msgstr "Gtk.Application"
-
-#: C/window.vala.page:38(p)
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:34
 msgid ""
-"The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
-"\">Gtk.Window</link>"
+"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 ""
-"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
-"html\">Gtk.Window</link>"
+"Dans le dernier tutoriel, nous avons créé un cadre de fenêtre GNOME pour une "
+"application web. Tout le code spécifique à GNOME dont nous avons eu besoin "
+"consistait à mettre la WebView ­– le composant graphique contenant notre "
+"application – dans notre fenêtre applicative, et lui dire de s'afficher. "
+"L'application elle-même était écrite en HTML et JavaScript, comme la plupart "
+"des pages du web."
 
-#: C/window.vala.page:40(p)
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:35
 msgid ""
-"The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
-"\">Gtk.WindowPosition</link>"
+"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 ""
-"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
-"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/window.vala.page:42(p)
+#. (itstool) path: note/p
+#: C/02_welcome_to_the_grid.js.page:36
 msgid ""
-"The method <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
-"set_default_size.html\">set_default_size</link>"
+"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 ""
-"La méthode <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
-"set_default_size.html\">set_default_size</link>"
 
-#: C/window.vala.page:44(link)
-msgid "border_width"
-msgstr "border_width"
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:40
+msgid "Setting up our application"
+msgstr "Mise en place de notre application"
 
-#: C/window.vala.page:46(link)
-msgid "window_position"
-msgstr "window_position"
+#. (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 ""
+"Avant de sortir des outils de notre boîte à outils GTK+, nous devons écrire "
+"du code d'enrobage requis par l'application."
 
-#: C/window.py.page:7(title)
-msgid "Window (Python)"
-msgstr "Window (Python)"
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:43 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 ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
 
-#: C/window.py.page:17(name) C/tutorial.py.page:19(name)
-#: C/treeview_treestore.py.page:12(name)
-#: C/treeview_simple_liststore.py.page:14(name)
-#: C/treeview_cellrenderertoggle.py.page:12(name)
-#: C/treeview_advanced_liststore.py.page:15(name) C/tooltip.py.page:13(name)
-#: C/toolbar_builder.py.page:20(name) C/toolbar.py.page:13(name)
-#: C/togglebutton.py.page:15(name) C/textview.py.page:20(name)
-#: C/switch.py.page:17(name) C/strings.py.page:19(name)
-#: C/statusbar.py.page:15(name) C/spinner.py.page:12(name)
-#: C/spinbutton.py.page:13(name) C/signals-callbacks.py.page:19(name)
-#: C/separator.py.page:13(name) C/scrolledwindow.py.page:12(name)
-#: C/scale.py.page:13(name) C/radiobutton.py.page:16(name)
-#: C/properties.py.page:19(name) C/progressbar.py.page:12(name)
-#: C/paned.py.page:12(name) C/model-view-controller.py.page:19(name)
-#: C/messagedialog.py.page:13(name) C/menubutton.py.page:18(name)
-#: C/menubar.py.page:19(name) C/linkbutton.py.page:13(name)
-#: C/label.py.page:13(name) C/image.py.page:12(name)
-#: C/GtkApplicationWindow.py.page:17(name) C/grid.py.page:19(name)
-#: C/gmenu.py.page:18(name) C/fontchooserwidget.py.page:13(name)
-#: C/filechooserdialog.py.page:15(name) C/entry.py.page:12(name)
-#: C/dialog.py.page:13(name) C/combobox_multicolumn.py.page:13(name)
-#: C/combobox.py.page:12(name) C/colorbutton.py.page:12(name)
-#: C/checkbutton.py.page:13(name) C/buttonbox.py.page:13(name)
-#: C/button.py.page:13(name) C/aboutdialog.py.page:13(name)
-msgid "Marta Maria Casetti"
-msgstr "Marta Maria Casetti"
+#. (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, and "
+"Lang so we can use Lang.bind to connect our application's activate and "
+"startup signals to the requisite functions."
+msgstr ""
+"Cette partie va toujours au début de votre code. Selon ce que vous souhaitez "
+"en faire, vous pourriez importer plus de choses ici. Cet exemple est assez "
+"basique, aussi nous n'avons pas besoin de plus ; Gtk pour les composants "
+"graphiques et Lang pour pouvoir utilise Lang.bind pour connecter les signaux "
+"« activate » et « startup » aux fonctions correspondantes."
 
-#: C/window.py.page:18(email) C/tutorial.py.page:20(email)
-#: C/treeview_treestore.py.page:13(email)
-#: C/treeview_simple_liststore.py.page:15(email)
-#: C/treeview_cellrenderertoggle.py.page:13(email)
-#: C/treeview_advanced_liststore.py.page:16(email) C/tooltip.py.page:14(email)
-#: C/toolbar_builder.py.page:21(email) C/toolbar.py.page:14(email)
-#: C/togglebutton.py.page:16(email) C/textview.py.page:21(email)
-#: C/switch.py.page:18(email) C/strings.py.page:20(email)
-#: C/statusbar.py.page:16(email) C/spinner.py.page:13(email)
-#: C/spinbutton.py.page:14(email) C/signals-callbacks.py.page:20(email)
-#: C/separator.py.page:14(email) C/scrolledwindow.py.page:13(email)
-#: C/scale.py.page:14(email) C/radiobutton.py.page:17(email)
-#: C/properties.py.page:20(email) C/progressbar.py.page:13(email)
-#: C/paned.py.page:13(email) C/model-view-controller.py.page:20(email)
-#: C/messagedialog.py.page:14(email) C/menubutton.py.page:19(email)
-#: C/menubar.py.page:20(email) C/linkbutton.py.page:14(email)
-#: C/label.py.page:14(email) C/image.py.page:13(email)
-#: C/GtkApplicationWindow.py.page:18(email) C/grid.py.page:20(email)
-#: C/gmenu.py.page:19(email) C/fontchooserwidget.py.page:14(email)
-#: C/filechooserdialog.py.page:16(email) C/dialog.py.page:14(email)
-#: C/combobox_multicolumn.py.page:14(email) C/combobox.py.page:13(email)
-#: C/colorbutton.py.page:13(email) C/checkbutton.py.page:14(email)
-#: C/buttonbox.py.page:14(email) C/button.py.page:14(email)
-#: C/aboutdialog.py.page:14(email)
-msgid "mmcasetti gmail com"
-msgstr "mmcasetti gmail com"
-
-#: C/window.py.page:31(p)
-msgid "A minimal Gtk+ Application: a window with a title."
-msgstr "Une application Gtk+ minimale : une fenêtre avec un titre."
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:50
+msgid "Speaking of which:"
+msgstr "À propos de cela :"
 
-#: C/window.py.page:34(p)
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:51
+#, no-wrap
 msgid ""
-"Use <link xref=\"GtkApplicationWindow.py\">Application Window</link> if you "
-"need GMenu support."
+"\n"
+"const WelcomeToTheGrid = new Lang.Class({\n"
+"    Name: 'Welcome to the Grid',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
 msgstr ""
-"Utilisez <link xref=\"GtkApplicationWindow.py\">Application Window</link> si "
-"vous avez besoin de la prise en charge de GMenu."
+"\n"
+"const WelcomeToTheGrid = new Lang.Class({\n"
+"    Name: 'Bienvenue devant la Grid',\n"
+"\n"
+"    // Création de l'application\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connection des signaux 'activate' et 'startup' aux fonctions de rappel\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Fonction de rappel pour que le signal 'activate' présente la fenêtre quand elle est activée\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Fonction de rappel pour que le signal 'startup' construise l'interface graphique\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
 
-#: C/window.py.page:42(title) C/treeview_treestore.py.page:27(title)
-#: C/treeview_simple_liststore.py.page:29(title)
-#: C/treeview_cellrenderertoggle.py.page:27(title)
-#: C/treeview_advanced_liststore.py.page:30(title) C/tooltip.py.page:28(title)
-#: C/toolbar_builder.py.page:162(title) C/toolbar.py.page:29(title)
-#: C/togglebutton.py.page:30(title) C/textview.py.page:42(title)
-#: C/switch.py.page:34(title) C/statusbar.py.page:30(title)
-#: C/spinner.py.page:27(title) C/spinbutton.py.page:28(title)
-#: C/separator.py.page:29(title) C/scrolledwindow.py.page:27(title)
-#: C/scale.py.page:28(title) C/radiobutton.py.page:31(title)
-#: C/progressbar.py.page:37(title) C/paned.py.page:27(title)
-#: C/messagedialog.py.page:28(title) C/menubutton.py.page:35(title)
-#: C/linkbutton.py.page:29(title) C/label.py.page:33(title)
-#: C/image.py.page:31(title) C/GtkApplicationWindow.py.page:32(title)
-#: C/grid.py.page:35(title) C/gmenu.py.page:34(title)
-#: C/fontchooserwidget.py.page:29(title) C/filechooserdialog.py.page:51(title)
-#: C/entry.py.page:32(title) C/dialog.py.page:28(title)
-#: C/combobox_multicolumn.py.page:28(title) C/combobox.py.page:27(title)
-#: C/colorbutton.py.page:27(title) C/checkbutton.py.page:28(title)
-#: C/buttonbox.py.page:29(title) C/button.py.page:29(title)
-#: C/aboutdialog.py.page:28(title)
-msgid "Code used to generate this example"
-msgstr "Code utilisé pour générer cet exemple"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:74
+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 ""
 
-#: C/window.py.page:49(title)
-msgid "Useful methods for a Window widget"
-msgstr "Méthodes utiles pour un élément graphique fenêtre"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:75
+msgid ""
+"This part, again, is pretty much copy-and-paste, but you always want to give "
+"your application a unique name."
+msgstr ""
 
-#: C/window.py.page:50(p)
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:77
+#, no-wrap
 msgid ""
-"<code>window = Gtk.Window(application=self, title=\"Welcome to GNOME\")</"
-"code> sets the title as well, without the need for the line <code>window."
-"set_title(\"Welcome to GNOME\")</code>. For a general discussion of this, "
-"see <link xref=\"properties.py\">here</link>."
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 10,\n"
+"            title: \"Welcome to the Grid\"});\n"
 msgstr ""
-"Le code <code>window = Gtk.Window(application=self, title=\"Welcome to GNOME"
-"\")</code> définit aussi le titre, sans avoir besoin de la ligne "
-"<code>window.set_title(\"Welcome to GNOME\")</code>. Pour de plus amples "
-"informations, voyez <link xref=\"properties.py\">ici</link>."
 
-#: C/window.py.page:52(p) C/GtkApplicationWindow.py.page:41(p)
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:88
 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."
+"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 ""
-"<code>set_default_size(200, 100)</code> définit la taille par "
-"défaut de la fenêtre à une largeur de <code>200</code> et une hauteur de "
-"<code>100</code> ; si, au lieu d'un nombre positif, vous lui transmettez "
-"<code>-1</code>, vous obtenez la taille par défaut."
 
-#: C/window.py.page:53(p) C/GtkApplicationWindow.py.page:42(p)
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:92
+msgid "Reaching into the GTK+ toolbox"
+msgstr "Sortons la boîte à outils GTK+"
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:93
 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>."
+"What widgets should we use? Well, let's say we want to write an application "
+"that looks like this:"
 msgstr ""
-"<code>set_position(Gtk.WindowPosition.CENTER)</code> place la "
-"fenêtre au centre de l'écran. Les autres options possibles sont : <code>Gtk."
-"WindowPosition.NONE, Gtk.WindowPosition.MOUSE, Gtk.WindowPosition."
-"CENTER_ALWAYS, Gtk.WindowPosition.CENTER_ON_PARENT</code>."
 
-#: C/window.py.page:58(title) C/treeview_treestore.py.page:38(title)
-#: C/treeview_simple_liststore.py.page:40(title)
-#: C/treeview_cellrenderertoggle.py.page:38(title)
-#: C/treeview_advanced_liststore.py.page:42(title) C/tooltip.py.page:52(title)
-#: C/toolbar_builder.py.page:188(title) C/toolbar.py.page:49(title)
-#: C/togglebutton.py.page:42(title) C/textview.py.page:92(title)
-#: C/switch.py.page:45(title) C/statusbar.py.page:49(title)
-#: C/spinner.py.page:37(title) C/spinbutton.py.page:44(title)
-#: C/scrolledwindow.py.page:40(title) C/scale.py.page:52(title)
-#: C/radiobutton.py.page:48(title) C/progressbar.py.page:52(title)
-#: C/paned.py.page:37(title) C/messagedialog.py.page:53(title)
-#: C/menubutton.py.page:49(title) C/menubar.py.page:180(title)
-#: C/linkbutton.py.page:43(title) C/label.py.page:85(title)
-#: C/image.py.page:97(title) C/GtkApplicationWindow.py.page:47(title)
-#: C/grid.py.page:52(title) C/gmenu.py.page:73(title)
-#: C/fontchooserwidget.py.page:42(title) C/filechooserdialog.py.page:68(title)
-#: C/entry.py.page:58(title) C/dialog.py.page:44(title)
-#: C/combobox_multicolumn.py.page:40(title) C/combobox.py.page:37(title)
-#: C/colorbutton.py.page:37(title) C/checkbutton.py.page:43(title)
-#: C/buttonbox.py.page:44(title) C/button.py.page:49(title)
-#: C/aboutdialog.py.page:40(title)
-msgid "API References"
-msgstr "Références API"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:97
+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 ""
 
-#: C/window.py.page:62(link) C/window.c.page:33(link)
-#: C/togglebutton.c.page:35(link) C/textview.c.page:35(link)
-#: C/switch.c.page:32(link) C/statusbar.c.page:35(link)
-#: C/spinner.c.page:32(link) C/spinbutton.c.page:34(link)
-#: C/scale.c.page:33(link) C/radiobutton.c.page:33(link)
-#: C/progressbar.c.page:32(link) C/messagedialog.py.page:64(link)
-#: C/messagedialog.c.page:35(link) C/linkbutton.c.page:31(link)
-#: C/label.c.page:36(link) C/image.vala.page:31(link) C/image.c.page:32(link)
-#: C/GtkApplicationWindow.py.page:52(link)
-#: C/GtkApplicationWindow.c.page:29(link) C/grid.py.page:55(link)
-#: C/grid.c.page:31(link) C/entry.c.page:31(link) C/dialog.c.page:33(link)
-#: C/checkbutton.py.page:46(link) C/button.c.page:33(link)
-#: C/aboutdialog.py.page:48(link) C/aboutdialog.c.page:34(link)
-msgid "GtkApplication"
-msgstr "GtkApplication"
-
-#: C/window.py.page:63(link) C/window.c.page:34(link)
-#: C/togglebutton.c.page:36(link) C/textview.c.page:36(link)
-#: C/switch.c.page:33(link) C/statusbar.c.page:36(link)
-#: C/spinner.c.page:33(link) C/spinbutton.c.page:35(link)
-#: C/separator.py.page:37(link) C/scale.c.page:34(link)
-#: C/radiobutton.py.page:51(link) C/radiobutton.c.page:34(link)
-#: C/progressbar.c.page:33(link) C/messagedialog.py.page:60(link)
-#: C/messagedialog.c.page:37(link) C/linkbutton.py.page:46(link)
-#: C/linkbutton.c.page:32(link) C/label.py.page:89(link)
-#: C/label.c.page:37(link) C/image.py.page:101(link) C/image.c.page:33(link)
-#: C/grid.c.page:32(link) C/filechooserdialog.py.page:73(link)
-#: C/entry.c.page:32(link) C/dialog.py.page:50(link) C/dialog.c.page:34(link)
-#: C/button.py.page:53(link) C/button.c.page:34(link)
-#: C/aboutdialog.c.page:35(link)
-msgid "GtkWindow"
-msgstr "GtkWindow"
-
-#: C/window.js.page:7(title)
-msgid "Window (JavaScript)"
-msgstr "Fenêtre (JavaScript)"
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:98
+#, no-wrap
+msgid ""
+"\n"
+"        // Create an image\n"
+"        this._image = new Gtk.Image ({ file: \"gnome-image.png\" });\n"
+msgstr ""
 
-#: C/window.js.page:12(name) C/treeview_simple_liststore.js.page:15(name)
-#: C/togglebutton.js.page:12(name) C/textview.js.page:16(name)
-#: C/switch.js.page:12(name) C/statusbar.js.page:12(name)
-#: C/spinner.js.page:12(name) C/spinbutton.js.page:15(name)
-#: C/set-up-gedit.js.page:11(name) C/scale.js.page:12(name)
-#: C/radiobutton.js.page:12(name) C/progressbar.js.page:11(name)
-#: C/messagedialog.js.page:15(name) C/linkbutton.js.page:12(name)
-#: C/label.js.page:12(name) C/image.js.page:11(name)
-#: C/hellognome.js.page:11(name) C/grid.js.page:17(name)
-#: C/entry.js.page:12(name) C/dialog.js.page:12(name)
-#: C/combobox.js.page:16(name) C/comboboxtext.js.page:14(name)
-#: C/checkbutton.js.page:12(name) C/button.js.page:12(name)
-#: C/aboutdialog.js.page:11(name) C/03_getting_the_signal.js.page:15(name)
-#: C/02_welcome_to_the_grid.js.page:14(name)
-msgid "Taryn Fox"
-msgstr "Taryn Fox"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:103
+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 ""
 
-#: C/window.js.page:13(email) C/treeview_simple_liststore.js.page:16(email)
-#: C/togglebutton.js.page:13(email) C/textview.js.page:17(email)
-#: C/switch.js.page:13(email) C/statusbar.js.page:13(email)
-#: C/spinner.js.page:13(email) C/spinbutton.js.page:16(email)
-#: C/set-up-gedit.js.page:12(email) C/scale.js.page:13(email)
-#: C/radiobutton.js.page:13(email) C/progressbar.js.page:12(email)
-#: C/messagedialog.js.page:16(email) C/linkbutton.js.page:13(email)
-#: C/label.js.page:13(email) C/image.js.page:12(email)
-#: C/hellognome.js.page:12(email) C/grid.js.page:18(email)
-#: C/entry.js.page:13(email) C/dialog.js.page:13(email)
-#: C/combobox.js.page:17(email) C/comboboxtext.js.page:15(email)
-#: C/checkbutton.js.page:13(email) C/button.js.page:13(email)
-#: C/aboutdialog.js.page:12(email) C/03_getting_the_signal.js.page:16(email)
-#: C/02_welcome_to_the_grid.js.page:15(email)
-msgid "jewelfox fursona net"
-msgstr "jewelfox fursona net"
-
-#: C/window.js.page:17(desc)
-msgid "A basic window which can contain other widgets"
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:105
+#, no-wrap
+msgid ""
+"\n"
+"        // Create a label\n"
+"        this._label = new Gtk.Label ({ label: \"Welcome to GNOME, too!\" });\n"
 msgstr ""
-"Une fenêtre élémentaire qui peut contenir d'autres éléments graphiques"
 
-#: C/window.js.page:25(p)
-msgid "A minimal GtkApplication"
-msgstr "Une GtkApplication minimale"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:109
+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 ""
 
-#: C/window.js.page:28(p)
+#. (itstool) path: note/p
+#: C/02_welcome_to_the_grid.js.page:110
 msgid ""
-"Use <link xref=\"GtkApplicationWindow.js\">ApplicationWindow</link> if you "
-"need GMenu support."
+"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 ""
-"Utilisez <link xref=\"GtkApplicationWindow.js\">ApplicationWindow</link> si "
-"vous avez besoin de la prise en charge de GMenu."
 
-#: C/window.js.page:34(p)
-msgid "In this example we used the following:"
-msgstr "Dans cet exemple, les éléments suivants sont utilisés :"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:111
+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 ""
 
-#: C/window.js.page:39(link) C/toolbar.js.page:30(link)
-msgid "Gtk.Window"
-msgstr "Gtk.Window"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:112
+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 ""
 
-#: C/window.c.page:7(title)
-msgid "Window (C)"
-msgstr "Fenêtre (C)"
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:113
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ();\n"
+msgstr ""
 
-#: C/window.c.page:23(p)
-# Bruno : bug : pas d'espace entre Application et Window
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:118
 msgid ""
-"A minimal GtkApplication. Use <link xref=\"GtkApplicationWindow.c"
-"\">Application Window</link> if you need GMenu support."
+"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 ""
-"Une GtkApplication minimale. Utilisez <link xref=\"GtkApplicationWindow.c"
-"\">ApplicationWindow</link> si vous avez besoin de la prise en charge de "
-"GMenu."
 
-#: C/weatherGeonames.js.page:10(name) C/weatherAutotools.js.page:10(name)
-#: C/weatherAppMain.js.page:10(name) C/weatherApp.js.page:11(name)
-#: C/helloWorld.js.page:14(name) C/guitar-tuner.js.page:11(name)
-#: C/grid.js.page:12(name) C/beginner.js.page:10(name)
-msgid "Susanna Huhtanen"
-msgstr "Susanna Huhtanen"
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:119
+#, 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 ""
 
-#: C/weatherGeonames.js.page:11(email) C/weatherAutotools.js.page:11(email)
-#: C/weatherAppMain.js.page:11(email) C/weatherApp.js.page:12(email)
-#: C/helloWorld.js.page:15(email) C/guitar-tuner.js.page:12(email)
-#: C/grid.js.page:13(email) C/beginner.js.page:11(email)
-msgid "ihmis suski gmail com"
-msgstr "ihmis suski gmail com"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:125
+msgid ""
+"This code looks awfully complicated, but it's not. Here's what those numbers "
+"mean:"
+msgstr ""
 
-#: C/weatherGeonames.js.page:18(title)
-msgid "Local library geoNames"
-msgstr "Bibliothèque locale geoNames"
+#. (itstool) path: item/p
+#: C/02_welcome_to_the_grid.js.page:127
+msgid ""
+"The <em>first</em> number is what left-to-right position to put things in, "
+"starting from 0. Any widget that uses a 0 here goes all the way to the left."
+msgstr ""
 
-#: C/weatherGeonames.js.page:20(p)
+#. (itstool) path: item/p
+#: C/02_welcome_to_the_grid.js.page:128
 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:"
+"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 ""
-"Dans cette partie du guide nous allons construire la bibliothèque locale "
-"geoNames en utilisant des appels asynchrones. Dans cet exemple, les "
-"informations météorologiques sont récupérés sur geonames.org et "
-"l'application utilise les <link href=\"http://fr.wikipedia.org/wiki/";
-"Liste_des_codes_OACI_des_a%C3%A9roports\">codes OACI</link> pour localiser "
-"les requêtes météo. Pour écrire et lancer tous les exemples de code "
-"vous avez besoin d'un éditeur pour saisir le code, de l'application Terminal et d'un "
-"ordinateur sur lequel GNOME 3 ou supérieur est installé. Dans ce guide, nous "
-"illustrerons les éléments suivants :"
 
-#: C/weatherGeonames.js.page:23(link) C/weatherGeonames.js.page:31(title)
-msgid "Local library for getting the weather"
-msgstr "Bibliothèque locale pour obtenir la météo"
+#. (itstool) path: item/p
+#: C/02_welcome_to_the_grid.js.page:129
+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 ""
 
-#: C/weatherGeonames.js.page:24(link)
-msgid "Creating function geoNames"
-msgstr "Création de la fonction geoNames"
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:132
+#, 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 ""
 
-#: C/weatherGeonames.js.page:25(link)
-msgid "Methods for geoNames"
-msgstr "Méthodes pour geoNames"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:146
+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 ""
 
-#: C/weatherGeonames.js.page:26(link) C/weatherGeonames.js.page:101(title)
-msgid "geonames.js"
-msgstr "geonames.js"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:147
+#, fuzzy
+#| msgid ""
+#| "To run this application, first save it as helloWorld.js. Then open "
+#| "Terminal, go to the folder where your application is stored and run"
+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 ""
+"Pour lancer cette application, enregistrez-la d'abord sous le nom helloWorld."
+"js, puis ouvrez Terminal, allez dans le dossier où l'application est "
+"enregistrée et lancez"
 
-#: C/weatherGeonames.js.page:32(p)
-msgid "For this we need a new file that will be our local library."
+#. (itstool) path: section/screen
+#: C/02_welcome_to_the_grid.js.page:148
+#, no-wrap
+msgid " <output style=\"prompt\">$ </output>gjs welcome_to_the_grid.js "
 msgstr ""
-"Pour cela, nous avons besoin d'un nouveau fichier qui sera notre "
-"bibliothèque locale."
 
-#: C/weatherGeonames.js.page:38(p)
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:152
 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."
+"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 ""
-"Dès les premières lignes, nous importons et initialisons les bibliothèques "
-"dont nous avons besoin dans cette bibliothèque locale. « Soup » prend en "
-"charge toutes les requêtes que nous devons faire via http."
 
-#: C/weatherGeonames.js.page:42(title)
-msgid "Creating function GeoNames"
-msgstr "Création de la fonction GeoNames"
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:156
+msgid "Tweaking the Grid"
+msgstr "Manipulons la Grid"
 
-#: C/weatherGeonames.js.page:52(p)
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:158
 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{}"
+"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 ""
-"Ici, nous créons la fonction GeoNames qui prend en charge l'obtention de "
-"la météo pour nous. Le JavaScript nous permet de créer des fonctions qui, au "
-"départ contiennent peu de code et de les étendre ensuite. Cela se fait à "
-"l'intérieur des accolades {} de GeoNames.prototype."
 
-#: C/weatherGeonames.js.page:56(title)
-msgid "Methods for GeoNames"
-msgstr "Méthodes pour GeoNames"
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:159
+#, no-wrap
+msgid ""
+"\n"
+"        // Create a label\n"
+"        this._label = new Gtk.Label ({\n"
+"            label: \"Welcome to GNOME, too!\",\n"
+"            margin_top: 20 });\n"
+msgstr ""
 
-#: C/weatherGeonames.js.page:96(p)
-# Bruno : then parse the information from the request ***to a form that we can use.***  ???
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:166
 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."
+"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 ""
-"La première méthode de GeoNames est getWeather et la seconde getIcon. Dans "
-"getWeather, une requête http est effectuée avec « soup », nous prenons en "
-"charge les erreurs puis analysons (parse) les informations à partir de la requête "
-"vers une forme utilisable. Dans getIcon, nous comparons tout "
-"simplement les résultats obtenus avec getWeather à l'aide de l'instruction "
-"switch afin d'obtenir l'icône correspondant à la météo actuelle. Notre "
-"bibliothèque locale est prête et nous pouvons maintenant l'utiliser."
 
-#: C/weatherGeonames.js.page:102(p)
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:169
 msgid ""
-"Here is the entire code for our local library. The main program file calls "
-"this asynchronously."
+"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 ""
-"Voici le code complet pour notre bibliothèque locale. Le fichier principal "
-"du programme l'appelle de manière asynchrone."
 
-#: C/weatherAutotools.js.page:18(title) C/weatherApp.js.page:30(link)
-msgid "Autotools and Icons"
-msgstr "Autotools et icônes"
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:170
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            row_spacing: 20 });\n"
+msgstr ""
 
-#: C/weatherAutotools.js.page:20(p)
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:176
 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:"
+"That makes it so that there are always 20 pixels of space in between each "
+"horizontal row."
 msgstr ""
-"Dans cette partie du guide, nous allons construire les « autotools » et "
-"personnaliser les icônes dont nous avons besoin pour que l'application météo "
-"fasse partie intégrante de notre bureau. Pour écrire et lancer tous les "
-"exemples de code, vous avez besoin d'un éditeur pour écrire le "
-"code, de l'application Terminal et d'un ordinateur sur lequel GNOME 3 ou supérieur est "
-"installé. Dans ce guide, nous illustrerons les éléments suivants :"
 
-#: C/weatherAutotools.js.page:23(link)
-msgid "Autotools"
-msgstr "Autotools"
+#. (itstool) path: note/p
+#: C/02_welcome_to_the_grid.js.page:177
+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 ""
 
-#: C/weatherAutotools.js.page:24(link) C/weatherAutotools.js.page:144(title)
-msgid "Custom icons for your application"
-msgstr "Icônes personnalisées pour votre application"
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:181
+msgid "Adding more widgets"
+msgstr ""
 
-#: C/weatherAutotools.js.page:31(title)
-msgid "Autotools and necessary files"
-msgstr "Autotools et fichiers nécessaires"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:183
+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 ""
 
-#: C/weatherAutotools.js.page:32(p)
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:184
+#, no-wrap
 msgid ""
-"Having more than one file in your folder makes using autotools a bit tricky. "
-"You need the .desktop file, autogen.sh, Makefile.am, configure.ac and as a "
-"new file: myapp.sh.in file. Hacking the autotools file is a complicated "
-"field. More information can be found in many different sources, <link href="
-"\"http://en.wikipedia.org/wiki/GNU_build_system\";>the wikipedia article</"
-"link> provides a good overwiev on the subject."
+"\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 ""
-"Le fait d'avoir plus d'un seul fichier dans votre dossier rend l'usage "
-"d'autotools un peu complexe. Vous avez besoin des fichiers .desktop, de "
-"autogen.sh, Makefile.am, configure.ac et d'un nouveau fichier : "
-"monapplication.sh.in par exemple. Détailler le fichier autotools est un peu compliqué. "
-"Vous trouverez plus d'informations dans de nombreuses autres sources, <link "
-"href=\"http://en.wikipedia.org/wiki/GNU_build_system\";>cet article sur "
-"wikipédia</link> fournit un bon aperçu sur le sujet."
 
-#: C/weatherAutotools.js.page:35(p) C/weatherAutotools.js.page:41(p)
-msgid "weatherapp.desktop"
-msgstr "weatherapp.desktop"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:195
+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 ""
 
-#: C/weatherAutotools.js.page:36(p) C/weatherAutotools.js.page:56(p)
-msgid "weatherapp.sh.in"
-msgstr "weatherapp.sh.in"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:196
+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 ""
 
-#: C/weatherAutotools.js.page:37(p) C/weatherAutotools.js.page:63(p)
-#: C/helloWorld.js.page:162(title)
-msgid "Makefile.am"
-msgstr "Makefile.am"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:199
+msgid "There are two things you should take note of, here."
+msgstr ""
 
-#: C/weatherAutotools.js.page:38(p) C/weatherAutotools.js.page:130(p)
-#: C/helloWorld.js.page:167(title)
-msgid "configure.ac"
-msgstr "configure.ac"
+#. (itstool) path: item/p
+#: C/02_welcome_to_the_grid.js.page:201
+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 ""
 
-#: C/weatherAutotools.js.page:39(p) C/helloWorld.js.page:154(title)
-msgid "autogen.sh"
-msgstr "autogen.sh"
+#. (itstool) path: item/p
+#: C/02_welcome_to_the_grid.js.page:202
+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 ""
 
-#: C/weatherAutotools.js.page:54(p)
-# Bruno : l'anglais est totalement incompréhensible !
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:205
 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."
+"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 ""
-"La chose à noter dans ce fichier est que la ligne « Exec » rendra "
-"fonctionnel ce fichier « desktop » seulement après avoir exécuté tous les "
-"autres « makefiles ». Weatherapp.sh est un petit script créé avec le "
-"weatherapp.sh.in."
 
-#: C/weatherAutotools.js.page:61(p)
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:208
+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:209
+#, no-wrap
 msgid ""
-"This file is a template to the file Makefile will do to be run from .desktop."
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            column_homogeneous: true,\n"
+"            row_spacing: 20 });\n"
 msgstr ""
-"Ce fichier est un modèle que le fichier Makefile va créer pour être lancé à "
-"partir de .desktop."
 
-#: C/weatherAutotools.js.page:124(p)
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:216
+msgid "That makes it look something like this:"
+msgstr "Cela ressemble à présent à quelque chose comme ceci :"
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:219
 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:"
+"And third, we can set the Grid's column_spacing property, the same way we "
+"set its row_spacing."
 msgstr ""
-"Ceci nécessite un peu plus d'explications. Comparé au Makefile.am de "
-"Helloworld, celui-ci a été fortement modifié. Parcourons tous les nouveaux "
-"blocs :"
 
-#: C/weatherAutotools.js.page:125(p)
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:220
+#, no-wrap
 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."
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            column_spacing: 20,\n"
+"            row_spacing: 20 });\n"
 msgstr ""
-"« bin_scripts » sont les fichiers nécessaires pour exécuter votre "
-"application. Dans ce cas, les deux premiers fichiers sont les programmes eux-"
-"mêmes et le troisième est le script qui lance l'application."
 
-#: C/weatherAutotools.js.page:126(p)
-msgid "EXTRA_DIST are the files that are to be distributed"
-msgstr "EXTRA_DIST sont les fichiers qui doivent être distribués."
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:226
+msgid "That makes it look like this:"
+msgstr "Cela ressemble à présent à ceci :"
 
-#: C/weatherAutotools.js.page:127(p)
-msgid "do_subst block is bits and pieces that need to be where they are"
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:231
+msgid "Using stock images"
+msgstr "Utilisation des images de la collection"
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:233
+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 ""
-"le bloc « do_subst » est quelque chose qui a besoin d'être là où il est."
 
-#: C/weatherAutotools.js.page:128(p)
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:234
+#, no-wrap
 msgid ""
-"after the comment #icons in the application there are all the icons that are "
-"used by the program. For them to be useful you need to install the icons in "
-"correct places and that is done byt the install-icons: bit"
+"\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 ""
-"Après le commentaire « #icons in the application » se trouvent toutes les "
-"icônes qui sont utilisées par le programme. Pour qu'elles soient utiles, "
-"vous devez installer les icônes aux emplacements corrects, ce qui est "
-"réalisé par la partie « install-icons »."
 
-#: C/weatherAutotools.js.page:137(p)
-msgid "autohen.sh"
-msgstr "autogen.sh"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:241
+msgid ""
+"After that, we attach it to the Grid to the left of the first Label. (We "
+"aren't using the second one for this example.)"
+msgstr ""
 
-#: C/weatherAutotools.js.page:145(p)
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:242
+#, no-wrap
 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"
+"\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 ""
-"Lorsque vous pensez icônes personnalisées, une bonne règle est : "
-"souhaitez-vous que cette icône puisse être utilisée autre part ou est-elle "
-"privée ? Dans le premier cas (par ex. des icônes dans le fichier desktop qui "
-"sont affichées par le shell) alors vous avez besoin de /usr/share/hicolor "
-"sinon (par ex. les icônes météo de votre application) /usr/share/"
-"$application/bla/bla"
 
-#: C/weatherAutotools.js.page:146(p)
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:248
+msgid "That gives us this, when we run it:"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:251
 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"
+"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 ""
-"Pour utiliser autotools, vous devez apporter quelques modifications à vos "
-"fichiers .desktop et Makefile. Dans le fichier desktop, modifiez le nom de "
-"l'icône Icon=weather-icon. Dans le fichier Makefile.am, ajoutez ces deux "
-"lignes à la fin de votre application #the application icon."
 
-#: C/weatherAutotools.js.page:147(p)
-msgid "appicondir=$(datadir)/icons/hicolor/scalable/apps"
-msgstr "appicondir=$(datadir)/icons/hicolor/scalable/apps"
+#. (itstool) path: note/p
+#: C/02_welcome_to_the_grid.js.page:252
+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 ""
 
-#: C/weatherAutotools.js.page:148(p)
-msgid "appicon_DATA=weather-icon.svg"
-msgstr "appicon_DATA=weather-icon.svg"
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:257 C/03_getting_the_signal.js.page:338
+#: C/hellognome.js.page:187
+msgid "What's next?"
+msgstr ""
 
-#: C/weatherAppMain.js.page:18(title) C/weatherApp.js.page:28(link)
-msgid "The main program file"
-msgstr "Le fichier du programme principal"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:258
+msgid ""
+"Before we go on to the next tutorial, let's try something a little different:"
+msgstr ""
 
-#: C/weatherAppMain.js.page:20(p)
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:259
+#, no-wrap
 msgid ""
-"In this part of the guide well construct the main program file of the "
-"weather application. To write and run all the code examples yourself, you "
-"need an editor to write code in, Terminal and GNOME 3 or higher installed "
-"into your computer. In this part we we'll go through the following parts:"
+"\n"
+"        // Create 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 ""
-"Dans cette partie du guide, nous allons construire le fichier du programme "
-"principal de l'application météo. Pour écrire et lancer tous les exemples de "
-"code, vous avez besoin d'un éditeur pour écrire le code, de l'application "
-"Terminal et d'un ordinateur sur lequel GNOME 3 ou supérieur est installé. "
-"Dans ce guide, nous illustrerons les éléments suivants :"
 
-#: C/weatherAppMain.js.page:22(link) C/weatherAppMain.js.page:32(title)
-#: C/helloWorld.js.page:45(title) C/guitar-tuner.js.page:25(link)
-#: C/guitar-tuner.js.page:47(title)
-msgid "Script for running the application"
-msgstr "Script de lancement de l'application"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:270
+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 ""
 
-#: C/weatherAppMain.js.page:23(link) C/weatherAppMain.js.page:40(title)
-#: C/treeview_simple_liststore.js.page:36(title)
-#: C/togglebutton.js.page:27(title) C/textview.js.page:37(title)
-#: C/switch.js.page:34(title) C/statusbar.js.page:27(title)
-#: C/spinbutton.js.page:30(title) C/scale.js.page:27(title)
-#: C/radiobutton.js.page:27(title) C/messagedialog.js.page:30(title)
-#: C/helloWorld.js.page:52(title) C/guitar-tuner.js.page:26(link)
-#: C/guitar-tuner.js.page:54(title) C/combobox.js.page:32(title)
-#: C/comboboxtext.js.page:29(title) C/checkbutton.js.page:27(title)
-msgid "Libraries to import"
-msgstr "Bibliothèques à importer"
+#. (itstool) path: section/p
+#: C/02_welcome_to_the_grid.js.page:271
+msgid ""
+"If you like, feel free to spend some time experimenting with Grids, Labels, "
+"and Images, including stock images."
+msgstr ""
 
-#: C/weatherAppMain.js.page:24(link) C/weatherAppMain.js.page:48(title)
-#: C/helloWorld.js.page:58(title) C/guitar-tuner.js.page:27(link)
-#: C/guitar-tuner.js.page:63(title)
-msgid "Creating the main window for the application"
-msgstr "Création de la fenêtre principale de l'application"
+#. (itstool) path: note/p
+#: C/02_welcome_to_the_grid.js.page:272
+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 ""
 
-#: C/weatherAppMain.js.page:25(link) C/weatherAppMain.js.page:63(title)
-msgid "Adding a grid and all the necessary widgets to it"
-msgstr "Ajout d'une grille et de tous les éléments graphiques nécessaires"
+#. (itstool) path: section/title
+#: C/02_welcome_to_the_grid.js.page:276 C/checkbutton.js.page:131
+#: 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 "Exemple complet de code"
 
-#: C/weatherAppMain.js.page:26(link) C/weatherAppMain.js.page:94(title)
-msgid "Requesting the weather information asynchronously"
-msgstr "Requête des informations météo de manière asynchrone"
+#. (itstool) path: section/code
+#: C/02_welcome_to_the_grid.js.page:277
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const WelcomeToTheGrid = new Lang.Class({\n"
+"    Name: 'Welcome to the Grid',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 10,\n"
+"            title: \"Welcome to the Grid\"});\n"
+"\n"
+"        // Create the Grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            // column_homogeneous: true,\n"
+"            // column_spacing: 20,\n"
+"            row_spacing: 20 });\n"
+"\n"
+"        // Create an image\n"
+"        this._image = new Gtk.Image ({ file: \"gnome-image.png\" });\n"
+"\n"
+"        // Create a second image using a stock icon\n"
+"        this._icon = new Gtk.Image ({ stock: 'gtk-about' });\n"
+"\n"
+"        // Create a label\n"
+"        this._label = new Gtk.Label ({\n"
+"            label: \"Welcome to GNOME, too!\",\n"
+"            /* margin_top: 20 */ });\n"
+"\n"
+"        /* Create a second label\n"
+"        this._labelTwo = new Gtk.Label ({\n"
+"            label: \"The cake is a pie.\" }); */\n"
+"\n"
+"        /* Create a button\n"
+"        this._button = new Gtk.Button ({\n"
+"            label: \"Welcome to GNOME, too!\"}); */\n"
+"\n"
+"        // Attach the images and button to the grid\n"
+"        this._grid.attach (this._image,  0, 0, 2, 1);\n"
+"        this._grid.attach (this._icon,   0, 1, 1, 1);\n"
+"        this._grid.attach (this._label,  1, 1, 1, 1);\n"
+"\n"
+"        // this._grid.attach (this._label, 0, 1, 1, 1);\n"
+"        // this._grid.attach (this._labelTwo, 1, 1, 1, 1);\n"
+"\n"
+"        // this._grid.attach (this._button, 1, 1, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new WelcomeToTheGrid ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
 
-#: C/weatherAppMain.js.page:27(link)
-msgid "Connecting signals to button and entry.\"&gt;"
-msgstr "Connexion des signaux au bouton et champ de saisie"
+#. (itstool) path: 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:351
+#, fuzzy
+#| msgid "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
+msgctxt "_"
+msgid ""
+"external ref='media/03_jssignal_01.png' "
+"md5='8d6ecab185f4af4534cc255d62b58b8e'"
+msgstr "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
 
-#: C/weatherAppMain.js.page:28(link)
-msgid "weatherapp.js"
-msgstr "weatherapp.js"
+#. (itstool) path: 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:157 C/03_getting_the_signal.js.page:357
+#, fuzzy
+#| msgid "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
+msgctxt "_"
+msgid ""
+"external ref='media/03_jssignal_02.png' "
+"md5='ba941390fbafc4a0f653c8f70bca92c0'"
+msgstr "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
 
-#: C/weatherAppMain.js.page:35(p)
+#. (itstool) path: 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:231 C/03_getting_the_signal.js.page:363
+#, fuzzy
+#| msgid "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
+msgctxt "_"
 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"
+"external ref='media/03_jssignal_03.png' "
+"md5='49ecf251b0bf57543c8d79a77b6f306d'"
+msgstr "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
+
+#. (itstool) path: 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:302 C/03_getting_the_signal.js.page:369
+#, fuzzy
+#| msgid "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
+msgctxt "_"
+msgid ""
+"external ref='media/03_jssignal_04.png' "
+"md5='dfc5221ca15ca9fba7d3c76a73804e2d'"
+msgstr "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
+
+#. (itstool) path: info/desc
+#: C/03_getting_the_signal.js.page:21
+#, fuzzy
+#| msgid "A button widget that changes its label when you click it."
+msgid "Create Buttons and other widgets that do things when you click on them."
 msgstr ""
-"Cette ligne indique comment exécuter le script. Elle doit être la première "
-"ligne de code et le script doit être exécutable. Pour donner les bonnes "
-"permissions, allez dans Terminal et lancez dans le dossier correct la "
-"commande : chmod +x nomduscript. Vous pouvez aussi utiliser le gestionnaire "
-"de fichiers. Déplacez-vous dans le dossier où se trouve votre "
-"code, faites un clic-droit sur le fichier, sélectionnez Propriétés, cliquez "
-"sur l'onglet Permissions et cochez la case pour permettre l'exécution du "
-"fichier comme un programme."
+"Un élément graphique Bouton qui change d'étiquette quand il est cliqué."
 
-#: C/weatherAppMain.js.page:44(p)
+#. (itstool) path: page/title
+#: C/03_getting_the_signal.js.page:24
+msgid "3. Getting the Signal"
+msgstr "3. Connexion des signaux"
+
+#. (itstool) path: synopsis/p
+#: C/03_getting_the_signal.js.page:26
 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."
+"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 ""
-"Afin que le programme fonctionne, vous devez importer une bibliothèque "
-"d'introspection GObject à utiliser. Pour faire une interface graphique, nous "
-"avons besoin de Gtk. Gtk est importée au début afin de pouvoir l'utiliser "
-"partout ensuite. Nous importons également notre propre bibliothèque locale "
-"JavaScript geonames afin de pouvoir l'utiliser ici."
 
-#: C/weatherAppMain.js.page:90(p)
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:32
+msgid "A basic application"
+msgstr "Une application basique"
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:33
 msgid ""
-"In this section we create the grid we are going to use for positioning the "
-"widgets. All the buttons, labels and entrys are initialized and placed on "
-"the grid. As seen from the placing of the different widgets, they don't need "
-"to be related only to one widget. At this point some of the labels don't "
-"have any content. The content for those widgets is applied later. If you run "
-"the application at this stage, you have the UI ready, but the widgets are "
-"not connected to anything. For this we need to first build the weather "
-"searching local library, and then get the information we need "
-"asynchronously. When we have our local library ready we can connect it to "
-"the necessary widgets."
+"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 ""
-"Dans cette section, nous créons la grille que nous allons utiliser pour "
-"positionner les éléments graphiques. Tous les boutons, étiquettes et champs "
-"de saisie sont initialisés et positionnés dans la grille. Comme vous pouvez le "
-"voir à partir du positionnement des différents éléments graphiques, ils ne "
-"sont pas nécessairement en relation avec un seul élément graphique. Pour "
-"l'instant, certaines étiquettes n'ont pas de contenu. Le contenu de ces "
-"éléments graphiques est appliqué plus tard. Si vous lancez l'application à "
-"cet instant, l'interface graphique est prête mais les éléments graphiques ne "
-"sont connectés à rien. Pour cela, nous avons besoin de construire d'abord la "
-"bibliothèque locale de recherche météorologique puis de récupérer les "
-"informations nécessaires de manière asynchrone. Lorsque notre bibliothèque "
-"locale est prête, nous pouvons la connecter aux éléments graphiques "
-"nécessaires."
 
-#: C/weatherAppMain.js.page:120(p)
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:34
 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."
+"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 ""
-"Cette fonction est dédiée à la recherche des informations météo et à la mise "
-"à jour des étiquettes et des icônes de manière adéquate. Au début de la "
-"fonction, nous récupérons la saisie de l'utilisateur pour la recherche. "
-"Ainsi, ici, pour la première fois, nous utilisons notre propre bibliothèque "
-"et l'attribuons à la variable GeoNames. Lors de l'attribution de "
-"WeatherService, nous lui fournissons la station. La première chose que nous "
-"faisons avec GeoNames est la requête météo. Tout ce qui se trouve derrière "
-"GeoNames.getWeather(function(error, weather)  ne se produit que si nous "
-"obtenons un message d'erreur ou des informations météo. Si aucun des deux ne "
-"se produit, le reste du programme fonctionne normalement, donc main_Quit  "
-"fonctionne."
 
-#: C/weatherAppMain.js.page:124(title)
-msgid "Connecting signals to button and entry."
-msgstr "Connexion des signaux au bouton et champ de saisie."
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:35
+msgid "Here is an extremely basic example:"
+msgstr ""
 
-#: C/weatherAppMain.js.page:137(p)
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:39
 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."
+"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 ""
-"Enfin, nous avons les connexions qui permettent à l'application de "
-"fonctionner comme il se doit. Nous connectons à la fois le champ de saisie "
-"et le bouton afin qu'ils fassent la même chose : obtenir la météo. De cette "
-"manière, peu importe que l'utilisateur appuie sur la touche Entrée ou clique "
-"sur le bouton de recherche."
 
-#: C/weatherAppMain.js.page:141(title)
-msgid "Weatherapp.js"
-msgstr "Weatherapp.js"
+#. (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 ""
 
-#: C/weatherAppMain.js.page:142(p)
-msgid "Weatherapp.js file looks like this:"
-msgstr "Le fichier weatherapp.js ressemble à ceci :"
+#. (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 ""
 
-#: C/weatherAppMain.js.page:228(p)
-msgid "Running until you have all the autotools files ready. :"
-msgstr "Exécutez-le jusqu'à obtenir tous les fichiers autotools prêts."
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:42
+#, no-wrap
+msgid ""
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"const GettingTheSignal = new Lang.Class({\n"
+"    Name: 'Getting the Signal',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+msgstr ""
 
-#: C/weatherAppMain.js.page:230(output) C/helloWorld.js.page:120(output)
-#: C/helloWorld.js.page:131(output) C/helloWorld.js.page:158(output)
-#: C/guitar-tuner.js.page:230(output)
-msgid "$"
-msgstr "$"
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:73
+msgid ""
+"Take a look at the part that uses our application's connect method and Lang."
+"bind, to connect its activate and startup signals to the functions that "
+"present the window and build the UI. We're going to do the same thing with "
+"our Button when we get to it, except that we're going to connect its "
+"\"clicked\" signal instead."
+msgstr ""
 
-#: C/weatherAppMain.js.page:230(input)
-msgid "GJS_PATH=`pwd` gjs weatherapp.js"
-msgstr "GJS_PATH=`pwd` gjs weatherapp.js"
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:77
+#, fuzzy
+#| msgid "Creating the buttons"
+msgid "Click the button"
+msgstr "Création des boutons"
 
-#: C/weatherAppMain.js.page:231(p)
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:79
 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."
+"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 ""
-"Utilisez cette commande dans un terminal pendant le développement de votre "
-"module. En appelant votre programme de cette manière, il sait où trouver "
-"votre bibliothèques JavaScript personnalisées, dans ce cas geonames.js."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/weatherApp.js.page:35(None)
-msgid "@@image: 'media/weatherAppJs.png'; md5=1fe859ac4854273d72ea8fc9203639b2"
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:80
+#, no-wrap
+msgid ""
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
 msgstr ""
-"@@image: 'media/weatherAppJs.png'; md5=1fe859ac4854273d72ea8fc9203639b2"
 
-#: C/weatherApp.js.page:6(title)
-msgid "Weather Application (JavaScript)"
-msgstr "Application météo (JavaScript)"
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:85
+msgid "First, we create the window itself:"
+msgstr ""
 
-#: C/weatherApp.js.page:16(desc)
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:86
+#, no-wrap
 msgid ""
-"How to plan an application that uses asynchronous calls. Asynchronous calls "
-"will be presented through a weather application."
+"\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 ""
-"Comment planifier une application qui utilise des appels asynchrones. Les "
-"appels asynchrones sont présentés au travers d'une application météo."
 
-#: C/weatherApp.js.page:21(title)
-msgid "4 Weather Application"
-msgstr "4 Application météo"
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:95
+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 ""
 
-#: C/weatherApp.js.page:23(p)
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:96
 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:"
+"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 ""
-"Dans cette partie du guide, nous allons construire une application météo "
-"utilisant des appels asynchrones. Dans cet exemple, les informations "
-"météorologiques sont récupérées sur geonames.org et l'application utilise "
-"les <link href=\"http://fr.wikipedia.org/wiki/Liste_des_codes_OACI_des_a";
-"%C3%A9roports\">codes OACI</link> pour localiser les requêtes météo. Pour "
-"écrire et lancer tous les exemples de code, vous avez besoin d'un "
-"éditeur pour écrire le code, de l'application Terminal et d'un ordinateur sur lequel GNOME "
-"3 ou supérieur est installé. Dans ce guide, nous illustrerons les éléments "
-"suivants :"
 
-#: C/weatherApp.js.page:26(link) C/weatherApp.js.page:38(title)
-msgid "Planning the graphical user interface"
-msgstr "Organisation de l'interface graphique utilisateur"
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:97
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the label\n"
+"        this._cookieLabel = new Gtk.Label ({\n"
+"            label: \"Number of cookies: \" + cookies });\n"
+msgstr ""
 
-#: C/weatherApp.js.page:27(link) C/weatherApp.js.page:42(title)
-msgid "Asynchronous calls"
-msgstr "Appels asynchrones"
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:103
+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 ""
 
-#: C/weatherApp.js.page:29(link)
-msgid "Local library GeoNames"
-msgstr "Bibliothèque locale GeoNames"
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:104
+#, 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', Lang.bind (this, this._getACookie));\n"
+msgstr ""
 
-#: C/weatherApp.js.page:34(p) C/guitar-tuner.js.page:35(p)
-msgid "After reading this tutorial, you should see this in your screen:"
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:111
+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 ""
-"Après avoir suivi ce tutoriel, vous devriez voir ceci sur votre écran :"
 
-#: C/weatherApp.js.page:39(p)
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:112
+#, no-wrap
 msgid ""
-"Structuring an application for GNOME 3 means you will be using <link href="
-"\"http://developer.gnome.org/platform-overview/stable/gtk\";>GTK+</link>. The "
-"most important thing is to remember that the main window will only accept "
-"one widget. You must plan your structure accordingly (this example is using "
-"Gtk.Grid). A useful method is to draw out the main window and place every "
-"widget needed inside that box. By looking at an image of your future "
-"application it is easier to tell what are the relations between widgets. For "
-"example Gtk.Grid places your widgets in relation to other widgets, so after "
-"the first widget is in place, placing widgets can be done in relation to any "
-"widget on the grid."
+"\n"
+"        // Create a 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 ""
-"Pour structurer une application pour GNOME 3, vous devez utiliser <link href="
-"\"http://developer.gnome.org/platform-overview/stable/gtk\";>GTK+</link>. "
-"Vous devez aussi vous souvenir que la fenêtre principale ne peut comporter "
-"qu'un seul élément graphique, donc organisez votre structure en fonction de "
-"cet impératif (dans cet exemple, nous utilisons Gtk.Grid). Une bonne méthode "
-"consiste à dessiner la boîte « fenêtre principale » et d'y placer chaque "
-"élément graphique nécessaire. En regardant l'image de votre future "
-"application, vous pourrez plus facilement déceler les relations existantes "
-"entre les éléments graphiques. Par exemple, Gtk.Grid place vos éléments "
-"graphiques en fonction des autres, donc la position du premier sur la grille "
-"conditionne le placement des autres."
 
-#: C/weatherApp.js.page:43(p)
-# Bruno : for example file system I/O ???
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:131
 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."
+"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 ""
-"Avec beaucoup de langages de programmation, toutes les opérations sont "
-"exécutées de manière synchrone : quand vous exécutez une action, le "
-"programme attend qu'elle soit terminée avant de continuer. Cependant, cette "
-"procédure est mal adaptée aux interfaces utilisateurs graphiques, car "
-"l'application devient inactive pendant ce temps. La méthode asynchrone "
-"(async) est donc beaucoup mieux adaptée dans notre cas, car elle ne bloque "
-"pas votre interface pour d'autres actions. Elle rend ainsi votre application "
-"plus flexible et mieux armée pour affronter des appels plus longs que "
-"prévus, ou qui parfois restent bloqués pour une raison ou une autre. Vous "
-"pouvez par exemple utiliser cette méthode pour des accès entrée/sortie de "
-"fichiers systèmes et des calculs lents en arrière-plan."
 
-#: C/weatherApp.js.page:46(p)
-# Bruno :  would have to ***be*** killed from terminal."
+#. (itstool) path: note/p
+#: C/03_getting_the_signal.js.page:132
 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."
+"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 ""
-"Dans cet exemple, il nous faut obtenir des données de geonames.org. Pendant "
-"ce temps, nous voulons que le reste du programme continue à tourner. Si nous "
-"utilisions pour cela une application synchrone et que nous n'arrivions pas à "
-"avoir une connexion internet fonctionnelle avec le site geonames.org, nous "
-"n'obtiendrions aucune donnée et donc nous n'atteindrions jamais la ligne où "
-"l'instruction main_quit() est exécutée. Il faudrait alors « tuer » "
-"l'application à partir du Terminal."
 
-#: C/weatherApp.js.page:49(title)
-msgid "The different parts of the program"
-msgstr "Les différentes parties du programme"
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:133
+#, 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 ""
 
-#: C/vala.page:6(title)
-msgid "Vala"
-msgstr "Vala"
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:145
+msgid ""
+"Finally, we run the application, using the same kind of code as in our last "
+"tutorial."
+msgstr ""
 
-#: C/vala.page:15(title)
-msgid "Tutorials, code samples and platform demos in Vala"
-msgstr "Tutoriels, exemples de code et plateforme de démonstrations en vala"
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:146
+#, no-wrap
+msgid ""
+"\n"
+"// Run the application\n"
+"let app = new GettingTheSignal ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
 
-#: C/tutorial.py.page:8(title)
-msgid "Beginner's Tutorial (Python)"
-msgstr "Tutoriels pour les débutants (Python)"
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:154
+msgid "Flip the switch"
+msgstr "Commuter l'interrupteur"
 
-#: C/tutorial.py.page:12(desc)
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:155
 msgid ""
-"A tutorial for beginners who want to learn how to program GUIs using GTK+ in "
-"Python."
+"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 ""
-"Un tutoriel pour les débutants souhaitant apprendre comment programmer des "
-"interfaces utilisateur graphiques en Python."
 
-#: C/tutorial.py.page:25(title)
-msgid "0 Beginner's Tutorial"
-msgstr "0 Tutoriels pour les débutants"
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:159
+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 ""
 
-#: C/tutorial.py.page:28(p) C/beginner.vala.page:32(p) C/beginner.c.page:29(p)
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:161
 msgid ""
-"By following these tutorials you will learn the basics of GUI programming "
-"using Gtk+."
+"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 ""
-"En suivant ces tutoriels, vous allez apprendre les bases de la programmation "
-"d'interfaces utilisateurs avec Gtk+."
 
-#: C/tutorial.py.page:30(p)
+#. (itstool) path: note/p
+#: C/03_getting_the_signal.js.page:162
 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."
+"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 ""
-"Si vous n'avez jamais programmé auparavant, ou si vous n'êtes pas à l'aise "
-"avec le concept de programmation orienté objets, il est préférable "
-"d'acquérir quelques bases avant toute chose. Vous pourriez par exemple "
-"commencer par lire les livres <link href=\"http://learnpythonthehardway.org/";
-"book/\">Learn Python the Hard Way</link> ou <link href=\"http://docs.python.";
-"org/tutorial/index.html\">The Python Tutorial</link>. Vous pourriez aussi "
-"être intéressé par <link href=\"http://python-gtk-3-tutorial.";
-"readthedocs.org/en/latest/index.html\">The Python GTK+ 3 Tutorial</link>. "
-"Dès que vous maîtrisez "
-"les bases, n'oubliez pas de revenir consulter ces tutoriels."
 
-#: C/tutorial.py.page:36(title)
-msgid "To run the code samples"
-msgstr "Lancement des exemples de code"
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:163
+msgid "Here's how we create the Switch:"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:164
+#, 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:169
+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:170
+#, no-wrap
+msgid ""
+"\n"
+"        // Connect the switch to the function that handles it\n"
+"        this._cookieSwitch.connect ('notify::active', Lang.bind (this, this._cookieDispenser));\n"
+msgstr ""
 
-#: C/tutorial.py.page:38(p) C/beginner.vala.page:41(p)
-#: C/beginner.js.page:42(p) C/beginner.c.page:38(p)
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:175
+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:176
+#, no-wrap
+msgid ""
+"\n"
+"        this._cookieSwitch = new Gtk.Switch ({ active: true });\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:180
+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:181
+#, 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:199
+msgid "And now we arrange everything in the larger Grid like so."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:200
+#, 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:207
+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:208
+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:209
+#, no-wrap
+msgid ""
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Is the cookie dispenser turned on?\n"
+"        if (this._cookieSwitch.get_active()) {\n"
+"\n"
+"            // Increase the number of cookies by 1 and update the label\n"
+"            cookies++;\n"
+"            this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"        }\n"
+"\n"
+"    }\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:227
+#, fuzzy
+#| msgid "Creating the radiobuttons"
+msgid "Tuning the radio"
+msgstr "Création des boutons de radio"
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:229
+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/p
+#: C/03_getting_the_signal.js.page:233
+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:234
+#, 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:245
+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:246
+#, 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:255
+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:256
+#, 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:264
+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:265
+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:266
+#, 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:271
+msgid "Now we arrange everything in our main Grid like usual ..."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:272
+#, 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:279
+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:280
+#, no-wrap
+msgid ""
+"\n"
+"    _getACookie: function() {\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:298
+msgid "Can you spell \"cookie\"?"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:300
+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:301
+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/p
+#: C/03_getting_the_signal.js.page:304
+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:305
+#, 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:310
+msgid "Next, we arrange everything in the Grid ..."
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:311
+#, 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:318
+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:319
+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:320
+#, no-wrap
+msgid ""
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Did you spell \"cookie\" correctly?\n"
+"        if ((this._spellCookie.get_text()).toLowerCase() == \"cookie\") {\n"
+"\n"
+"            // Increase the number of cookies by 1 and update the label\n"
+"            cookies++;\n"
+"            this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"        }\n"
+"\n"
+"    }\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/03_getting_the_signal.js.page:339
+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:340
+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:345
+msgid "Complete code samples"
+msgstr "Exemples complets de code"
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:350
+msgid "Code sample with Button"
+msgstr "Exemple de code utilisant un Button"
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:352
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"const GettingTheSignal = new Lang.Class({\n"
+"    Name: 'Getting the Signal',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            title: \"Click the button to get a cookie!\"});\n"
+"\n"
+"        // Create the label\n"
+"        this._cookieLabel = new Gtk.Label ({\n"
+"            label: \"Number of cookies: \" + cookies });\n"
+"\n"
+"        // Create the cookie button\n"
+"        this._cookieButton = new Gtk.Button ({ label: \"Get a cookie\" });\n"
+"\n"
+"        // Connect the cookie button to the function that handles clicking it\n"
+"        this._cookieButton.connect ('clicked', Lang.bind (this, this._getACookie));\n"
+"\n"
+"        // Create a grid to arrange everything inside\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            row_spacing: 20 });\n"
+"\n"
+"        // Put everything inside the grid\n"
+"        this._grid.attach (this._cookieButton, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._cookieLabel, 0, 1, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Increase the number of cookies by 1 and update the label\n"
+"        cookies++;\n"
+"        this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new GettingTheSignal ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:356
+msgid "Code sample with Switch"
+msgstr "Exemples de code avec un Switch"
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:358
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"const GettingTheSignal = new Lang.Class({\n"
+"    Name: 'Getting the Signal',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            title: \"Click the button to get a cookie!\"});\n"
+"\n"
+"        // Create the label\n"
+"        this._cookieLabel = new Gtk.Label ({\n"
+"            label: \"Number of cookies: \" + cookies });\n"
+"\n"
+"        // Create the cookie button\n"
+"        this._cookieButton = new Gtk.Button ({\n"
+"            label: \"Get a cookie\" });\n"
+"\n"
+"        // Connect the cookie button to the function that handles clicking it\n"
+"        this._cookieButton.connect ('clicked', Lang.bind (this, this._getACookie));\n"
+"\n"
+"        // Create the switch that controls whether or not you can win\n"
+"        this._cookieSwitch = new Gtk.Switch ();\n"
+"\n"
+"        // Create the label to go with the switch\n"
+"        this._switchLabel = new Gtk.Label ({\n"
+"            label: \"Cookie dispenser\" });\n"
+"\n"
+"        // Create a grid for the switch and its label\n"
+"        this._switchGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Put the switch and its label inside that grid\n"
+"        this._switchGrid.attach (this._switchLabel, 0, 0, 1, 1);\n"
+"        this._switchGrid.attach (this._cookieSwitch, 1, 0, 1, 1);\n"
+"\n"
+"        // Create a grid to arrange everything else inside\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            row_spacing: 20 });\n"
+"\n"
+"        // Put everything inside the grid\n"
+"        this._grid.attach (this._cookieButton, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._switchGrid, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._cookieLabel, 0, 2, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Is the cookie dispenser turned on?\n"
+"        if (this._cookieSwitch.get_active()) {\n"
+"\n"
+"            // Increase the number of cookies by 1 and update the label\n"
+"            cookies++;\n"
+"            this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"        }\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new GettingTheSignal ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/03_getting_the_signal.js.page:362
+msgid "Code sample with RadioButton"
+msgstr "Exemples de code avec un RadioButton"
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:364
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"const GettingTheSignal = new Lang.Class({\n"
+"    Name: 'Getting the Signal',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            border_width: 20,\n"
+"            title: \"Choose the one that says 'cookie'!\"});\n"
+"\n"
+"        // Create the radio buttons\n"
+"        this._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', Lang.bind (this, this._getACookie));\n"
+"\n"
+"        // Create the label\n"
+"        this._cookieLabel = new Gtk.Label ({\n"
+"            label: \"Number of cookies: \" + cookies });\n"
+"\n"
+"        // Create a grid to arrange everything inside\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            row_spacing: 20 });\n"
+"\n"
+"        // Put everything inside the grid\n"
+"        this._grid.attach (this._radioGrid, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._cookieButton, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._cookieLabel, 0, 2, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Did you select \"cookie\" instead of \"not cookie\"?\n"
+"        if (this._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:368
+msgid "Code sample with Entry"
+msgstr "Exemples de code avec une Entry"
+
+#. (itstool) path: section/code
+#: C/03_getting_the_signal.js.page:370
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"// We start out with 0 cookies\n"
+"var cookies = 0;\n"
+"\n"
+"const GettingTheSignal = new Lang.Class({\n"
+"    Name: 'Getting the Signal',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            border_width: 20,\n"
+"            title: \"Spell 'cookie' to get a cookie!\"});\n"
+"\n"
+"        // Create the text entry field\n"
+"        this._spellCookie = new Gtk.Entry ();\n"
+"\n"
+"        // Create the cookie button\n"
+"        this._cookieButton = new Gtk.Button ({\n"
+"            label: \"Get a cookie\" });\n"
+"\n"
+"        // Connect the cookie button to the function that handles clicking it\n"
+"        this._cookieButton.connect ('clicked', Lang.bind (this, this._getACookie));\n"
+"\n"
+"        // Create the label\n"
+"        this._cookieLabel = new Gtk.Label ({\n"
+"            label: \"Number of cookies: \" + cookies });\n"
+"\n"
+"        // Create a grid to arrange everything inside\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            row_spacing: 20 });\n"
+"\n"
+"        // Put everything inside the grid\n"
+"        this._grid.attach (this._spellCookie, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._cookieButton, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._cookieLabel, 0, 2, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _getACookie: function() {\n"
+"\n"
+"        // Did you spell \"cookie\" correctly?\n"
+"        if ((this._spellCookie.get_text()).toLowerCase() == \"cookie\") {\n"
+"\n"
+"            // Increase the number of cookies by 1 and update the label\n"
+"            cookies++;\n"
+"            this._cookieLabel.set_label (\"Number of cookies: \" + cookies);\n"
+"\n"
+"        }\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new GettingTheSignal ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/aboutdialog_GMenu.png'; "
+#| "md5=a36117a559fa98e25e2f6b3db593639f"
+msgctxt "_"
+msgid ""
+"external ref='media/aboutdialog_GMenu.png' "
+"md5='a36117a559fa98e25e2f6b3db593639f'"
+msgstr ""
+"@@image: 'media/aboutdialog_GMenu.png'; md5=a36117a559fa98e25e2f6b3db593639f"
+
+#. (itstool) path: info/title
+#: C/aboutdialog.c.page:8
+msgctxt "text"
+msgid "AboutDialog (C)"
+msgstr "AboutDialog (C)"
+
+#. (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 "Monica Kochofar"
+
+#. (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 "Afficher des informations à propos d'une application"
+
+#. (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 "AboutDialog"
+
+#. (itstool) path: page/p
+#: C/aboutdialog.c.page:26 C/aboutdialog.vala.page:31
+msgid "An AboutDialog example using Gtk.ApplicationWindow and Menu"
+msgstr "Un exemple AboutDialog utilisant Gtk.ApplicationWindow et Menu"
+
+#. (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 ""
+" <em style=\"bold\">GTK 3.4 ou supérieur est requis pour que cela "
+"fonctionne</em>"
+
+#. (itstool) path: page/code
+#: C/aboutdialog.c.page:29
+#, no-wrap
+msgid ""
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function in which reacts to the \"response\" signal from the user in\n"
+" * the message dialog window.\n"
+" * This function is used to destroy the dialog window.\n"
+" */\n"
+"static void\n"
+"on_close (GtkDialog *dialog,\n"
+"          gint       response_id,\n"
+"          gpointer   user_data)\n"
+"{\n"
+"  /*This will cause the dialog to be destroyed*/\n"
+"  gtk_widget_destroy (GTK_WIDGET (dialog));\n"
+"\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the response signal \"activate\" related to the SimpleAction\n"
+" * \"about_action\".\n"
+" * This function is used to cause the about dialog window to popup.\n"
+" */\n"
+"static void\n"
+"about_cb (GSimpleAction *simple,\n"
+"          GVariant      *parameter,\n"
+"          gpointer       user_data)\n"
+"{\n"
+"   GtkWidget *about_dialog;\n"
+"\n"
+"   about_dialog = gtk_about_dialog_new ();\n"
+"\n"
+"   /* Lists of authors/ documentators to be used later, they must be initialized\n"
+"    * in a null terminated array of strings.\n"
+"    */\n"
+"   const gchar *authors[] = {\"GNOME Documentation Team\", NULL};\n"
+"   const gchar *documenters[] = {\"GNOME Documentation Team\", NULL};\n"
+"\n"
+"   /* We fill in the information for the about dialog */\n"
+"   gtk_about_dialog_set_program_name (GTK_ABOUT_DIALOG (about_dialog), \"AboutDialog Example\");\n"
+"   gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG (about_dialog), \"Copyright \\xc2\\xa9 2012 GNOME 
Documentation Team\");\n"
+"   gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG (about_dialog), authors);\n"
+"   gtk_about_dialog_set_documenters (GTK_ABOUT_DIALOG (about_dialog), documenters);\n"
+"   gtk_about_dialog_set_website_label (GTK_ABOUT_DIALOG (about_dialog), \"GNOME Developer Website\");\n"
+"   gtk_about_dialog_set_website (GTK_ABOUT_DIALOG (about_dialog), \"http://developer.gnome.org\";);\n"
+"\n"
+"  /* We do not wish to show the title, which in this case would be \n"
+"   * \"AboutDialog Example\". We have to reset the title of the messagedialog \n"
+"   * window after setting the program name.\n"
+"   */\n"
+"  gtk_window_set_title (GTK_WINDOW (about_dialog), \"\");\n"
+"\n"
+"  /* To close the aboutdialog when \"close\" is clicked we connect the response \n"
+"   * signal to on_close\n"
+"   */\n"
+"  g_signal_connect (GTK_DIALOG (about_dialog), \"response\", \n"
+"                    G_CALLBACK (on_close), NULL);\n"
+"\n"
+"  /* Show the about dialog */\n"
+"  gtk_widget_show (about_dialog); \n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  GtkWidget *window;\n"
+"\n"
+"  GSimpleAction *about_action;\n"
+"\n"
+"  /* Create a window with a title and a default size */\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"AboutDialog Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);\n"
+"\n"
+"  /* Create a new simple action, giving it a NULL parameter type. It will \n"
+"   * always be NULL for actions invoked from a menu. (e.g clicking on an \"ok\" \n"
+"   * or \"cancel\" button)\n"
+"   */\n"
+"  about_action = g_simple_action_new (\"about\", NULL); \n"
+"\n"
+"  /* Connect the \"activate\" signal to the appropriate callback function. \n"
+"   * It will indicate that the action was just activated.\n"
+"   */\n"
+"  g_signal_connect (about_action, \"activate\", G_CALLBACK (about_cb), \n"
+"                    GTK_WINDOW (window));\n"
+"\n"
+"  /* Adds the about_action to the overall action map. An Action map is an \n"
+"   * interface that contains a number of named GAction instances \n"
+"   * (such as about_action) \n"
+"   */\n"
+"  g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (about_action));\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Callback function for the response signal \"activate\" from the \"quit\" action \n"
+" * found in the function directly below.\n"
+" */ \n"
+"static void\n"
+"quit_cb (GSimpleAction *simple,\n"
+"         GVariant      *parameter,\n"
+"         gpointer       user_data)\n"
+"{\n"
+"  GApplication *application = user_data;\n"
+"\n"
+"  g_application_quit (application);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Startup function for the menu we are creating in this sample */\n"
+"static void\n"
+"startup (GApplication *app,\n"
+"         gpointer      user_data)\n"
+"{\n"
+"  GMenu *menu;\n"
+"  GSimpleAction *quit_action;\n"
+"\n"
+"  /* Initialize the GMenu, and add a menu item with label \"About\" and action \n"
+"   * \"win.about\". Also add another menu item with label \"Quit\" and action \n"
+"   * \"app.quit\" \n"
+"   */\n"
+"  menu = g_menu_new ();\n"
+"  g_menu_append (menu, \"About\", \"win.about\");\n"
+"  g_menu_append (menu, \"Quit\", \"app.quit\");\n"
+"\n"
+"  /* Create a new simple action for the application. (In this case it is the \n"
+"   * \"quit\" action.\n"
+"   */\n"
+"  quit_action = g_simple_action_new (\"quit\", NULL);\n"
+"\n"
+"  /* Ensure that the menu we have just created is set for the overall application */\n"
+"  gtk_application_set_app_menu (GTK_APPLICATION (app), G_MENU_MODEL (menu));\n"
+"\n"
+"  g_signal_connect (quit_action, \n"
+"                    \"activate\", \n"
+"                    G_CALLBACK (quit_cb), \n"
+"                    app);\n"
+"\n"
+"  g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (quit_action));\n"
+"\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* Startup function for the application */\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  g_signal_connect (app, \"startup\", G_CALLBACK (startup), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
+msgstr ""
+
+#. (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 "Dans cet exemple, les éléments suivants sont utilisés :"
+
+#. (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 ""
+"<link href=\"http://developer.gnome.org/gtk3/3.4/GtkApplication.html";
+"\">GtkApplication</link>"
+
+#. (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 ""
+"<link href=\"http://developer.gnome.org/gtk3/3.4/GtkWindow.html\";>GtkWindow</"
+"link>"
+
+#. (itstool) path: item/p
+#: C/aboutdialog.c.page:37
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkAboutDialog.html";
+"\">GtkAboutDialog</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkAboutDialog.html";
+"\">GtkAboutDialog</link>"
+
+#. (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 ""
+"<link href=\"http://developer.gnome.org/gio/stable/GMenu.html\";>GMenu</link>"
+
+#. (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 ""
+"<link href=\"http://developer.gnome.org/gio/stable/GActionMap.html";
+"\">GActionMap</link>"
+
+#. (itstool) path: info/title
+#: C/aboutdialog.js.page:7
+msgctxt "text"
+msgid "AboutDialog (JavaScript)"
+msgstr "AboutDialog (JavaScript)"
+
+#. (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 ""
+"Une boîte de dialogue modale qui affiche des informations sur une "
+"application ainsi que sur ses auteurs. Celle-ci est activée en cliquant sur "
+"« À propos » dans le menu de l'application, ce qui est d'habitude "
+"l'emplacement approprié."
+
+#. (itstool) path: page/code
+#: C/aboutdialog.js.page:24
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const AboutDialogExample = new Lang.Class({\n"
+"    Name: 'AboutDialog Example',\n"
+"\n"
+"    // Create the application itself\n"
+"        _init: function() {\n"
+"            this.application = new Gtk.Application({\n"
+"                application_id: 'org.example.jsaboutdialog',\n"
+"                flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"            });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal creates the menu and builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._initMenus();\n"
+"        this._buildUI();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function(){\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"AboutDialog Example\",\n"
+"                                                   default_height: 250,\n"
+"                                                   default_width: 350 });\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"    // Create the application menu\n"
+"    _initMenus: function() {\n"
+"        let menu = new Gio.Menu();\n"
+"        menu.append(\"About\", 'app.about');\n"
+"        menu.append(\"Quit\",'app.quit');\n"
+"        this.application.set_app_menu(menu);\n"
+"\n"
+"        // Create the \"About\" menu option and have it call the _showAbout() function\n"
+"        let aboutAction = new Gio.SimpleAction({ name: 'about' });\n"
+"        aboutAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showAbout();\n"
+"            }));\n"
+"        this.application.add_action(aboutAction);\n"
+"\n"
+"        // Create the \"Quit\" menu option and have it close the window\n"
+"        let quitAction = new Gio.SimpleAction ({ name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"        this.application.add_action(quitAction);\n"
+"    },\n"
+"\n"
+"    _showAbout: function() {\n"
+"\n"
+"        // String arrays of the names of the people involved in the project\n"
+"        var authors = [\"GNOME Documentation Team\"];\n"
+"        var documenters = [\"GNOME Documentation Team\"];\n"
+"\n"
+"        // Create the About dialog\n"
+"        let aboutDialog = new Gtk.AboutDialog({ title: \"AboutDialog Example\",\n"
+"                                                program_name: \"GtkApplication Example\",\n"
+"                                                copyright: \"Copyright \\xa9 2012 GNOME Documentation 
Team\",\n"
+"                                                authors: authors,\n"
+"                                                documenters: documenters,\n"
+"                                                website: \"http://developer.gnome.org\",\n";
+"                                                website_label: \"GNOME Developer Website\" });\n"
+"\n"
+"        // Attach the About dialog to the window\n"
+"        aboutDialog.modal = true;\n"
+"        aboutDialog.transient_for = this._window;\n"
+"\n"
+"        // Show the About dialog\n"
+"        aboutDialog.show();\n"
+"\n"
+"        // Connect the Close button to the destroy signal for the dialog\n"
+"        aboutDialog.connect('response', function() {\n"
+"            aboutDialog.destroy();\n"
+"        });\n"
+"    }\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new AboutDialogExample();\n"
+"app.application.run(ARGV);\n"
+msgstr ""
+
+#. (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 ""
+"<link href=\"http://developer.gnome.org/gio/unstable/GMenu.html\";>GMenu</"
+"link>"
+
+#. (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 ""
+"<link href=\"http://developer.gnome.org/gio/stable/GSimpleAction.html";
+"\">GSimpleAction</link>"
+
+#. (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 ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.AboutDialog.";
+"html\">Gtk.AboutDialog</link>"
+
+#. (itstool) path: item/p
+#: C/aboutdialog.js.page:32 C/button.js.page:31 C/checkbutton.js.page:138
+#: 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 ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Application.";
+"html\">Gtk.Application</link>"
+
+#. (itstool) path: item/p
+#: C/aboutdialog.js.page:33 C/button.js.page:32 C/checkbutton.js.page:139
+#: 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 ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkApplicationWindow.html";
+"\">Gtk.ApplicationWindow</link>"
+
+#. (itstool) path: info/title
+#: C/aboutdialog.py.page:8
+msgctxt "text"
+msgid "AboutDialog (Python)"
+msgstr "AboutDialog (Python)"
+
+#. (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 "Marta Maria Casetti"
+
+#. (itstool) path: info/desc
+#: C/aboutdialog.py.page:19
+msgid "A window that displays information about an application"
+msgstr ""
+"Une boîte de dialogue qui affiche des informations à propos d'une application"
+
+#. (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 ""
+"Un exemple AboutDialog utilisant Gtk.ApplicationWindow et Menu (le « about » "
+"s'affiche si « À propos » a été sélectionné dans le menu)."
+
+#. (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 "Code utilisé pour générer cet exemple"
+
+#. (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 "Méthodes utiles pour un composant graphique AboutDialog"
+
+#. (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 "Références API"
+
+#. (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 "AboutDialog (Vala)"
+
+#. (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 "Prochainement..."
+
+#. (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 "Projet de Documentation GNOME"
+
+#. (itstool) path: page/title
+#: C/audio-player.vala.page:19
+msgid "Audio player"
+msgstr "Lecteur audio"
+
+#. (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 ""
+"Un guide pour débuter la programmation d'applications GNOME en JavaScript, "
+"incluant des exemples de code et des exercices pratiques."
+
+#. (itstool) path: page/title
+#: C/beginner.js.page:24 C/beginner.vala.page:25
+msgid "Tutorial for beginners and code samples"
+msgstr "Tutoriel pour débutants et exemples de code"
+
+#. (itstool) path: synopsis/p
+#: C/beginner.js.page:26
+#, fuzzy
+#| msgid ""
+#| "JavaScript is one of the most popular programming languages on the web. "
+#| "It's not just for the web, though. If you have even a basic understanding "
+#| "of JavaScript, you can write full-fledged applications for GNOME. <link "
+#| "href=\"https://live.gnome.org/GnomeDocuments\";>GNOME Documents</link> is "
+#| "written in JavaScript, and so is <link href=\"https://live.gnome.org/";
+#| "GnomeShell/Tour\">GNOME Shell</link>, the most basic part of GNOME."
+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 ""
+"JavaScript est l'un des langages de programmation les plus courants sur le "
+"Web. Il n'est cependant pas seulement réservé au Web. Même si vous n'avez "
+"que des notions de base en JavaScript, vous pouvez quand même programmer des "
+"applications complètes pour GNOME. <link href=\"https://wiki.gnome.org/";
+"GnomeDocuments\">GNOME Documents</link> est programmé en JavaScript, de même "
+"que <link href=\"https://wiki.gnome.org/GnomeShell/Tour\";>GNOME Shell</"
+"link>, un morceau fondamental de GNOME."
+
+#. (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 ""
+"GNOME Shell est le bureau qui s'affiche quand vous cliquez sur « Activités » "
+"dans le coin supérieur gauche de votre écran. Il contrôle aussi l'horloge et "
+"toute la barre supérieure. En plus de vous guider dans la programmation "
+"d'applications GNOME, ces tutoriels vont aussi vous montrer comment utiliser "
+"JavaScript pour programmer des extensions pour GNOME Shell, afin de lui "
+"apporter de nouvelles fonctionnalités ou modifier son comportement."
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:31
+msgid "Getting Started"
+msgstr "Premiers pas"
+
+#. (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 ""
+"Ces tutoriels sont destinés à des personnes ayant déjà des connaissances en "
+"JavaScript et qui ont déjà installé GNOME comme interface de bureau sur leur "
+"ordinateur, mais qui n'ont encore jamais développé d'application GNOME. Si "
+"vous n'avez pas de connaissance en JavaScript, ou si vous avez besoin d'aide "
+"pour installer GNOME, consultez d'abord ces ressources :"
+
+#. (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 ""
+"<link href=\"http://eloquentjavascript.net/contents.html\";>Eloquent "
+"JavaScript</link> est un livre gratuit, sous licence Creative Commons et qui "
+"explique les bases de la programmation en JavaScript. Comme vous n'allez pas "
+"programmer en JavaScript pour le Web, il vous suffit de lire jusqu'au "
+"chapitre 10 environ."
+
+#. (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 ""
+"<link href=\"http://www.gnome.org/getting-gnome/\";>Procurez-vous GNOME</"
+"link> pour une distribution, comme Fedora, openSUSE ou Ubuntu. Chaque "
+"distribution possède son propre moyen d'installer GNOME."
+
+#. (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 ""
+"<link xref=\"set-up-gedit.js\">Configurer Gedit</link> pour écrire des "
+"applications. Gedit est l'éditeur de texte de GNOME et parfois simplement "
+"appelé « éditeur de texte »."
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:42 C/beginner.vala.page:42 C/c.page:113
+msgid "Tutorials"
+msgstr "Tutoriels"
+
+#. (itstool) path: section/title
+#: C/beginner.js.page:46 C/beginner.vala.page:46 C/py.page:32
+msgid "Code samples"
+msgstr "Exemples de code"
+
+#. (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 ""
+"Ces exemples montrent la manière d'utiliser des éléments graphiques dans vos "
+"applications GNOME. Chacun d'eux fait la démonstration d'une application "
+"complète mettant en valeur un composant graphique en particulier. À la fin "
+"de chaque exemple, vous trouverez des liens vers de plus amples informations."
+
+#. (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 "Pour lancer les exemples de code :"
+msgstr "Pour exécuter les exemples de code :"
 
-#: C/tutorial.py.page:40(p)
-msgid "Copy and paste the code into <var>filename</var>.py"
-msgstr "Copiez et collez le code dans <var>nomdufichier</var>.py"
+#. (itstool) path: item/p
+#: C/beginner.js.page:50
+msgid "Copy and paste the code into <var>filename</var>.js"
+msgstr "Copiez puis collez le code dans <var>nomdufichier</var>.js"
 
-#: C/tutorial.py.page:41(p) C/beginner.vala.page:46(p) C/beginner.c.page:43(p)
-#: C/beginner.c.page:56(p)
-msgid "In the terminal type:"
+#. (itstool) path: item/p
+#: C/beginner.js.page:51
+msgid "In the terminal, type:"
 msgstr "Saisissez dans le terminal :"
 
-#: C/tutorial.py.page:42(screen)
+#. (itstool) path: item/screen
+#: C/beginner.js.page:52
 #, no-wrap
-msgid "python <var>filename</var>.py"
-msgstr "python <var>nomdufichier</var>.py"
+msgid "gjs <var>filename</var>.js"
+msgstr "gjs <var>nomdufichier</var>.js"
 
-#: C/tutorial.py.page:48(title)
-msgid "A path through the widgets"
-msgstr "Parcours des éléments graphiques"
+#. (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 "Fenêtres"
 
-#: C/tutorial.py.page:50(title)
-msgid "Tutorial"
-msgstr "Tutoriel"
+#. (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 "Éléments graphiques d'affichage"
 
-#: C/tutorial.py.page:52(title)
-msgid "Basic windows"
-msgstr "Fenêtres élémentaires"
+#. (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 "Boutons et inverseurs"
 
-#: C/tutorial.py.page:57(title)
-msgid "Images and labels"
-msgstr "Images et étiquettes"
+#. (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 "Entrée de données numériques et de texte"
 
-#: C/tutorial.py.page:62(title) C/grid.py.page:27(title)
-#: C/grid.js.page:24(title) C/grid.c.page:20(title)
-msgid "Grid"
-msgstr "Grille"
+#. (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 "Éditeur de texte multiligne"
+
+#. (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 "Menu, boîte combinée et éléments graphiques de barre d'outils"
+
+#. (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 "Élément graphique arborescent"
+
+#. (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 "Sélecteurs"
+
+#. (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 "Sélecteurs de fichiers"
+
+#. (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 "Sélecteurs de polices"
+
+#. (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 "Sélecteurs de couleurs"
 
-#: C/tutorial.py.page:66(title) C/beginner.vala.page:77(title)
-#: C/beginner.py.page:54(title) C/beginner.js.page:73(title)
-#: C/beginner.c.page:88(title)
+#. (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 "Conteneurs d'agencement"
+
+#. (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 "Décorations"
 
-#: C/tutorial.py.page:70(title)
-msgid "Basic buttons"
-msgstr "Boutons élémentaires"
+#. (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 "Barre de défilement"
 
-#: C/tutorial.py.page:79(title)
-msgid "Other display widgets"
-msgstr "Autre éléments graphiques d'affichage"
+#. (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 "Divers"
 
-#: C/tutorial.py.page:85(title)
-msgid "Entry widgets (with a detour on basic scrolling)"
+#. (itstool) path: section/title
+#: C/beginner.js.page:88 C/beginner.vala.page:92 C/menubar.vala.page:198
+msgid "Exercises"
+msgstr "Exercices"
+
+#. (itstool) path: info/title
+#: C/beginner.py.page:9
+msgctxt "text"
+msgid "GTK+ widgets sample code (Python)"
+msgstr "Exemple de code pour composants graphiques GTK (Python)"
+
+#. (itstool) path: info/desc
+#: C/beginner.py.page:13
+msgid ""
+"A guide to GUI programming using GTK+, including code samples and practice "
+"exercises."
 msgstr ""
-"Éléments graphiques de saisie (avec un détour sur les bases du défilement)"
+"Un guide pour la programmation d'interfaces graphiques avec GTK+, incluant "
+"des exemples de code et des exercices pratiques."
 
-#: C/tutorial.py.page:93(title)
-msgid "Dialogs"
-msgstr "Boîtes de dialogue"
+#. (itstool) path: page/title
+#: C/beginner.py.page:25
+msgid "GTK+ widgets sample code"
+msgstr ""
 
-#: C/tutorial.py.page:99(title)
-msgid "TreeViews and ComboBoxes (using the M/V/C design)"
-msgstr "Arborescences et boites combinées (utilisant la conception M/V/C)"
+#. (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 ""
+"Si vous êtes débutant et que vous souhaitez un tutoriel pas à pas pour vous "
+"guider dans la découverte des possibilités de GTK+ 3, vous devriez consulter "
+"cette page <link xref=\"tutorial.py\"/>. Si vous recherchez un composant "
+"graphique en particulier, vous le trouverez dans les sections ci-dessous."
 
-#: C/tutorial.py.page:108(title)
-msgid "Menus and toolbars (also: using Glade)"
-msgstr "Menus et barres d'outils (et également utilisation de Glade)"
+#. (itstool) path: section/title
+#: C/beginner.py.page:64
+msgid "Theory pages"
+msgstr ""
 
-#: C/tutorial.py.page:116(title)
-msgid "Selectors (a recap)"
-msgstr "Sélecteurs (récapitulation)"
+#. (itstool) path: info/title
+#: C/beginner.vala.page:9
+msgctxt "text"
+msgid "Tutorial for beginners (Vala)"
+msgstr "Tutoriel pour débutants (Vala)"
 
-#: C/tutorial.py.page:122(title) C/tooltip.py.page:21(title)
-msgid "Tooltip"
-msgstr "Infobulle"
+#. (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 ""
+"Un guide du débutant en programmation d'interfaces graphiques avec GTK+, "
+"incluant des exemples de code et des exercices pratiques."
 
-#: C/tutorial.py.page:126(title)
-msgid "More containers"
-msgstr "Davantage de conteneurs"
+#. (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 ""
+"Bien que ces tutoriels soient conçus pour les débutants, ils ne couvrent pas "
+"toutes les bases de la programmation. Avant d'essayer de suivre ces "
+"tutoriels, vous devez être à l'aise avec les concepts suivants :"
 
-#: C/tutorial.py.page:131(title)
-msgid "More scrolling"
-msgstr "Davantage sur le défilement"
+#. (itstool) path: item/p
+#: C/beginner.vala.page:29
+msgid "Object oriented programming"
+msgstr "La programmation orientée objet"
 
-#: C/tutorial.py.page:132(p)
-msgid "\"scrollbar.py\""
-msgstr "\"scrollbar.py\""
+#. (itstool) path: item/p
+#: C/beginner.vala.page:30
+msgid "The Vala programming language:"
+msgstr "Le langage de programmation Vala :"
 
-#: C/tutorial.py.page:135(title)
-msgid "Custom widget"
-msgstr "Élément graphique personnalisé"
+#. (itstool) path: item/p
+#: C/beginner.vala.page:32
+msgid ""
+"<link href=\"https://live.gnome.org/Vala/Tutorial\";>The Vala Tutorial</link>"
+msgstr ""
+"<link href=\"https://wiki.gnome.org/Vala/Tutorial\";>Tutoriel Vala</link>"
+
+#. (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 ""
 
-#: C/tutorial.py.page:136(p)
-msgid "\"widget.py\""
-msgstr "\"widget.py\""
+#. (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 ""
+"En suivant ces tutoriels, vous apprendrez les bases de la programmation "
+"d'interfaces graphiques en GTK+."
 
-#: C/tutorial.py.page:142(title)
-msgid "Some theory to help you"
-msgstr "Un peu de théorie pour vous aider"
+#. (itstool) path: item/p
+#: C/beginner.vala.page:51
+msgid "Copy and paste the code into <var>filename</var>.vala"
+msgstr "Copiez puis collez le code dans <var>nomdufichier</var>.vala"
 
-#: C/tutorial.py.page:147(title) C/menubar.vala.page:197(title)
-#: C/beginner.vala.page:86(title) C/beginner.js.page:82(title)
-#: C/beginner.c.page:97(title)
-msgid "Exercises"
-msgstr "Exercices"
+#. (itstool) path: item/p
+#: C/beginner.vala.page:52 C/c.page:98
+msgid "In the terminal type:"
+msgstr "Saisissez dans le terminal :"
 
-#: C/translate.page:12(years) C/toolbar_builder.py.page:28(years)
-#: C/textview.py.page:16(years) C/strings.py.page:16(years)
-#: C/signals-callbacks.py.page:16(years) C/properties.py.page:16(years)
-#: C/model-view-controller.py.page:16(years) C/index.page:19(years)
-#: C/entry.py.page:20(years) C/documentation.page:12(years)
-#: C/bug-filing.page:11(years)
-msgid "2011"
-msgstr "2011"
+#. (itstool) path: item/screen
+#: C/beginner.vala.page:53
+#, no-wrap
+msgid "valac --pkg gtk+-3.0 <var>filename</var>.vala"
+msgstr "valac --pkg gtk+-3.0 <var>nomdufichier</var>.vala"
+
+#. (itstool) path: item/screen
+#: C/beginner.vala.page:54 C/c.page:100
+#, no-wrap
+msgid "./<var>filename</var>"
+msgstr "./<var>nomdufichier</var>"
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/button.png'; md5=8d69efbb3a0d3e043af6139b6492171c"
+msgctxt "_"
+msgid "external ref='media/button.png' md5='8d69efbb3a0d3e043af6139b6492171c'"
+msgstr "@@image: 'media/button.png'; md5=8d69efbb3a0d3e043af6139b6492171c"
+
+#. (itstool) path: info/title
+#: C/button.c.page:8
+msgctxt "text"
+msgid "Button (C)"
+msgstr "Button (C)"
 
-#: C/translate.page:15(name)
-msgid "Michael Hill"
-msgstr "Michael Hill"
+#. (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 "Un bouton qui émet un signal quand il est cliqué"
 
-#: C/translate.page:16(email)
-msgid "mdhillca gmail com"
-msgstr "mdhillca gmail com"
+#. (itstool) path: page/title
+#: C/button.c.page:23 C/button.js.page:21 C/button.py.page:23
+msgid "Button"
+msgstr "Button"
 
-#: C/translate.page:19(p) C/documentation.page:15(p) C/bug-filing.page:14(p)
-msgid "Creative Commons Share Alike 3.0"
+#. (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 ""
-"Licence Creative Commons Paternité-Partage des Conditions Initiales à "
-"l'Identique 3.0 Unported"
+"Un bouton connecté à une fonction de rappel qui inverse son étiquette quand "
+"il est cliqué."
 
-#: C/translate.page:23(title)
-msgid "Help translate"
-msgstr "Contribution à la traduction"
+#. (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 ""
 
-#: C/translate.page:24(p)
+#. (itstool) path: item/p
+#: C/button.c.page:36 C/buttonbox.py.page:51 C/grid.c.page:35
 msgid ""
-"The <app>Tutorial Demos</app> are being translated by a world-wide volunteer "
-"community. You are welcome to participate."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkButton.html";
+"\">GtkButton</link>"
 msgstr ""
-"Les <app>exemples tutoriels</app> sont actuellement traduits par une "
-"communauté de volontaires dans le monde entier. Votre contribution est la "
-"bienvenue."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkButton.html";
+"\">GtkButton</link>"
 
-#: C/translate.page:27(p)
+#. (itstool) path: item/p
+#: C/button.c.page:37
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"There are <link href=\"http://l10n.gnome.org/module/gnome-devel-docs/\";>many "
-"languages</link> for which translations are still needed."
+"<link href=\"http://developer.gnome.org/glib/stable/glib-Unicode-";
+"Manipulation.html#g-utf8-strreverse\">Unicode Manipulation</link>"
 msgstr ""
-"Il y a de <link href=\"http://l10n.gnome.org/module/gnome-devel-docs/";
-"\">nombreuses langues</link> pour lesquelles nous avons encore besoin de "
-"traductions."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: info/title
+#: C/button.js.page:8
+msgctxt "text"
+msgid "Button (JavaScript)"
+msgstr "Button (JavaScript)"
+
+#. (itstool) path: info/desc
+#: C/button.js.page:18
+msgid "A button which can be connected to other widgets"
+msgstr "Un bouton qui peut être connecté à d'autres composants graphiques."
+
+#. (itstool) path: page/p
+#: C/button.js.page:23
+msgid "A button widget that changes its label when you click it."
+msgstr "Un bouton qui change d'étiquette quand il est cliqué."
 
-#: C/translate.page:30(p)
+#. (itstool) path: page/code
+#: C/button.js.page:25
+#, no-wrap
 msgid ""
-"To start translating you will need to <link href=\"http://l10n.gnome.org";
-"\">create an account</link> and join the <link href=\"http://l10n.gnome.org/";
-"teams/\">translation team</link> for your language. This will give you the "
-"ability to upload new translations."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ButtonExample = new Lang.Class ({\n"
+"    Name: 'Button Example',\n"
+"\n"
+"    /* Create the application itself\n"
+"       This boilerplate code is needed to build any GTK+ application. */\n"
+"        _init: function () {\n"
+"            this.application = new Gtk.Application ({\n"
+"                application_id: 'org.example.jsbutton',\n"
+"                flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"            });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"            this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                              window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                              title: \"GNOME Button\",\n"
+"                                                              default_height: 50,\n"
+"                                                              default_width: 250 });\n"
+"\n"
+"        // Create the button\n"
+"        this.Button = new Gtk.Button ({label: \"Click Me\"});\n"
+"        this._window.add (this.Button);\n"
+"\n"
+"        // Bind it to a function that says what to do when the button is clicked\n"
+"        this.Button.connect (\"clicked\", Lang.bind(this, this._clickHandler));\n"
+"\n"
+"                // Show the window and all child widgets\n"
+"                this._window.show_all();\n"
+"    },\n"
+"\n"
+"    // Here's the function that says what happens when the button is clicked\n"
+"    _clickHandler: function () {\n"
+"        this.Button.set_label (\"Clicked!\");\n"
+"    }\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Pour commencer à traduire, vous devez <link href=\"http:l10n.gnome.org"
-"\">créer un compte</link> et rejoindre <link href=\"http://l10n.gnome.org/";
-"teams/\">l'équipe de traduction</link> de votre langue. Ce compte va vous "
-"permettre de téléverser de nouvelles traductions."
 
-#: C/translate.page:34(p)
+#. (itstool) path: item/p
+#: C/button.js.page:33 C/grid.js.page:36
 msgid ""
-"You can chat with GNOME translators using <link href=\"https://cbe003.chat.";
-"mibbit.com/?url=irc%3A%2F%2Firc.gnome.org%2Fi18n\">irc</link>. People on the "
-"channel are located worldwide, so you may not get an immediate response as a "
-"result of timezone differences."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Button.html";
+"\">Gtk.Button</link>"
 msgstr ""
-"Vous pouvez discuter avec d'autres traducteurs de GNOME par le canal <link "
-"href=\"https://cbe003.chat.mibbit.com/?url=irc%3A%2F%2Firc.gnome.org%2Fi18n";
-"\">irc</link>. Les personnes abonnées à ce canal sont disséminées dans le "
-"monde entier, vous n'aurez donc probablement pas de réponse rapide à cause "
-"des décalages horaires."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Button.html";
+"\">Gtk.Button</link>"
+
+#. (itstool) path: info/title
+#: C/button.py.page:8
+msgctxt "text"
+msgid "Button (Python)"
+msgstr "Button (Python)"
 
-#: C/translate.page:37(p)
+#. (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 "Un bouton connecté à une fonction de rappel simple."
+
+#. (itstool) path: section/code
+#: C/button.py.page:32
+#, no-wrap
 msgid ""
-"Alternatively, you can contact the Internationalization Team using their "
-"<link href=\"http://mail.gnome.org/mailman/listinfo/gnome-i18n\";>mailing "
-"list</link>."
+"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 ""
-"Vous pouvez aussi joindre par courriel l'équipe d'internationalisation en "
-"utilisant leur <link href=\"http://mail.gnome.org/mailman/listinfo/gnome-i18n";
-"\">liste de diffusion</link>."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/treeview_treestore.py.page:21(None)
+#. (itstool) path: section/title
+#: C/button.py.page:36
+msgid "Useful methods for a Button widget"
+msgstr "Méthode utiles pour un composant graphique Button"
+
+#. (itstool) path: section/p
+#: C/button.py.page:37
 msgid ""
-"@@image: 'media/treeview_treestore.png'; md5=5ca87bc4acd55c527b3fb5fd46779d85"
+"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 ""
-"@@image: 'media/treeview_treestore.png'; md5=5ca87bc4acd55c527b3fb5fd46779d85"
 
-#: C/treeview_treestore.py.page:7(title)
-#: C/treeview_cellrenderertoggle.py.page:7(title)
-msgid "TreeView with TreeStore (Python)"
-msgstr "TreeView avec TreeStore (Python)"
+#. (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 ""
+"La méthode <code>set_relief(Gtk.ReliefStyle.NONE)</code> annule le style en "
+"relief des bordures du Gtk.Button - à l'opposé, <code>Gtk.ReliefStyle."
+"NORMAL</code> le rétablit."
 
-#: C/treeview_treestore.py.page:17(desc)
-msgid "A TreeView displaying a TreeStore (simpler example)"
+#. (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 ""
-"Un TreeView affichant un TreeStore (exemple le plus simple)"
+"Si l'étiquette du bouton est issue de la <link href=\"http://developer.gnome.";
+"org/gtk3/unstable/gtk3-Stock-Items.html\">collection d'icônes</link>, la "
+"méthode <code>set_use_stock(True)</code> assigne l'étiquette comme étant le "
+"nom de l'icône correspondante de la collection."
 
-#: C/treeview_treestore.py.page:20(title)
-#: C/treeview_cellrenderertoggle.py.page:20(title)
-msgid "TreeView with TreeStore"
-msgstr "TreeView avec TreeStore"
+#. (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 ""
+"Pour assigner une image (par ex. une image de la collection d'images) au "
+"bouton <code>button</code> :"
 
-#: C/treeview_treestore.py.page:22(p)
-msgid "This TreeView displays a TreeStore."
-msgstr "Ce TreeView affiche un TreeStore."
+#. (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 ""
+"\n"
+"image = Gtk.Image()\n"
+"image.set_from_stock(Gtk.STOCK_ABOUT, Gtk.IconSize.BUTTON)\n"
+"button.set_image(image)"
 
-#: C/treeview_treestore.py.page:33(title)
-#: C/treeview_simple_liststore.py.page:35(title)
-#: C/treeview_cellrenderertoggle.py.page:33(title)
-#: C/treeview_advanced_liststore.py.page:36(title)
-msgid "Useful methods for a TreeView widget"
-msgstr "Méthodes utiles pour un élément graphique TreeView"
+#. (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 ""
+"Vous ne devez plus assigner d'étiquette au bouton après cela, sinon il "
+"affichera l'étiquette au lieu de l'image."
 
-#: C/treeview_treestore.py.page:34(p)
-#: C/treeview_simple_liststore.py.page:36(p)
-#: C/treeview_cellrenderertoggle.py.page:34(p)
-#: C/treeview_advanced_liststore.py.page:37(p)
+#. (itstool) path: item/p
+#: C/button.py.page:47
 msgid ""
-"The TreeView widget is designed around a <em>Model/View/Controller</em> "
-"design. For more information, and for a list of useful methods for TreeView "
-"and the interface TreeModel, see <link xref=\"model-view-controller.py"
-"\">here</link>."
+"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 ""
-"L'élément graphique TreeView est articulé autour d'un concept "
-"<em>Modèle/Vue/Contrôleur</em>. Pour de plus amples informations et pour "
-"consulter une liste de méthodes utiles à l'utilisation de TreeView "
-"et de l'interface TreeModel, rendez-vous <link xref=\"model-"
-"view-controller.py\">ici</link>."
-
-#: C/treeview_treestore.py.page:41(link)
-#: C/treeview_simple_liststore.py.page:43(link)
-#: C/treeview_cellrenderertoggle.py.page:41(link)
-#: C/treeview_advanced_liststore.py.page:45(link)
-#: C/model-view-controller.py.page:186(link)
-msgid "GtkTreeView"
-msgstr "GtkTreeView"
-
-#: C/treeview_treestore.py.page:42(link)
-#: C/treeview_simple_liststore.py.page:44(link)
-#: C/treeview_cellrenderertoggle.py.page:42(link)
-#: C/treeview_advanced_liststore.py.page:46(link)
-#: C/model-view-controller.py.page:185(link)
-msgid "GtkTreeModel"
-msgstr "GtkTreeModel"
-
-#: C/treeview_treestore.py.page:43(link)
-#: C/treeview_cellrenderertoggle.py.page:43(link)
-msgid "GtkTreeStore"
-msgstr "GtkTreeStore"
-
-#: C/treeview_treestore.py.page:44(link)
-#: C/treeview_simple_liststore.py.page:46(link)
-#: C/treeview_cellrenderertoggle.py.page:44(link)
-#: C/treeview_advanced_liststore.py.page:48(link)
-#: C/combobox_multicolumn.py.page:45(link) C/combobox.py.page:42(link)
-msgid "GtkCellRendererText"
-msgstr "GtkCellRendererText"
-
-#: C/treeview_treestore.py.page:45(link)
-#: C/treeview_simple_liststore.py.page:47(link)
-#: C/treeview_cellrenderertoggle.py.page:46(link)
-#: C/treeview_advanced_liststore.py.page:49(link)
-#: C/model-view-controller.py.page:187(link)
-msgid "GtkTreeViewColumn"
-msgstr "GtkTreeViewColumn"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/treeview_simple_liststore.vala.page:23(None)
-#: C/treeview_simple_liststore.py.page:23(None)
+"La fonction <code>set_focus_on_click(False)</code> empêche le bouton de "
+"prendre le focus quand vous cliquez dessus avec la souris. Cela peut être "
+"utile dans les barres d'outils, afin que la zone principale de l'application "
+"ne perde pas le focus clavier."
+
+#. (itstool) path: item/p
+#: C/button.py.page:55
 msgid ""
-"@@image: 'media/treeview_simple_liststore.png'; "
-"md5=2dc501a2b95b094da985d37b66aee90c"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkButton.html";
+"\">GtkButton</link>"
 msgstr ""
-"@@image: 'media/treeview_simple_liststore.png'; "
-"md5=2dc501a2b95b094da985d37b66aee90c"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkButton.html";
+"\">GtkButton</link>"
 
-#: C/treeview_simple_liststore.vala.page:7(title)
-msgid "Simple Treeview with ListStore (Vala)"
-msgstr "TreeView tout simple avec ListStore (Vala)"
+#. (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 ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkWindow.html";
+"\">GtkWindow</link>"
 
-#: C/treeview_simple_liststore.vala.page:19(desc)
-msgid "A widget can display any TreeModel implementation (lists and trees)"
+#. (itstool) path: info/title
+#: C/button.vala.page:8
+msgctxt "text"
+msgid "Button (Vala)"
+msgstr "Button (Vala)"
+
+#. (itstool) path: page/title
+#: C/button.vala.page:22
+msgid "Button widget"
+msgstr "Composant graphique Button"
+
+#. (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 ""
-"Un élément graphique peut afficher n'importe quelle implémentation de "
-"TreeModel (en listes et arborescentes)"
 
-#: C/treeview_simple_liststore.vala.page:22(title)
-#: C/treeview_advanced_liststore.py.page:23(title)
-msgid "Simple Treeview with ListStore"
-msgstr "Simple Treeview avec ListStore"
+#. (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 ""
+"Dans cet exemple, nous avons utilisé un <link href=\"http://www.valadoc.org/";
+"gtk+-3.0/Gtk.Button.html\">Gtk.Button</link>"
 
-#: C/treeview_simple_liststore.vala.page:24(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/toolbar.png'; md5=f0350855eedf6343952b72d6d906f738"
+msgctxt "_"
 msgid ""
-"This TreeView displays a simple ListStore with the Selection \"changed\" "
-"signal connected."
+"external ref='media/buttonbox_calculator.png' "
+"md5='ce0de08b7ac66f517290e33e6d33d508'"
+msgstr "@@image: 'media/toolbar.png'; md5=f0350855eedf6343952b72d6d906f738"
+
+#. (itstool) path: info/title
+#: C/buttonbox.js.page:8
+msgctxt "text"
+msgid "ButtonBox (JavaScript)"
+msgstr "ButtonBox (JavaScript)"
+
+#. (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 "Meg Ford"
+
+#. (itstool) path: info/desc
+#: C/buttonbox.js.page:19 C/buttonbox.py.page:20
+msgid "A container for arranging buttons"
 msgstr ""
-"Ce Treeview affiche un ListStore tout simple avec le signal "
-"« changed » de la sélection connecté."
 
-#: C/treeview_simple_liststore.vala.page:31(link)
-#: C/treeview_simple_liststore.js.page:282(link)
-msgid "Gtk.TreeView"
-msgstr "Gtk.TreeView"
+#. (itstool) path: page/title
+#. (itstool) path: steps/title
+#: C/buttonbox.js.page:22 C/buttonbox.py.page:23 C/tutorial.py.page:92
+#, fuzzy
+#| msgid "Button"
+msgid "ButtonBox"
+msgstr "ButtonBox"
 
-#: C/treeview_simple_liststore.vala.page:32(link)
-#: C/treeview_simple_liststore.js.page:279(link) C/combobox.vala.page:29(link)
-#: C/combobox.js.page:242(link)
-msgid "Gtk.ListStore"
-msgstr "Gtk.ListStore"
+#. (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 ""
 
-#: C/treeview_simple_liststore.vala.page:33(link)
-#: C/treeview_simple_liststore.js.page:281(link)
-msgid "Gtk.TreeSelection"
-msgstr "Gtk.TreeSelection"
+#. (itstool) path: section/code
+#: C/buttonbox.js.page:31
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ButtonBoxExample = new Lang.Class ({\n"
+"    Name: 'ButtonBox Example',\n"
+"\n"
+"    // Create the application itthis\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application({ application_id: 'org.example.jsbuttonbox' });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this.window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"        // 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 (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 (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\", Lang.bind(this, this._buttonClicked, this.button));\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: function(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: function() {\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 ""
 
-#: C/treeview_simple_liststore.py.page:7(title)
-msgid "Simple TreeView with ListStore (Python)"
-msgstr "TreeView tout simple avec ListStore (Python)"
+#. (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>"
 
-#: C/treeview_simple_liststore.py.page:19(desc)
-msgid "A TreeView displaying a ListStore (simpler example)"
-msgstr "Un TreeView affichant un ListStore (exemple le plus simple)"
+#. (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>"
 
-#: C/treeview_simple_liststore.py.page:22(title)
-msgid "Simple TreeView with ListStore"
-msgstr "TreeView tout simple avec ListStore"
+#. (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>"
 
-#: C/treeview_simple_liststore.py.page:24(p)
-#: C/treeview_advanced_liststore.py.page:25(p)
+#. (itstool) path: item/p
+#: C/buttonbox.js.page:41
 msgid ""
-"This TreeView displays a simple ListStore with the selection \"changed\" "
-"signal connected."
+"<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 ""
-"Ce Treeview affiche un ListStore tout simple avec le signal "
-"« changed » de la sélection connecté."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html";
+"\">GtkGrid</link>"
 
-#: C/treeview_simple_liststore.py.page:45(link)
-#: C/treeview_advanced_liststore.py.page:47(link)
-#: C/combobox_multicolumn.py.page:44(link) C/combobox.py.page:41(link)
-msgid "GtkListStore"
-msgstr "GtkListStore"
+#. (itstool) path: info/title
+#: C/buttonbox.py.page:8
+msgctxt "text"
+msgid "ButtonBox (Python)"
+msgstr "ButtonBox (Python)"
 
-#: C/treeview_simple_liststore.py.page:48(link)
-#: C/treeview_advanced_liststore.py.page:50(link)
-#: C/combobox_multicolumn.py.page:48(link) C/combobox.py.page:44(link)
-msgid "pygobject - Python bindings for GObject Introspection"
-msgstr "pygobject - Liaisons Python pour l'introspection GObject"
+#. (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 ""
 
-#: C/treeview_simple_liststore.py.page:49(link)
-msgid "Fonts"
-msgstr "Polices"
+#. (itstool) path: section/title
+#: C/buttonbox.py.page:36
+#, fuzzy
+#| msgid "Useful methods for a Button widget"
+msgid "Useful methods for a ButtonBox widget"
+msgstr "Méthode utiles pour un élément graphique Bouton"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/treeview_simple_liststore.js.page:24(None)
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:38
 msgid ""
-"@@image: 'media/treeview_simple_liststore_penguins.png'; "
-"md5=d750a0b9fddf8e508753cc639839871d"
+"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 ""
-"@@image: 'media/treeview_simple_liststore_penguins.png'; "
-"md5=d750a0b9fddf8e508753cc639839871d"
 
-#: C/treeview_simple_liststore.js.page:7(title)
-msgid "TreeView with ListStore (JavaScript)"
-msgstr "TreeView avec ListStore (JavaScript)"
+#. (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 ""
 
-#: C/treeview_simple_liststore.js.page:20(desc)
-msgid "A widget that shows a separate list of items"
-msgstr "Un élément graphique qui affiche une liste séparée d'éléments"
+#. (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 ""
 
-#: C/treeview_simple_liststore.js.page:23(title)
-msgid "TreeView with ListStore"
-msgstr "TreeView avec ListStore"
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:41
+#, fuzzy
+#| msgid ""
+#| "<code>set_digits(digits)</code> sets the precision to be displayed by the "
+#| "spinbutton, up to 20 digits."
+msgid ""
+"<code>set_spacing(spacing)</code> sets the spacing, in pixels, between the "
+"buttons of the box."
+msgstr ""
+"La méthode <code>set_digits(caracteres)</code> définit la précision "
+"d'affichage du BoutonDactivité, jusqu'à 20 caractères."
 
-#: C/treeview_simple_liststore.js.page:25(p)
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:49
 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."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkButtonBox.html";
+"\">GtkButtonBox</link>"
 msgstr ""
-"Un TreeView est une fenêtre affichant le contenu soit d'un "
-"ListStore, soit d'un TreeStore. Un ListStore peut être "
-"comparé à une feuille de calcul : une liste « plate », en deux dimensions, "
-"contenant des données réparties sur des lignes et dans des colonnes. Alors qu'"
-"un TreeStore peut déployer ses branches dans différentes "
-"directions, à la manière d'un arbre. Dans cet exemple, nous créons un "
-"TreeView qui affiche le contenu d'un ListStore contenant des noms et des "
-"numéros de téléphone (fictifs) et nous le paramétrons pour que "
-"l'<link xref=\"label.js\">étiquette</link> en bas de la "
-"fenêtre affiche plus d'informations sur le nom qui a été cliqué."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkButtonBox.html";
+"\">GtkButtonBox</link>"
 
-#: C/treeview_simple_liststore.js.page:26(p)
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:50
 msgid ""
-"The TreeView is not just a single widget, but contains a number of smaller "
-"ones:"
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkBox.html\";>GtkBox</"
+"link>"
 msgstr ""
-"Un TreeView n'est pas qu'un simple élément graphique, il contient aussi un certain "
-"nombre d'autres plus petits :"
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkBox.html\";>GtkBox</"
+"link>"
 
-#: C/treeview_simple_liststore.js.page:28(p)
+#. (itstool) path: item/p
+#: C/buttonbox.py.page:52 C/entry.c.page:34
 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."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkEntry.html";
+"\">GtkEntry</link>"
 msgstr ""
-"Les éléments graphiques TreeViewColumn affichent chaque colonne "
-"d'informations contenue dans le ListStore. Chacune d'elle a un nom qui "
-"peut être affiché dans l'en-tête de la colonne, comme montré dans la "
-"capture d'écran."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkEntry.html";
+"\">GtkEntry</link>"
 
-#: C/treeview_simple_liststore.js.page:29(p)
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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\")."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkGrid.html\";>GtkGrid</"
+"link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: info/title
+#: C/c.page:9
+#, fuzzy
+#| msgid "C"
+msgctxt "link"
+msgid "C"
+msgstr "C"
+
+#. (itstool) path: credit/name
+#: C/c.page:18
+msgid "Bastian Ilso"
 msgstr ""
-"Les éléments graphiques CellRenderer sont « empilés » dans chaque "
-"TreeViewColumn et contiennent les instructions sur la manière "
-"d'afficher chaque « cellule » individuelle ou chaque élément du "
-"ListStore. Il en existe beaucoup de types différents, y compris le "
-"CellRendererText utilisé ici et le CellRendererPixbuf qui affiche une image "
-"« pixel buffer »."
 
-#: C/treeview_simple_liststore.js.page:31(p)
+#. (itstool) path: info/desc
+#: C/c.page:24
+#, fuzzy
+#| msgid "Tutorials, code samples, and plaform demos in C"
+msgid "Tutorials and code samples in C."
+msgstr "Tutoriels, exemples de code et démonstrations de la plateforme en C"
+
+#. (itstool) path: page/title
+#: C/c.page:27
+#, fuzzy
+#| msgid "Platform demos in C++"
+msgid "Platform Demos in C"
+msgstr "Exemples de la plateforme en langage C++"
+
+#. (itstool) path: section/title
+#: C/c.page:31
+msgid "Prerequisites"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/c.page:33
 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."
+"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 ""
-"Pour finir, nous allons utiliser un objet nommé TreeIter, qui n'est "
-"pas à proprement parler un élément graphique, mais plutôt un curseur "
-"invisible qui pointe vers une ligne horizontale du ListStore. Si vous "
-"cliquez par exemple sur un nom de la liste téléphonique, cela génère un "
-"TreeIter qui pointe vers la ligne sélectionnée et qui sert à indiquer "
-"au ListStore quelles informations supplémentaires l'étiquette doit "
-"afficher."
 
-#: C/treeview_simple_liststore.js.page:32(p)
+#. (itstool) path: section/title
+#: C/c.page:44
+msgid "Guidelines for new developers"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/c.page:46
 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."
+"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
+#, fuzzy
+#| msgid ""
+#| "To create the toolbar using the <link href=\"http://glade.gnome.org/";
+#| "\">Glade Interface Designer</link>:"
+msgid ""
+"<link href=\"http://glade.gnome.org/\";>Glade</link>: A user interface "
+"designer for GTK+ Applications."
+msgstr ""
+"Pour créer la barre d'outils avec <link href=\"http://glade.gnome.org/";
+"\">Glade</link> :"
+
+#. (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 "Copiez et collez le code dans <var>nomdufichier</var>.c"
+
+#. (itstool) path: item/screen
+#: C/c.page:99
+#, fuzzy, no-wrap
+#| msgid "gcc <var>filename</var>.c `pkg-config --cflags --libs gtk+-3.0` -o <var>filename</var>\n"
+msgid "gcc <var>filename</var>.c `pkg-config --cflags --libs gtk+-3.0` -o <var>filename</var>"
+msgstr "gcc <var>nomdufichier</var>.c `pkg-config --cflags --libs gtk+-3.0` -o <var>nomdufichier</var>\n"
+
+#. (itstool) path: note/p
+#: C/c.page:105
+#, fuzzy
+#| 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>."
+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 ""
+"Pour davantage d'informations sur la compilation des programmes Gtk+, "
+"consultez <link href=\"http://developer.gnome.org/gtk3/3.4/gtk-compiling.html";
+"\">Compilation d'applications Gtk+ sur UNIX</link>."
+
+#. (itstool) path: section/title
+#: C/c.page:117
+#, fuzzy
+#| msgid "Code samples"
+msgid "Widget Code Examples"
+msgstr "Exemples de code"
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/checkbutton.png'; md5=7921a6812c87dd2b3781f4fad241e858"
+msgctxt "_"
+msgid ""
+"external ref='media/checkbutton.png' md5='7921a6812c87dd2b3781f4fad241e858'"
+msgstr "@@image: 'media/checkbutton.png'; md5=7921a6812c87dd2b3781f4fad241e858"
+
+#. (itstool) path: info/title
+#: C/checkbutton.c.page:8
+#, fuzzy
+#| msgid "CheckButton"
+msgctxt "text"
+msgid "CheckButton (C)"
+msgstr "CaseAcocher"
+
+#. (itstool) path: info/desc
+#: C/checkbutton.c.page:18
+msgid "Create widgets with a discrete ToggleButton"
+msgstr "Créer des éléments graphiques avec un bouton de basculement discret"
+
+#. (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 "CaseAcocher"
+
+#. (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 "Cette CaseAcocher inverse le titre."
+
+#. (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 ""
-"Le TreeView est probablement l'élément graphique Gtk le plus "
-"compliqué, de par le nombre d'éléments qu'il contient et à cause de la façon dont "
-"ils sont imbriqués pour travailler ensemble. Prenez le temps d'apprendre et "
-"son fonctionnement en faisant des essais, ou alors essayez "
-"de commencer par quelque chose de plus facile si vous n'y arrivez pas."
 
-#: C/treeview_simple_liststore.js.page:45(p) C/togglebutton.js.page:35(p)
-#: C/textview.js.page:44(p) C/switch.js.page:42(p) C/statusbar.js.page:35(p)
-#: C/spinbutton.js.page:38(p) C/scale.js.page:35(p)
-#: C/radiobutton.js.page:35(p) C/messagedialog.js.page:38(p)
-#: C/combobox.js.page:40(p) C/comboboxtext.js.page:36(p)
-#: C/checkbutton.js.page:35(p)
+#. (itstool) path: item/p
+#: C/checkbutton.c.page:30
+#, fuzzy
+#| msgid ""
+#| "In this sample we used the following: <link href=\"http://www.valadoc.org/";
+#| "gtk+-3.0/Gtk.Button.html\">Gtk.Button</link>"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/3.2/GtkCheckButton.html";
+"\">GtkCheckButton</link>"
+msgstr ""
+"Dans cet exemple, nous avons utilisé le <link href=\"http://www.valadoc.org/";
+"gtk+-3.0/Gtk.Button.html\">Gtk.Button</link>"
+
+#. (itstool) path: info/title
+#: C/checkbutton.js.page:8
+#, fuzzy
+#| msgid "CheckButton"
+msgctxt "text"
+msgid "CheckButton (JavaScript)"
+msgstr "CaseAcocher"
+
+#. (itstool) path: info/desc
+#: C/checkbutton.js.page:18
+msgid "A box which can be checked or unchecked"
+msgstr "Une case qui peut être cochée ou décochée"
+
+#. (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 ""
+"Cette application possède une CaseAcocher. Selon que la case soit cochée ou "
+"non dicte l'affichage ou non de quelque chose dans la barre de titre de la "
+"fenêtre."
+
+#. (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 ""
+"Une CaseAcocher envoie le signal d'inversion « toggled » quand elle cochée "
+"ou décochée. Pendant qu'elle est cochée, la valeur de la propriété "
+"« active » est sur vrai et quand elle ne l'est pas, elle est sur faux."
+
+#. (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 "Bibliothèques à importer"
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:29 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/p
+#: C/checkbutton.js.page:36 C/comboboxtext.js.page:37 C/combobox.js.page:41
+#: 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 ""
-"Ce sont les bibliothèques que nous devons importer "
-"pour faire fonctionner cette application. N'oubliez pas que la ligne qui "
-"informe GNOME que nous allons utiliser Gjs doit toujours se trouver au début."
-
-#: C/treeview_simple_liststore.js.page:49(title)
-#: C/togglebutton.js.page:39(title) C/textview.js.page:48(title)
-#: C/switch.js.page:46(title) C/statusbar.js.page:39(title)
-#: C/spinbutton.js.page:42(title) C/scale.js.page:39(title)
-#: C/radiobutton.js.page:39(title) C/messagedialog.js.page:42(title)
-#: C/combobox.js.page:44(title) C/comboboxtext.js.page:40(title)
-#: C/checkbutton.js.page:39(title)
+"Ce sont les bibliothèques que nous devons importer pour faire fonctionner "
+"cette application. N'oubliez pas que la ligne qui informe GNOME que nous "
+"allons utiliser Gjs doit toujours se trouver au début."
+
+#. (itstool) path: section/title
+#: C/checkbutton.js.page:40 C/comboboxtext.js.page:41 C/combobox.js.page:45
+#: 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 "Création de la fenêtre de l'application"
 
-#: C/treeview_simple_liststore.js.page:75(p)
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:41
+#, no-wrap
 msgid ""
-"All the code for this sample goes in the TreeViewExample class. The above "
+"\n"
+"const CheckButtonExample = new Lang.Class({\n"
+"    Name: 'CheckButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jscheckbutton',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/checkbutton.js.page:67
+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 ""
-"Tout le code utilisé pour cet exemple va dans la classe TreeViewExample. Le "
-"code ci-dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-";
-"gtk-3.0/gjs/Gtk.Application.html\">Gtk.Application</link> pour nos éléments "
+"Tout le code de cet exemple va dans la classe CheckButtonExample. Le code ci-"
+"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
+"et la fenêtre qui les contient."
+
+#. (itstool) path: section/code
+#: C/checkbutton.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: 100,\n"
+"            default_width: 300,\n"
+"            border_width: 10,\n"
+"            title: \"CheckButton Example\"});\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/checkbutton.js.page:81
+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 ""
+"Mettons tout le code nécessaire à la création de l'interface utilisateur "
+"dans la fonction _buildUI. Créons maintenant une nouvelle <link href="
+"\"GtkApplicationWindow.js.page\">Gtk.ApplicationWindow</link> pour y mettre "
+"tous nos éléments graphiques."
+
+#. (itstool) path: section/title
+#: C/checkbutton.js.page:85
+msgid "Creating the checkbutton"
+msgstr "Création de la CaseAcocher"
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:86
+#, no-wrap
+msgid ""
+"\n"
+"        // Create the check button\n"
+"        this._button = new Gtk.CheckButton ({label: \"Show Title\"});\n"
+"        this._window.add (this._button);\n"
+"\n"
+"        // Have the check button be checked by default\n"
+"        this._button.set_active (true);\n"
+"\n"
+"        // Connect the button to a function that does something when it's toggled\n"
+"        this._button.connect (\"toggled\", Lang.bind (this, this._toggledCB));\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/checkbutton.js.page:97
+#, fuzzy
+#| 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."
+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 ""
+"Ce code ne génère que la CaseAcocher. Pour créer l'étiquette à côté de la "
+"CaseAcocher, il faut donner à la CaseAcocher la propriété « label » et lui "
+"assigner une valeur de chaîne. Comme la CaseAcocher s'inverse selon que le "
+"titre de la fenêtre s'affiche ou non (et nous le mettons en position affiché "
+"pour commencer), il faut que la case soit cochée par défaut. Ensuite, à "
+"chaque fois que l'utilisateur coche ou décoche la case, cela appelle la "
+"fonction ._toggledCB."
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:98 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/checkbutton.js.page:103
+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 ""
+"Ce code termine la création de l'interface utilisateur en indiquant à la "
+"fenêtre de s'afficher toute seule avec tous ses éléments graphiques enfants "
+"(il n'y a que la CaseAcocher dans cet exemple)."
+
+#. (itstool) path: section/title
+#: C/checkbutton.js.page:107
+msgid "Function which handles the checkbutton's toggling"
+msgstr "Fonction prenant en charge l'inversion de la CaseAcocher"
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:108
+#, no-wrap
+msgid ""
+"\n"
+"    _toggledCB: function () {\n"
+"\n"
+"        // Make the window title appear or disappear when the checkbox is toggled\n"
+"        if (this._button.get_active() == true)\n"
+"            this._window.set_title (\"CheckButton Example\");\n"
+"        else\n"
+"            this._window.set_title (\"\");\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/checkbutton.js.page:121
+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 ""
+"Quand la CaseAcocher est décochée, nous voulons que le titre de la fenêtre "
+"disparaisse. Quand elle est cochée, nous voulons qu'elle réapparaisse. Pour "
+"savoir quel est son état, il nous faut la tester. C'est l'instruction if ou "
+"else qui va appeler la méthode get_active() de la CaseAcocher et qui fera ce "
+"travail."
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:122
+#, 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:127
+msgid ""
+"Finally, we create a new instance of the finished CheckButtonExample class, "
+"and set the application running."
+msgstr ""
+"Enfin, nous créons un nouvel exemple de la classe CheckButtonExample et "
+"démarrons l'application."
+
+#. (itstool) path: section/code
+#: C/checkbutton.js.page:132
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const CheckButtonExample = new Lang.Class({\n"
+"    Name: 'CheckButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jscheckbutton',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 100,\n"
+"            default_width: 300,\n"
+"            border_width: 10,\n"
+"            title: \"CheckButton Example\"});\n"
+"\n"
+"        // Create the check button\n"
+"        this._button = new Gtk.CheckButton ({label: \"Show Title\"});\n"
+"        this._window.add (this._button);\n"
+"\n"
+"        // Have the check button be checked by default\n"
+"        this._button.set_active (true);\n"
+"\n"
+"        // Connect the button to a function that does something when it's toggled\n"
+"        this._button.connect (\"toggled\", Lang.bind (this, this._toggledCB));\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _toggledCB: function () {\n"
+"\n"
+"        // Make the window title appear or disappear when the checkbox is toggled\n"
+"        if (this._button.get_active() == true)\n"
+"            this._window.set_title (\"CheckButton Example\");\n"
+"        else\n"
+"            this._window.set_title (\"\");\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new CheckButtonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: section/title
+#: C/checkbutton.js.page:136 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 "Documentation approfondie"
+
+#. (itstool) path: item/p
+#: C/checkbutton.js.page:140
+#, fuzzy
+#| msgid ""
+#| "In this sample we used the following: <link href=\"http://www.valadoc.org/";
+#| "gtk+-3.0/Gtk.Button.html\">Gtk.Button</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.CheckButton.";
+"html\">Gtk.CheckButton</link>"
+msgstr ""
+"Dans cet exemple, nous avons utilisé le <link href=\"http://www.valadoc.org/";
+"gtk+-3.0/Gtk.Button.html\">Gtk.Button</link>"
+
+#. (itstool) path: info/title
+#: C/checkbutton.py.page:8
+#, fuzzy
+#| msgid "CheckButton"
+msgctxt "text"
+msgid "CheckButton (Python)"
+msgstr "CaseAcocher"
+
+#. (itstool) path: info/desc
+#: C/checkbutton.py.page:19
+msgid "A toggle button in a window"
+msgstr "Un bouton de basculement dans une fenêtre"
+
+#. (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 "Méthodes utiles pour un élément graphique CaseAcocher"
+
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToggleButton.html";
+"\">GtkToggleButton</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: item/p
+#: C/checkbutton.py.page:48
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCheckButton.html";
+"\">GtkCheckButton</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: info/title
+#: C/checkbutton.vala.page:8
+#, fuzzy
+#| msgid "CheckButton"
+msgctxt "text"
+msgid "CheckButton (Vala)"
+msgstr "CaseAcocher"
+
+#. (itstool) path: info/desc
+#: C/checkbutton.vala.page:18
+#, fuzzy
+#| msgid "Create widgets with a disrete toggle button"
+msgid "Create widgets with a discrete toggle button"
+msgstr "Créer des éléments graphiques avec un bouton d'inversion discret"
+
+#. (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
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CheckButton.html\";>Gtk."
+"CheckButton</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/colorbutton.png'; md5=904539d26fe367bf99f9a0961cfc9a03"
+msgctxt "_"
+msgid ""
+"external ref='media/colorbutton.png' md5='904539d26fe367bf99f9a0961cfc9a03'"
+msgstr "@@image: 'media/colorbutton.png'; md5=904539d26fe367bf99f9a0961cfc9a03"
+
+#. (itstool) path: info/title
+#: C/colorbutton.js.page:8
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "ColorButton (JavaScript)"
+msgstr "JavaScript"
+
+#. (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 "Un bouton pour ouvrir une boîte de dialogue de sélection de couleur"
+
+#. (itstool) path: page/title
+#: C/colorbutton.js.page:21 C/colorbutton.py.page:22 C/colorbutton.vala.page:23
+msgid "ColorButton"
+msgstr "BoutonDeCouleur"
+
+#. (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 ""
+"Ce BoutonDeCouleur ouvre une boîte de dialogue pour sélectionner une couleur "
+"et affiche dans le terminal les valeurs RVB de la couleur sélectionnée."
+
+#. (itstool) path: section/code
+#: C/colorbutton.js.page:29
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gdk = imports.gi.Gdk;\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ColorbuttonExample = new Lang.Class ({\n"
+"    Name: 'Colorbutton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\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', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this.window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this.window = new Gtk.ApplicationWindow ({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"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\", Lang.bind(this, this.onColorChosen));\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: function() {\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
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.ColorButton.";
+"html\">GtkColorButton</link>"
+msgstr ""
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
+
+#. (itstool) path: item/p
+#: C/colorbutton.js.page:37 C/colorbutton.py.page:45
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gdk3/stable/gdk3-RGBA-Colors.html";
+"\">RGBA Colors</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: info/title
+#: C/colorbutton.py.page:8
+#, fuzzy
+#| msgid "ColorButton"
+msgctxt "text"
+msgid "ColorButton (Python)"
+msgstr "BoutonDeCouleur"
+
+#. (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
+#, fuzzy
+#| msgid "Useful methods for a Button widget"
+msgid "Useful methods for a ColorButton widget"
+msgstr "Méthode utiles pour un élément graphique Bouton"
+
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkColorButton.html";
+"\">GtkColorButton</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: item/p
+#: C/colorbutton.py.page:44
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkColorChooser.html";
+"\">GtkColorChooser</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: info/title
+#: C/colorbutton.vala.page:8
+#, fuzzy
+#| msgid "ColorButton"
+msgctxt "text"
+msgid "ColorButton (Vala)"
+msgstr "BoutonDeCouleur"
+
+#. (itstool) path: page/p
+#: C/colorbutton.vala.page:25
+msgid "RGB values of the selected color are shown in the label."
+msgstr ""
+"Les valeurs RVB de la couleur sélectionnée sont affichées dans cette "
+"étiquette."
+
+#. (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
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://valadoc.org/gtk+-3.0/Gtk.ColorButton.html\";>Gtk."
+"ColorButton</link>"
+msgstr ""
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
+
+#. (itstool) path: item/p
+#: C/colorbutton.vala.page:33
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid "<link href=\"http://valadoc.org/gdk-3.0/Gdk.RGBA.html\";>Gdk.RGBA</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/combobox.png'; md5=ab9e91bc1a58fe866cb00dd52159251d"
+msgctxt "_"
+msgid ""
+"external ref='media/combobox.png' md5='ab9e91bc1a58fe866cb00dd52159251d'"
+msgstr "@@image: 'media/combobox.png'; md5=ab9e91bc1a58fe866cb00dd52159251d"
+
+#. (itstool) path: info/title
+#: C/comboboxtext.js.page:8
+#, fuzzy
+#| msgid "ComboBoxText"
+msgctxt "text"
+msgid "ComboBoxText (JavaScript)"
+msgstr "BoiteCombineeTexte"
+
+#. (itstool) path: info/desc
+#: C/comboboxtext.js.page:20
+msgid "A text-only drop-down menu"
+msgstr "Un menu déroulant texte seul"
+
+#. (itstool) path: page/title
+#: C/comboboxtext.js.page:23
+msgid "ComboBoxText"
+msgstr "BoiteCombineeTexte"
+
+#. (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 ""
+"Une BoiteCombinee est un menu déroulant. La différence entre une <link xref="
+"\"combobox.js\">BoiteCombinee</link> et une BoiteCombineeTexte est que cette "
+"dernière ne possède que des options texte de base, alors que la "
+"BoiteCombinee utilise un ListStore ou un TreeStore (qui sont de simples "
+"feuilles de calcul) pour afficher des éléments arborescents ou des images à "
+"côté de chaque choix."
+
+#. (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 ""
+"À moins que vous n'ayez besoin des fonctions supplémentaires d'une "
+"BoiteCombinee, ou si vous vous sentez à l'aise dans la manipulation des "
+"ListStore et TreeStore, il est préférable d'utiliser la simplicité d'une "
+"BoiteCombineeTexte chaque fois que possible."
+
+#. (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 ""
+"Tout le code de cet exemple va dans la classe MessageDialogExample. Le code "
+"ci-dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/";
+"gjs/Gtk.Application.html\">Gtk.Application</link> pour nos éléments "
 "graphiques et la fenêtre qui les contient."
 
-#: C/treeview_simple_liststore.js.page:89(p) C/togglebutton.js.page:80(p)
-#: C/textview.js.page:87(p) C/switch.js.page:87(p) C/spinbutton.js.page:80(p)
-#: C/scale.js.page:77(p) C/radiobutton.js.page:78(p)
-#: C/messagedialog.js.page:83(p) C/combobox.js.page:82(p)
-#: C/comboboxtext.js.page:78(p)
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:67 C/combobox.js.page:71
+#, 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="
@@ -1767,55 +5884,695 @@ msgstr ""
 "consiste à créer une <link xref=\"GtkApplicationWindow.js\">Gtk."
 "ApplicationWindow</link> pour y mettre tous nos éléments graphiques."
 
-#: C/treeview_simple_liststore.js.page:93(title) C/combobox.js.page:86(title)
+#. (itstool) path: section/title
+#: C/comboboxtext.js.page:83
+msgid "Creating the ComboBoxText"
+msgstr "Création de la BoiteCombineeTexte"
+
+#. (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 ""
+"Après avoir créé la BoiteCombineeTexte, utilisons la méthode "
+"<file>append_text</file> pour lui ajouter des chaînes de texte. Comme les "
+"entrées d'un tableau, les chaînes ont chacune un nombre comme identifiant, "
+"en commençant par 0. Pour simplifier les choses, créons un tableau pour les "
+"entrées de la BoiteCombineeTexte et utilisons une boucle pour les ajouter "
+"dans l'ordre, comme ici."
+
+#. (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 ""
+"Après avoir garni la BoiteCombineeTexte, définissons sa première entrée pour "
+"qu'elle devienne active, nous pouvons ainsi voir la ligne « Select "
+"distribution » avant de cliquer dessus. Connectons ensuite son signal "
+"<file>changed</file> à la fonction _onComboChanged, pour qu'elle soit "
+"appelée à chaque fois que vous faites une nouvelle sélection dans le menu "
+"déroulant."
+
+#. (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 ""
+"Pour ajouter une entrée dans une BoiteCombineeTexte, utilisez la méthode "
+"<file>insert_text</file>. Pour utiliser une chaîne texte plutôt qu'un "
+"identifiant pour chaque entrée se référant à un nombre seul, utilisez les "
+"méthodes <file>append</file> et <file>insert</file>. Reportez-vous aux liens "
+"au bas de ce tutoriel pour de plus amples informations sur leur utilisation."
+
+#. (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 ""
+"Enfin, ajoutons la BoiteCombineeTexte à la fenêtre et indiquons à la fenêtre "
+"de s'afficher avec ses éléments graphiques à l'intérieur."
+
+#. (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 "Fonction prenant en charge votre sélection"
+
+#. (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
+#, fuzzy
+#| 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."
+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 ""
+"Nous allons créer une <link xref=\"messagedialog.js"
+"\">BoiteDeDialogueDemessage</link> qui affiche un message en fonction de la "
+"distribution sélectionnée. Créons d'abord le tableau des réponses à "
+"utiliser. Comme la première chaîne de notre BoiteCombineeTexte est justement "
+"le message « Select distribution », laissons celle-ci vide."
+
+#. (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 ""
+"Avant d'afficher une BoiteDeDialogueDemessage, vérifions d'abord que vous "
+"n'avez pas choisi le message « Select distribution ». Ensuite, définissons "
+"son texte comme étant l'entrée dans le tableau qui correspond à l'entrée "
+"active de notre BoiteDeDialogueDemessage. Cela se fait avec la méthode "
+"<file>get_active</file>, qui renvoie l'identifiant numérique de votre "
+"sélection."
+
+#. (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 ""
+"Il existe d'autres méthodes alternatives : <file>get_active_id</file>, qui "
+"renvoie l'identifiant texte assigné par <file>append</file>, et "
+"<file>get_active_text</file>, qui renvoie le texte complet de la chaîne "
+"sélectionnée."
+
+#. (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 ""
+"Une fois la BoiteDeDialogueDemessage terminée, connectons son signal de "
+"retour à la fonction _onDialogResponse et indiquons lui de s'afficher toute "
+"seule."
+
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:151 C/combobox.js.page:208
+#, 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 ""
+"Comme le seul bouton de la BoiteDeDialogueDemessage est le bouton OK, il "
+"n'est pas nécessaire de vérifier son response_id pour savoir quel bouton a "
+"été cliqué. Tout ce que nous faisons ici est détruire le message surgissant."
+
+#. (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 ""
+"Enfin, nous créons un nouvel exemple de la classe ComboBoxTextExample "
+"terminée et démarrons l'application."
+
+#. (itstool) path: section/code
+#: C/comboboxtext.js.page:172
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ComboBoxTextExample = new Lang.Class ({\n"
+"    Name: 'ComboBoxText Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jscomboboxtext'});\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Welcome to GNOME\",\n"
+"            default_width: 200,\n"
+"            border_width: 10 });\n"
+"\n"
+"        // Create the combobox\n"
+"        this._comboBoxText = new Gtk.ComboBoxText();\n"
+"\n"
+"        // Populate the combobox\n"
+"        let distros = [\"Select distribution\", \"Fedora\", \"Mint\", \"Suse\"];\n"
+"        for (let i = 0; i &lt; distros.length; i++)\n"
+"            this._comboBoxText.append_text (distros[i]);\n"
+"        this._comboBoxText.set_active (0);\n"
+"\n"
+"        // Connect the combobox's 'changed' signal to our callback function\n"
+"        this._comboBoxText.connect ('changed', Lang.bind (this, this._onComboChanged));\n"
+"\n"
+"        // Add the combobox to the window\n"
+"        this._window.add (this._comboBoxText);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onComboChanged: function () {\n"
+"\n"
+"        // The responses we'll use for our messagedialog\n"
+"        let responses = [\"\",\n"
+"            \"Fedora is a community distro sponsored by Red Hat.\",\n"
+"            \"Mint is a popular distro based on Ubuntu.\",\n"
+"            \"SUSE is a name shared by two separate distros.\"];\n"
+"\n"
+"        // Which combobox item is active?\n"
+"        let activeItem = this._comboBoxText.get_active();\n"
+"\n"
+"        // No messagedialog if you chose \"Select distribution\"\n"
+"        if (activeItem != 0) {\n"
+"            this._popUp = new Gtk.MessageDialog ({\n"
+"                transient_for: this._window,\n"
+"                modal: true,\n"
+"                buttons: Gtk.ButtonsType.OK,\n"
+"                message_type: Gtk.MessageType.INFO,\n"
+"                text: responses[activeItem]});\n"
+"\n"
+"            // Connect the OK button to a handler function\n"
+"            this._popUp.connect ('response', Lang.bind (this, this._onDialogResponse));\n"
+"\n"
+"            // Show the messagedialog\n"
+"            this._popUp.show();\n"
+"        }\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onDialogResponse: function () {\n"
+"\n"
+"        this._popUp.destroy ();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ComboBoxTextExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/comboboxtext.js.page:183
+#, fuzzy
+#| 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."
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ComboBoxText.";
+"html\">Gtk.ComboBoxText</link>"
+msgstr ""
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
+
+#. (itstool) path: item/p
+#: C/comboboxtext.js.page:184 C/combobox.js.page:244 C/entry.js.page:33
+#: C/messagedialog.js.page:198
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.MessageDialog.";
+"html\">Gtk.MessageDialog</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
+
+#. (itstool) path: info/title
+#: C/combobox.c.page:8
+#, fuzzy
+#| msgid "ComboBox"
+msgctxt "text"
+msgid "ComboBox (C)"
+msgstr "BoiteCombinee"
+
+#. (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 ""
+"Un élément graphique utilisé pour effectuer un choix dans une liste "
+"d'éléments"
+
+#. (itstool) path: page/title
+#: C/combobox.c.page:25 C/combobox.js.page:25 C/combobox.vala.page:21
+msgid "ComboBox"
+msgstr "BoiteCombinee"
+
+#. (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 ""
+"Cette BoiteCombinee s'affiche dans le terminal quand vous modifiez votre "
+"sélection."
+
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkComboBoxText.html";
+"\">GtkComboBoxText</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/combobox_multicolumn.png'; "
+#| "md5=43f16648fb11ebc7d2f70825ed0f63b3"
+msgctxt "_"
+msgid ""
+"external ref='media/combobox_multicolumn.png' "
+"md5='43f16648fb11ebc7d2f70825ed0f63b3'"
+msgstr ""
+"@@image: 'media/combobox_multicolumn.png'; "
+"md5=43f16648fb11ebc7d2f70825ed0f63b3"
+
+#. (itstool) path: info/title
+#: C/combobox.js.page:8
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "ComboBox (JavaScript)"
+msgstr "JavaScript"
+
+#. (itstool) path: info/desc
+#: C/combobox.js.page:22
+#, fuzzy
+#| msgid "A text-only drop-down menu"
+msgid "A customizable drop-down menu"
+msgstr "Un menu déroulant texte seul"
+
+#. (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"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+msgstr ""
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:46
+#, no-wrap
+msgid ""
+"\n"
+"const ComboBoxExample = new Lang.Class ({\n"
+"    Name: 'ComboBox Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jscombobox'});\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/combobox.js.page:70
+#, fuzzy
+#| 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."
+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 ""
+"Tout le code de cet exemple va dans la classe CheckButtonExample. Le code ci-"
+"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
+"et la fenêtre qui les contient."
+
+#. (itstool) path: section/title
+#: C/combobox.js.page:87 C/treeview_simple_liststore.js.page:94
 msgid "Creating the ListStore"
 msgstr "Création du ListStore"
 
-#: C/treeview_simple_liststore.js.page:103(p)
+#. (itstool) path: section/code
+#: C/combobox.js.page:88
+#, no-wrap
 msgid ""
-"We first create the ListStore like we would any widget. Then we call its "
-"set_column_types method, and pass it an array of GObject data types. (We "
-"could have put the types all on one line, but here we are breaking them up "
-"to make it easier to read.)"
+"\n"
+"        // Create the 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 ""
-"Créons en premier le ListStore comme nous l'aurions fait pour n'importe "
-"quel élément graphique. Appelons ensuite sa méthode set_column_types et "
-"passons lui un tableau de types de données GObject (nous aurions pu "
-"placer tous les types sur une seule et même ligne, mais pour faciliter la "
-"lecture, nous les séparons)."
 
-#: C/treeview_simple_liststore.js.page:104(p)
-msgid "The GObject data types you can use include:"
-msgstr "Les types de données GObject que vous pouvez utiliser incluent :"
+#. (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 ""
 
-#: C/treeview_simple_liststore.js.page:106(p) C/combobox.js.page:97(p)
+#. (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 "<file>GObject.TYPE_BOOLEAN</file> -- true ou false"
 
-#: C/treeview_simple_liststore.js.page:107(p) C/combobox.js.page:98(p)
+#. (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 "<file>GObject.TYPE_FLOAT</file> -- un nombre à virgule flottante"
 
-#: C/treeview_simple_liststore.js.page:108(p) C/combobox.js.page:99(p)
+#. (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 ""
-"<file>GObject.TYPE_STRING</file> -- une chaîne de caractères (lettres ou chiffres)"
+"<file>GObject.TYPE_STRING</file> -- une chaîne de caractères (lettres ou "
+"chiffres)"
 
-#: C/treeview_simple_liststore.js.page:109(p)
-msgid "<file>gtk.gdk.Pixbuf</file> -- A picture"
-msgstr "<file>gtk.gdk.Pixbuf</file> -- une image"
-
-#: C/treeview_simple_liststore.js.page:111(p)
-msgid ""
-"In this case, we're making a ListStore of four columns, each one containing "
-"string values."
-msgstr ""
-"Dans ce cas, nous créons un ListStore de quatre colonnes contenant "
-"chacune des valeurs de type chaînes de caractères."
-
-#: C/treeview_simple_liststore.js.page:112(p) C/combobox.js.page:101(p)
+#. (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 "
@@ -1825,7207 +6582,17586 @@ msgstr ""
 "<file>const GObject = imports.gi.GObject;</file> au début du code de votre "
 "application, comme nous l'avons fait dans cet exemple."
 
-#: C/treeview_simple_liststore.js.page:131(p)
+#. (itstool) path: section/code
+#: C/combobox.js.page:104
+#, no-wrap
 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."
+"\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 ""
-"Voici les informations contenues dans le ListStore. C'est un assortiment "
-"d'objets, chacun correspondant à une entrée de notre répertoire téléphonique."
 
-#: C/treeview_simple_liststore.js.page:132(p)
+#. (itstool) path: section/p
+#: C/combobox.js.page:120
 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."
+"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 ""
-"Notez que le TreeView de la capture d'écran n'affiche pas pour "
-"l'instant les données des propriétés « description ». Elles s'afficheront "
-"dans l'étiquette du dessous à chaque clic sur une ligne. C'est parce qu'un "
-"TreeView et un ListStore sont deux choses bien distinctes et "
-"qu'un TreeView peut afficher tout ou une partie du contenu d'un ListStore de différentes façons. Vous "
-"pouvez même posséder plusieurs éléments graphiques affichant des éléments "
-"d'un même ListStore, comme l'étiquette de notre exemple ou bien encore "
-"un second TreeView."
 
-#: C/treeview_simple_liststore.js.page:141(p)
+#. (itstool) path: note/p
+#: C/combobox.js.page:121
 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."
+"\"Select\" isn't really an option so much as an invitation to click on our "
+"ComboBox, so it doesn't need an icon."
 msgstr ""
-"Cette boucle <file>for</file> place les chaînes de caractères de notre "
-"répertoire téléphonique dans notre ListStore dans l'ordre. Pour ce faire, "
-"nous passons à la méthode set du ListStore le curseur qui pointe vers la "
-"bonne ligne, un tableau qui indique quelles colonnes nous voulons définir et "
-"un tableau qui contient les données que nous voulons y mettre."
 
-#: C/treeview_simple_liststore.js.page:142(p)
+#. (itstool) path: section/title
+#: C/combobox.js.page:125
+#, fuzzy
+#| msgid "Creating the ComboBoxText"
+msgid "Creating the ComboBox"
+msgstr "Création de la BoiteCombineeTexte"
+
+#. (itstool) path: section/code
+#: C/combobox.js.page:126
+#, no-wrap
 msgid ""
-"A ListStore's <file>append</file> method adds a horizontal row onto it (it "
-"starts out with none), and returns a TreeIter pointing to that row like a "
-"cursor. So by passing <file>this._listStore.append()</file> to the ListStore "
-"as a property, we're creating a new row and telling the <file>set</file> "
-"method which row to set data for at the same time."
+"\n"
+"        // Create the combobox\n"
+"        this._comboBox = new Gtk.ComboBox({\n"
+"            model: this._listStore});\n"
 msgstr ""
-"La méthode <file>append</file> du ListStore ajoute une ligne horizontale "
-"à celui-ci (au début, il n'y en a pas) et renvoie un TreeIter "
-"pointant vers cette ligne comme un curseur. Donc, en transmettant <file>this."
-"_listStore.append()</file> au ListStore comme propriété, nous créons "
-"une nouvelle ligne en indiquant en même temps à la méthode <file>set</file> "
-"à quelle ligne elle doit attribuer les données."
 
-#: C/treeview_simple_liststore.js.page:147(title)
-msgid "Creating the TreeView"
-msgstr "Création du TreeView"
+#. (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 ""
 
-#: C/treeview_simple_liststore.js.page:154(p)
+#. (itstool) path: section/code
+#: C/combobox.js.page:132
+#, no-wrap
 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."
+"\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 ""
-"Ici, nous créons un élément graphique TreeView de base, qui s'étend à "
-"la fois horizontalement et verticalement pour utiliser autant d'espace que "
-"nécessaire. Nous le paramétrons pour utiliser le ListStore que nous avons "
-"créé comme étant son « modèle » et d'où proviendront les éléments qu'il "
-"affichera."
 
-#: C/treeview_simple_liststore.js.page:162(p)
+#. (itstool) path: section/p
+#: C/combobox.js.page:145
 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."
+"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 ""
-"Nous créons maintenant chacun des TreeViewColumns vertical qui "
-"s'afficheront dans notre TreeView. Comme le montre la capture "
-"d'écran, chaque titre se situe respectivement en haut de sa colonne."
 
-#: C/treeview_simple_liststore.js.page:177(p)
+#. (itstool) path: section/p
+#: C/combobox.js.page:146
 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."
+"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 ""
-"Ici, nous créons les CellRenderers que nous allons utiliser pour afficher le "
-"texte contenu dans notre ListStore et nous les positionnons dans les "
-"TreeViewColumns. Chaque CellRendererText est utilisé pour toutes les "
-"entrées de cette colonne. Notre CellRendererText normal (normal) ne génère que du "
-"texte brut, alors que celui en gras (bold) utilise du texte plus gras. Nous le "
-"mettons dans la première en-tête de colonne et nous indiquons aux deux "
-"autres d'utiliser des copies du normal. L'argument « true » utilisé "
-"comme second paramètre de la méthode <file>pack_start</file> lui indique "
-"d'agrandir les cellules quand cela est possible, au lieu de les laisser compactes."
 
-#: C/treeview_simple_liststore.js.page:178(p)
+#. (itstool) path: note/p
+#: C/combobox.js.page:147
 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."
+"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 ""
-"<link href=\"http://www.pygtk.org/docs/pygtk/pango-constants.html\";>Voici ici"
-"une liste</link> d'autres propriétés de texte que vous pouvez utiliser. Pour "
-"pouvoir utiliser les constantes Pango, assurez-vous "
-"d'ajouter la ligne <file>const Pango = imports.gi.Pango;</file> au début de "
-"votre code comme nous l'avons fait."
 
-#: C/treeview_simple_liststore.js.page:190(p)
+#. (itstool) path: section/code
+#: C/combobox.js.page:149
+#, no-wrap
 msgid ""
-"Now that we've put the CellRenderers into the TreeViewColumns, we use the "
-"<file>add_attribute</file> method to tell each column to pull in text from "
-"the model our TreeView is set to use; in this case, the ListStore with the "
-"phonebook."
+"\n"
+"        // Set the first row in the combobox to be active on startup\n"
+"        this._comboBox.set_active (0);\n"
+"\n"
+"        // Connect the combobox's 'changed' signal to our callback function\n"
+"        this._comboBox.connect ('changed', Lang.bind (this, this._onComboChanged));\n"
 msgstr ""
-"Après avoir placé les CellRenderers dans les TreeViewColumns, nous "
-"utilisons la méthode <file>add_attribute</file> pour indiquer à chaque "
-"colonne d'extraire du modèle le texte pour lequel notre TreeView est "
-"programmée ; dans ce cas, le ListStore contenant le répertoire téléphonique."
 
-#: C/treeview_simple_liststore.js.page:192(p)
+#. (itstool) path: section/p
+#: C/combobox.js.page:156
 msgid ""
-"The first parameter is which CellRenderer we're going to use to render what "
-"we're pulling in."
+"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 ""
-"Le premier paramètre indique quel CellRenderer nous allons utiliser pour "
-"restituer ce que nous extrayons."
 
-#: C/treeview_simple_liststore.js.page:193(p)
+#. (itstool) path: section/code
+#: C/combobox.js.page:158
+#, no-wrap
 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."
+"\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 ""
-"Le second paramètre indique le type d'information que nous voulons extraire. "
-"Dans ce cas, nous lui indiquons que nous voulons du texte."
 
-#: C/treeview_simple_liststore.js.page:194(p)
+#. (itstool) path: section/p
+#: C/combobox.js.page:166
+#, fuzzy
+#| msgid ""
+#| "Finally, we add the ComboBoxText to the window, and tell the window to "
+#| "show itself and the widget inside it."
 msgid ""
-"The third parameter is which of the ListStore's columns we're pulling that "
-"information in from."
+"Finally, we add the ComboBox to the window, and tell the window to show "
+"itself and everything inside it."
 msgstr ""
-"Le troisième paramètre indique de quelle colonne du ListStore nous "
-"voulons extraire cette information."
+"Enfin, ajoutons la BoiteCombineeTexte à la fenêtre et indiquons à la fenêtre "
+"de s'afficher avec ses éléments graphiques à l'intérieur."
 
-#: C/treeview_simple_liststore.js.page:196(p)
+#. (itstool) path: section/code
+#: C/combobox.js.page:171
+#, no-wrap
 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."
+"\n"
+"    _selected: function () {\n"
+"\n"
+"        // The silly pseudohaiku that we'll use for our messagedialog\n"
+"        let haiku = [\"\",\n"
+"            \"You ask for the new\\nwith no thought for the aged\\nlike fallen leaves trod.\",\n"
+"            \"Like a simple clam\\nrevealing a lustrous pearl\\nit opens for you.\",\n"
+"            \"A moment in time\\na memory on the breeze\\nthese things can't be saved.\"];\n"
 msgstr ""
-"Après avoir paramétré ceci, nous utilisons la méthode <file>insert_column</"
-"file> pour trier le contenu de nos TreeViewColumns. Notre "
-"TreeView est à présent terminée."
 
-#: C/treeview_simple_liststore.js.page:197(p)
+#. (itstool) path: section/p
+#: C/combobox.js.page:180
+#, fuzzy
+#| 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."
 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."
+"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 ""
-"Normalement, vous devriez utiliser une boucle pour initialiser votre "
-"TreeView, mais dans cet exemple, nous avons détaillé étape par étape "
-"ce qui ce passe afin de mieux comprendre."
+"Nous allons créer une <link xref=\"messagedialog.js"
+"\">BoiteDeDialogueDemessage</link> qui affiche un message en fonction de la "
+"distribution sélectionnée. Créons d'abord le tableau des réponses à "
+"utiliser. Comme la première chaîne de notre BoiteCombineeTexte est justement "
+"le message « Select distribution », laissons celle-ci vide."
 
-#: C/treeview_simple_liststore.js.page:201(title)
-msgid "Building the rest of the UI"
-msgstr "Construction du reste de l'interface utilisateur"
+#. (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', Lang.bind (this, this._onDialogResponse));\n"
+"\n"
+"            // Show the messagedialog\n"
+"            this._popUp.show();\n"
+"        }\n"
+"\n"
+"    },\n"
+msgstr ""
 
-#: C/treeview_simple_liststore.js.page:212(p)
+#. (itstool) path: section/p
+#: C/combobox.js.page:204
+#, fuzzy
+#| 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."
 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."
+"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 ""
-"La méthode <file>get_selection</file> du TreeView retourne un objet appelé un "
-"TreeSelection. Un TreeSelection est comme un "
-"TreeIter, tout simplement un curseur qui pointe vers une ligne "
-"particulière, à la différence que celui-ci pointe vers la "
-"ligne qui est marqué visuellement comme sélectionnée."
+"Avant d'afficher une BoiteDeDialogueDemessage, vérifions d'abord que vous "
+"n'avez pas choisi le message « Select distribution ». Ensuite, définissons "
+"son texte comme étant l'entrée dans le tableau qui correspond à l'entrée "
+"active de notre BoiteDeDialogueDemessage. Cela se fait avec la méthode "
+"<file>get_active</file>, qui renvoie l'identifiant numérique de votre "
+"sélection."
 
-#: C/treeview_simple_liststore.js.page:213(p)
+#. (itstool) path: note/p
+#: C/combobox.js.page:205
+#, fuzzy
+#| 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."
 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."
+"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 ""
-"Une fois obtenu le TreeSelection qui va avec notre TreeView, "
-"nous lui demandons de nous indiquer vers quelle ligne il pointe quand il "
-"est modifié. Nous obtenons cela en connectant le signal <file>changed</file> "
-"à la fonction _onSelectionChanged que nous avons programmée. Cette fonction "
-"modifie le texte affiché par l'étiquette que nous venons de créer."
+"Il existe d'autres méthodes alternatives : <file>get_active_id</file>, qui "
+"renvoie l'identifiant texte assigné par <file>append</file>, et "
+"<file>get_active_text</file>, qui renvoie le texte complet de la chaîne "
+"sélectionnée."
 
-#: C/treeview_simple_liststore.js.page:230(p)
+#. (itstool) path: section/code
+#: C/combobox.js.page:219
+#, no-wrap
 msgid ""
-"After we've gotten that out of the way, we create a <link xref=\"grid.js"
-"\">Grid</link> to put everything in, then add it to our window and tell the "
-"window to show itself and its contents."
+"\n"
+"// Run the application\n"
+"let app = new ComboBoxExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Ceci fait, nous créons une <link xref=\"grid.js\">grille (grid)</link> pour y "
-"placer le tout, puis nous l'ajoutons à notre fenêtre et demandons à cette "
-"fenêtre de s'afficher avec son contenu."
 
-#: C/treeview_simple_liststore.js.page:234(title)
-msgid "Function which handles a changed selection"
-msgstr "Fonction prenant en charge la modification de la sélection"
+#. (itstool) path: section/p
+#: C/combobox.js.page:224
+#, fuzzy
+#| msgid ""
+#| "Finally, we create a new instance of the finished ComboBoxTextExample "
+#| "class, and set the application running."
+msgid ""
+"Finally, we create a new instance of the finished ComboBoxExample class, and "
+"set the application running."
+msgstr ""
+"Enfin, nous créons un nouvel exemple de la classe ComboBoxTextExample "
+"terminée et démarrons l'application."
 
-#: C/treeview_simple_liststore.js.page:253(p)
+#. (itstool) path: section/code
+#: C/combobox.js.page:229
+#, no-wrap
 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."
+"#!/usr/bin/gjs\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ComboBoxExample = new Lang.Class ({\n"
+"    Name: 'ComboBox Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jscombobox'});\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Welcome to GNOME\",\n"
+"            default_width: 200,\n"
+"            border_width: 10 });\n"
+"\n"
+"        // Create the liststore to put our options in\n"
+"        this._listStore = new Gtk.ListStore();\n"
+"        this._listStore.set_column_types ([\n"
+"            GObject.TYPE_STRING,\n"
+"            GObject.TYPE_STRING]);\n"
+"\n"
+"        // This array holds our list of options and their icons\n"
+"        let options = [{ name: \"Select\" },\n"
+"            { name: \"New\", icon: Gtk.STOCK_NEW },\n"
+"            { name: \"Open\", icon: Gtk.STOCK_OPEN },\n"
+"            { name: \"Save\", icon: Gtk.STOCK_SAVE }];\n"
+"\n"
+"        // Put the options in the liststore\n"
+"        for (let i = 0; i &lt; options.length; i++ ) {\n"
+"            let option = options[i];\n"
+"            let iter = this._listStore.append();\n"
+"            this._listStore.set (iter, [0], [option.name]);\n"
+"            if ('icon' in option)\n"
+"                this._listStore.set (iter, [1], [option.icon]);\n"
+"        }\n"
+"\n"
+"        // Create the combobox\n"
+"        this._comboBox = new Gtk.ComboBox({\n"
+"            model: this._listStore});\n"
+"\n"
+"        // Create some cellrenderers for the items in each column\n"
+"        let rendererPixbuf = new Gtk.CellRendererPixbuf();\n"
+"        let rendererText = new Gtk.CellRendererText();\n"
+"\n"
+"        // Pack the renderers into the combobox in the order we want to see\n"
+"        this._comboBox.pack_start (rendererPixbuf, false);\n"
+"        this._comboBox.pack_start (rendererText, false);\n"
+"\n"
+"        // Set the renderers to use the information from our liststore\n"
+"        this._comboBox.add_attribute (rendererText, \"text\", 0);\n"
+"        this._comboBox.add_attribute (rendererPixbuf, \"stock_id\", 1);\n"
+"\n"
+"        // Set the first row in the combobox to be active on startup\n"
+"        this._comboBox.set_active (0);\n"
+"\n"
+"        // Connect the combobox's 'changed' signal to our callback function\n"
+"        this._comboBox.connect ('changed', Lang.bind (this, this._onComboChanged));\n"
+"\n"
+"        // Add the combobox to the window\n"
+"        this._window.add (this._comboBox);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onComboChanged: function () {\n"
+"\n"
+"        // The silly pseudohaiku that we'll use for our messagedialog\n"
+"        let haiku = [\"\",\n"
+"            \"You ask for the new\\nwith no thought for the aged\\nlike fallen leaves trod.\",\n"
+"            \"Like a simple clam\\nrevealing a lustrous pearl\\nit opens for you.\",\n"
+"            \"A moment in time\\na memory on the breeze\\nthese things can't be saved.\"];\n"
+"\n"
+"        // Which combobox item is active?\n"
+"        let activeItem = this._comboBox.get_active();\n"
+"\n"
+"        // No messagedialog if you choose \"Select\"\n"
+"        if (activeItem != 0) {\n"
+"            this._popUp = new Gtk.MessageDialog ({\n"
+"                transient_for: this._window,\n"
+"                modal: true,\n"
+"                buttons: Gtk.ButtonsType.OK,\n"
+"                message_type: Gtk.MessageType.INFO,\n"
+"                text: haiku[activeItem]});\n"
+"\n"
+"            // Connect the OK button to a handler function\n"
+"            this._popUp.connect ('response', Lang.bind (this, this._onDialogResponse));\n"
+"\n"
+"            // Show the messagedialog\n"
+"            this._popUp.show();\n"
+"        }\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onDialogResponse: function () {\n"
+"\n"
+"        this._popUp.destroy ();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ComboBoxExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"La ligne de code utilisant l'instruction « let » est quelque peu compliquée, mais c'est "
-"néanmoins la meilleure façon d'obtenir un TreeIter qui pointe "
-"vers la même ligne que notre TreeSelection. Elle doit créer "
-"quelques autres références d'objets, mais le seul qui nous intéresse est "
-"l'<file>iter</file>."
 
-#: C/treeview_simple_liststore.js.page:254(p)
+#. (itstool) path: item/p
+#: C/combobox.js.page:240
+#, fuzzy
+#| 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."
 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."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.";
+"CellRendererPixbuf.html\">Gtk.CellRendererPixbuf</link>"
 msgstr ""
-"Ceci fait, nous appelons la fonction <file>set_label</file> de l'étiquette "
-"et nous utilisons la fonction <file>get_value</file> du ListStore autant "
-"de fois que nécessaire pour la remplir de toutes les données que nous "
-"souhaitons y mettre. Ses paramètres sont un TreeIter pointant vers la "
-"ligne dont nous voulons extraire les données et la colonne."
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
 
-#: C/treeview_simple_liststore.js.page:255(p)
+#. (itstool) path: item/p
+#: C/combobox.js.page:241 C/treeview_simple_liststore.js.page:279
+#, fuzzy
+#| 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."
 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."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.";
+"CellRendererText.html\">Gtk.CellRendererText</link>"
 msgstr ""
-"Ici, nous voulons obtenir les données des quatre colonnes, y compris celles "
-"qui sont « masquées » et qui ne font pas partie du TreeView. De "
-"cette façon, nous pouvons utiliser notre étiquette pour afficher les chaînes "
-"de caractères qui sont trop longues pour tenir dans le TreeView et "
-"que nous n'avons pas besoin de voir au premier coup d'œil."
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
 
-#: C/treeview_simple_liststore.js.page:262(p)
+#. (itstool) path: item/p
+#: C/combobox.js.page:242
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Finally, we create a new instance of the finished TreeViewExample class, and "
-"set the application running."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ComboBox.html";
+"\">Gtk.ComboBox</link>"
 msgstr ""
-"Enfin, nous créons une nouvelle instance de la classe TreeViewExample qui est terminée et nous "
-"démarrons l'application."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/treeview_simple_liststore.js.page:266(title)
-#: C/togglebutton.js.page:147(title) C/textview.js.page:242(title)
-#: C/switch.js.page:258(title) C/statusbar.js.page:215(title)
-#: C/spinbutton.js.page:193(title) C/scale.js.page:202(title)
-#: C/radiobutton.js.page:268(title) C/messagedialog.js.page:183(title)
-#: C/hellognome.js.page:193(title) C/combobox.js.page:227(title)
-#: C/comboboxtext.js.page:170(title) C/checkbutton.js.page:130(title)
-#: C/02_welcome_to_the_grid.js.page:275(title)
-msgid "Complete code sample"
-msgstr "Exemple complet du code"
-
-#: C/treeview_simple_liststore.js.page:271(title)
-#: C/togglebutton.js.page:152(title) C/textview.js.page:247(title)
-#: C/switch.js.page:263(title) C/statusbar.js.page:220(title)
-#: C/spinbutton.js.page:198(title) C/scale.js.page:207(title)
-#: C/radiobutton.js.page:273(title) C/messagedialog.js.page:188(title)
-#: C/combobox.js.page:232(title) C/comboboxtext.js.page:175(title)
-#: C/checkbutton.js.page:135(title)
-msgid "In-depth documentation"
-msgstr "Documentation approfondie"
+#. (itstool) path: item/p
+#: C/combobox.js.page:243 C/treeview_simple_liststore.js.page:280
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ListStore.html";
+"\">Gtk.ListStore</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/treeview_simple_liststore.js.page:277(link)
-#: C/togglebutton.js.page:155(link) C/textview.js.page:250(link)
-#: C/switch.js.page:268(link) C/statusbar.js.page:223(link)
-#: C/spinner.js.page:31(link) C/spinbutton.js.page:202(link)
-#: C/scale.js.page:211(link) C/radiobutton.js.page:276(link)
-#: C/progressbar.js.page:40(link) C/messagedialog.js.page:196(link)
-#: C/linkbutton.js.page:30(link) C/label.vala.page:31(link)
-#: C/label.js.page:30(link) C/image.js.page:32(link)
-#: C/GtkApplicationWindow.vala.page:31(link)
-#: C/GtkApplicationWindow.js.page:31(link) C/grid.js.page:34(link)
-#: C/gmenu.vala.page:42(link) C/entry.js.page:30(link)
-#: C/dialog.js.page:30(link) C/combobox.js.page:238(link)
-#: C/comboboxtext.js.page:181(link) C/checkbutton.js.page:138(link)
-#: C/button.js.page:31(link) C/aboutdialog.vala.page:39(link)
-#: C/aboutdialog.js.page:32(link)
-msgid "Gtk.ApplicationWindow"
-msgstr "Gtk.ApplicationWindow"
-
-#: C/treeview_simple_liststore.js.page:278(link) C/combobox.vala.page:31(link)
-#: C/combobox.js.page:240(link)
-msgid "Gtk.CellRendererText"
-msgstr "Gtk.CellRendererText"
-
-#: C/treeview_simple_liststore.js.page:280(link) C/combobox.js.page:244(link)
-msgid "Gtk.TreeIter"
-msgstr "Gtk.TreeIter"
-
-#: C/treeview_simple_liststore.js.page:283(link)
-msgid "Gtk.TreeViewColumn"
-msgstr "Gtk.TreeViewColumn"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/treeview_cellrenderertoggle.py.page:21(None)
+#. (itstool) path: item/p
+#: C/combobox.js.page:245 C/treeview_simple_liststore.js.page:281
+#, fuzzy
+#| 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."
 msgid ""
-"@@image: 'media/treeview_cellrenderertoggle.png'; "
-"md5=ade9b9437f8f83150acf37610dab834d"
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeIter.html";
+"\">Gtk.TreeIter</link>"
 msgstr ""
-"@@image: 'media/treeview_cellrenderertoggle.png'; "
-"md5=ade9b9437f8f83150acf37610dab834d"
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
+
+#. (itstool) path: info/title
+#: C/combobox.py.page:8 C/combobox_multicolumn.py.page:8
+#, fuzzy
+#| msgid "ComboBox"
+msgctxt "text"
+msgid "ComboBox (Python)"
+msgstr "BoiteCombinee"
+
+#. (itstool) path: page/title
+#: C/combobox.py.page:23
+#, fuzzy
+#| msgid "ComboBox"
+msgid "ComboBox (one column)"
+msgstr "BoiteCombinee"
+
+#. (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 ""
+"Cette BoiteCombinee affiche votre sélection dans le terminal quand vous la "
+"modifiez."
 
-#: C/treeview_cellrenderertoggle.py.page:17(desc)
+#. (itstool) path: section/code
+#: C/combobox.py.page:31
+#, no-wrap
 msgid ""
-"A TreeView displaying a TreeStore (more complex example, with "
-"CellRendererToggle)"
+"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 ""
-"Une TreeView affichant un TreeStore (exemple plus complexe "
-"avec CellRendererToggle)"
 
-#: C/treeview_cellrenderertoggle.py.page:22(p)
-# Bruno : toggle = inverseur
+#. (itstool) path: section/title
+#: C/combobox.py.page:35 C/combobox_multicolumn.py.page:35
+msgid "Useful methods for a ComboBox widget"
+msgstr "Méthode utiles pour un élément graphique BoiteCombinee"
+
+#. (itstool) path: section/p
+#: C/combobox.py.page:36 C/combobox_multicolumn.py.page:36
+#, fuzzy
+#| msgid ""
+#| "The ComboBox widget is designed around a <em>Model/View/Controller</em> "
+#| "design. For more information, and for a list of useful methods for "
+#| "ComboBox and TreeModel, see <link xref=\"model-view-controller.py\">here</"
+#| "link>."
 msgid ""
-"This TreeView displays a TreeStore with two columns, one of which is "
-"rendered as a toggle."
+"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 ""
-"Ce TreeView affiche un TreeStore de deux colonnes, dont "
-"l'une est affichée sous la forme d'un inverseur."
+"La BoiteCombinee est construite autour d'un concept <em>Modèle/Vue/"
+"Contrôleur</em>. Pour de plus amples informations et pour obtenir une liste "
+"des méthodes utiles pour une BoiteCombinee et un ModeleArborescent, allez "
+"<link xref=\"model-view-controller.py\">ici</link>."
 
-#: C/treeview_cellrenderertoggle.py.page:45(link)
-msgid "GtkCellRendererToggle"
-msgstr "GtkCellRendererToggle"
+#. (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 ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/treeview_advanced_liststore.py.page:24(None)
+#. (itstool) path: item/p
+#: C/combobox.py.page:45 C/combobox_multicolumn.py.page:44
+#: C/model-view-controller.py.page:190
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"@@image: 'media/treeview_advanced_liststore.png'; "
-"md5=102b512197fb9aa4ed9a16462f6af911"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkComboBox.html";
+"\">GtkComboBox</link>"
 msgstr ""
-"@@image: 'media/treeview_advanced_liststore.png'; "
-"md5=102b512197fb9aa4ed9a16462f6af911"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/treeview_advanced_liststore.py.page:7(title)
-msgid "Simple Treeview with ListStore (Python)"
-msgstr "Simple TreeView avec ListStore (Python)"
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkListStore.html";
+"\">GtkListStore</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/treeview_advanced_liststore.py.page:20(desc)
-msgid "A TreeView displaying a ListStore (more complex example)"
-msgstr "Une TreeView affichant un ListStore (exemple plus complexe)"
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRendererText.";
+"html\">GtkCellRendererText</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/treeview_advanced_liststore.py.page:38(p)
+#. (itstool) path: item/p
+#: C/combobox.py.page:48
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"For buttons and callbacks functions, see <link xref=\"signals-callbacks.py"
-"\">here</link>"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellLayout.html";
+"\">GtkCellLayout</link>"
 msgstr ""
-"Pour les boutons et les fonctions de rappel, voyez <link xref=\"signals-"
-"callbacks.py\">ici</link>"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/tooltip.py.page:22(None)
-msgid "@@image: 'media/tooltip.png'; md5=6950da5f4444aa941ecc2f0fc5951d52"
-msgstr "@@image: 'media/tooltip.png'; md5=6950da5f4444aa941ecc2f0fc5951d52"
+#. (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 ""
 
-#: C/tooltip.py.page:7(title) C/menubutton.py.page:7(title)
-#: C/menubutton.py.page:26(title) C/menubutton.py.page:52(link)
-#: C/menubutton.vala.page:20(title) C/menubutton.vala.page:32(link)
-#: C/menubutton.js.page:20(title) C/menubutton.js.page:32(link)
-msgid "MenuButton"
-msgstr "MenuButton"
+#. (itstool) path: info/title
+#: C/combobox.vala.page:8 C/combobox_multicolumn.vala.page:8
+#, fuzzy
+#| msgid "ComboBox"
+msgctxt "text"
+msgid "ComboBox (Vala)"
+msgstr "BoiteCombinee"
 
-#: C/tooltip.py.page:18(desc)
-msgid "Add tips to your widgets"
-msgstr "Ajouter des infobulles à vos éléments graphiques"
+#. (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 ""
 
-#: C/tooltip.py.page:23(p)
-msgid "A toolbar with a tooltip (with an image) for a button."
-msgstr "Une barre d'outil avec une infobulle (une image) pour un bouton."
+#. (itstool) path: item/p
+#: C/combobox.vala.page:30 C/treeview_simple_liststore.vala.page:33
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ListStore.html\";>Gtk."
+"ListStore</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/tooltip.py.page:33(title)
-msgid "Useful methods for a Tooltip widget"
-msgstr "Méthodes utiles pour un élément graphique infobulle (Tooltip)"
+#. (itstool) path: item/p
+#: C/combobox.vala.page:31
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ComboBox.html\";>Gtk."
+"ComboBox</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/tooltip.py.page:34(p)
+#. (itstool) path: item/p
+#: C/combobox.vala.page:32
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellRendererText.html\";>Gtk."
+"CellRendererText</link>"
 msgstr ""
-"Les fonctions <code>set_tooltip_text(text)</code> et <code>set_tooltip_markup(text)</"
-"code> peuvent être utilisées pour ajouter une infobulle textuelle (ou un texte "
-"dans le langage de balisage Pango) à un élément graphique."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/tooltip.py.page:35(p)
-msgid "For more complex tooltips, for instance for a tooltip with an image:"
-msgstr "Pour des infobulles plus complexes, par exemple pour une infobulle "
-"sous la forme d'image :"
+#. (itstool) path: item/p
+#: C/combobox.vala.page:33
+#, fuzzy
+#| msgid ""
+#| "The method <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+#| "set_default_size.html\">set_default_size</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellLayout.set_attributes.";
+"html\">set_attributes</link>"
+msgstr ""
+"La méthode <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"set_default_size.html\">set_default_size</link>"
+
+#. (itstool) path: page/title
+#: C/combobox_multicolumn.py.page:22 C/combobox_multicolumn.vala.page:22
+#, fuzzy
+#| msgid "ComboBox"
+msgid "ComboBox (two columns)"
+msgstr "BoiteCombinee"
 
-#: C/tooltip.py.page:37(p)
+#. (itstool) path: section/code
+#: C/combobox_multicolumn.py.page:30
+#, no-wrap
 msgid ""
-"Set the <code>\"has-tooltip\"</code> property of the widget to <code>True</"
-"code>; this will make GTK+ monitor the widget for motion and related events "
-"which are needed to determine when and where to show a tooltip."
+"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 ""
-"Attribuez la valeur <code>True</code> (vrai) à la propriété <code>\"has-tooltip\"</code> "
-"de l'élément graphique ; de cette façon GTK+ surveille les événements liés aux mouvements de "
-"la souris et tous ceux qui sont nécessaires afin de déterminer quand et où afficher une infobulle."
 
-#: C/tooltip.py.page:38(p)
+#. (itstool) path: section/p
+#: C/combobox_multicolumn.py.page:37
 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>)."
+"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 ""
-"Connectez le signal <code>\"query-tooltip\"</code>. Ce signal est émis lorsqu'une "
-"infobulle doit s'afficher. Un des arguments transmis au gestionnaire de signaux "
-"est un objet GtkTooltip. C'est l'objet que nous allons afficher comme infobulle et "
-"qui peut être manipulé dans votre fonction de rappel (callback) en utilisant "
-"des fonctions comme <code>set_icon()</code>. Ce sont des fonctions servant à paramétrer "
-"le balisage de l'infobulle (<code>set_markup(text)</code>), à définir une image à partir "
-"de la collection d'icônes (<code>set_icon_from_stock(stock_id, size)</code>), ou même à "
-"positionner un élément graphique personnalisé (<code>set_custom(widget)</code>)."
 
-#: C/tooltip.py.page:39(p)
+#. (itstool) path: item/p
+#: C/combobox_multicolumn.py.page:47
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRendererPixbuf.";
+"html\">GtkCellRendererPixbuf</link>"
 msgstr ""
-"Renvoyez la valeur <code>True</code> à partir de votre gestionnaire query-tooltip. "
-"Cela provoque l'affichage de l'infobulle. Si vous renvoyez <code>False</code>, "
-"elle n'est pas affichée."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/tooltip.py.page:42(p)
+#. (itstool) path: item/p
+#: C/combobox_multicolumn.py.page:48 C/combobox_multicolumn.vala.page:42
+#: C/toolbar.py.page:58
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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:"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/gtk3-Stock-Items.html";
+"\">Stock Items</link>"
 msgstr ""
-"Dans le cas peut probable où vous voulez avoir plus de contrôle sur l'infobulle qui "
-"est sur le point d'être affichée, vous pouvez définir votre propre GtkWindow qui "
-"sera utilisée comme fenêtre d'infobulle. Cela fonctionne comme ceci :"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/tooltip.py.page:44(p)
+#. (itstool) path: section/code
+#: C/combobox_multicolumn.vala.page:30
+#, no-wrap
 msgid ""
-"Set <code>\"has-tooltip\"</code> and connect to <code>\"query-tooltip\"</"
-"code> as before."
+"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 ""
-"Paramétrez <code>\"has-tooltip\"</code> et connectez le à <code>\"query-tooltip\"</"
-"code> comme auparavant."
 
-#: C/tooltip.py.page:45(p)
+#. (itstool) path: item/p
+#: C/combobox_multicolumn.vala.page:38
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Use <code>set_tooltip_window()</code> on the widget to set a GtkWindow "
-"created by you as tooltip window."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ComboBox.html";
+"\">GtkComboBox</link>"
 msgstr ""
-"Utilisez <code>set_tooltip_window()</code> sur l'élément graphique pour définir un GtkWindow "
-"créé par vos soins comme fenêtre d'infobulle."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/tooltip.py.page:46(p)
+#. (itstool) path: item/p
+#: C/combobox_multicolumn.vala.page:39
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ListStore.html";
+"\">GtkListStore</link>"
 msgstr ""
-"Dans la fonction de rappel <code>\"query-tooltip\"</code> vous pouvez accéder à votre fenêtre "
-"en utilisant <code>get_tooltip_window()</code> et la manipuler comme bon vous semble. La "
-"sémantiques pour la valeur retournée est exactement comme ci-dessus, renvoyez <code>True</"
-"code> pour afficher la fenêtre, <code>False</code> dans le cas contraire."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/tooltip.py.page:55(link)
-msgid "GtkTooltip"
-msgstr "GtkTooltip"
+#. (itstool) path: item/p
+#: C/combobox_multicolumn.vala.page:40
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellRendererText.html";
+"\">GtkCellRendererText</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/tooltip.py.page:56(link) C/toolbar.py.page:52(link)
-msgid "GtkToolbar"
-msgstr "GtkToolbar"
+#. (itstool) path: item/p
+#: C/combobox_multicolumn.vala.page:41
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.CellRendererPixbuf.html";
+"\">GtkCellRendererPixbuf</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/tooltip.py.page:57(link) C/toolbar_builder.py.page:195(link)
-#: C/toolbar.py.page:57(link) C/togglebutton.py.page:46(link)
-msgid "GtkWidget"
-msgstr "GtkWidget"
+#. (itstool) path: info/title
+#: C/cpp.page:7
+#, fuzzy
+#| msgid "C++"
+msgctxt "link"
+msgid "C++"
+msgstr "C++"
 
-#: C/tooltip.py.page:58(link) C/toolbar.py.page:55(link)
-#: C/combobox_multicolumn.py.page:47(link)
-msgid "Stock Items"
-msgstr "Éléments de la collection"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:24(None) C/toolbar_builder.py.page:36(None)
-#: C/toolbar.vala.page:23(None) C/toolbar.py.page:23(None)
-#: C/toolbar.js.page:21(None)
-msgid "@@image: 'media/toolbar.png'; md5=f0350855eedf6343952b72d6d906f738"
-msgstr "@@image: 'media/toolbar.png'; md5=f0350855eedf6343952b72d6d906f738"
+#. (itstool) path: page/title
+#: C/cpp.page:16
+#, fuzzy
+#| msgid "Tutorials, code samples, and plaform demos in C"
+msgid "Code samples and platform demos in C++"
+msgstr "Tutoriels, exemples de code et démonstrations de la plateforme en C"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:32(None) C/toolbar_builder.py.page:48(None)
-msgid "@@image: 'media/glade_ui.png'; md5=baea74fe213bc12ea934f64f6977215a"
-msgstr "@@image: 'media/glade_ui.png'; md5=baea74fe213bc12ea934f64f6977215a"
+#. (itstool) path: section/title
+#: C/cpp.page:21 C/js.page:36 C/py.page:39 C/vala.page:30
+#, fuzzy
+#| msgid "A basic \"hello, world\" application"
+msgid "Examples of applications"
+msgstr "Une application basique « hello, world »"
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/dialog.png'; md5=c90a33386a600e892fe623d4072c8c38"
+msgctxt "_"
+msgid "external ref='media/dialog.png' md5='c90a33386a600e892fe623d4072c8c38'"
+msgstr "@@image: 'media/dialog.png'; md5=c90a33386a600e892fe623d4072c8c38"
+
+#. (itstool) path: info/title
+#: C/dialog.c.page:8
+#, fuzzy
+#| msgid "Dialog"
+msgctxt "text"
+msgid "Dialog (C)"
+msgstr "Boîte de dialogue"
+
+#. (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 "Une fenêtre surgissante"
+
+#. (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 "Boîte de dialogue"
+
+#. (itstool) path: page/p
+#: C/dialog.c.page:26
+msgid "A dialog window that pops up when a button is pressed."
+msgstr "Une boîte de dialogue qui surgit quand un bouton est enfoncé."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:38(None) C/toolbar_builder.py.page:54(None)
+#. (itstool) path: page/code
+#: C/dialog.c.page:28
+#, no-wrap
 msgid ""
-"@@image: 'media/glade_select_toolbar.png'; "
-"md5=f7b5b224050b2e387eb04362fc99df00"
+"\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 ""
-"@@image: 'media/glade_select_toolbar.png'; "
-"md5=f7b5b224050b2e387eb04362fc99df00"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:44(None) C/toolbar_builder.py.page:60(None)
+#. (itstool) path: item/p
+#: C/dialog.c.page:36
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"@@image: 'media/glade_toolbar_general.png'; "
-"md5=e31daba6e8a3e526aca89d5f1622edaa"
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkDialog.html";
+"\">GtkDialog</link>"
 msgstr ""
-"@@image: 'media/glade_toolbar_general.png'; "
-"md5=e31daba6e8a3e526aca89d5f1622edaa"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:50(None) C/toolbar_builder.py.page:66(None)
+#. (itstool) path: item/p
+#: C/dialog.c.page:37 C/radiobutton.c.page:36 C/spinbutton.c.page:38
+#: C/switch.c.page:35
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"@@image: 'media/glade_toolbar_common.png'; "
-"md5=d5ec6cc0218ca98e195dbd033feb9ac5"
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkLabel.html";
+"\">GtkLabel</link>"
 msgstr ""
-"@@image: 'media/glade_toolbar_common.png'; "
-"md5=d5ec6cc0218ca98e195dbd033feb9ac5"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:56(None) C/toolbar_builder.py.page:72(None)
+#. (itstool) path: info/title
+#: C/dialog.js.page:8
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Dialog (JavaScript)"
+msgstr "JavaScript"
+
+#. (itstool) path: page/p
+#: C/dialog.js.page:23
 msgid ""
-"@@image: 'media/glade_toolbar_edit.png'; md5=feb1e2b7040d24a4d030f94cf07c81fd"
+"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 ""
-"@@image: 'media/glade_toolbar_edit.png'; md5=feb1e2b7040d24a4d030f94cf07c81fd"
+"Une fenêtre surgissante personnalisable, avec une zone de contenu et une "
+"zone d'action. Cet exemple de boîte de dialogue montre que dans la zone de "
+"contenu il y a un petit message et dans la zone d'action il y a un bouton "
+"qui ferme la boîte."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:115(None) C/toolbar_builder.py.page:131(None)
+#. (itstool) path: page/code
+#: C/dialog.js.page:25
+#, no-wrap
 msgid ""
-"@@image: 'media/glade_toolbar_editor.png'; "
-"md5=8af65241e5ca47d5494a7b36640e6f1c"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const DialogExample = new Lang.Class ({\n"
+"    Name: 'Dialog Example',\n"
+"\n"
+"    // Create the application itself\n"
+"        _init: function () {\n"
+"            this.application = new Gtk.Application ({\n"
+"                application_id: 'org.example.jsdialog',\n"
+"                flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"            });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"            this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                         window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                         title: \"Gtk.Dialog Example\",\n"
+"                                                         default_height: 50,\n"
+"                                                         default_width: 250 });\n"
+"\n"
+"        // Create a button\n"
+"        this._button = new Gtk.Button ({label: \"Click Me\"});\n"
+"        this._window.add (this._button);\n"
+"\n"
+"        // Bind it to the function that creates the dialog\n"
+"        this._button.connect (\"clicked\", Lang.bind(this, this._createDialog));\n"
+"\n"
+"                // Show the window and all child widgets\n"
+"                this._window.show_all();\n"
+"    },\n"
+"\n"
+"    _createDialog: function () {\n"
+"\n"
+"        // Create the dialog\n"
+"        this._dialog = new Gtk.Dialog ({ transient_for: this._window,\n"
+"                         modal: true,\n"
+"                         title: \"A Gtk+ dialog\" });\n"
+"\n"
+"        // Create the dialog's content area, which contains a message\n"
+"        this._contentArea = this._dialog.get_content_area();\n"
+"        this._message = new Gtk.Label ({label: \"This demonstrates a dialog with a label\"});\n"
+"        this._contentArea.add (this._message);\n"
+"\n"
+"        // Create the dialog's action area, which contains a stock OK button\n"
+"        this._actionArea = this._dialog.get_action_area();\n"
+"        this._OKButton = Gtk.Button.new_from_stock (Gtk.STOCK_OK);\n"
+"        this._actionArea.add (this._OKButton);\n"
+"\n"
+"        // Connect the button to the function that handles what it does\n"
+"        this._OKButton.connect (\"clicked\", Lang.bind (this, this._OKHandler));\n"
+"\n"
+"        this._dialog.show_all();\n"
+"    },\n"
+"\n"
+"    _OKHandler: function (dialog, response_id) {\n"
+"\n"
+"        // Destroy the dialog\n"
+"        this._dialog.destroy();\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new DialogExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"@@image: 'media/glade_toolbar_editor.png'; "
-"md5=8af65241e5ca47d5494a7b36640e6f1c"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/toolbar_builder.vala.page:124(None) C/toolbar_builder.py.page:140(None)
+#. (itstool) path: item/p
+#: C/dialog.js.page:32
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"@@image: 'media/glade_visible_no.png'; md5=dc6c025aa825f4d772fbd283d6330026"
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Dialog.html";
+"\">Gtk.Dialog</link>"
 msgstr ""
-"@@image: 'media/glade_visible_no.png'; md5=dc6c025aa825f4d772fbd283d6330026"
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/toolbar_builder.vala.page:7(title)
-msgid "Toolbar created using Glade (Vala)"
-msgstr "Barre d'outils créée avec Glade (Vala)"
+#. (itstool) path: info/title
+#: C/dialog.py.page:8
+#, fuzzy
+#| msgid "AboutDialog"
+msgctxt "text"
+msgid "Dialog (Python)"
+msgstr "AboutDialog"
 
-#: C/toolbar_builder.vala.page:19(desc) C/toolbar.vala.page:18(desc)
-msgid "A bar of buttons"
-msgstr "Une barre de boutons"
+#. (itstool) path: page/p
+#: C/dialog.py.page:25
+msgid "A dialog with the response signal connected to a callback function."
+msgstr ""
+"Une boîte de dialogue avec le signal de réponse connecté à une fonction de "
+"rappel."
 
-#: C/toolbar_builder.vala.page:22(title) C/toolbar_builder.py.page:34(title)
-msgid "Toolbar created using Glade"
-msgstr "Barre d'outils créée avec Glade"
+#. (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 ""
 
-#: C/toolbar_builder.vala.page:25(p)
+#. (itstool) path: section/title
+#: C/dialog.py.page:37
+msgid "Useful methods for a Dialog widget"
+msgstr "Méthodes utiles pour un élément graphique BoiteDeDialogue"
+
+#. (itstool) path: section/p
+#: C/dialog.py.page:38
 msgid ""
-"This example is similar to <link xref=\"toolbar.vala\"/>, except we use "
-"Glade to create the toolbar in an XML ui file."
+"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 ""
-"Cet exemple est identique à <link xref=\"toolbar.vala\"/>, sauf que nous "
-"utilisons Glade pour créer la barre d'outils dans un fichier XML .ui."
 
-#: C/toolbar_builder.vala.page:27(p) C/toolbar_builder.py.page:43(p)
+#. (itstool) path: item/p
+#: C/dialog.py.page:40
 msgid ""
-"To create the toolbar using the <link href=\"http://glade.gnome.org/\";>Glade "
-"Interface Designer</link>:"
+"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 ""
-"Pour créer la barre d'outils avec <link href=\"http://glade.gnome.org/";
-"\">Glade</link> :"
+"Au lieu de <code>set_modal(True)</code>, nous pouvons avoir "
+"<code>set_modal(False)</code> suivi de la méthode "
+"<code>set_destroy_with_parent(True)</code>, qui détruit la boîte de dialogue "
+"quand on ferme la fenêtre principale."
 
-#: C/toolbar_builder.vala.page:31(p) C/toolbar_builder.py.page:47(p)
-msgid "Open Glade, and save the file as <file>toolbar_builder.ui</file>"
+#. (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 ""
-"ouvrez Glade et enregistrez le fichier sous <file>toolbar_builder.ui</file>"
+"La méthode <code>add_button(button_text=\"The Answer\", response_id=42)</"
+"code>, où <code>42</code> est un nombre entier, est une alternative à la "
+"fonction <code>add_button(button_text=\"text\", response_id=Gtk.ResponseType."
+"RESPONSE)</code>, où <code>RESPONSE</code> peut être l'une des valeurs "
+"<code>OK, CANCEL, CLOSE, YES, NO, APPLY, HELP</code> qui correspondent aux "
+"nombres entiers <code>-5, -6,..., -11</code>."
 
-#: C/toolbar_builder.vala.page:32(media) C/toolbar_builder.py.page:48(media)
-msgid "Screenshot of Glade ui"
-msgstr "Capture d'écran de l'interface utilisateur de Glade"
+#. (itstool) path: item/p
+#: C/dialog.py.page:51 C/messagedialog.py.page:60
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkDialog.html";
+"\">GtkDialog</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/toolbar_builder.vala.page:37(p) C/toolbar_builder.py.page:53(p)
-# Bruno : c'est hélas bien widget dans glade
+#. (itstool) path: info/title
+#: C/dialog.vala.page:8
+#, fuzzy
+#| msgid "Dialog"
+msgctxt "text"
+msgid "Dialog (Vala)"
+msgstr "Boîte de dialogue"
+
+#. (itstool) path: page/p
+#: C/dialog.vala.page:23
+msgid "A dialog with the response signal hooked up to a callback function."
+msgstr ""
+"Une boîte de dialogue avec le signal de réponse connecté à une fonction de "
+"rappel."
+
+#. (itstool) path: page/code
+#: C/dialog.vala.page:25
+#, no-wrap
 msgid ""
-"Under <gui>Containers</gui> on the left hand side, right click on the "
-"toolbar icon and select <gui>Add widget as toplevel</gui>."
+"\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 ""
-"Au-dessous de <gui>Conteneurs</gui>, dans la partie gauche, faites un clic "
-"droit sur une icône de la barre d'outils et sélectionnez <gui>Ajouter un "
-"widget comme premier niveau</gui>."
 
-#: C/toolbar_builder.vala.page:38(media) C/toolbar_builder.py.page:54(media)
-msgid "Screenshot of toolbar icon in Glade ui"
+#. (itstool) path: item/p
+#: C/dialog.vala.page:32
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.html\";>Gtk.Dialog</"
+"link>"
 msgstr ""
-"Capture d'écran de l'icône de la barre d'outils dans l'interface utilisateur "
-"de Glade"
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/toolbar_builder.vala.page:43(p) C/toolbar_builder.py.page:59(p)
+#. (itstool) path: item/p
+#: C/dialog.vala.page:33
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 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>."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.Dialog.with_buttons.";
+"html\">Gtk.Dialog.with_buttons</link>"
 msgstr ""
-"Dans l'onglet <gui>Général</gui>, dans la partie inférieure droite, modifiez "
-"le <gui>Nom</gui> en <input>toolbar</input> et mettez l'option <gui>Afficher "
-"la flèche</gui> à <gui>Non</gui>."
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/toolbar_builder.vala.page:44(media) C/toolbar_builder.py.page:60(media)
-msgid "Screenshot of General tab"
-msgstr "Capture d'écran de l'onglet Général"
+#. (itstool) path: item/p
+#: C/dialog.vala.page:34 C/label.vala.page:33
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Label.html\";>Gtk.Label</"
+"link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/toolbar_builder.vala.page:49(p) C/toolbar_builder.py.page:65(p)
+#. (itstool) path: item/p
+#: C/dialog.vala.page:35
+#, fuzzy
+#| msgid ""
+#| "The method <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+#| "set_default_size.html\">set_default_size</link>"
 msgid ""
-"Under the <gui>Common</gui> tab, set <gui>Horizontal Expand</gui> to "
-"<gui>Yes</gui>."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.get_content_area.html";
+"\">get_content_area</link>"
 msgstr ""
-"Dans l'onglet <gui>Commun</gui>, définissez <gui>Extension horizontale</gui>à "
-"<gui>Oui</gui>."
+"La méthode <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"set_default_size.html\">set_default_size</link>"
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/entry.png'; md5=8a828cffdcbaa4bad83342e109f28cc8"
+msgctxt "_"
+msgid "external ref='media/entry.png' md5='8a828cffdcbaa4bad83342e109f28cc8'"
+msgstr "@@image: 'media/entry.png'; md5=8a828cffdcbaa4bad83342e109f28cc8"
 
-#: C/toolbar_builder.vala.page:50(media) C/toolbar_builder.py.page:66(media)
-msgid "Screenshot of Common tab"
-msgstr "Capture d'écran de l'onglet Commun"
+#. (itstool) path: info/title
+#: C/entry.c.page:8
+#, fuzzy
+#| msgid "Entry"
+msgctxt "text"
+msgid "Entry (C)"
+msgstr "Entrée"
 
-#: C/toolbar_builder.vala.page:55(p) C/toolbar_builder.py.page:71(p)
+#. (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 "Un champ de saisie de texte sur une ligne"
+
+#. (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 "Entrée"
+
+#. (itstool) path: page/p
+#: C/entry.c.page:24 C/entry.vala.page:23
+msgid "This application greets you in the terminal."
+msgstr "Cette application vous accueille dans le terminal."
+
+#. (itstool) path: page/code
+#: C/entry.c.page:26
+#, no-wrap
 msgid ""
-"Right click on the toolbar in the top right and select <gui>Edit</gui>. The "
-"<gui>Tool Bar Editor</gui> window will appear."
+"\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 ""
-"Faites un clic droit sur « toolbar » dans la partie en haut à droite et "
-"sélectionnez <gui>Éditer</gui>. La boîte de dialogue <gui>Éditeur de barre "
-"d'outils</gui> s'affiche."
 
-#: C/toolbar_builder.vala.page:56(media) C/toolbar_builder.py.page:72(media)
-msgid "Screenshot of where to right click to edit toolbar."
-msgstr "Capture d'écran indiquant où faire un clic-droit pour éditer la barre d'outils."
+#. (itstool) path: info/title
+#: C/entry.js.page:8
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Entry (JavaScript)"
+msgstr "JavaScript"
+
+#. (itstool) path: info/desc
+#: C/entry.js.page:18
+msgid "A single-line text entry field"
+msgstr "Un champ de saisie de texte sur une ligne"
+
+#. (itstool) path: page/p
+#: C/entry.js.page:23
+msgid "This application greets you by name through a pop-up window."
+msgstr ""
+"Cette application vous accueille par votre nom dans une fenêtre surgissante."
 
-#: C/toolbar_builder.vala.page:61(p) C/toolbar_builder.py.page:77(p)
+#. (itstool) path: page/code
+#: C/entry.js.page:25
+#, no-wrap
 msgid ""
-"We want to add 5 ToolButtons: New, Open, Undo, Fullscreen and Leave "
-"Fullscreen. First, we will add the New ToolButton."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const EntryExample = new Lang.Class({\n"
+"    Name: 'Entry Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsentry',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 100,\n"
+"            default_width: 300,\n"
+"            border_width: 10,\n"
+"            title: \"What is your name?\"});\n"
+"\n"
+"        // Create the text entry box\n"
+"        this.entry = new Gtk.Entry ();\n"
+"        this._window.add(this.entry);\n"
+"\n"
+"        // Connect the text entry box to a function that responds to what you type in\n"
+"        this.entry.connect(\"activate\", Lang.bind (this, this._hello));\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _hello: function() {\n"
+"\n"
+"        // Create a popup dialog to greet the person who types in their name\n"
+"        this._greeter = new Gtk.MessageDialog ({\n"
+"            transient_for: this._window,\n"
+"            modal: true,\n"
+"            text: \"Hello, \" + this.entry.get_text() + \"!\",\n"
+"            message_type: Gtk.MessageType.OTHER,\n"
+"            buttons: Gtk.ButtonsType.OK,\n"
+"        });\n"
+"\n"
+"        // Show the popup dialog\n"
+"        this._greeter.show();\n"
+"\n"
+"        // Bind the OK button to the function that closes the popup\n"
+"        this._greeter.connect (\"response\", Lang.bind(this, this._okClicked));\n"
+"    },\n"
+"\n"
+"    _okClicked: function () {\n"
+"        this._greeter.destroy();\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new EntryExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Nous voulons ajouter 5 ToolButtons (boutons) : « Nouveau », « Ouvrir », « Mode plein "
-"écran » et « Quitter le mode plein écran ». Ajoutons d'abord le ToolButton "
-"« Nouveau »."
 
-#: C/toolbar_builder.vala.page:64(p) C/toolbar_builder.py.page:80(p)
-msgid "Under <gui>Hierarchy</gui> tab, click <gui>Add</gui>."
-msgstr "Dans l'onglet <gui>Hiérarchie</gui>, cliquez sur <gui>Ajouter</gui>."
+#. (itstool) path: item/p
+#: C/entry.js.page:32
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Entry.html";
+"\">Gtk.Entry</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/toolbar_builder.vala.page:65(p) C/toolbar_builder.py.page:81(p)
-msgid "Change the name of the ToolItem to <input>new_button</input>."
-msgstr "Modifiez le nom de l'élément outil (ToolItem) en <input>new_button</input>."
+#. (itstool) path: info/title
+#: C/entry.py.page:8
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "Entry (Python)"
+msgstr "Python"
+
+#. (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"
 
-#: C/toolbar_builder.vala.page:66(p) C/toolbar_builder.py.page:82(p)
+#. (itstool) path: page/p
+#: C/entry.py.page:30
+msgid "This application greets you in the terminal with the name you provide."
+msgstr ""
+"Cette application vous accueille dans le terminal avec le nom que vous "
+"fournissez."
+
+#. (itstool) path: section/code
+#: C/entry.py.page:36
+#, no-wrap
 msgid ""
-"Scroll down and set <gui>Is important</gui> to <gui>Yes</gui>. This will "
-"cause the label of the ToolButton to be shown, when you view the toolbar."
+"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 ""
-"Faites défiler vers le bas et définissez <gui>Est important</gui> à "
-"<gui>Oui</gui>. Ceci provoque l'affichage de l'étiquette du ToolButton quand vous affichez "
-"la barre d'outils."
 
-#: C/toolbar_builder.vala.page:67(p) C/toolbar_builder.py.page:83(p)
-msgid "Enter the <gui>action name</gui>: <input>app.new</input>."
-msgstr "Saisissez le <gui>nom de l'action</gui> : <input>app.new</input>."
+#. (itstool) path: section/title
+#: C/entry.py.page:40
+msgid "Useful methods for an Entry widget"
+msgstr "Méthodes utiles pour un élément graphique Entrée"
 
-#: C/toolbar_builder.vala.page:68(p) C/toolbar_builder.py.page:84(p)
-msgid "Change the <gui>Label</gui> to <input>New</input>."
-msgstr "Modifiez le champ <gui>Étiquette</gui> en <input>New</input> (Nouveau)."
+#. (itstool) path: section/p
+#: C/entry.py.page:41
+#, fuzzy
+#| msgid ""
+#| "For an explanation of signals and callback functions, see <link xref="
+#| "\"signals-callbacks.py\">this page</link>. Some of the signals that a Gtk."
+#| "Entry widget can emit are: <code>\"activate\"</code> (emitted when the "
+#| "user activates the Entry key); <code>\"backspace\"</code> (emitted when "
+#| "the user activates the Backspace or Shift-Backspace keys); <code>\"copy-"
+#| "clipboard\"</code> (Ctrl-c and Ctrl-Insert); <code>\"paste-clipboard\"</"
+#| "code> (Ctrl-v and Shift-Insert); <code>\"delete-from-cursor\"</code> "
+#| "(Delete, for deleting a character; Ctrl-Delete, for deleting a word); "
+#| "<code>\"icon-press\"</code> (emitted when the user clicks an activable "
+#| "icon); <code>\"icon-release\"</code> (emitted on the button release from "
+#| "a mouse click over an activable icon); <code>\"insert-at-cursor\"</code> "
+#| "(emitted when the user initiates the insertion of a fixed string at the "
+#| "cursor); <code>\"move-cursor\"</code> (emitted when the user initiates a "
+#| "cursor movement); <code>\"populate-popup\"</code> (emitted before showing "
+#| "the context menu of the entry; it can be used to add items to it)."
+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 ""
+"Pour de plus amples informations sur les signaux et les fonctions de rappel, "
+"consultez <link xref=\"signals-callbacks.py\">cette page</link>. Voici "
+"quelques uns des signaux qu'un élément graphique Gtk.Entry peut émettre : "
+"<code>\"activate\"</code> (émis quand l'utilisateur appuie sur la touche "
+"Entrée) ; <code>\"backspace\"</code> (émis quand l'utilisateur appuie soit "
+"sur la touche Retour arrière, soit sur la combinaison de touches Maj+Retour "
+"arrière) ; <code>\"copy-clipboard\"</code> (Ctrl+c et Ctrl+Inser) ; <code>"
+"\"paste-clipboard\"</code> (Ctrl+v et Ctrl+Inser) ; <code>\"delete-from-"
+"cursor\"</code> (Suppr pour supprimer un caractère et Ctrl+Suppr pour "
+"supprimer un mot) ; <code>\"icon-press\"</code> (émis quand l'utilisateur "
+"clique sur une icône activable) ; <code>\"icon-release\"</code> (émis lors "
+"du relâchement du bouton après un clic de souris sur une icône activable) ; "
+"<code>\"insert-at-cursor\"</code> (émis quand l'utilisateur commence "
+"l'insertion du premier caractère d'une chaîne à l'emplacement du curseur) ; "
+"<code>\"move-cursor\"</code> (émis quand l'utilisateur commence à déplacer "
+"le curseur) ; <code>\"populate-popup \"</code> (émis avant d'afficher le "
+"menu contextuel de l'entrée ; il peut servir à y ajouter des éléments)."
 
-#: C/toolbar_builder.vala.page:69(p) C/toolbar_builder.py.page:85(p)
+#. (itstool) path: item/p
+#: C/entry.py.page:43
 msgid ""
-"Select the <gui>New</gui> Stock Id from the drop down menu, or type "
-"<input>gtk-new</input>."
+"<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 ""
-"Dans le menu déroulant « ID prédéfini », sélectionnez <gui>Nouveau</gui>, "
-"ou saisissez <input>gtk-new</input>."
+"Les méthodes <code>get_buffer()</code> et <code>set_buffer(tampon)</code>, "
+"où <code>tampon</code> est un objet Gtk.EntryBuffer, peuvent être utilisées "
+"pour obtenir et définir le tampon de l'entrée."
 
-#: C/toolbar_builder.vala.page:71(p) C/toolbar_builder.py.page:87(p)
+#. (itstool) path: item/p
+#: C/entry.py.page:44
 msgid ""
-"Repeat the above steps for the remaining ToolButtons, with the following "
-"properties:"
+"<code>get_text()</code> and <code>set_text(\"some text\")</code> can be used "
+"to get and set the content for the entry."
 msgstr ""
-"Répétez les étapes ci-dessus pour tous les autres ToolButtons en leur "
-"attribuant les propriétés suivantes :"
+"Les fonctions <code>get_text()</code> et <code>set_text(\"some text\")</"
+"code> peuvent être utilisées pour obtenir et définir le contenu de l'entrée."
 
-#: C/toolbar_builder.vala.page:77(p) C/toolbar_builder.py.page:93(p)
-#: C/helloWorld.js.page:139(title)
-msgid "Name"
-msgstr "Nom"
+#. (itstool) path: item/p
+#: C/entry.py.page:45
+msgid "<code>get_text_length()</code> is self-explanatory."
+msgstr "La méthode <code>get_text_length()</code> parle d'elle-même."
 
-#: C/toolbar_builder.vala.page:78(p) C/toolbar_builder.py.page:94(p)
-msgid "Is important"
-msgstr "Est important"
+#. (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 ""
+"La méthode <code>get_text_area()</code> obtient la position où le texte de "
+"l'entrée est dessiné."
 
-#: C/toolbar_builder.vala.page:79(p) C/toolbar_builder.py.page:95(p)
-msgid "Action name"
-msgstr "Nom de l'action"
+#. (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 charcater. The latter method is reversed by "
+"<code>unset_invisbile_char()</code>."
+msgstr ""
+"Si nous définissons la méthode <code>set_visibility(False)</code>, les "
+"caractères de l'entrée sont affichés en tant que caractères invisibles. "
+"C'est la meilleur police disponible dans le type actuel, mais peut être "
+"modifié à l'aide de <code>set_invisible_char(ch)</code>, où <code>ch</code> "
+"est un caractère Unicode. Nous pouvons inverser cette denière fonction avec "
+"<code>unset_invisible_char()</code>."
 
-#: C/toolbar_builder.vala.page:80(p) C/toolbar_builder.py.page:96(p)
-#: C/label.vala.page:20(title) C/label.py.page:26(title)
-#: C/label.js.page:20(title) C/label.c.page:21(title)
-msgid "Label"
-msgstr "Étiquette"
+#. (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 ""
+"La méthode <code>set_max_length(int)</code>, où <code>int</code> est un "
+"nombre entier, coupe chaque entrée plus longue que <code>int</code> afin "
+"d'obtenir la longueur maximum désirée."
 
-#: C/toolbar_builder.vala.page:81(p) C/toolbar_builder.py.page:97(p)
-msgid "Stock Id"
-msgstr "ID prédéfini"
+#. (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 ""
+"Par défaut, si vous appuyez sur la touche Entrée, Gtk.Entry émet le signal "
+"<code>\"activate\"</code>. Si vous préférez activer l'élément graphique par "
+"défaut de la fenêtre (défini par la méthode <code>set_default(widget)</code> "
+"pour la fenêtre), utilisez alors <code>set_activates_default(True)</code>."
 
-#: C/toolbar_builder.vala.page:86(p) C/toolbar_builder.py.page:102(p)
-msgid "open_button"
-msgstr "open_button"
+#. (itstool) path: item/p
+#: C/entry.py.page:50
+msgid "To set a frame around the entry: <code>set_has_frame(True)</code>."
+msgstr ""
+"Pour définir un cadre autour de l'entrée, utilisez la méthode "
+"<code>set_has_frame(True)</code>."
 
-#: C/toolbar_builder.vala.page:87(p) C/toolbar_builder.vala.page:94(p)
-#: C/toolbar_builder.vala.page:101(p) C/toolbar_builder.vala.page:108(p)
-#: C/toolbar_builder.py.page:103(p) C/toolbar_builder.py.page:110(p)
-#: C/toolbar_builder.py.page:117(p) C/toolbar_builder.py.page:124(p)
-msgid "Yes"
-msgstr "Oui"
+#. (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 ""
+"La méthode <code>set_placeholder_text(« texte »)</code> définit le texte "
+"pour qu'il s'affiche dans l'entrée quand il est vide et inactif."
 
-#: C/toolbar_builder.vala.page:88(p) C/toolbar_builder.py.page:104(p)
-msgid "app.open"
-msgstr "app.open"
+#. (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 ""
+"Les méthodes <code>set_overwrite_mode(True)</code> et "
+"<code>set_overwrite_mode(False)</code> parlent d'elles-mêmes."
 
-#: C/toolbar_builder.vala.page:89(p) C/toolbar_builder.py.page:105(p)
-msgid "Open"
-msgstr "Open (Ouvrir)"
+#. (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 ""
+"La méthode <code>set_editable(False)</code> n'autorise pas l'utilisateur à "
+"modifier le texte dans l'élément graphique."
 
-#: C/toolbar_builder.vala.page:90(p) C/toolbar_builder.py.page:106(p)
-msgid "gtk-open"
-msgstr "gtk-open"
+#. (itstool) path: item/p
+#: C/entry.py.page:54
+#, fuzzy
+#| msgid ""
+#| "<code>set_completion(completion)</code>, where <code>completion</code> is "
+#| "a <link href=\"http://developer.gnome.org/gtk3/3.4/GtkEntryCompletion.html";
+#| "\"><code>Gtk.EntryCompletion</code></link>, sets completion - or disables "
+#| "it if <code>completion</code> is <code>None</code>."
+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 ""
+"La méthode <code>set_completion(completion)</code>, où <code>completion</"
+"code> est une <link href=\"http://developer.gnome.org/gtk3/3.4/";
+"GtkEntryCompletion.html\"><code>Gtk.EntryCompletion</code></link>, active la "
+"complétion - ou la désactive si <code>completion</code> est <code>None</"
+"code>."
 
-#: C/toolbar_builder.vala.page:93(p) C/toolbar_builder.py.page:109(p)
-msgid "undo_button"
-msgstr "undo_button"
+#. (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 ""
+"Un élément graphique Entry peut afficher la progression ou les informations "
+"d'activité derrière le texte. La méthode "
+"<code>set_progress_fraction(fraction)</code>, où <code>fraction</code> est "
+"un nombre flottant <code>float</code> compris entre <code>0.0</code> et "
+"<code>1.0</code> inclus, sert à remplir la fraction définie de la barre de "
+"progression. La méthode <code>set_progress_pulse_step()</code> définit la "
+"fraction de la largeur totale de l'entrée qui va se remplir d'un bloc à "
+"chaque appel à <code>progress_pulse()</code>. Cette dernière fonction "
+"indique qu'une progression est en cours et passe l'indicateur de progression "
+"sur \"activity mode\", ce qui fait avancer ou reculer un bloc. Chaque appel "
+"à <code>progress_pulse()</code> fait un petit peu bouger le bloc "
+"(l'amplitude du mouvement par pulsation est définie par "
+"<code>set_progress_pulse_step()</code>), comme expliqué précédemment."
+
+#. (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 ""
+"Un élément graphique Entry peut aussi afficher des icônes. Ces icônes sont "
+"activables d'un clic de souris, ou peuvent être définies comme étant la "
+"source d'un élément glissable et comporter des infobulles. Pour ajouter une "
+"icône de la collection, utilisez la méthode "
+"<code>set_icon_from_stock(icon_position, stock_id)</code>, ou bien l'une des "
+"méthodes suivantes : <code>set_icon_from_pixbuf(icon_position, pixbuf)</"
+"code> ; <code>set_icon_from_icon_name(icon_position, icon_name)</code>, où "
+"<code>icon_position</code> est l'une des deux positions <code>Gtk."
+"EntryIconPosition.PRIMARY</code> (pour positionner l'icône au début de "
+"l'entrée) ou <code>Gtk.EntryIconPosition.SECONDARY</code> (pour positionner "
+"l'icône à la fin de l'entrée). Pour ajouter une infobulle à une icône, "
+"utiliser l'une des deux fonctions <code>set_icon_tooltip_text(\"tooltip text"
+"\")</code> ou <code>set_icon_tooltip_markup(\"tooltip text in Pango markup "
+"language\")</code>."
 
-#: C/toolbar_builder.vala.page:95(p) C/toolbar_builder.py.page:111(p)
-msgid "win.undo"
-msgstr "win.undo"
+#. (itstool) path: item/p
+#: C/entry.py.page:64
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkEntry.html";
+"\">GtkEntry</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/toolbar_builder.vala.page:96(p) C/toolbar_builder.py.page:112(p)
-msgid "Undo"
-msgstr "Undo (Annuler)"
+#. (itstool) path: info/title
+#: C/entry.vala.page:8
+#, fuzzy
+#| msgid "Entry"
+msgctxt "text"
+msgid "Entry (Vala)"
+msgstr "Entrée"
 
-#: C/toolbar_builder.vala.page:97(p) C/toolbar_builder.py.page:113(p)
-msgid "gtk-undo"
-msgstr "gtk-undo"
+#. (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 ""
 
-#: C/toolbar_builder.vala.page:100(p) C/toolbar_builder.py.page:116(p)
-msgid "fullscreen_button"
-msgstr "fullscreen_button"
+#. (itstool) path: item/p
+#: C/entry.vala.page:30
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Entry.html\";>Gtk.Entry</"
+"link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/toolbar_builder.vala.page:102(p) C/toolbar_builder.vala.page:109(p)
-#: C/toolbar_builder.py.page:118(p) C/toolbar_builder.py.page:125(p)
-msgid "win.fullscreen"
-msgstr "win.fullscreen"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/image.png'; md5=9416aa74d9d6a857783f7a36338e7a02"
+msgctxt "_"
+msgid ""
+"external ref='media/filechooserdialog_save.png' "
+"md5='3a7a3b71b9d3a36066857843b68ff27f'"
+msgstr "@@image: 'media/image.png'; md5=9416aa74d9d6a857783f7a36338e7a02"
 
-#: C/toolbar_builder.vala.page:103(p) C/toolbar_builder.py.page:119(p)
-msgid "Fullscreen"
-msgstr "Fullscreen (Mode plein écran)"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/fontchooserwidget.png'; "
+#| "md5=9161245e307b432ae1313e9a9941edae"
+msgctxt "_"
+msgid ""
+"external ref='media/filechooserdialog_menu.png' "
+"md5='8a75f04127a70eba0ed68a9eb1d3bbca'"
+msgstr ""
+"@@image: 'media/fontchooserwidget.png'; md5=9161245e307b432ae1313e9a9941edae"
 
-#: C/toolbar_builder.vala.page:104(p) C/toolbar_builder.py.page:120(p)
-msgid "gtk-fullscreen"
-msgstr "gtk-fullscreen"
+#. (itstool) path: info/title
+#: C/filechooserdialog.py.page:8
+#, fuzzy
+#| msgid "FileChooserDialog"
+msgctxt "text"
+msgid "FileChooserDialog (Python)"
+msgstr "Boîte de dialogue FileChooser"
 
-#: C/toolbar_builder.vala.page:107(p) C/toolbar_builder.py.page:123(p)
-msgid "leave_fullscreen_button"
-msgstr "leave_fullscreen_button"
+#. (itstool) path: info/desc
+#: C/filechooserdialog.py.page:22
+#, fuzzy
+#| msgid "A dialog suitable for \"Open\" and \"Save\" commands."
+msgid "A dialog suitable for \"Open\" and \"Save\" commands"
+msgstr "Une boîte de dialogue qui convient aux commandes « open » et « save »."
 
-#: C/toolbar_builder.vala.page:110(p) C/toolbar_builder.py.page:126(p)
-msgid "Leave Fullscreen"
-msgstr "Leave Fullscreen (Quitter le mode plein écran)"
+#. (itstool) path: page/title
+#: C/filechooserdialog.py.page:25 C/filechooserdialog.vala.page:24
+msgid "FileChooserDialog"
+msgstr "Boîte de dialogue FileChooser"
 
-#: C/toolbar_builder.vala.page:111(p) C/toolbar_builder.py.page:127(p)
-msgid "gtk-leave-fullscreen"
-msgstr "gtk-leave-fullscreen"
+#. (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 ""
 
-#: C/toolbar_builder.vala.page:120(p) C/toolbar_builder.py.page:136(p)
-msgid "Close the <gui>Tool Bar Editor</gui>."
-msgstr "Fermez l'<gui>Éditeur de barre d'outils</gui>."
+#. (itstool) path: page/p
+#: C/filechooserdialog.py.page:29
+msgid "It is also possible to call a FileChooserDialog to open a new document."
+msgstr ""
 
-#: C/toolbar_builder.vala.page:123(p)
+#. (itstool) path: section/title
+#: C/filechooserdialog.py.page:34
+#, fuzzy
+#| msgid "Code used to generate this example"
+msgid "Steps to recreate the example"
+msgstr "Code utilisé pour générer cet exemple"
+
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:36
 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."
+"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 ""
-"Au lancement du programme, nous ne voulons pas que le ToolButton "
-"<gui>Quitter le mode plein écran</gui> s'affiche, car nous ne sommes pas en "
-"mode plein écran. Dans l'onglet <gui>Commun</gui>, définissez la propriété "
-"<gui>Visible</gui> sur <gui>Non</gui>. Le ToolButton sera toujours présent "
-"dans le concepteur d'interface, mais se comportera comme souhaité quand le "
-"fichier sera chargé dans le code de votre programme."
 
-#: C/toolbar_builder.vala.page:124(media) C/toolbar_builder.py.page:140(media)
-msgid "Setting the visible property to No"
-msgstr "Définition de la propriété « Visible » à « Non »"
+#. (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 ""
 
-#: C/toolbar_builder.vala.page:129(p) C/toolbar_builder.py.page:145(p)
-msgid "Save your work, and close Glade."
-msgstr "Enregistrez votre travail et quittez Glade."
+#. (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 ""
 
-#: C/toolbar_builder.vala.page:132(p) C/toolbar_builder.py.page:148(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:39
 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>:"
+"\"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 ""
-"Vous pouvez voir le fichier XML créé par Glade ci-dessous. C'est la "
-"description de la barre d'outils. Au moment de la rédaction de ces lignes, "
-"l'option pour ajouter la classe Gtk.STYLE_CLASS_PRIMARY_TOOLBAR dans "
-"l'interface de Glade n'existait pas. Mais nous pouvons le faire "
-"manuellement. Pour cela, ajoutez le code XML suivant à la ligne 9 du fichier "
-"<file>toolbar_builder.ui</file> :"
 
-#: C/toolbar_builder.vala.page:138(p) C/toolbar_builder.py.page:154(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:40
 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."
+"\"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 ""
-"Le programme fonctionnera malgré tout correctement si vous ne l'ajoutez pas, "
-"mais la barre d'outils que vous obtiendrez sera légèrement différente de "
-"celle de la capture d'écran en haut de cette page."
 
-#: C/toolbar_builder.vala.page:143(p) C/toolbar_builder.py.page:164(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:41
 msgid ""
-"We now create the code below, which adds the toolbar from the file we just "
-"created."
+"\"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 ""
-"Le code ci-dessous ajoute la barre d'outils du fichier que nous venons de "
-"finir."
 
-#: C/toolbar_builder.vala.page:150(link) C/toolbar.vala.page:33(link)
-#: C/toolbar.js.page:31(link)
-msgid "Gtk.Toolbar"
-msgstr "Gtk.Toolbar"
+#. (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 ""
 
-#: C/toolbar_builder.vala.page:151(link) C/toolbar.vala.page:34(link)
-msgid "Gtk.Toolbutton"
-msgstr "Gtk.Toolbutton"
+#. (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 ""
 
-#: C/toolbar_builder.vala.page:152(link) C/toolbar.vala.page:35(link)
-msgid "Gtk.Stock"
-msgstr "Gtk.Stock"
+#. (itstool) path: section/title
+#: C/filechooserdialog.py.page:48
+#, fuzzy
+#| msgid "XML UI file which creates the app-menu"
+msgid "XML file which creates the app-menu"
+msgstr "Fichier XML interface utilisateur créant l'app-menu"
 
-#: C/toolbar_builder.py.page:7(title)
-msgid "Toolbar created using Glade (Python)"
-msgstr "Barre d'outils créée avec Glade (Python)"
+#. (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 ""
 
-#: C/toolbar_builder.py.page:26(name) C/textview.py.page:14(name)
-#: C/strings.py.page:14(name) C/signals-callbacks.py.page:14(name)
-#: C/properties.py.page:14(name) C/model-view-controller.py.page:14(name)
-#: C/label.py.page:18(name) C/entry.py.page:18(name)
-msgid "Sebastian Pölsterl"
-msgstr "Sebastian Pölsterl"
+#. (itstool) path: section/title
+#: C/filechooserdialog.py.page:58
+#, fuzzy
+#| msgid "Useful methods for a FontChooserWidget"
+msgid "Useful methods for a FileChooserDialog"
+msgstr "Méthodes utiles pour un élément graphique GtkFontChooser"
 
-#: C/toolbar_builder.py.page:27(email) C/textview.py.page:15(email)
-#: C/strings.py.page:15(email) C/signals-callbacks.py.page:15(email)
-#: C/properties.py.page:15(email) C/model-view-controller.py.page:15(email)
-#: C/label.py.page:19(email) C/entry.py.page:19(email)
-msgid "sebp k-d-w org"
-msgstr "sebp k-d-w org"
+#. (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 ""
 
-#: C/toolbar_builder.py.page:31(desc) C/toolbar.py.page:18(desc)
-msgid "A bar of buttons and other widgets"
-msgstr "Une barre de boutons et autres éléments graphiques"
+#. (itstool) path: section/p
+#: C/filechooserdialog.py.page:60
+msgid "Besides the methods used in the <link xref=\"#code\"/>, we have:"
+msgstr ""
 
-#: C/toolbar_builder.py.page:37(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:62
 msgid ""
-"This example is similar to <link xref=\"toolbar.py\"/>, except we use Glade "
-"to create the toolbar in an XML .ui file."
+"<code>set_show_hidden(True)</code> is used to display hidden files and "
+"folders."
 msgstr ""
-"Cet exemple est identique à <link xref=\"toolbar.py\"/>, sauf que nous "
-"utilisons Glade pour créer la barre d'outils dans un fichier XML .ui."
 
-#: C/toolbar_builder.py.page:42(title)
-msgid "Creating the toolbar with Glade"
-msgstr "Création de la barre d'outils avec Glade"
-
-#: C/toolbar_builder.py.page:139(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:63
 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."
+"<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 ""
-"Au lancement du programme, nous ne voulons pas que le ToolButton "
-"<gui>Quitter le mode plein écran</gui> s'affiche, car nous ne sommes pas en "
-"mode plein écran. Dans l'onglet <gui>Commun</gui>, définissez la propriété "
-"<gui>Visible</gui> sur <gui>Non</gui>. Le ToolButton sera toujours présent "
-"dans le concepteur d'interface, mais se comportera comme souhaité quand le "
-"fichier sera chargé dans le code de votre programme. Notez que la méthode "
-"<code>show_all()</code> ne prend pas en compte ce réglage, de sorte qu'il "
-"nous faut utiliser <code>show()</code> séparément pour chaque élément."
 
-#: C/toolbar_builder.py.page:170(title)
-msgid "Useful methods for Gtk.Builder"
-msgstr "Méthodes utiles pour Gtk.Builder"
+#. (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 ""
 
-#: C/toolbar_builder.py.page:171(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:65
 msgid ""
-"For the useful methods for a Toolbar widget, see <link xref=\"toolbar.py\"/>"
+"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 ""
-"Consultez <link xref=\"toolbar.py\"/> pour connaître les méthodes utiles à "
-"un élément graphique de barre d'outils"
 
-#: C/toolbar_builder.py.page:173(p)
-msgid "Gtk.Builder builds an interface from an XML UI definition."
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:73
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkFileChooserDialog.html";
+"\">GtkFileChooserDialog</link>"
 msgstr ""
-"Gtk.Builder construit une interface à partir d'une définition XML d'une "
-"interface utilisateur."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/toolbar_builder.py.page:176(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:74
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"<code>add_from_file(filename)</code> loads and parses the given file and "
-"merges it with the current contents of the Gtk.Builder."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkFileChooser.html";
+"\">GtkFileChooser</link>"
 msgstr ""
-"La méthode <code>add_from_file(nomdufichier)</code> charge et analyse le "
-"fichier donné et le fusionne avec le contenu actuel de Gtk.Builder."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/toolbar_builder.py.page:177(p)
+#. (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
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"<code>add_from_string(string)</code> parses the given string and merges it "
-"with the current contents of the Gtk.Builder."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkWindow.html";
+"\">GtkWindow</link>"
 msgstr ""
-"La méthode <code>add_from_string(chaîne)</code> charge et analyse la chaîne "
-"de caractères donnée et la fusionne avec le contenu actuel de Gtk.Builder."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/toolbar_builder.py.page:178(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:76 C/textview.c.page:39
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkTextView.html";
+"\">GtkTextView</link>"
 msgstr ""
-"La méthode <code>add_objects_from_file(nomdufichier, object_ids)</code> est "
-"identique à <code>add_from_file()</code>, mais elle ne charge que les objets "
-"qui possèdent les identifiants donnés par la liste <code>object_id</code>."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/toolbar_builder.py.page:179(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:77 C/textview.c.page:38
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"<code>add_objects_from_string(filename, object_ids)</code> is the same as "
-"<code>add_from_string()</code>, but it loads only the objects with the ids "
-"given in the <code>object_id</code>s list."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkTextBuffer.html";
+"\">GtkTextBuffer</link>"
 msgstr ""
-"La méthode <code>add_objects_from_string(nomdufichier, object_ids)</code> "
-"est identique à <code>add_from_string()</code>, mais elle ne charge que les "
-"objets avec les identifiants donnés par la liste <code>object_id</code>."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/toolbar_builder.py.page:180(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:78 C/scrolledwindow.c.page:36
+#: C/textview.c.page:40
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"<code>get_object(object_id)</code> retrieves the widget with the id "
-"<code>object_id</code> from the loaded objects in the builder."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkScrolledWindow.html";
+"\">GtkScrolledWindow</link>"
 msgstr ""
-"La méthode <code>get_object(object_id)</code> récupère l'élément "
-"graphique possédant l'identifiant <code>object_id</code> à partir des objets "
-"chargés dans le constructeur."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/toolbar_builder.py.page:181(p)
-msgid "<code>get_objects()</code> returns all loaded objects."
-msgstr "La méthode <code>get_objects()</code> renvoie tous les objets chargés."
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:79
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gio/stable/GFile.html\";>GFile</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/toolbar_builder.py.page:182(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.py.page:81
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkBuilder.html";
+"\">GtkBuilder</link>"
 msgstr ""
-"La méthode <code>connect_signals(handler_object)</code> connecte les signaux "
-"aux méthodes fournies par le gestionnaire <code>handler_object</code>. Ce "
-"peut être n'importe quel objet contenant des clés ou des attributs qui sont "
-"appelés comme les noms des gestionnaires de signaux dans la "
-"description de l'interface, par ex. une classe ou un dictionnaire."
-
-#: C/toolbar_builder.py.page:193(link) C/togglebutton.c.page:39(link)
-#: C/switch.py.page:50(link) C/switch.c.page:36(link)
-#: C/statusbar.c.page:39(link) C/spinbutton.c.page:39(link)
-#: C/separator.py.page:39(link) C/radiobutton.py.page:52(link)
-#: C/radiobutton.c.page:36(link) C/grid.py.page:59(link)
-#: C/grid.c.page:35(link) C/buttonbox.py.page:51(link)
-msgid "GtkGrid"
-msgstr "GtkGrid"
-
-#: C/toolbar_builder.py.page:194(link) C/menubar.py.page:184(link)
-#: C/filechooserdialog.py.page:79(link)
-msgid "GtkBuilder"
-msgstr "GtkBuilder"
-
-#: C/toolbar_builder.py.page:196(link) C/toolbar.py.page:58(link)
-msgid "Event Structures"
-msgstr "Event Structures"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/toolbar_builder.py.page:197(link)
-msgid "The Python Gtk+ 3 Tutorial - Glade and Gtk.Builder"
-msgstr "Tutoriel Gtk+ 3 Python - Glade et Gtk.Builder"
+#. (itstool) path: info/title
+#: C/filechooserdialog.vala.page:8
+#, fuzzy
+#| msgid "FileChooserDialog"
+msgctxt "text"
+msgid "FileChooserDialog (Vala)"
+msgstr "Boîte de dialogue FileChooser"
 
-#: C/toolbar.vala.page:7(title)
-msgid "Toolbar (Vala)"
-msgstr "Barre d'outils (Vala)"
+#. (itstool) path: info/desc
+#: C/filechooserdialog.vala.page:21
+msgid "A dialog suitable for \"Open\" and \"Save\" commands."
+msgstr "Une boîte de dialogue qui convient aux commandes « open » et « save »."
 
-#: C/toolbar.vala.page:21(title) C/toolbar.py.page:21(title)
-#: C/toolbar.js.page:20(title)
-msgid "Toolbar"
-msgstr "Barre d'outils"
+#. (itstool) path: section/title
+#: C/filechooserdialog.vala.page:26
+msgid "Overview of the example"
+msgstr "Vue d'ensemble de l'exemple"
 
-#: C/toolbar.vala.page:24(p) C/toolbar.js.page:22(p)
+#. (itstool) path: section/p
+#: C/filechooserdialog.vala.page:27
 msgid ""
-"Toolbar can contain either text or stock icons. In this sample we use stock "
-"icons. This example has fullscreen functionality."
+"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 ""
-"La barre d'outils peut contenir soit du texte, soit des icônes de la "
-"collection. Dans cet exemple, nous utilisons les icônes de la collection. "
-"Cet exemple possède la fonction plein écran."
+"Cet exemple montre l'utilisation d'une boîte de dialogue FileChooser. Elle "
+"est intégrée dans une application éditeur de texte très simple. Toutes les "
+"<link xref=\"menubar.vala#win-app\">actions</link>, y compris les commandes "
+"« open », « save » et « save-as » sont disponibles dans <link xref=\"gmenu."
+"vala\">app-menu</link>. Ici, nous créons l'app-menu avec un fichier "
+"interface utilisateur en XML, qui est ensuite importé dans l'application "
+"avec Gtk.Builder."
+
+#. (itstool) path: section/title
+#: C/filechooserdialog.vala.page:29
+msgid "XML UI file which creates the app-menu"
+msgstr "Fichier XML interface utilisateur créant l'app-menu"
+
+#. (itstool) path: section/title
+#: C/filechooserdialog.vala.page:32
+msgid "Vala Code"
+msgstr "Code Vala"
 
-#: C/toolbar.vala.page:25(p) C/toolbar.js.page:23(p)
+#. (itstool) path: section/code
+#: C/filechooserdialog.vala.page:33
+#, no-wrap
 msgid ""
-"This example uses SimpleActions (window and app). App actions can easily be "
-"added the the app menu."
+"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 ""
-"Cet exemple utilise SimpleActions (fenêtre et application). Les actions "
-"applications peuvent être facilement ajoutées au menu « Applications »."
 
-#: C/toolbar.py.page:7(title)
-msgid "Toolbar (Python)"
-msgstr "Barre d'outils (Python)"
+#. (itstool) path: section/title
+#: C/filechooserdialog.vala.page:35 C/menubar.vala.page:187
+msgid "Relevant API documentation"
+msgstr "Documentation API associée"
 
-#: C/toolbar.py.page:24(p)
-msgid "An example of toolbar with buttons (from stock icons)."
+#. (itstool) path: item/p
+#: C/filechooserdialog.vala.page:40
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://valadoc.org/gtk+-3.0/Gtk.FileChooser.html\";>FileChooser</"
+"link>"
 msgstr ""
-"Un exemple de barre d'outils avec des boutons (à partir des icônes de la "
-"collection)."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/toolbar.py.page:35(title)
-msgid "Useful methods for a Toolbar widget"
-msgstr "Méthodes utiles pour un élément graphique barre d'outils"
+#. (itstool) path: item/p
+#: C/filechooserdialog.vala.page:41
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://valadoc.org/gtk+-3.0/Gtk.FileChooserDialog.html";
+"\">FileChooserDialog</link>"
+msgstr ""
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/toolbar.py.page:38(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.vala.page:42
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://valadoc.org/gtk+-3.0/Gtk.Builder.html\";>Gtk.Builder</"
+"link>"
 msgstr ""
-"La méthode <code>insert(tool_item, position)</code> insère l'élément "
-"<code>tool_item</code> à sa place <code>position</code>. Si <code>position</"
-"code> est négatif, l'élément est ajouté à la fin de la barre d'outils."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/toolbar.py.page:39(p)
+#. (itstool) path: item/p
+#: C/filechooserdialog.vala.page:43
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"<code>get_item_index(tool_item)</code> retrieves the position of "
-"<code>tool_item</code> on the toolbar."
+"<link href=\"http://valadoc.org/gio-2.0/GLib.ActionEntry.html\";>GLib."
+"ActionEntry</link>"
 msgstr ""
-"La méthode <code>get_item_index(tool_item)</code> récupère la position de "
-"l'élément <code>tool_item</code> dans la barre d'outils."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/toolbar.py.page:40(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/fontchooserwidget.png'; "
+#| "md5=9161245e307b432ae1313e9a9941edae"
+msgctxt "_"
 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>."
+"external ref='media/fontchooserwidget.png' "
+"md5='9161245e307b432ae1313e9a9941edae'"
 msgstr ""
-"La méthode <code>get_n_items()</code> renvoie le nombre d'éléments de la "
-"barre d'outils ; <code>get_nth_item(position)</code> renvoie l'élément placé "
-"à <code>position</code>."
+"@@image: 'media/fontchooserwidget.png'; md5=9161245e307b432ae1313e9a9941edae"
 
-#: C/toolbar.py.page:41(p)
+#. (itstool) path: info/title
+#: C/fontchooserwidget.js.page:8
+#, fuzzy
+#| msgid "FontChooserWidget"
+msgctxt "text"
+msgid "FontChooserWidget (JavaScript)"
+msgstr "Élément graphique GtkFontChooser"
+
+#. (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 "Un élément graphique pour choisir une police"
+
+#. (itstool) path: page/title
+#: C/fontchooserwidget.js.page:21 C/fontchooserwidget.py.page:23
+#: C/fontchooserwidget.vala.page:21
+msgid "FontChooserWidget"
+msgstr "Élément graphique GtkFontChooser"
+
+#. (itstool) path: page/p
+#: C/fontchooserwidget.js.page:24 C/fontchooserwidget.py.page:26
+msgid "A FontChooserWidget with a callback function."
+msgstr "Un élément graphique GtkFontChooser avec une fonction de rappel."
+
+#. (itstool) path: section/code
+#: C/fontchooserwidget.js.page:30
+#, no-wrap
 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."
+"//!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const FontChooserWidgetExample = new Lang.Class ({\n"
+"    Name: 'Font Chooser Widget Example',\n"
+"\n"
+"    // Create the application itthis\n"
+"    _init: function () {\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', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this.window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"        // 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\", Lang.bind(this, this._fontCb));\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: function() {\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 ""
-"S'il n'y a pas assez de place dans la barre d'outils pour tous les éléments "
-"du menu, et si l'affichage de la flèche est sur <code>set_show_arrow(True)</"
-"code>, les éléments en surplus sont affichés dans un menu de dépassement."
 
-#: C/toolbar.py.page:42(p)
+#. (itstool) path: item/p
+#: C/fontchooserwidget.js.page:37 C/fontchooserwidget.py.page:47
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkFontChooserWidget.";
+"html\">GtkFontChooserWidget</link>"
 msgstr ""
-"La méthode <code>set_icon_size(icon_size)</code> définit la taille des "
-"icônes de la barre d'outils ; <code>icon_size</code> peut être : <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>. Cette option ne doit être utilisée que pour des barres "
-"d'outils spéciales. Les barres d'outils des applications normales doivent "
-"respecter le choix des préférences des utilisateurs en ce qui concerne la taille des "
-"icônes. La fonction <code>unset_icon_size()</code> désactive les préférences "
-"définies avec <code>set_icon_size(icon_size)</code> afin que les préférences "
-"de l'utilisateur soient utilisées pour déterminer la taille des icônes."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: info/title
+#: C/fontchooserwidget.py.page:8
+#, fuzzy
+#| msgid "FontChooserWidget"
+msgctxt "text"
+msgid "FontChooserWidget (Python)"
+msgstr "Élément graphique GtkFontChooser"
 
-#: C/toolbar.py.page:43(p)
+#. (itstool) path: section/code
+#: C/fontchooserwidget.py.page:32
+#, no-wrap
 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>."
+"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 ""
-"La méthode <code>set_style(style)</code>, où <code>style</code> peut être "
-"<code>Gtk.ToolbarStyle.ICONS, Gtk.ToolbarStyle.TEXT, Gtk.ToolbarStyle.BOTH, "
-"Gtk.ToolbarStyle.BOTH_HORIZ</code>, définit si la barre d'outils affiche "
-"seulement les icônes, seulement du texte ou les deux à la fois (placés "
-"verticalement ou les uns à côté des autres). Pour que les préférences utilisateur "
-"déterminent le style de la barre et annule un style de barre d'outils ainsi défini, "
-"utilisez <code>unset_style()</code>."
 
-#: C/toolbar.py.page:53(link)
-msgid "GtkToolButton"
-msgstr "GtkToolButton"
+#. (itstool) path: section/title
+#: C/fontchooserwidget.py.page:35
+msgid "Useful methods for a FontChooserWidget"
+msgstr "Méthodes utiles pour un élément graphique GtkFontChooser"
 
-#: C/toolbar.py.page:54(link)
-msgid "GtkToolItem"
-msgstr "GtkToolItem"
+#. (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 ""
+"Pour définir la police initiallement sélectionnée, utilisez la méthode "
+"<code>set_font(font)</code> (où <code>font</code> est le nom de la police), "
+"ou <code>set_font_desc(font)</code> (où <code>font</code> est la "
+"PangoFontDescription)."
 
-#: C/toolbar.py.page:56(link)
-msgid "GtkActionable"
-msgstr "GtkActionable"
+#. (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 ""
+"Pour obtenir la police sélectionnée, utilisez l'une des deux méthodes "
+"<code>get_font()</code> ou <code>get_font_desc()</code>."
 
-#: C/toolbar.js.page:7(title)
-msgid "Toolbar (JavaScript)"
-msgstr "Barre d'outils (JavaScript)"
+#. (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 ""
+"Pour modifier le texte affiché dans la position précédente, utilisez la "
+"méthode <code>set_preview_text()</code>."
 
-#: C/toolbar.js.page:17(desc)
-msgid "A bar of tools"
-msgstr "Une barre d'outils"
+#. (itstool) path: info/title
+#: C/fontchooserwidget.vala.page:8
+#, fuzzy
+#| msgid "FontChooserWidget"
+msgctxt "text"
+msgid "FontChooserWidget (Vala)"
+msgstr "Élément graphique GtkFontChooser"
 
-#: C/toolbar.js.page:32(link)
-msgid "Gtk.ToolButton"
-msgstr "Gtk.ToolButton"
+#. (itstool) path: credit/name
+#: C/fontchooserwidget.vala.page:13
+#, fuzzy
+#| msgid "Tiffany Antopolski"
+msgid "Tiffany Antpoolski"
+msgstr "Tiffany Antopolski"
 
-#: C/toolbar.js.page:33(link)
-msgid "Gtk Stock items"
-msgstr "Éléments de la collection Gtk"
+#. (itstool) path: page/p
+#: C/fontchooserwidget.vala.page:24
+#, fuzzy
+#| msgid "A FontChooserWidget with a callback function."
+msgid "A FontChooserWidget with a lambda callback function."
+msgstr "Un élément graphique GtkFontChooser avec une fonction de rappel."
 
-#: C/toolbar.js.page:34(link)
-msgid "Gdk.WindowState"
-msgstr "Gdk.WindowState"
+#. (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 ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/togglebutton.vala.page:24(None) C/togglebutton.py.page:24(None)
-#: C/togglebutton.js.page:21(None) C/togglebutton.c.page:26(None)
-msgid "@@image: 'media/togglebutton.png'; md5=791e062613d4f9bd5936390b0aa18448"
+#. (itstool) path: item/p
+#: C/fontchooserwidget.vala.page:37
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.FontChooserWidget.html";
+"\">GtkFontChooserWidget</link>"
 msgstr ""
-"@@image: 'media/togglebutton.png'; md5=791e062613d4f9bd5936390b0aa18448"
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/togglebutton.vala.page:7(title)
-msgid "ToggleButton (Vala)"
-msgstr "ToggleButton (Vala)"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/gmenu.c.png'; md5=f305fc3cae8d16d72b734ee53b559e33"
+msgctxt "_"
+msgid "external ref='media/gmenu.c.png' md5='f305fc3cae8d16d72b734ee53b559e33'"
+msgstr "@@image: 'media/gmenu.c.png'; md5=f305fc3cae8d16d72b734ee53b559e33"
 
-#: C/togglebutton.vala.page:20(desc) C/togglebutton.py.page:20(desc)
-#: C/togglebutton.c.page:21(desc)
-msgid "A button which retains state"
-msgstr "Un bouton qui mémorise l'état"
+#. (itstool) path: info/title
+#: C/gmenu.c.page:8
+#, fuzzy
+#| msgid "GMenu"
+msgctxt "text"
+msgid "GMenu (C)"
+msgstr "GMenu"
 
-#: C/togglebutton.vala.page:23(title) C/togglebutton.py.page:23(title)
-#: C/togglebutton.js.page:20(title) C/togglebutton.c.page:24(title)
-msgid "ToggleButton"
-msgstr "ToggleButton"
+#. (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 "Une implémentation simple de GMenuModel"
 
-#: C/togglebutton.vala.page:25(p) C/togglebutton.py.page:25(p)
-#: C/togglebutton.c.page:27(p)
-msgid "When this ToggleButton is in an active state, the spinner spins."
+#. (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 "GMenu"
+
+#. (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 "Une application Gtk avec un GMenu de base et des SimpleActions"
+
+#. (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 ""
-"Quand ce ToggleButton est activé, l'indicateur d'activité tourne."
 
-#: C/togglebutton.vala.page:32(link) C/togglebutton.js.page:158(link)
-msgid "Gtk.ToggleButton"
-msgstr "Gtk.ToggleButton"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/gmenu.js.png'; md5=16b8bee122197771ec8498dac42f196b"
+msgctxt "_"
+msgid ""
+"external ref='media/gmenu.js.png' md5='16b8bee122197771ec8498dac42f196b'"
+msgstr "@@image: 'media/gmenu.js.png'; md5=16b8bee122197771ec8498dac42f196b"
 
-#: C/togglebutton.py.page:7(title)
-msgid "ToggleButton (Python)"
-msgstr "ToggleButton (Python)"
+#. (itstool) path: info/title
+#: C/gmenu.js.page:8
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "GMenu (JavaScript)"
+msgstr "JavaScript"
 
-#: C/togglebutton.py.page:37(title)
-msgid "Useful methods for a ToggleButton widget"
-msgstr "Méthodes utiles pour un élément graphique ToggleButton"
+#. (itstool) path: page/code
+#: C/gmenu.js.page:25
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const Application = new Lang.Class ({\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.myapp',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"       //connect to 'activate' and 'startup' signals to the callback functions\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"       this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    //create the UI (in this case it's just the ApplicationWindow\n"
+"    _buildUI: function() {\n"
+"        this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"Welcome to GNOME\" });\n"
+"\n"
+"        //uncommenting the line below will change the window size\n"
+"        //this._window.set_default_size(600, 400);\n"
+"\n"
+"        //show the window and all child widgets (none in this case)\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"    _showNew: function() {\n"
+"    print (\"This doesn't do anything. It is only a demonstration.\");\n"
+"    },\n"
+"\n"
+"    _showAbout: function() {\n"
+"        print (\"No AboutDialog here.  This is only a demonstration.\");\n"
+"    },\n"
+"\n"
+"    //create the menu items and connect the signals to the callback functions.\n"
+"    _initMenus: function() {\n"
+"        let menu = new Gio.Menu();\n"
+"        menu.append(\"New\",'app.new');\n"
+"        menu.append(\"About\", 'app.about');\n"
+"        menu.append(\"Quit\",'app.quit');\n"
+"        this.application.set_app_menu(menu);\n"
+"\n"
+"        let newAction = new Gio.SimpleAction ({ name: 'new' });\n"
+"        newAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showNew();\n"
+"            }));\n"
+"        this.application.add_action(newAction);\n"
+"\n"
+"        let aboutAction = new Gio.SimpleAction ({ name: 'about' });\n"
+"        aboutAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showAbout();\n"
+"            }));\n"
+"        this.application.add_action(aboutAction);\n"
+"\n"
+"        let quitAction = new Gio.SimpleAction ({ name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"         this.application.add_action(quitAction);\n"
+"    },\n"
+"\n"
+"    //callback function for 'activate' signal\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    //callback function for 'startup' signal\n"
+"    _onStartup: function() {\n"
+"        //You must call _initMenus() before calling _buildUI().\n"
+"        this._initMenus();\n"
+"        this._buildUI();\n"
+"    }\n"
+"});\n"
+"\n"
+"//run the application\n"
+"let app = new Application ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
 
-#: C/togglebutton.py.page:38(p) C/radiobutton.py.page:37(p)
-#: C/messagedialog.py.page:36(p) C/fontchooserwidget.py.page:34(p)
-#: C/dialog.py.page:36(p) C/button.py.page:34(p) C/aboutdialog.py.page:36(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/gmenu.py.png'; md5=52c68b34d5d566f37e9f803dedb6353a"
+msgctxt "_"
 msgid ""
-"For an explanation of signals and callback functions, see <link xref="
-"\"signals-callbacks.py\">this page</link>."
+"external ref='media/gmenu.py.png' md5='52c68b34d5d566f37e9f803dedb6353a'"
+msgstr "@@image: 'media/gmenu.py.png'; md5=52c68b34d5d566f37e9f803dedb6353a"
+
+#. (itstool) path: info/title
+#: C/gmenu.py.page:8
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "GMenu (Python)"
+msgstr "Python"
+
+#. (itstool) path: info/desc
+#: C/gmenu.py.page:26
+msgid "A simple implementation of GMenu"
+msgstr "Une implémentation simple de GMenu"
+
+#. (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 ""
-"Pour de plus amples informations sur les signaux et fonctions de rappel, "
-"consultez <link xref=\"signals-callbacks.py\">cette page</link>."
 
-#: C/togglebutton.py.page:45(link) C/checkbutton.py.page:48(link)
-msgid "GtkToggleButton"
-msgstr "GtkToggleButton"
+#. (itstool) path: section/title
+#: C/gmenu.py.page:42
+msgid "Useful methods for a GSimpleAction and a GMenu"
+msgstr "Méthodes utiles pour GSimpleAction et GMenu"
 
-#: C/togglebutton.py.page:47(link) C/togglebutton.c.page:37(link)
-#: C/spinner.py.page:40(link) C/spinner.c.page:35(link)
-msgid "GtkSpinner"
-msgstr "GtkSpinner"
+#. (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 ""
 
-#: C/togglebutton.js.page:7(title)
-msgid "ToggleButton (JavaScript)"
-msgstr "ToggleButton (JavaScript)"
+#. (itstool) path: section/p
+#: C/gmenu.py.page:46
+msgid "Useful methods for a GSimpleAction:"
+msgstr "Méthodes utiles pour GSimpleAction :"
 
-#: C/togglebutton.js.page:17(desc)
-msgid "Stays pressed until you click it again"
-msgstr "Reste enfoncé jusqu'à ce que vous cliquiez dessus à nouveau"
+#. (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 ""
+"Pour créer une nouvelle action qui est <em>stateless</em>, c-à-d. une action "
+"qui ne retient ni ne dépend d'un état définit par l'action elle-même, "
+"utilisez"
 
-#: C/togglebutton.js.page:22(p)
+#. (itstool) path: item/code
+#: C/gmenu.py.page:49
+#, no-wrap
 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."
+"\n"
+"action = Gio.SimpleAction.new(\"name\", parameter_type)"
 msgstr ""
-"Un ToggleButton ressemble à un <link xref=\"button.js\">bouton</link> "
-"normal, sauf qu'il reste enfoncé après l'avoir cliqué. Vous pouvez "
-"l'utiliser comme un commutateur allumé/éteint pour contrôler des éléments "
-"comme l'<link xref=\"spinner.js\">indicateur d'activité</link> de cet "
-"exemple."
+"\n"
+"action = Gio.SimpleAction.new(« nom », parameter_type)"
 
-#: C/togglebutton.js.page:23(p)
+#. (itstool) path: item/p
+#: C/gmenu.py.page:51
 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."
+"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 ""
-"La méthode get_active d'un ToggleButton renvoie « true » (vrai) s'il est "
-"enfoncé et « false » dans le cas contraire. Utilisez sa méthode set_active si "
-"vous souhaitez changer son état sans avoir besoin de cliquer dessus. Quand "
-"il passe de l'état « enfoncé » à « relâché » et vice versa, il envoie le signal "
-"« toggled » que vous pouvez connecter à une fonction afin d'effectuer une "
-"action."
+"où <code>« nom »</code> est le nom de l'action et <code>parameter_type</"
+"code> est le type de paramètre que l'action reçoit quand elle est activée. "
+"Ce peut être <code>None</code>, ou <code>GLib.VariantType.new('s')</code> si "
+"le paramètre est du type <code>str</code>, ou au lieu de <code>'s'</code>, "
+"un caractère tel que décrit <link href=\"http://developer.gnome.org/glib/";
+"unstable/glib-GVariantType.html\">ici</link>."
 
-#: C/togglebutton.js.page:66(p) C/radiobutton.js.page:66(p)
+#. (itstool) path: item/code
+#: C/gmenu.py.page:52
+#, no-wrap
 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."
+"\n"
+"action = Gio.SimpleAction.new_stateful(\"name\", parameter_type, initial_state)"
 msgstr ""
-"Tout le code de cet exemple est dans la classe RadioButtonExample. Le code ci-"
-"dessus crée un <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> pour y mettre nos éléments "
-"graphiques et la fenêtre qui les contient."
+"\n"
+"action = Gio.SimpleAction.new_stateful(« nom », parameter_type, initial_state)"
 
-#: C/togglebutton.js.page:84(title)
-msgid "Creating the ToggleButton and other widgets"
-msgstr "Création du ToggleButton et des autres éléments graphiques"
+#. (itstool) path: item/p
+#: C/gmenu.py.page:54
+#, fuzzy
+#| msgid ""
+#| "where <code>initial_state</code> is defined as a GVariant - for instance "
+#| "<code>Glib.Variant.new_string('start')</code>; for a list of possiblities "
+#| "see <link href=\"http://developer.gnome.org/glib/unstable/glib-GVariant.";
+#| "html\">here</link>."
+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 ""
+"où <code>initial_state</code> est défini comme étant une GVariant - par "
+"exemple <code>Glib.Variant.new_string('start')</code> ; voyez <link href="
+"\"http://developer.gnome.org/glib/unstable/glib-GVariant.html\";>ici</link> "
+"pour accéder à une liste des possibilités."
 
-#: C/togglebutton.js.page:90(p)
+#. (itstool) path: item/p
+#: C/gmenu.py.page:55
 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."
+"<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 ""
-"Nous voulons que cet <link xref=\"spinner.js\">indicateur d'activité</link> "
-"puisse s'étendre verticalement et horizontalement pour prendre le maximum "
-"d'espace disponible dans la fenêtre."
+"La méthode <code>set_enabled(True)</code> définit l'action à enabled ; une "
+"action doit être en position enabled pour pouvoir être activée ou pour voir "
+"son état modifié par des appels extérieurs. La fonction ne peut être appelée "
+"que par l'implémenteur de l'action. Les utilisateurs de l'action ne doivent "
+"pas tenter de modifier son drapeau enabled."
 
-#: C/togglebutton.js.page:98(p)
+#. (itstool) path: item/p
+#: C/gmenu.py.page:56
 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."
+"<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 ""
-"La création d'un ToggleButton ressemble beaucoup à la création d'un "
-"<link xref=\"button.js\">bouton</link> normal. La plus grosse différence "
-"réside dans le fait que vous manipulez un signal « toggled » au lieu d'un "
-"signal « clicked ». Ce code relie la fonction _onToggle à ce signal, de sorte "
-"qu'elle est appelée à chaque fois que le ToggleButton est commuté."
+"La fonction <code>set_state(state)</code>, où <code>state</code> est une "
+"GVariant, définit l'état de l'action en mettant à jour la propriété "
+"« state » à la valeur donnée. Elle ne peut être appelée que par "
+"l'implémenteur de l'action ; par contre, les utilisateurs peuvent appeler "
+"<code>change_state(state)</code> (où <code>state</code> est une GVariant) "
+"pour demander le changement d'état."
+
+#. (itstool) path: section/p
+#: C/gmenu.py.page:59
+msgid "Useful methods for a GMenu:"
+msgstr "Méthodes utiles pour un GMenu :"
 
-#: C/togglebutton.js.page:108(p)
+#. (itstool) path: item/p
+#: C/gmenu.py.page:61
 msgid ""
-"Here we create a simple <link xref=\"grid.js\">Grid</link> to organize "
-"everything in, then attach the Spinner and ToggleButton to it."
+"To 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 ""
-"Nous créons ici une simple <link xref=\"grid.js\">grille</link> pour tout ranger "
-"dedans, puis nous lui attachons le Spinner (indicateur d'activité) et le ToggleButton."
+"Pour insérer un élément dans le menu à la <code>position</code>, utilisez la "
+"méthode <code>insert(position, label, detailed_action)</code>, où "
+"<code>label</code> est l'étiquette qui s'affiche dans le menu et "
+"<code>detailed_action</code> est une chaîne de caractères composée du nom de "
+"l'action à laquelle vous ajoutez le préfixe <code>app.</code>. Pour de plus "
+"amples détails, consultez <link xref=\"menubar.py#win-app\"/>."
 
-#: C/togglebutton.js.page:118(p)
+#. (itstool) path: item/p
+#: C/gmenu.py.page:62
 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."
+"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 ""
-"Ensuite, nous ajoutons la grille à la fenêtre et demandons à celle-ci de s'afficher "
-"ainsi que ses éléments graphiques enfants quand l'application est démarrée."
+"Pour joindre ou ajouter un élément dans le menu, utilisez respectivement les "
+"méthodes <code>append(label, detailed_action)</code> et <code>prepend(label, "
+"detailed_action)</code>."
 
-#: C/togglebutton.js.page:122(title)
-msgid "Making something happen when the ToggleButton is toggled"
-msgstr "Déclenchement d'une action quand le ToggleButton est commuté"
+#. (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 ""
+"Une autre méthode pour ajouter des éléments au menu est de les créer comme "
+"des éléments <code>GMenuItem</code> et d'utiliser l'une des fonctions "
+"<code>insert_item(position, item)</code>, <code>append_item(item)</code>, ou "
+"<code>prepend_item(item)</code> ; par exemple :"
 
-#: C/togglebutton.js.page:136(p)
+#. (itstool) path: item/code
+#: C/gmenu.py.page:64
+#, no-wrap
 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."
+"\n"
+"about = Gio.MenuItem.new(\"About\", \"app.about\")\n"
+"menu.append_item(about)"
 msgstr ""
-"Chaque fois que quelqu'un commutte le bouton, cette fonction vérifie s'il "
-"est enfoncé ou non en utilisant get_active et, selon le cas, démarre ou "
-"arrête l'indicateur d'activité. Nous voulons qu'il ne tourne que lorsque le "
-"bouton est enfoncé, donc, si get_active renvoie la valeur true (vrai), nous "
-"démarrons l'indicateur, sinon, nous lui indiquons de s'arrêter."
+"\n"
+"about = Gio.MenuItem.new(\"About\", \"app.about\")\n"
+"menu.append_item(about)"
 
-#: C/togglebutton.js.page:143(p) C/radiobutton.js.page:264(p)
+#. (itstool) path: item/p
+#: C/gmenu.py.page:68
 msgid ""
-"Finally, we create a new instance of the finished RadioButtonExample class, "
-"and set the application running."
+"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 ""
-"Enfin, nous créons une nouvelle instance de la classe RadioButtonExample et "
-"lançons l'application."
+"Nous pouvons aussi ajouter une sous-section entière dans un menu avec "
+"<code>insert_section(position, label, section)</code>, "
+"<code>append_section(label, section)</code>, ou <code>prepend_section(label, "
+"section)</code>, où <code>label</code> est le titre de la sous-section."
 
-#: C/togglebutton.js.page:156(link) C/textview.js.page:252(link)
-#: C/switch.js.page:269(link) C/spinbutton.js.page:203(link)
-#: C/scale.js.page:212(link) C/radiobutton.js.page:278(link)
-#: C/grid.vala.page:31(link) C/grid.js.page:36(link)
-msgid "Gtk.Grid"
-msgstr "Gtk.Grid"
+#. (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 ""
+"Pour ajouter un sous-menu qui va s'étendre et se contracter, utilisez l'une "
+"des méthodes <code>insert_submenu(position, label, section)</code>, "
+"<code>append_submenu(label, section)</code>, ou bien "
+"<code>prepend_submenu(label, section)</code>, où <code>label</code> est le "
+"titre du sous-menu."
 
-#: C/togglebutton.js.page:157(link) C/spinner.vala.page:30(link)
-#: C/spinner.js.page:32(link)
-msgid "Gtk.Spinner"
-msgstr "Gtk.Spinner"
+#. (itstool) path: item/p
+#: C/gmenu.py.page:70
+#, fuzzy
+msgid "To remove an item from the menu, use <code>remove(position)</code>."
+msgstr ""
+"Pour supprimer un élément du menu, utilisez la fonction "
+"<code>remove(position)</code>."
 
-#: C/togglebutton.c.page:7(title)
-msgid "ToggleButton (C)"
-msgstr "ToggleButton (C)"
+#. (itstool) path: item/p
+#: C/gmenu.py.page:71
+msgid "To set a label for the menu, use <code>set_label(label)</code>."
+msgstr ""
+"Pour définir une étiquette pour le menu, utilisez la méthode "
+"<code>set_label(label)</code>."
 
-#: C/togglebutton.c.page:16(name) C/textview.c.page:12(name)
-#: C/switch.c.page:12(name) C/statusbar.c.page:16(name)
-#: C/spinner.c.page:13(name) C/spinbutton.c.page:15(name)
-#: C/scale.c.page:14(name) C/radiobutton.c.page:14(name)
-#: C/progressbar.c.page:13(name) C/messagedialog.c.page:13(name)
-#: C/linkbutton.c.page:12(name) C/label.c.page:13(name)
-#: C/image.c.page:12(name) C/grid.c.page:12(name) C/entry.c.page:12(name)
-#: C/dialog.c.page:14(name) C/button.c.page:14(name)
-#: C/aboutdialog.c.page:14(name)
-msgid "Monica Kochofar"
-msgstr "Monica Kochofar"
+#. (itstool) path: item/p
+#: C/gmenu.py.page:82
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/glib/unstable/glib-GVariantType.html";
+"\">GVariantType</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/togglebutton.c.page:17(email) C/textview.c.page:13(email)
-#: C/switch.c.page:13(email) C/statusbar.c.page:17(email)
-#: C/spinner.c.page:14(email) C/spinbutton.c.page:16(email)
-#: C/scale.c.page:15(email) C/radiobutton.c.page:15(email)
-#: C/progressbar.c.page:14(email) C/messagedialog.c.page:14(email)
-#: C/linkbutton.c.page:13(email) C/label.c.page:14(email)
-#: C/image.c.page:13(email) C/grid.c.page:13(email) C/entry.c.page:13(email)
-#: C/dialog.c.page:15(email) C/button.c.page:15(email)
-#: C/aboutdialog.c.page:15(email)
-msgid "monicakochofar gmail com"
-msgstr "monicakochofar gmail com"
-
-#: C/togglebutton.c.page:38(link)
-msgid "GtkTogglebutton"
-msgstr "GtkTogglebutton"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/textview.vala.page:26(None) C/textview.py.page:37(None)
-#: C/textview.c.page:26(None)
-msgid "@@image: 'media/textview.png'; md5=049e859ed1af2d7c93d8cb5cfd9f7792"
-msgstr "@@image: 'media/textview.png'; md5=049e859ed1af2d7c93d8cb5cfd9f7792"
+#. (itstool) path: item/p
+#: C/gmenu.py.page:83
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/glib/unstable/glib-GVariant.html";
+"\">GVariant</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/textview.vala.page:7(title)
-msgid "TextView (Vala)"
-msgstr "TextView (Vala)"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/gmenu.vala.png'; md5=7a9f381fc3ed5bf8d1c50d2acb095400"
+msgctxt "_"
+msgid ""
+"external ref='media/gmenu.vala.png' md5='7a9f381fc3ed5bf8d1c50d2acb095400'"
+msgstr "@@image: 'media/gmenu.vala.png'; md5=7a9f381fc3ed5bf8d1c50d2acb095400"
 
-#: C/textview.vala.page:17(desc) C/textview.c.page:17(desc)
-msgid "Widget which displays a GtkTextBuffer"
-msgstr "L'élément graphique qui affiche un GtkTextBuffer"
+#. (itstool) path: info/title
+#: C/gmenu.vala.page:8
+#, fuzzy
+#| msgid "MenuBar"
+msgctxt "text"
+msgid "GMenu (Vala)"
+msgstr "BarreDeMenu"
 
-#: C/textview.vala.page:20(title) C/textview.c.page:20(title)
-msgid "TextView widget"
-msgstr "Élément graphique TextView"
+#. (itstool) path: note/p
+#: C/gmenu.vala.page:30
+#, fuzzy
+#| msgid "You need to be running Gtk+-3.4 or later for this to work"
+msgid ""
+"<em style=\"strong\">You need to be running GTK+-3.4 or later for this to "
+"work</em>"
+msgstr ""
+"Pour que cela fonctionne, il vous faut avoir installé Gtk+-3.4 ou supérieur"
 
-#: C/textview.vala.page:21(p) C/textview.py.page:31(p) C/textview.c.page:21(p)
-msgid "If we press \"enter\", we have a new line."
-msgstr "En appuyant sur « Entrée », nous créons une nouvelle ligne."
+#. (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 ""
 
-#: C/textview.vala.page:22(p) C/textview.c.page:22(p)
+#. (itstool) path: item/p
+#: C/gmenu.vala.page:41
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"If we press \"enter\" more times then there are lines in the default sized "
-"window, then a vertical scrollbar appears."
+"<link href=\"http://www.valadoc.org/gio-2.0/GLib.Menu.Menu.html\";>Menu</link>"
 msgstr ""
-"En appuyant encore de nombreuses fois sur « Entrée », d'autres lignes sont "
-"créées dans la fenêtre de taille par défaut, puis une barre de défilement "
-"verticale apparaît."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/textview.vala.page:23(p) C/textview.c.page:23(p)
+#. (itstool) path: item/p
+#: C/gmenu.vala.page:42
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"If we write a long sentence, the text will wrap breaking lines between words."
-msgstr "Si nous écrivons une longue phrase, la césure se fait entre deux mots."
+"<link href=\"http://www.valadoc.org/gio-2.0/GLib.Menu.append.html\";>append</"
+"link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/textview.vala.page:24(p)
+#. (itstool) path: item/p
+#: C/gmenu.vala.page:43
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"If we have a loooooooooooooooooooooooooooooooooooong word, a horizontal "
-"scrollbar will appear."
+"<link href=\"http://www.valadoc.org/gio-2.0/GLib.SimpleAction.html";
+"\">SimpleAction</link>"
 msgstr ""
-"Si nous avons un loooooooooooooooooooooooooooooooooooong mot, une barre de "
-"défilement horizontale apparaît."
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/textview.vala.page:27(p) C/textview.c.page:27(p)
-msgid "This is an example of Gtk.TextView"
-msgstr "Ceci est un exemple de Gtk.TextView"
+#. (itstool) path: item/p
+#: C/gmenu.vala.page:44
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gio-2.0/GLib.ActionMap.add_action.html";
+"\">add_action</link>"
+msgstr ""
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/textview.vala.page:34(link) C/textview.js.page:256(link)
-msgid "Gtk.TextBuffer"
-msgstr "Gtk.TextBuffer"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+msgctxt "_"
+msgid "external ref='media/grid.png' md5='27d45da115401127456a3b854dcfc5be'"
+msgstr "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
 
-#: C/textview.vala.page:35(link) C/textview.js.page:257(link)
-msgid "Gtk.TextView"
-msgstr "Gtk.TextView"
+#. (itstool) path: info/title
+#: C/grid.c.page:8
+#, fuzzy
+#| msgid "Grid"
+msgctxt "text"
+msgid "Grid (C)"
+msgstr "Grille"
 
-#: C/textview.vala.page:36(link) C/textview.js.page:255(link)
-#: C/scrolledwindow.vala.page:30(link)
-msgid "Gtk.ScrolledWindow"
-msgstr "Gtk.ScrolledWindow"
+#. (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 "Ranger les éléments graphiques en lignes et colonnes"
 
-#: C/textview.vala.page:37(link)
-msgid "Gtk.WrapMode"
-msgstr "Gtk.WrapMode"
+#. (itstool) path: page/title
+#: C/grid.c.page:21 C/grid.js.page:25 C/grid.py.page:29
+msgid "Grid"
+msgstr "Grille"
 
-#: C/textview.vala.page:38(link) C/scrolledwindow.vala.page:31(link)
-msgid "Gtk.PolicyType"
-msgstr "Gtk.PolicyType"
+#. (itstool) path: page/p
+#: C/grid.c.page:24 C/grid.vala.page:25
+msgid "A button widget connected to a progress bar."
+msgstr "Un élément graphique bouton connecté à une barre de progression."
 
-#: C/textview.py.page:7(title)
-msgid "TextView (Python)"
-msgstr "TextView (Python)"
+#. (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 ""
 
-#: C/textview.py.page:25(desc)
-msgid "Widget that displays a GtkTextBuffer"
-msgstr "L'élément graphique qui affiche un GtkTextBuffer"
+#. (itstool) path: item/p
+#: C/grid.c.page:34 C/progressbar.c.page:35
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkProgressBar.html";
+"\">GtkProgressBar</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/textview.py.page:28(title) C/textview.js.page:24(title)
-msgid "TextView"
-msgstr "TextView"
+#. (itstool) path: info/title
+#: C/grid.js.page:8
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Grid (JavaScript)"
+msgstr "JavaScript"
 
-#: C/textview.py.page:30(p)
-msgid "This is an example of Gtk.TextView."
-msgstr "Ceci est un exemple de Gtk.TextView."
+#. (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 ""
+"Un élément graphique bouton connecté à une barre de progression, à "
+"l'intérieur d'une grille qui gère l'agencement."
 
-#: C/textview.py.page:32(p)
+#. (itstool) path: page/code
+#: C/grid.js.page:29
+#, no-wrap
 msgid ""
-"But we can also have a new line if we write a long sentence (the text will "
-"wrap breaking lines between words)."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const GridExample = new Lang.Class ({\n"
+"    Name: 'Grid Example',\n"
+"\n"
+"    /* Create the application itself\n"
+"       This boilerplate code is needed to build any GTK+ application. */\n"
+"        _init: function () {\n"
+"            this.application = new Gtk.Application ({\n"
+"                application_id: 'org.example.jsgrid',\n"
+"                flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"            });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"            this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                         window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                         title: \"Grid Example\"});\n"
+"\n"
+"        // Create the grid\n"
+"        this.Grid = new Gtk.Grid ();\n"
+"\n"
+"        // Create the widgets inside the grid\n"
+"        this.progressBar = new Gtk.ProgressBar ();\n"
+"        this.Button = new Gtk.Button ({ label: \"Button\" });\n"
+"        this.Button.connect (\"clicked\", Lang.bind(this, this._clickHandler));\n"
+"\n"
+"        // Assemble the grid\n"
+"        this._window.add (this.Grid);\n"
+"        this.Grid.attach (this.Button, 1, 1, 1, 1);\n"
+"        this.Grid.attach_next_to (this.progressBar, this.Button, Gtk.PositionType.BOTTOM, 1, 1);\n"
+"\n"
+"                // Show the window and all child widgets\n"
+"                this._window.show_all();\n"
+"    },\n"
+"\n"
+"    // Here's the function that says what happens when the button is clicked\n"
+"    _clickHandler: function () {\n"
+"        this.progressBar.pulse ();\n"
+"    }\n"
+"\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new GridExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Mais il peut également y avoir un retour à la ligne si nous écrivons une longue phrase (la "
-"césure se fait entre deux mots)."
 
-#: C/textview.py.page:33(p)
-msgid "If we have a loooooooooooooooooooooooooooooooooooong"
-msgstr "Si nous avons un loooooooooooooooooooooooooooooooooooong"
+#. (itstool) path: item/p
+#: C/grid.js.page:37
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html";
+"\">Gtk.Grid</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/textview.py.page:34(p)
-msgid "(that was long)"
-msgstr "(long comme ça)"
+#. (itstool) path: item/p
+#: C/grid.js.page:38 C/progressbar.js.page:42
+#, fuzzy
+#| 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."
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.ProgressBar.";
+"html\">Gtk.ProgressBar</link>"
+msgstr ""
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
 
-#: C/textview.py.page:35(p)
-msgid "word, an horizontal scrollbar will appear."
-msgstr "mot, une barre de défilement horizontale apparaît."
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
+msgctxt "_"
+msgid ""
+"external ref='media/grid_simple.png' md5='c806f2e69b30373d4d2e08b41d6cc1f6'"
+msgstr "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
 
-#: C/textview.py.page:48(title)
-msgid "Useful methods for a TextView widget"
-msgstr "Méthodes utiles pour un élément graphique TextView"
+#. (itstool) path: info/title
+#: C/grid.py.page:8
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "Grid (Python)"
+msgstr "Python"
+
+#. (itstool) path: page/p
+#: C/grid.py.page:32
+msgid "Some labels in a grid."
+msgstr "Quelques étiquettes dans une grille."
 
-#: C/textview.py.page:49(p) C/label.py.page:69(p)
+#. (itstool) path: section/code
+#: C/grid.py.page:38
+#, no-wrap
 msgid ""
-"An explanation of how to deal with strings and Unicode (and a recap of what "
-"these things are) can be found <link xref=\"strings.py.page\">here</link>."
+"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 ""
-"Vous trouverez une documentation sur la façon de se servir des chaînes de caractères et "
-"des caractères Unicode (ainsi qu'un récapitulatif de ce que c'est) <link "
-"xref=\"strings.py.page\">ici</link>."
 
-#: C/textview.py.page:50(p)
+#. (itstool) path: section/title
+#: C/grid.py.page:42
+msgid "Useful methods for a Grid widget"
+msgstr "Méthodes utiles pour un élément graphique Grille"
+
+#. (itstool) path: item/p
+#: C/grid.py.page:45
 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."
+"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 ""
-"Un <code>Gtk.TextView</code> affiche le texte stocké dans le tampon d'un "
-"<code>Gtk.TextBuffer</code>. Cependant, la plupart des manipulations de "
-"texte se font avec des itérateurs représentés par un <code>Gtk.TextIter</"
-"code> - une position entre deux caractères dans le tampon du texte. Les "
-"itérateurs ne restent pas valides indéfiniment ; à chaque fois que le tampon "
-"se trouve modifié d'une façon qui affecte son contenu, tous les itérateurs "
-"en cours deviennent non valides. À cause de cela, les itérateurs ne peuvent pas "
-"être utilisés pour préserver les positions en cas de modifications du "
-"tampon. Pour préserver une position, nous utilisons donc un marqueur "
-"<code>Gtk.TextMark</code>, qui peut être rendu visible avec <code>visible"
-"(True)</code>. Un tampon de texte contient deux marqueurs intégrés : un "
-"marqueur « insert » (la position du curseur) et un marqueur "
-"« selection_bound » (limite de sélection)."
+"Pour joindre un élément graphique <code>enfant</code> à l'emplacement "
+"<code>gauche, superieur</code> dans un créneaux de taille <code>largeur, "
+"hauteur</code> donné, utilisez la méthode <code>attach(enfant, superieur, "
+"gauche, largeur, hauteur)</code>. S'il y a déjà un élément graphique "
+"<code>sibling</code> à cette place, utilisez la fonction "
+"<code>attach_next_to(enfant, sibling, side, largeur, hauteur)</code>, où "
+"<code>side</code> est l'une des positions <code>Gtk.PositionType.LEFT, Gtk."
+"PositionType.RIGHT, Gtk.PositionType.TOP, Gtk.PositionType.BOTTOM</code>."
 
-#: C/textview.py.page:51(p)
-msgid "Methods for a TextView widget:"
-msgstr "Méthodes pour un élément graphique TextView :"
+#. (itstool) path: item/p
+#: C/grid.py.page:46
+#, fuzzy
+#| msgid ""
+#| "<code>insert_row(position)</code> and <code>insert_column(position)</"
+#| "code> do exactly what they say; children which are attached at or below "
+#| "this position are moved one row down, and children which span across this "
+#| "position are grown to span the new row. <code>insert_next_to(sibling, "
+#| "side)</code> inserts a row or column at the specified position. The new "
+#| "row or column is placed next to <code>sibling</code>, on the side "
+#| "determined by <code>side</code>; if side is <code>Gtk.PositionType.TOP</"
+#| "code> or <code>Gtk.PositionType.BOTTOM</code>, a row is inserted, if side "
+#| "is <code>Gtk.PositionType.LEFT</code> of <code>Gtk.PositionType.RIGHT</"
+#| "code>, a column is inserted."
+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 ""
+"Les méthodes <code>insert_row(position)</code> et "
+"<code>insert_column(position)</code> font littéralement ce qu'elles "
+"indiquent ; les enfants liés à ou au-dessous de cette position sont "
+"descendus une ligne plus bas et les enfants qui s'étendent sur cette "
+"position sont agrandis pour s'étendre sur la nouvelle ligne. La fonction "
+"<code>insert_next_to(sibling, side)</code> insère une ligne ou une colonne à "
+"la position spécifiée. La nouvelle ligne ou nouvelle colonne est placée à "
+"côté de <code>sibling</code>, du côté défini par <code>side</code> ; si side "
+"est défini à <code>Gtk.PositionType.TOP</code> ou à <code>Gtk.PositionType."
+"BOTTOM</code>, une ligne est insérée ; si side est défini à <code>Gtk."
+"PositionType.LEFT</code> ou à <code>Gtk.PositionType.RIGHT</code>, une "
+"colonne est insérée."
+
+#. (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 ""
+"Les méthodes <code>set_row_homogeneous(True)</code> et "
+"<code>set_column_homogeneous(True)</code> vérifient que chaque ligne ou "
+"chaque colonne a la même largeur ou la même hauteur."
 
-#: C/textview.py.page:53(p)
+#. (itstool) path: item/p
+#: C/grid.py.page:48
+#, fuzzy
+#| 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>"
 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."
+"<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 ""
-"L'élément graphique TextView est modifiable par défaut. Si vous préférez le "
-"contraire, utilisez <code>set_editable(False)</code>. Si le tampon ne "
-"contient pas de texte modifiable, c'est une bonne idée d'utiliser "
-"<code>set_cursor_visible(False)</code> aussi."
+"Les méthodes <code>set_row_spacing(espace)</code> et "
+"<code>set_column_spacing(espace)</code> forcent un espace entre "
+"(respectivement) les lignes ou les colonnes. La valeur de <code>espace</"
+"code> peut être comprise entre <code>0</code>, qui est la valeur par défaut "
+"et <code>32767</code>"
 
-#: C/textview.py.page:54(p)
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"The justification of the text is set with <code>set_justification(Gtk."
-"Justification.JUSTIFICATION)</code> where <code>JUSTIFICATION</code> is one "
-"of <code>LEFT, RIGHT, CENTER, FILL</code>."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkLabel.html";
+"\">GtkLabel</link>"
 msgstr ""
-"La justification du texte est définie par <code>set_justification(Gtk."
-"Justification.JUSTIFICATION)</code> où <code>JUSTIFICATION</code> est l'une "
-"des valeurs <code>LEFT, RIGHT, CENTER, FILL</code>."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/textview.py.page:55(p)
+#. (itstool) path: item/p
+#: C/grid.py.page:60 C/paned.c.page:38 C/paned.py.page:44
+#: C/scrolledwindow.py.page:47
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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)."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkImage.html";
+"\">GtkImage</link>"
 msgstr ""
-"La césure du texte est définie par <code>set_wrap_mode(Gtk.WrapMode.WRAP)</"
-"code> où <code>WRAP</code> est une des valeurs <code>NONE</code> (la zone de "
-"texte s'élargit), <code>CHAR</code> (fait la césure n'importe où le curseur peut "
-"apparaître), <code>WORD</code> (fait la césure entre deux mots), <code>WORD_CHAR</"
-"code> (fait la césure entre deux mots, mais si cela ne suffit pas, la "
-"fait entre deux caractères)."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/textview.py.page:57(p)
-msgid "Methods for a TextBuffer widget:"
-msgstr "Méthodes pour un élément graphique TextBuffer :"
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkGrid.html";
+"\">GtkGrid</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: info/title
+#: C/grid.vala.page:8
+#, fuzzy
+#| msgid "Window (Vala)"
+msgctxt "text"
+msgid "Grid (Vala)"
+msgstr "Fenêtre (Vala)"
+
+#. (itstool) path: page/title
+#: C/grid.vala.page:23
+msgid "Grid widget"
+msgstr "Élément graphique Grille"
 
-#: C/textview.py.page:59(p)
+#. (itstool) path: page/code
+#: C/grid.vala.page:27
+#, no-wrap
 msgid ""
-"<code>get_insert()</code> returns the <code>Gtk.TextMark</code> that "
-"represents the cursor, that is the insertion point."
+"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 ""
-"La méthode <code>get_insert()</code> retourne le marqueur <code>Gtk."
-"TextMark</code> qui représente le curseur, c'est-à-dire le point d'insertion."
 
-#: C/textview.py.page:60(p)
+#. (itstool) path: item/p
+#: C/grid.vala.page:32
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"<code>get_selection_bound()</code> returns the <code>Gtk.TextMark</code> "
-"that represents the selection bound."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Grid.html\";>Gtk.Grid</link>"
 msgstr ""
-"La méthode <code>get_selection_bound()</code> renvoie le marqueur <code>Gtk."
-"TextMark</code> qui représente les limites de la sélection."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/window.png'; md5=eb0cde3530978619c25bddfaeb453345"
+msgctxt "_"
+msgid "external ref='media/window.png' md5='eb0cde3530978619c25bddfaeb453345'"
+msgstr "@@image: 'media/window.png'; md5=eb0cde3530978619c25bddfaeb453345"
 
-#: C/textview.py.page:61(p)
+#. (itstool) path: info/title
+#: C/GtkApplicationWindow.c.page:8
+#, fuzzy
+#| msgid "ApplicationWindow"
+msgctxt "text"
+msgid "ApplicationWindow (C)"
+msgstr "ApplicationWindow"
+
+#. (itstool) path: info/desc
+#: C/GtkApplicationWindow.c.page:18
+msgid "A toplevel window which can contain other widgets, and support GMenu"
+msgstr ""
+"Une fenêtre de niveau supérieur qui peut contenir d'autres éléments "
+"graphiques et prend en charge GMenu."
+
+#. (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 "ApplicationWindow"
+
+#. (itstool) path: page/p
+#: C/GtkApplicationWindow.c.page:23
+msgid "A minimal GtkApplication with a GtkApplicationWindow"
+msgstr "Une application Gtk minimale avec une GtkApplicationWindow"
+
+#. (itstool) path: page/code
+#: C/GtkApplicationWindow.c.page:25
+#, no-wrap
 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."
+"#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 ""
-"La méthode <code>set_text(\"du texte\", longueur)</code> où <code>longueur</code> "
-"est un nombre entier positif ou <code>-1</code> définit "
-"le contenu du tampon comme étant les <code>longueur</code> premiers caractères "
-"du texte <code>du texte</code>. Si <code>longueur</code> "
-"est omis ou égal à <code>-1</code>, tout le texte est inséré. Le "
-"contenu du tampon, s'il existe, est détruit."
 
-#: C/textview.py.page:62(p)
+#. (itstool) path: item/p
+#: C/GtkApplicationWindow.c.page:31
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/3.4/GtkApplicationWindow.html";
+"\">GtkApplicationWindow</link>"
 msgstr ""
-"La méthode <code>insert(iter, \"du texte\", longueur)</code>, où <code>iter</code> "
-"est un itérateur et <code>longueur</code> est un nombre entier positif ou "
-"<code>-1</code>, insère dans le tampon à l'endroit de "
-"<code>iter</code> les <code>longueur</code> premiers caractères du texte "
-"<code>du texte</code>. Si <code>longueur</code> est omis ou égal à <code>-1</"
-"code>, tout le texte est inséré."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/textview.py.page:63(p)
+#. (itstool) path: info/title
+#: C/GtkApplicationWindow.js.page:8
+#, fuzzy
+#| msgid "ApplicationWindow"
+msgctxt "text"
+msgid "ApplicationWindow (JavaScript)"
+msgstr "ApplicationWindow"
+
+#. (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 "Sous-classe GtkWindow avec la prise en charge de GtkApplication"
+
+#. (itstool) path: page/p
+#: C/GtkApplicationWindow.js.page:23
+msgid "A simple GtkApplicationWindow which can support Menus."
+msgstr "Une simple GtkApplicationWindow qui prend en charge les menus."
+
+#. (itstool) path: page/code
+#: C/GtkApplicationWindow.js.page:25
+#, no-wrap
 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>."
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const Application = new Lang.Class ({\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.myapp',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"       //connect to 'activate' and 'startup' signals to the callback functions\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"       this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    //create the UI (in this case it's just the ApplicationWindow\n"
+"    _buildUI: function () {\n"
+"        this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"Welcome to GNOME\" });\n"
+"\n"
+"        //uncommenting the line below will change the window size\n"
+"        //this._window.set_default_size(600, 400);\n"
+"\n"
+"        //show the window and all child widgets (none in this case)\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"    //callback function for 'activate' signal\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    //callback function for 'startup' signal\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    }\n"
+"});\n"
+"\n"
+"//run the application\n"
+"let app = new Application ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"La méthode <code>insert_at_cursor(\"du texte\", longueur)</code> effectue la même "
-"action que <code>insert(iter, \"du texte\", length)</code>, avec le curseur actuel "
-"comme <code>iter</code>."
 
-#: C/textview.py.page:64(p)
+#. (itstool) path: info/title
+#: C/GtkApplicationWindow.py.page:8
+#, fuzzy
+#| msgid "ApplicationWindow"
+msgctxt "text"
+msgid "ApplicationWindow (Python)"
+msgstr "ApplicationWindow"
+
+#. (itstool) path: page/p
+#: C/GtkApplicationWindow.py.page:30
+#, fuzzy
+#| msgid "The simplest GtkApplication Window which can support Menus."
 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>."
+"The simplest GtkApplication Window which can support <link xref=\"gmenu.py\"/"
+">."
+msgstr "L'application Gtk la plus simple qui prend en charge les menus."
+
+#. (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 ""
-"La méthode <code>create_mark(\"nom_marqueur\", iter, left_gravity)</code>, où "
-"<code>iter</code> est un <code>Gtk.TextIter</code> et <code>left_gravity</"
-"code> une valeur booléenne, crée un marqueur <code>Gtk.TextMark</code> à "
-"l'emplacement de l'<code>iter</code>. Si la valeur de <code>\"nom_marqueur\"</"
-"code> est <code>None</code>, le marqueur est anonyme ; sinon, le marqueur "
-"peut être récupéré par son nom avec <code>get_mark()</code>. Si un marqueur "
-"possède la propriété left_gravity et que le texte est inséré à son emplacement actuel, "
-"alors le marqueur est déplacé à gauche du texte qui vient d'être inséré. Si "
-"la valeur <code>left_gravity</code> est omise, alors la valeur <code>False</"
-"code> est utilisée par défaut."
 
-#: C/textview.py.page:66(p)
+#. (itstool) path: section/title
+#: C/GtkApplicationWindow.py.page:41
+msgid "Useful methods for a Gtk.ApplicationWindow widget"
+msgstr "Méthodes utiles pour un élément graphique Gtk.ApplicationWindow"
+
+#. (itstool) path: item/p
+#: C/GtkApplicationWindow.py.page:44 C/window.py.page:54
 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:"
+"<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 ""
-"Pour indiquer qu'un morceau de texte du tampon doit être formatée "
-"spécifiquement, vous devez définir une étiquette contenant cette information "
-"de formatage et ensuite l'appliquer à la portion de texte en utilisant "
-"<code>create_tag(\"nom etiquette\", propriété)</code> et <code>apply_tag(tag, "
-"start_iter, end_iter)</code>, par exemple comme ceci :"
+"<code>set_default_size(200, 100)</code> définit la taille par défaut de la "
+"fenêtre à une largeur de <code>200</code> et une hauteur de <code>100</"
+"code> ; si, au lieu d'un nombre positif, vous lui transmettez <code>-1</"
+"code>, vous obtenez la taille par défaut."
+
+#. (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 ""
+"<code>set_position(Gtk.WindowPosition.CENTER)</code> place la fenêtre au "
+"centre de l'écran. Les autres options possibles sont : <code>Gtk."
+"WindowPosition.NONE, Gtk.WindowPosition.MOUSE, Gtk.WindowPosition."
+"CENTER_ALWAYS, Gtk.WindowPosition.CENTER_ON_PARENT</code>."
+
+#. (itstool) path: info/title
+#: C/GtkApplicationWindow.vala.page:8
+#, fuzzy
+#| msgid "ApplicationWindow"
+msgctxt "text"
+msgid "ApplicationWindow (Vala)"
+msgstr "ApplicationWindow"
 
-#: C/textview.py.page:67(code)
+#. (itstool) path: page/p
+#: C/GtkApplicationWindow.vala.page:23
+msgid "The simplest GtkApplication Window which can support Menus."
+msgstr "L'application Gtk la plus simple qui prend en charge les menus."
+
+#. (itstool) path: page/code
+#: C/GtkApplicationWindow.vala.page:25
 #, no-wrap
 msgid ""
 "\n"
-"tag = textbuffer.create_tag(\"orange_bg\", background=\"orange\")\n"
-"textbuffer.apply_tag(tag, start_iter, end_iter)"
-msgstr ""
+"/* 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"
-"etiquette = textbuffer.create_tag(\"fond_orange\", background=\"orange\")\n"
-"textbuffer.apply_tag(etiquette, start_iter, end_iter)"
+"/* main creates and runs the application. */\n"
+"public int main (string[] args) {\n"
+"\treturn new MyApplication ().run (args);\n"
+"}\n"
+msgstr ""
 
-#: C/textview.py.page:70(p)
-msgid "The following are some of the common styles applied to text:"
-msgstr "Voici quelques styles les plus usuels appliqués à du texte :"
+#. (itstool) path: item/p
+#: C/GtkApplicationWindow.vala.page:31 C/label.vala.page:31
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Application.html.content.tpl";
+"\">Gtk.Application</link>"
+msgstr ""
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/textview.py.page:72(p)
-msgid "Background colour (\"background\" property)"
-msgstr "Couleur d'arrière-plan (propriété « background »)"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
+msgctxt "_"
+msgid ""
+"external ref='media/guitar-tuner.png' md5='35e615e0f5e293671d00c5c414ac2f6b'"
+msgstr ""
+"@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
 
-#: C/textview.py.page:73(p)
-msgid "Foreground colour (\"foreground\" property)"
-msgstr "Couleur de premier plan (propriété « foreground »)"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/guitar-tuner-glade.png'; "
+#| "md5=f6606525443ab2160f53a87a454364d0"
+msgctxt "_"
+msgid ""
+"external ref='media/guitar-tuner-glade.png' "
+"md5='f6606525443ab2160f53a87a454364d0'"
+msgstr ""
+"@@image: 'media/guitar-tuner-glade.png'; md5=f6606525443ab2160f53a87a454364d0"
 
-#: C/textview.py.page:74(p)
-msgid "Underline (\"underline\" property)"
-msgstr "Souligné (propriété « underline »)"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/guitar-tuner-pipeline.png'; "
+#| "md5=5adc952909d92af5dae6954781b4ad5f"
+msgctxt "_"
+msgid ""
+"external ref='media/guitar-tuner-pipeline.png' "
+"md5='5adc952909d92af5dae6954781b4ad5f'"
+msgstr ""
+"@@image: 'media/guitar-tuner-pipeline.png'; "
+"md5=5adc952909d92af5dae6954781b4ad5f"
 
-#: C/textview.py.page:75(p)
-msgid "Bold (\"weight\" property)"
-msgstr "Gras (propriété « weight »)"
+#. (itstool) path: info/title
+#: C/guitar-tuner.c.page:8
+#, fuzzy
+#| msgid "Guitar Tuner"
+msgctxt "text"
+msgid "Guitar tuner (C)"
+msgstr "Accordeur de guitare"
 
-#: C/textview.py.page:76(p)
-msgid "Italics (\"style\" property)"
-msgstr "Italique (propriété « style »)"
+#. (itstool) path: info/desc
+#: C/guitar-tuner.c.page:11 C/guitar-tuner.py.page:11
+#, fuzzy
+#| msgid ""
+#| "Use Gtk+ and GStreamer to build a simple guitar tuner application for "
+#| "GNOME. Shows off how to use the interface designer."
+msgid ""
+"Use GTK+ and GStreamer to build a simple guitar tuner application for GNOME. "
+"Shows off how to use the interface designer."
+msgstr ""
+"Utilisation de Gtk+ et de GStreamer pour construire une application "
+"d'accordeur de guitare simple pour GNOME. Explications sur la manière "
+"d'utiliser le concepteur d'interface."
 
-#: C/textview.py.page:77(p)
-msgid "Strikethrough (\"strikethrough\" property)"
-msgstr "Barré (propriété « strikethrough »)"
+#. (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"
 
-#: C/textview.py.page:78(p)
-msgid "Justification (\"justification\" property)"
-msgstr "Justifié (propriété « justification »)"
+#. (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
+#, fuzzy
+#| msgid "Guitar Tuner"
+msgid "Guitar tuner"
+msgstr "Accordeur de guitare"
 
-#: C/textview.py.page:79(p)
-msgid "Size (\"size\" and \"size-points\" properties)"
-msgstr "Taille (propriétés « size » et « size-points »)"
+#. (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 ""
+"Dans ce tutoriel, nous allons écrire un programme qui émet des sons servant "
+"à accorder une guitare. Nous allons apprendre comment :"
 
-#: C/textview.py.page:80(p)
-msgid "Text wrapping (\"wrap-mode\" property)"
-msgstr "Césure (propriété « wrap-mode »)"
+#. (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 "créer un projet basique dans Anjuta,"
+
+#. (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 ""
+"créer une interface graphique simple avec le concepteur d'interface "
+"utilisateur d'Anjuta,"
+
+#. (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 "utiliser GStreamer pour émettre des sons."
+
+#. (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 "Vous avez besoin de ce qui suit pour pouvoir suivre ce tutoriel :"
+
+#. (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 ""
+"l'installation du paquet <link xref=\"getting-ready\">Anjuta IDE</link>,"
 
-#: C/textview.py.page:82(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:41
+msgid "Basic knowledge of the C programming language"
+msgstr "des connaissances de base de la programmation en langage C"
+
+#. (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 "Création d'un projet dans Anjuta"
+
+#. (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 ""
-"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>."
+"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 ""
-"Vous pouvez aussi supprimer par la suite certaines étiquettes en particulier "
-"avec <code>remove_tag()</code>, ou supprimer toutes celles d'une région donnée "
-"avec <code>remove_all_tags()</code>."
+"Avant de commencer à programmer, vous devez ouvrir un nouveau projet dans "
+"Anjuta. Ceci crée tous les fichiers qui vous sont nécessaires pour "
+"construire et exécuter votre programme plus tard. C'est aussi utile pour "
+"tout regrouper en un seul endroit."
 
-#: C/textview.py.page:84(p)
-msgid "Methods for a TextIter widget"
-msgstr "Méthodes pour un élément graphique TextIter"
+#. (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 ""
+"Lancez Anjuta et cliquez sur <guiseq><gui>Fichier</gui><gui>Nouveau</"
+"gui><gui>Projet</gui></guiseq> pour ouvrir l'assistant de création de projet."
 
-#: C/textview.py.page:86(p)
-#, Bruno : j'ai l'impression qu'il faut mettre le contraire pour les flags !
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:55
+#, fuzzy
+#| 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."
 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."
+"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 ""
-"La méthode <code>forward_search(needle, flags, limit)</code> effectue "
-"une recherche en avant de <code>needle</code> (cible). La recherche ne "
-"s'effectue pas au delà de l'itérateur <code>Gtk.TextIter</code>. "
-"Les <code>flags</code> (drapeaux) "
-"peuvent être définis comme l'un des éléments suivants, ou comme "
-"n'importe quelle combinaison de l'un d'eux, en les concaténant avec l'opérateur binaire "
-"OR <code>|"
-"</code> : <code>0</code> (la correspondance doit être exacte) ; <code>Gtk."
-"TextSearchFlags.VISIBLE_ONLY</code> (la correspondance peut contenir du "
-"texte invisible intercalé dans la sélection) ; <code>Gtk.TextSearchFlags."
-"TEXT_ONLY</code> (la correspondance peut contenir des pixbufs ou des éléments "
-"graphiques enfants mélangés dans la sélection) ; <code>Gtk.TextSearchFlags."
-"CASE_INSENSITIVE</code> (la correspondance n'est pas sensible à la casse). "
-"La méthode renvoie un tuple contenant un <code>Gtk.TextIter</"
-"code> qui pointe vers le début et vers le premier caractère après la "
-"correspondance ; s'il n'y a pas de correspondance, elle renvoie la valeur "
-"<code>None</code>."
-
-#: C/textview.py.page:87(p)
+"Sélectionnez <gui>Gtk+ (Simple)</gui> dans l'onglet <gui>C</gui>, cliquez "
+"sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
+"suivantes. Utilisez <file>guitar-tuner</file> comme nom de projet et de "
+"répertoire."
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:58
 msgid ""
-"<code>backward_search(needle, flags, limit)</code> does the same as "
-"<code>forward_search()</code>, but moving backwards."
+"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 ""
-"La méthode <code>backward_search(needle, flags, limit)</code> "
-"effectue les même actions que <code>forward_search()</code>, mais en arrière."
+"Assurez-vous que <gui>Configuration des paquets externes</gui> est basculée "
+"sur <gui>I</gui>. Sur la page suivante, choisissez <em>gstreamer-0.10</em> "
+"dans la liste pour inclure la bibliothèque GStreamer à votre projet."
 
-#: C/textview.py.page:95(link) C/textview.c.page:38(link)
-#: C/filechooserdialog.py.page:74(link)
-msgid "GtkTextView"
-msgstr "GtkTextView"
+#. (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 ""
+"Cliquez sur <gui>Appliquer</gui> et votre projet est créé. Ouvrez <file>src/"
+"main.c</file> depuis l'onglet <gui>Projet</gui> ou l'onglet <gui>Fichiers</"
+"gui>. Vous devez voir apparaître du code commençant par les lignes :"
 
-#: C/textview.py.page:96(link) C/textview.c.page:37(link)
-#: C/filechooserdialog.py.page:75(link)
-msgid "GtkTextBuffer"
-msgstr "GtkTextBuffer"
+#. (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 ""
 
-#: C/textview.py.page:97(link)
-msgid "GtkTextTag"
-msgstr "GtkTextTag"
+#. (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 "Première construction du programme"
 
-#: C/textview.py.page:98(link) C/textview.c.page:39(link)
-#: C/scrolledwindow.py.page:43(link) C/filechooserdialog.py.page:76(link)
-msgid "GtkScrolledWindow"
-msgstr "GtkScrolledWindow"
+#. (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 ""
+"« C » est un langage plutôt verbeux, donc ne soyez pas surpris par la "
+"quantité de code que contient le fichier. La plupart du code est générique. "
+"Il charge une fenêtre (vide) à partir du fichier de description de "
+"l'interface et l'affiche. Vous trouverez plus de détails ci-dessous ; passez "
+"cette liste si vous comprenez les bases :"
 
-#: C/textview.py.page:99(link) C/scrolledwindow.py.page:44(link)
-#: C/scale.py.page:57(link) C/paned.py.page:41(link)
-msgid "Standard Enumerations"
-msgstr "Énumérations standards"
+#. (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 ""
+"Les trois lignes <code>#include</code> du haut incorporent les bibliothèques "
+"<code>config</code> (définitions utiles pour la construction autoconf), "
+"<code>gtk</code> (interface utilisateur) et <code>gi18n</code> (pour "
+"internationalisation). Les fonctions de ces bibliothèques seront utilisées "
+"dans le reste du programme."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/textview.js.page:25(None)
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:79
 msgid ""
-"@@image: 'media/textviewpenguinchat.png'; "
-"md5=0dd6f6aa44aaeab7901bd90162ed4c9a"
+"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 ""
-"@@image: 'media/textviewpenguinchat.png'; "
-"md5=0dd6f6aa44aaeab7901bd90162ed4c9a"
+"La fonction <code>create_window</code> crée une nouvelle fenêtre en ouvrant "
+"un fichier GtkBuilder (<file>src/guitar-tuner.ui</file>, défini quelques "
+"lignes plus haut), en connectant ses signaux et en l'affichant dans une "
+"fenêtre. Le fichier GtkBuilder contient une description de l'interface "
+"utilisateur et de tous ses éléments. Vous pouvez utiliser l'éditeur d'Anjuta "
+"pour concevoir des interfaces utilisateur GtkBuilder."
 
-#: C/textview.js.page:7(title)
-msgid "TextView (JavaScript)"
-msgstr "TextView (JavaScript)"
+#. (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 ""
+"Connecter des signaux, c'est décider de ce qui doit se passer quand on "
+"appuie sur un bouton ou quand quelque chose d'autre se produit. Ici, la "
+"fonction <code>destroy</code> est appelée (et quitte l'application) quand la "
+"fenêtre est fermée."
 
-#: C/textview.js.page:21(desc)
-msgid "A multiline text editor"
-msgstr "Un éditeur de texte multiligne"
+#. (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 ""
+"La fonction <code>main</code> est exécutée par défaut quand vous lancez une "
+"application C. Elle appelle d'autres fonctions qui configurent puis lancent "
+"l'application. La fonction <code>gtk_main</code> démarre la boucle "
+"principale de GTK, qui lance l'interface utilisateur et commence à écouter "
+"les événements (comme des clics de souris ou des appuis sur des touches)."
 
-#: C/textview.js.page:26(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:86 C/image-viewer.c.page:81
 msgid ""
-"A TextView is really (or at least usually) a nested set of three objects."
+"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 ""
-"Un élément graphique TextView est en réalité (le plus souvent) une combinaison de trois objets."
+"La définition conditionnelle <code>ENABLE_NLS</code> configure "
+"<code>gettext</code> qui est un environnement pour la traduction des "
+"applications. Ces fonctions définissent la façon dont les objets de "
+"traduction doivent prendre en charge votre application quand vous l'exécutez."
 
-#: C/textview.js.page:28(p)
+#. (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 ""
-"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."
+"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 ""
-"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
-"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
-"lui-même."
+"Le programme est prêt à être utilisé, donc vous pouvez le compiler en "
+"cliquant sur <guiseq><gui>Construire</gui><gui>Construire le projet</gui></"
+"guiseq> ou en appuyant sur <keyseq><key>Maj</key><key>F7</key></keyseq>."
 
-#: C/textview.js.page:29(p)
+#. (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 ""
-"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."
+"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 ""
-"Au milieu, nous trouvons l'élément graphique <link href=\"http://www.roojs.";
-"org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextView.html\">TextView</link>, qui nous "
-"permet d'afficher et de modifier le texte du tampon. Il se redimensionne "
-"automatiquement en fonction de la quantité de texte qu'il contient."
+"Cliquez sur <gui>Exécuter</gui> dans la fenêtre suivante pour configurer une "
+"construction avec débogage. Vous ne devez le faire qu'une seule fois, lors "
+"de la première exécution."
 
-#: C/textview.js.page:30(p)
+#. (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 "Création de l'interface utilisateur"
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:96 C/guitar-tuner.cpp.page:90
 msgid ""
-"Since the automatic resizing can make a TextView unwieldy, you normally "
-"place it inside of a <link xref=\"scrolledwindow.js\">ScrolledWindow</link>. "
-"Despite the name, it's not an actual window in terms of having a title bar "
-"and an X button; it's a widget you put on the application you're making, "
-"which acts like a window onto a more manageable chunk of a TextView. If the "
-"text in the buffer is too big to fit, scrollbars will appear."
-msgstr ""
-"Étant donné que le redimensionnement automatique peut rendre un TextView "
-"peu maniable, placez-le dans une fenêtre à défilement <link xref="
-"\"scrolledwindow.js\">ScrolledWindow</link>. Malgré son nom, ce n'est pas à "
-"proprement parler une fenêtre, car elle ne comporte ni barre de titre, ni "
-"bouton X ; c'est un élément graphique à placer dans l'application que vous "
-"construisez et qui permet de mieux gérer un TextView. Si le texte "
-"du tampon est trop grand, des ascenseurs apparaissent."
+"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 ""
+"Une description de l'interface utilisateur est contenue dans le fichier "
+"GtkBuilder. Pour la modifier, ouvrez le fichier <file>src/guitar_tuner.ui</"
+"file>. Ceci vous bascule vers le concepteur d'interface. La fenêtre de "
+"conception se trouve au centre ; les éléments graphiques et leurs propriétés "
+"sont sur la gauche et la palette des composants graphiques disponibles est "
+"sur la droite."
 
-#: C/textview.js.page:32(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:98 C/guitar-tuner.cpp.page:92
+#: C/guitar-tuner.py.page:99
 msgid ""
-"If you want to change what text is displayed in the TextView, you act on the "
-"TextBuffer, since it's what actually holds the text. The same goes for if "
-"you want to see what text someone typed in. This sample application lets you "
-"talk to a (make-believe) penguin, and checks the TextBuffer to see if you "
-"typed the word \"fish\" anywhere in it."
+"The 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 ""
-"Si vous modifiez le texte affiché dans le TextView, vous agissez sur le TextBuffer "
-"puisque c'est lui qui contient effectivement le texte. Procédez de la même manière si vous souhaitez 
connaître le "
-"texte saisi par quelqu'un. Cet exemple d'application vous permet de "
-"parler à un pingouin (imaginaire) et parcourt le TextBuffer "
-"pour voir si vous avez saisi le mot « poisson » quelque part."
+"La disposition de toute interface utilisateur dans GTK+ est organisée à "
+"l'aide de boîtes et de tableaux. Dans cet exemple, prenons une "
+"<gui>GtkButtonBox</gui> verticale pour y mettre six <gui>GtkButtons</gui>, "
+"un pour chacune des six cordes de la guitare."
 
-#: C/textview.js.page:33(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:104 C/guitar-tuner.cpp.page:98
+#: C/guitar-tuner.py.page:105
 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>."
+"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 ""
-"Dans la vraie vie, les populations de pingouins déclinent rapidement, à "
-"cause du changement climatique qui fait fondre les glaces sur lesquels ils "
-"vivent et raréfie les stocks de poissons dont ils se nourrissent. Allez "
-"jeter un coup d'œil à <link href=\"http://pingus.seul.org/\";>Pingus.</link> "
-"si vous voulez jouer à un jeu GNOME (un peu stupide) basé sur ce "
-"constat."
+"Choisissez une <gui>GtkButtonBox</gui> (Boîte) dans la section "
+"<gui>Conteneurs</gui> de la <gui>Palette</gui> à droite et mettez-la dans la "
+"fenêtre. Dans l'onglet <gui>Propriétés</gui>, définissez le nombre "
+"d'éléments à 6 (pour les six cordes) et l'orientation à verticale."
 
-#: C/textview.js.page:73(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:108 C/guitar-tuner.cpp.page:102
+#: C/guitar-tuner.py.page:109
 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."
+"Now, choose a <gui>GtkButton</gui> from the palette and put it into the "
+"first part of the box."
 msgstr ""
-"Tout le code de cet exemple tient dans la classe TextViewExample. Le code ci-"
-"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
-"et la fenêtre qui les contient."
+"Ensuite, choisissez un <gui>GtkButton</gui> (Bouton) dans la palette et "
+"mettez-le dans la première partie de la boîte."
 
-#: C/textview.js.page:91(title)
-msgid "Creating the TextView"
-msgstr "Création de l'élément graphique TextView"
+#. (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 ""
+"Pendant que le bouton est encore sélectionné, modifiez la propriété "
+"<gui>Étiquette</gui> dans l'onglet <gui>Composants graphiques</gui> à "
+"<gui>E</gui>. C'est la corde E du bas."
 
-#: C/textview.js.page:101(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:114 C/guitar-tuner.py.page:115
 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."
+"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 ""
-"Pour commencer, créons le <link xref=\"label.js\">Label</link> (étiquette) que le "
-"pingouin va utiliser pour dialoguer avec vous. Définissons la propriété de césure du "
-"texte de l'étiquette sur wrap (césure) en lui attribuant la valeur « true », "
-"mais nous utiliserons une méthode différente sur l'élément graphique "
-"TextView lui-même pour avoir un contrôle plus fin."
+"Passez à l'onglet <gui>Signaux</gui> (dans l'onglet <gui>Composants "
+"graphiques</gui>) et recherchez le signal <code>clicked</code> du bouton. "
+"Vous pouvez l'utiliser pour connecter un gestionnaire de signal qui sera "
+"appelé quand le bouton est cliqué. Pour cela, cliquez sur le signal et "
+"saisissez <code>on_button_clicked</code> dans la colonne <gui>Gestionnaire</"
+"gui> et appuyez sur <key>Entrée</key>."
 
-#: C/textview.js.page:112(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:117 C/guitar-tuner.py.page:118
+#: C/guitar-tuner.vala.page:122
 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."
+"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 ""
-"La première étape consiste à créer un élément graphique TextBuffer pour y "
-"placer les mots. Ensuite, nous créons l'élément TextView et nous lui "
-"indiquons d'utiliser le TextBuffer comme tampon. Nous le "
-"paramétrons aussi pour qu'il soit modifiable (editable), car nous voulons pouvoir y "
-"saisir d'autres choses."
+"Répétez cette procédure pour les autres boutons, ce qui ajoute les 5 autres "
+"cordes nommées <em>A</em>, <em>D</em>, <em>G</em>, <em>B</em> et <em>e</em>."
 
-#: C/textview.js.page:113(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.c.page:120 C/guitar-tuner.py.page:121
+#: C/guitar-tuner.vala.page:125
 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."
+"Save the UI design (by clicking <guiseq><gui>File</gui><gui>Save</gui></"
+"guiseq>) and keep it open."
 msgstr ""
-"La propriété wrap_mode permet de choisir entre quatre modes de césure "
-"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.WrapMode.html";
-"\">WrapModes</link> différents. Le mode Gtk.WrapMode.CHAR, par exemple, fait "
-"la césure au milieu d'un mot si vous continuer la saisie après avoir "
-"atteint le bord. La plupart d'entre vous sont certainement plus habitués au mode Gtk."
-"WrapMode.WORD, qui met automatiquement le mot entier à la ligne s'il est "
-"trop long."
+"Enregistrez le fichier de conception de l'interface utilisateur (en cliquant "
+"sur <guiseq><gui>Fichier</gui><gui>Enregistrer</gui></guiseq>) et laissez-le "
+"ouvert."
 
-#: C/textview.js.page:127(p)
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:126 C/guitar-tuner.vala.page:203
+msgid "Creating the signal handler"
+msgstr "Création du gestionnaire de signal"
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:127 C/guitar-tuner.py.page:128
 msgid ""
-"Here we create a <link xref=\"scrolledwindow.js\">ScrolledWindow,</link> and "
-"set it to automatically scroll if it gets to be too big horizontally or "
-"vertically. We also give it a nice-looking ETCHED_IN border. After that, we "
-"put our TextView inside, and tell the ScrolledWindow to give us a viewport "
-"onto it."
+"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 ""
-"Ici, nous créons une <link xref=\"scrolledwindow.js\">ScrolledWindow</link> et "
-"nous la paramétrons pour défiler automatiquement si son contenu déborde "
-"horizontalement ou verticalement. Nous lui ajoutons aussi une belle bordure "
-"ETCHED_IN. Ensuite, nous y mettons notre TextView et nous indiquons "
-"à la fenêtre ScrolledWindow de nous l'afficher."
+"Dans le concepteur d'interface utilisateur, il a été fait en sorte que tous "
+"les boutons appellent la même fonction, <gui>on_button_clicked</gui> quand "
+"ils sont cliqués. Nous devons ajouter cette fonction dans notre fichier "
+"source."
 
-#: C/textview.js.page:131(title) C/radiobutton.js.page:117(title)
-msgid "Creating the rest of the user interface"
-msgstr "Création du reste de l'interface utilisateur"
+#. (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 ""
+"Pour cela, ouvrez <file>main.c</file> pendant que le fichier de l'interface "
+"utilisateur est encore ouvert. Allez au même onglet <gui>Signaux</gui> que "
+"vous aviez déjà utilisé pour nommer le signal. Prenez la ligne où vous aviez "
+"défini le signal <gui>clicked</gui> et faites la glisser quelque part à "
+"l'extérieur d'une fonction dans le fichier source. Le code suivant s'ajoute "
+"à votre fichier source :"
 
-#: C/textview.js.page:143(p)
+#. (itstool) path: section/code
+#: C/guitar-tuner.c.page:131
+#, no-wrap
 msgid ""
-"The first <link xref=\"grid.js\">Grid</link> we create only has the Label "
-"and the ScrolledWindow inside it."
+"\n"
+"void on_button_clicked (GtkWidget* button, gpointer user_data)\n"
+"{\n"
+"\n"
+"}"
 msgstr ""
-"Le premier <link xref=\"grid.js\">Grid</link> (grille) que nous avons créé ne "
-"contient que l'étiquette et la ScrolledWindow."
 
-#: C/textview.js.page:162(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:136
 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."
+"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 ""
-"Nous créons un <link xref=\"button.js\">Button</link> (bouton) pour envoyer votre message "
-"au pingouin et un nouveau Grid (grille) qui contient l'autre grille en haut et le "
-"bouton en bas. Le bouton comporte une marge (margin) dans sa partie supérieure, de "
-"telle sorte qu'il n'est pas collé contre la ScrolledWindow."
+"Ce récepteur de signal a deux arguments : un pointeur vers le "
+"<code>GtkWidget</code> qui a appelé la fonction (dans notre cas, toujours un "
+"<code>GtkButton</code>) et un pointeur sur des « données "
+"utilisateur » (user_data) que vous pouvez définir, mais que nous n'utilisons "
+"pas ici (les données utilisateur peuvent être définies par un appel à la "
+"fonction <code>gtk_builder_connect_signals</code> ; il sert normalement à "
+"transmettre un pointeur à une structure de données auxquelles vous pouvez "
+"avoir besoin d'accéder à l'intérieur du gestionnaire de signal)."
 
-#: C/textview.js.page:173(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:137 C/guitar-tuner.py.page:136
 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."
+"For now, we'll leave the signal handler empty while we work on writing the "
+"code to produce sounds."
 msgstr ""
-"Enfin, nous relions la grille principale à la fenêtre, puis indiquons à la "
-"fenêtre de s'afficher avec son contenu quand l'application est lancée."
+"Laissons le gestionnaire de signal vide pour l'instant et écrivons le code "
+"qui produit les sons."
 
-#: C/textview.js.page:178(title)
-msgid "Function which handles the penguin's response"
-msgstr "Fonction prenant en charge la réponse du pingouin"
+#. (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 "Les pipelines GStreamer"
 
-#: C/textview.js.page:230(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:142 C/guitar-tuner.js.page:40
+#: C/guitar-tuner.py.page:141
 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."
+"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 ""
-"Nous utilisons ici quelques fonctions JavaScript de base pour que le "
-"pingouin dise quelque chose au hasard. Les pingouins apprécient le "
-"poisson et nous allons donc le faire répondre quand on prononce le mot "
-"« fish » (poisson). Pour cela, nous appliquons la méthode JavaScript de correspondance "
-"d'objets chaîne de caractères sur le texte <file>this.buffer.text</file>, "
-"qui renvoie le contenu de notre TextBuffer."
+"GStreamer est l'architecture multimédia de GNOME — vous pouvez vous en "
+"servir pour des jeux, des enregistrements, pour traiter des flux vidéo, "
+"audio, de webcam entre autres. Ici, nous allons nous en servir pour émettre "
+"des tonalités à une seule fréquence."
 
-#: C/textview.js.page:231(p)
+#. (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 ""
-"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."
+"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 ""
-"Comme nous voulons effacer le TextBuffer après chaque clic sur « Sent » (Envoyer), nous "
-"paramétrons le <file>this.buffer.text</file> pour qu'il contienne "
-"une chaîne vide après cela. Nous renvoyons ensuite le focus sur notre "
-"élément TextView, pour pouvoir continuer à y saisir du texte sans avoir "
-"besoin de cliquer dessus au préalable."
+"Le concept de GStreamer est le suivant : il y a création d'un <em>pipeline</"
+"em> contenant plusieurs éléments de traitement en provenance d'une "
+"<em>source</em> à destination d'un <em>collecteur</em> (sortie). La source "
+"peut être un fichier image, une vidéo ou un fichier musical, par exemple, et "
+"la sortie un élément graphique ou une carte son."
 
-#: C/textview.js.page:238(p)
+#. (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 ""
-"Finally, we create a new instance of the finished TextViewExample class, and "
-"set the application running."
+"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 ""
-"Enfin, nous créons une nouvelle instance de la classe TextViewExample que nous venons de terminer "
-"et démarrons l'application."
+"Entre la source et le collecteur, vous pouvez appliquer différents filtres "
+"et convertisseurs pour prendre en charge les effets, les conversions de "
+"format et ainsi de suite. Chaque élément du pipeline possède des propriétés "
+"pouvant être utilisées pour modifier son comportement."
 
-#: C/textview.js.page:251(link) C/statusbar.js.page:224(link)
-#: C/radiobutton.js.page:277(link) C/grid.js.page:35(link)
-#: C/button.js.page:32(link)
-msgid "Gtk.Button"
-msgstr "Gtk.Button"
+#. (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 "Un exemple de pipeline GStreamer."
 
-#: C/textview.js.page:253(link) C/switch.js.page:271(link)
-#: C/spinbutton.js.page:204(link) C/scale.js.page:213(link)
-#: C/radiobutton.js.page:279(link) C/label.vala.page:32(link)
-#: C/label.js.page:31(link) C/dialog.vala.page:33(link)
-msgid "Gtk.Label"
-msgstr "Gtk.Label"
+#. (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 "Configuration du pipeline"
 
-#: C/textview.js.page:254(link) C/radiobutton.vala.page:32(link)
-#: C/radiobutton.js.page:280(link)
-msgid "Gtk.RadioButton"
-msgstr "Gtk.RadioButton"
+#. (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 ""
+"Dans ce petit exemple, nous utilisons une source génératrice de son de "
+"fréquence pure appelée <code>audiotestsrc</code> et envoyons sa sortie au "
+"périphérique son par défaut du système, <code>autoaudiosink</code>. Il nous "
+"faut seulement configurer la fréquence du générateur accessible depuis la "
+"propriété <code>freq</code> de <code>audiotestsrc</code>."
 
-#: C/textview.c.page:7(title)
-msgid "TextView (C)"
-msgstr "TextView (C)"
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:154
+#, fuzzy
+#| msgid ""
+#| "Insert the following line into <file>main.c</file>, just below the "
+#| "<code><![CDATA[#include <gtk/gtk.h>]]></code> line:"
+msgid ""
+"Insert the following line into <file>main.c</file>, just below the "
+"<code>#include &lt;gtk/gtk.h&gt;</code> line:"
+msgstr ""
+"Insérez la ligne suivante dans le fichier <file>main.c</file>, juste en "
+"dessous de la ligne <code><![CDATA[#include <gtk/gtk.h>]]></code> :"
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.c.page:155
+#, fuzzy, no-wrap
+#| msgid "#include &lt;webkit/webkit.h&gt;"
+msgid "#include &lt;gst/gst.h&gt;"
+msgstr "#include &lt;webkit/webkit.h&gt;"
 
-#: C/textview.c.page:24(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:156
 msgid ""
-"If we have a loooooooooooooooooooooooooooooooooooong (that was long) word, "
-"a* horizontal scrollbar will appear."
+"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 ""
-"Si nous avons un loooooooooooooooooooooooooooooooooooong mot, une barre de "
-"défilement horizontale apparaît."
+"Cela inclut la bibliothèque de GStreamer. Ajoutez aussi une ligne pour "
+"initialiser GStreamer ; mettez le code suivant dans la ligne au-dessus de "
+"<code>gtk_init</code> dans la fonction <code>main</code> :"
 
-#: C/textview.c.page:40(link)
-msgid "GtkContainer"
-msgstr "GtkContainer"
+#. (itstool) path: section/code
+#: C/guitar-tuner.c.page:157
+#, fuzzy, no-wrap
+#| msgid "\tGst::init (argc, argv);"
+msgid "gst_init (&amp;argc, &amp;argv);"
+msgstr "\tGst::init (argc, argv);"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/switch.vala.page:25(None) C/switch.py.page:26(None)
-#: C/switch.c.page:22(None)
-msgid "@@image: 'media/switch_off.png'; md5=211a2962708800697ad5373dcc86ad6d"
-msgstr "@@image: 'media/switch_off.png'; md5=211a2962708800697ad5373dcc86ad6d"
+#. (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 ""
+"Ensuite, copiez la fonction suivante dans le fichier <file>main.c</file> au-"
+"dessus de la fonction vide <code>on_button_clicked</code> :"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/switch.vala.page:26(None) C/switch.py.page:27(None)
-#: C/switch.c.page:23(None)
-msgid "@@image: 'media/switch_on.png'; md5=95e8769f758c2d95ace0fa8ecf30b29d"
-msgstr "@@image: 'media/switch_on.png'; md5=95e8769f758c2d95ace0fa8ecf30b29d"
+#. (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 ""
 
-#: C/switch.vala.page:7(title)
-msgid "Switch (Vala)"
-msgstr "Switch (interrupteur) (Vala)"
+#. (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 ""
+"Les cinq premières lignes créent les éléments GStreamer source et sink "
+"(collecteur) et un élément pipeline (qui sera utilisé comme conteneur pour "
+"les deux autres éléments). Le pipeline est nommé « note » ; la source est "
+"nommée « source » et définie comme étant le connecteur <code>audiotestsrc</"
+"code> et le collecteur est nommé « output » et défini comme étant le "
+"connecteur <code>autoaudiosink</code> (qui est la sortie par défaut de la "
+"carte son)."
 
-#: C/switch.vala.page:21(desc) C/switch.py.page:22(desc)
-#: C/switch.c.page:17(desc)
-msgid "A \"light switch\" style toggle"
-msgstr "Un bouton de basculement du style « interrupteur électrique »"
+#. (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 ""
+"L'appel à <code>g_object_set</code> définit la propriété <code>freq</code> "
+"de l'élément source à <code>frequency</code> qui est transmis comme argument "
+"de la fonction <code>play_sound</code>. Il s'agit simplement de la fréquence "
+"de la note de musique en Hertz ; certaines fréquences utiles seront définies "
+"plus tard."
 
-#: C/switch.vala.page:24(title) C/switch.py.page:25(title)
-#: C/switch.js.page:20(title) C/switch.c.page:20(title)
-msgid "Switch"
-msgstr "Switch (interrupteur)"
+#. (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 ""
+"<code>gst_bin_add_many</code> place la source et le collecteur dans le "
+"pipeline. Le pipeline est un <code>GstBin</code> qui est juste un élément "
+"qui peut contenir beaucoup d'autres éléments GStreamer. En général, vous "
+"pouvez ajouter autant d'éléments que vous voulez au pipeline en ajoutant "
+"d'autres d'arguments à <code>gst_bin_add_many</code>."
 
-#: C/switch.vala.page:28(p)
-msgid "This Switch toggles the title."
-msgstr "Cet interrupteur bascule le titre."
+#. (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 ""
+"Ensuite, <code>gst_element_link</code> est utilisé pour connecter les "
+"éléments ensemble, de sorte que la sortie de la source (une note) va à "
+"l'entrée du collecteur (et est ensuite envoyée à la carte son). "
+"<code>gst_element_set_state</code> sert enfin à démarrer la lecture en "
+"basculant l'état du pipeline à « playing » (lecture) "
+"(<code>GST_STATE_PLAYING</code>)."
 
-#: C/switch.vala.page:35(link) C/switch.js.page:272(link)
-msgid "Gtk.Switch"
-msgstr "Gtk.Switch"
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:201 C/guitar-tuner.py.page:191
+msgid "Stopping playback"
+msgstr "Arrêt de la lecture"
 
-#: C/switch.py.page:7(title)
-msgid "Switch (Python)"
-msgstr "Switch : interrupteur (Python)"
+#. (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 ""
+"Comme nous ne voulons pas jouer indéfiniment une note ennuyeuse, la dernière "
+"chose que fait <code>play_sound</code> est d'appeler <code>g_timeout_add</"
+"code> qui définit un délai avant la coupure du son ; cela attend "
+"<code>LENGTH</code> millisecondes avant d'appeler la fonction "
+"<code>pipeline_stop</code> et continuera à l'appeler jusqu'à ce que "
+"<code>pipeline_stop</code> renvoie la valeur <code>FALSE</code>."
 
-#: C/switch.py.page:29(p)
-msgid "This Switch makes the title appears and disappear."
-msgstr "Cet interrupteur fait apparaître et disparaître le titre."
+#. (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 ""
+"Écrivons maintenant la fonction <code>pipeline_stop</code> qui est appelée "
+"par <code>g_timeout_add</code>. Insérez le code suivant <em>au-dessus</em> "
+"de la fonction <code>play_sound</code> :"
 
-#: C/switch.py.page:40(title)
-msgid "Useful methods for a Switch widget"
-msgstr "Méthodes utiles pour un élément graphique Switch"
+#. (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 ""
 
-#: C/switch.py.page:41(p) C/checkbutton.py.page:38(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:215
+#, fuzzy
+#| msgid ""
+#| "The call to <code>gst_element_set_state</code> pauses the playback of the "
+#| "pipeline and <code>g_object_unref</code> unreferences the pipeline, "
+#| "destroying it and freeing its memory."
 msgid ""
-"For a discussion on signals and callback functions, see <link xref=\"signals-"
-"callbacks.py\">this page</link>."
+"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 ""
-"Pour obtenir des informations sur les signaux et fonctions de rappel, "
-"consultez <link xref=\"signals-callbacks.py\">cette page</link>."
+"L'appel à <code>gst_element_set_state</code> met en pause la lecture du "
+"pipeline et <code>g_object_unref</code> déréférence le pipeline, le "
+"détruisant ainsi et effaçant sa mémoire."
 
-#: C/switch.py.page:48(link) C/switch.c.page:35(link)
-#: C/radiobutton.c.page:37(link)
-msgid "GtkSwitch"
-msgstr "GtkSwitch"
+#. (itstool) path: section/title
+#: C/guitar-tuner.c.page:219 C/guitar-tuner.py.page:208
+msgid "Define the tones"
+msgstr "Définition des notes"
 
-#: C/switch.py.page:49(link) C/switch.c.page:34(link)
-#: C/spinbutton.c.page:37(link) C/separator.py.page:40(link)
-#: C/radiobutton.c.page:35(link) C/label.py.page:88(link)
-#: C/label.c.page:38(link) C/grid.py.page:57(link) C/dialog.c.page:36(link)
-msgid "GtkLabel"
-msgstr "GtkLabel"
+#. (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 ""
+"Nous voulons jouer la note adéquate quand l'utilisateur clique sur un "
+"bouton. Avant tout, nous devons connaître la fréquence de chacune des six "
+"cordes de la guitare qui sont définies (au début du fichier <file>main.c</"
+"file>) ainsi :"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/switch.js.page:21(None)
+#. (itstool) path: section/code
+#: C/guitar-tuner.c.page:221
+#, no-wrap
 msgid ""
-"@@image: 'media/switchanimals.png'; md5=513ae15dcf68e15eef30b76420b8c714"
+"\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 ""
-"@@image: 'media/switchanimals.png'; md5=513ae15dcf68e15eef30b76420b8c714"
 
-#: C/switch.js.page:7(title)
-msgid "Switch (JavaScript)"
-msgstr "Switch : interrupteur (JavaScript)"
+#. (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 ""
+"Maintenant, nous allons étoffer le gestionnaire de signal "
+"<code>on_button_clicked</code> défini auparavant. Nous aurions pu connecter "
+"chaque bouton à un gestionnaire différent, mais cela aurait dupliqué "
+"beaucoup de code. Au lieu de ça, nous allons plutôt utiliser l'étiquette du "
+"bouton pour déterminer le bouton cliqué :"
 
-#: C/switch.js.page:17(desc)
-msgid "A sliding switch that can be flipped on and off"
-msgstr "Un interrupteur à glissière qui peut être allumé ou éteint"
+#. (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 ""
 
-#: C/switch.js.page:22(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:251
+#, fuzzy
+#| msgid ""
+#| "A pointer to the <code>GtkButton</code> that was clicked is passed as an "
+#| "argument (<code>button</code>) to <code>on_button_clicked</code>. We can "
+#| "get the label of that button by using <code>gtk_bin_get_child</code>, and "
+#| "then get the text from that label using <code>gtk_label_get_label</code>."
 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>"
+"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 ""
-"Un interrupteur possède deux positions : allumé ou éteint. Cet exemple "
-"montre comment utiliser plusieurs interrupteurs ensemble pour contrôler "
-"quelle <link xref=\"image.js\">Image</</link> s'affiche dans la fenêtre. Les "
-"images utilisées dans cet exemple <link href=\"https://live.gnome.org/";
-"TarynFox?action=AttachFile&amp;do=get&amp;target=Animal+Photos.zip\">peuvent "
-"être téléchargées ici.</link>"
+"Un pointeur vers le bouton <code>GtkButton</code> qui a été cliqué est "
+"transmis comme argument (<code>button</code>) à <code>on_button_clicked</"
+"code>. On peut obtenir l'étiquette de ce bouton en utilisant "
+"<code>gtk_bin_get_child</code> puis en extrayant le texte de cette étiquette "
+"avec <code>gtk_label_get_label</code>."
 
-#: C/switch.js.page:23(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:252
+#, fuzzy
+#| msgid ""
+#| "The label text is then compared to the notes that we have using "
+#| "<code>g_str_equal</code>, and <code>play_sound</code> is called with the "
+#| "frequency appropriate for that note. This plays the tone; we have a "
+#| "working guitar tuner!"
 msgid ""
-"The window will contain a \"broken image\" icon instead of a picture if "
-"picture files named <file>redfox.png</file>, <file>muteswan.png</file>, "
-"<file>fruitbat.png</file>, and <file>gentoopenguin.png</file> aren't in the "
-"same directory. You can change the code and the pictures around as you like, "
-"but the Creative Commons-licensed photos used in this example were taken "
-"from the following sources and cropped to 640x425:"
+"The 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 ""
-"Si les fichiers <file>redfox.png</file>, <file>muteswan.png</file>, "
-"<file>fruitbat.png</file> et <file>gentoopenguin.png</file> ne se trouvent "
-"pas dans le même dossier, la fenêtre affichera une icône « image brisée ». Vous pouvez modifier le code et 
les images comme "
-"bon vous semble, mais sachez que les photos sous licence Creative Commons "
-"utilisées dans cet exemple proviennent des sources suivantes et ont été "
-"rognées à 640x435 :"
+"On compare ensuite le texte de cette étiquette à la note à l'aide de la "
+"fonction <code>g_str_equal</code> et <code>play_sound</code> est appelée "
+"avec la fréquence appropriée à cette note. Cela joue la note ; nous avons un "
+"accordeur de guitare opérationnel !"
 
-#: C/switch.js.page:25(p)
+#. (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 "Construction et lancement de l'application"
+
+#. (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 ""
-"<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>"
+"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 ""
-"<link href=\"http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.jpg\";>Red fox "
-"photo</link> (renard rouge) par Rob Lee, licence <link href=\"http://creativecommons.org/";
-"licenses/by/2.0/deed.en\">CC-By</link>"
+"À ce stade, tout le programme est fonctionnel. Cliquez sur "
+"<guiseq><gui>Construire</gui><gui>Construire le projet</gui></guiseq> pour "
+"tout reconstruire et faites <guiseq><gui>Exécuter</gui><gui>Exécuter</gui></"
+"guiseq> pour lancer l'application."
 
-#: C/switch.js.page:26(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:258 C/guitar-tuner.cpp.page:257
+#: C/guitar-tuner.vala.page:255
 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>"
+"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 ""
-"<link href=\"http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-";
-"Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.jpg\">Gentoo penguinphoto</"
-"link> (pingouin) par Ken Funakoshi, licence <link href=\"http://creativecommons.org/";
-"licenses/by-sa/2.0/deed.en\">CC-By-SA</link>"
+"Si ce n'est déjà fait, choisissez l'application <file>Debug/src/guitar-"
+"tuner</file> dans la boîte de dialogue qui s'affiche. Enfin, cliquez sur "
+"<gui>Exécuter</gui> et amusez-vous !"
 
-#: C/switch.js.page:27(p)
+#. (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 "Implémentation de référence"
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.c.page:263
 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>"
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"guitar-tuner/guitar-tuner.c\">reference code</link>."
 msgstr ""
-"<link href=\"http://www.flickr.com/photos/shekgraham/127431519/in/";
-"photostream/\">Fruit bat photo</link> (chauve-souris) par Shek Graham, licence <link href="
-"\"http://creativecommons.org/licenses/by/2.0/deed.en\";>CC-By</link>"
+"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
+"programme à ce <link href=\"guitar-tuner/guitar-tuner.c\">programme de "
+"référence</link>."
+
+#. (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 "Les étapes suivantes"
+
+#. (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 "Voici quelques idées sur la manière d'étendre ce simple exemple :"
+
+#. (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 ""
+"Faire que le programme joue automatiquement les notes de manière cyclique."
+
+#. (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 ""
+"Faire que le programme lise des enregistrements de vraies cordes de guitare "
+"pincées."
 
-#: C/switch.js.page:28(p)
+#. (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 ""
-"<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>"
+"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 ""
-"<link href=\"http://commons.wikimedia.org/wiki/File:Mute_Swan-";
-"Mindaugas_Urbonas.jpg\">Mute swan photo</link> (cygne) par Mindaugas Urbonas, "
-"licence <link href=\"http://creativecommons.org/licenses/by-sa/2.5/deed.en";
-"\">CC-By-SA</link>"
+"Pour y parvenir, vous devrez configurer un pipeline GStreamer un peu plus "
+"sophistiqué qui vous permette de charger et lire des fichiers musicaux. Vous "
+"devrez choisir des éléments GStreamer <link href=\"http://gstreamer.";
+"freedesktop.org/documentation/plugins.html\">décodeur et démuxeur</link> "
+"basés sur le format des sons enregistrés — par exemple, les MP3 utilisent "
+"des éléments différents de ceux des fichiers Ogg Vorbis."
 
-#: C/switch.js.page:30(p)
+#. (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 ""
-"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>"
+"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 ""
-"Les crédits photos et les informations de licence sont affichés dans la boîte de dialogue <link "
-"xref=\"aboutdialog.js\">AboutDialog</link> de l'application. Pensez à "
-"toujours porter au crédit de l'artiste original tout <link href=\"http://";
-"creativecommons.org\">travail sous licence Creative Commons !</link>."
+"Il vous faudra aussi peut-être connecter les éléments de façon plus "
+"complexe. Vous aurez sans doute besoin de consulter les <link href=\"http://";
+"gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-intro-"
+"basics.html\">concepts GStreamer</link> que nous ne couvrons pas dans ce "
+"tutoriel, comme les <link href=\"http://gstreamer.freedesktop.org/data/doc/";
+"gstreamer/head/manual/html/section-intro-basics-pads.html\">pads</link>. La "
+"commande <cmd>gst-inspect</cmd> peut également vous être utile."
+
+#. (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 "Analyser automatiquement les notes jouées par l'utilisateur."
 
-#: C/switch.js.page:74(p)
+#. (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 ""
-"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."
+"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 ""
-"Tout le code de cet exemple est contenu dans la classe SwitchExample. Le code ci-"
-"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
-"et la fenêtre qui les contient."
+"Vous pourriez branchez un microphone et enregistrez les sons obtenus en "
+"utilisant l'<link href=\"http://gstreamer.freedesktop.org/data/doc/gstreamer/";
+"head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-autoaudiosrc.html"
+"\">entrée source</link>. Peut-être qu'une espèce d'<link href=\"http://";
+"gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/"
+"html/gst-plugins-good-plugins-plugin-spectrum.html\">analyseur de spectre</"
+"link> peut vous aider à trouver les notes jouées ?"
 
-#: C/switch.js.page:75(p) C/messagedialog.js.page:70(p)
+#. (itstool) path: info/desc
+#: C/guitar-tuner.cpp.page:9
 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."
+"Use GTKmm and GStreamermm to build a simple guitar tuner application for "
+"GNOME. Shows off how to use the interface designer."
 msgstr ""
-"Avant d'appeler _buildUI pour créer la fenêtre et les éléments graphiques "
-"qu'elle contient, il nous faut appeler _initMenus, qui indique à GNOME de "
-"générer le menu. Nous pouvons mettre le code actuel pour _initMenus après le "
-"code pour _buildUI, car l'ordre n'a pas d'importance du moment que "
-"_initMenus est appelé en premier dans _onStartup."
+"Utilisation de GTKmm et de GStreamermm pour construire une application "
+"accordeur de guitare simple pour GNOME. Explications sur la manière "
+"d'utiliser le concepteur d'interface."
 
-#: C/switch.js.page:91(title)
-msgid "Creating the switches"
-msgstr "Création des interrupteurs"
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:39
+msgid "Basic knowledge of the C++ programming language"
+msgstr "des connaissances de base de la programmation en langage C++."
 
-#: C/switch.js.page:97(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:53
 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."
+"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 ""
-"Créons en premier l'<link xref=\"image.js\">Image</link> que les "
-"interrupteurs vont contrôler. Souvenez-vous qu'un fichier nommé <file>redfox."
-"png</file> doit être présent dans le même dossier que cette application."
+"Sélectionnez <gui>GTKmm (Simple)</gui> dans l'onglet <gui>C++</gui>, cliquez "
+"sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
+"suivantes. Utilisez <file>guitar-tuner</file> comme nom de projet et de "
+"répertoire."
 
-#: C/switch.js.page:119(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:56
 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."
+"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 ""
-"Utilisons un <link xref=\"label.js\">Label</link> pour étiqueter chaque "
-"interrupteur et laissons-leur un peu de marge à droite pour qu'ils ne "
-"débordent pas les uns sur les autres. Créons ensuite les interrupteurs et "
-"paramétrons-les pour qu'ils soient en position « éteint » par défaut."
+"Assurez-vous que <gui>Configuration des paquets externes</gui> est activé. "
+"Sur la page suivante, choisissez <em>gstreamermm-0.10</em> dans la liste "
+"pour inclure la bibliothèque GStreamermm à votre projet."
 
-#: C/switch.js.page:120(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:60
 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."
+"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 ""
-"Le signal qu'un interrupteur envoie quand il est basculé dans un sens ou "
-"dans l'autre est appelé notify::active. Après avoir créé chaque "
-"interrupteur, connectons son signal notify::active à une fonction appelée "
-"_switchFlip. Si vous avez plein d'interrupteurs qui font chacun quelque "
-"chose de différent, vous pouvez les connecter à différentes fonctions, mais "
-"ici, ils sont tous les deux utilisés pour la même chose : contrôler quelle "
-"image est affichée par _image."
+"Cliquez sur <gui>Appliquer</gui> et votre projet est créé. Ouvrez <file>src/"
+"main.cc</file> depuis l'onglet <gui>Projet</gui> ou l'onglet <gui>Fichiers</"
+"gui>. Vous devez voir apparaître du code commençant par les lignes :"
 
-#: C/switch.js.page:144(p)
+#. (itstool) path: item/code
+#: C/guitar-tuner.cpp.page:61
+#, no-wrap
 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."
+"\n"
+"#include &lt;gtkmm.h&gt;\n"
+"#include &lt;iostream&gt;"
 msgstr ""
-"Créons une <link xref=\"grid.js\">grille</link> pour les étiquettes et les "
-"interrupteurs de façon à les organiser dans un agencement 2x2 avec une marge "
-"entre eux et l'image. Ensuite, mettons cette grille dans une plus grande au "
-"format 2x1 qui contient l'image en haut et la grille avec les étiquettes et "
-"les interrupteurs en bas."
 
-#: C/switch.js.page:153(p) C/spinbutton.js.page:165(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:70 C/image-viewer.cpp.page:67
 msgid ""
-"Finally, we add the larger Grid to the window, then tell the window to show "
-"itself and all the widgets inside of it."
+"This is a very basic C++ code setting up GTKmm. More details are given "
+"below; skip this list if you understand the basics:"
 msgstr ""
-"Enfin, ajoutons la grille la plus grande à la fenêtre et indiquons à la fenêtre de "
-"s'afficher avec tous les éléments graphiques à l'intérieur."
+"C'est un programme C++ très basique pour configurer GTKmm. Vous trouverez "
+"plus de détails ci-dessous ; passez cette liste si vous comprenez les bases :"
 
-#: C/switch.js.page:157(title)
-msgid "Function which handles the switches being flipped"
-msgstr "Fonction prenant en charge la commutation des interrupteurs"
+#. (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 ""
+"Les trois lignes <code>#include</code> du haut incorporent les bibliothèques "
+"<code>config</code> (définitions utiles pour la construction autoconf), "
+"<code>gtkmm</code> (interface utilisateur) et <code>iostream</code> (STL). "
+"Les fonctions de ces bibliothèques seront utilisées dans le reste du "
+"programme."
 
-#: C/switch.js.page:180(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:77
 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."
+"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 ""
-"À chaque fois qu'un interrupteur est activé, cette fonction vérifie lequel "
-"des deux interrupteurs est allumé à l'aide de la fonction intégrée get_active"
-"(). Elle affiche ensuite l'image correspondante. Vous pouvez modifier les noms "
-"des fichiers comme bon vous semble, tant que les images "
-"correspondantes sont dans le même dossier."
+"La fonction <code>main</code> crée une nouvelle fenêtre en ouvrant un "
+"fichier GtkBuilder (<file>src/guitar-tuner.ui</file>, défini quelques lignes "
+"plus haut) et en l'affichant. Le fichier GtkBuilder contient une description "
+"de l'interface utilisateur et de tous ses éléments. Vous pouvez utiliser "
+"l'éditeur d'Anjuta pour concevoir des interfaces utilisateur GtkBuilder."
 
-#: C/switch.js.page:184(title)
-msgid "Creating the AboutDialog"
-msgstr "Création de la boîte de dialogue « À propos »"
+#. (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 ""
+"Ensuite quelques fonctions sont appelées pour configurer puis exécuter "
+"l'application. La fonction <code>kit.run</code> démarre la boucle principale "
+"de GTKmm qui affiche l'interface utilisateur et commence à écouter les "
+"événements (comme des clics de souris ou des appuis sur des touches)."
 
-#: C/switch.js.page:211(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:105
 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."
+"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 ""
-"La première étape est de créer le <link xref=\"gmenu.js\">GMenu</link> dans "
-"lequel s'insère le bouton « À propos ». C'est ce menu qui s'affiche quand "
-"vous cliquez dans le coin gauche supérieur de l'écran, à côté du menu "
-"Activités. Notre menu ne contient que deux options : À propos et Quitter."
+"Pendant que le bouton est encore sélectionné, modifiez la propriété "
+"<gui>Étiquette</gui> dans l'onglet <gui>Composants graphiques</gui> à "
+"<gui>E</gui>. Ce sera la corde E du bas. Modifiez aussi la propriété "
+"<gui>Nom</gui> en <gui>bouton_E</gui>. Nous nous référerons à cet élément "
+"graphique par ce nom plus tard dans le programme."
 
-#: C/switch.js.page:247(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:109
 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."
+"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 ""
-"Vous pouvez définir beaucoup de choses très différentes dans une boîte de "
-"dialogue <link xref=\"aboutdialog.js\">À propos</link>, comme créditer tous "
-"les contributeurs ayant participé au développement de l'application et "
-"laisser une note à qui veut la lire. Dans notre cas, la section licence "
-"contient nos notes et les crédits aux photographes auteurs, alors que la "
-"section artistes affiche une liste des photographes avec les liens vers les "
-"images originales quand vous cliquez sur le bouton Crédits. Les liens URL "
-"qui suivent leurs noms les transforment en liens cliquables vous renvoyant à "
-"la section Crédits."
+"Répétez cette procédure pour les autres boutons, en ajoutant les 5 cordes "
+"suivantes avec les étiquettes <em>A</em>, <em>D</em>, <em>G</em>, <em>B</em> "
+"et <em>e</em> et les noms des <em>bouton_A</em>, etc. correspondants."
 
-#: C/switch.js.page:254(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:112
 msgid ""
-"Finally, we create a new instance of the finished SwitchExample class, and "
-"set the application running."
+"Save the UI design (by clicking <guiseq><gui>File</gui><gui>Save</gui></"
+"guiseq>) and close the file."
 msgstr ""
-"Enfin, créons une nouvelle instance de la classe SwitchExample et démarrons "
-"l'application."
+"Enregistrez le fichier de conception de l'interface utilisateur (en cliquant "
+"sur <guiseq><gui>Fichier</gui><gui>Enregistrer</gui></guiseq>) et fermez le "
+"fichier."
 
-#: C/switch.js.page:265(link) C/messagedialog.py.page:63(link)
-#: C/messagedialog.js.page:193(link) C/messagedialog.c.page:41(link)
-#: C/gmenu.vala.page:26(title) C/gmenu.py.page:26(title)
-#: C/gmenu.py.page:76(link) C/gmenu.js.page:20(title) C/gmenu.js.page:29(link)
-#: C/gmenu.c.page:20(title) C/gmenu.c.page:31(link)
-#: C/aboutdialog.py.page:47(link) C/aboutdialog.js.page:28(link)
-#: C/aboutdialog.c.page:37(link)
-msgid "GMenu"
-msgstr "GMenu"
+#. (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 ""
+"GStreamer est l'architecture multimédia de GNOME — vous pouvez vous en "
+"servir pour des jeux, des enregistrements, pour traiter des flux vidéo, "
+"audio, de webcam entre autres. Ici, nous allons nous en servir pour émettre "
+"des tonalités à une seule fréquence. GStreamermm est le lien C++ à GStreamer "
+"que nous utilisons dans cet exemple."
 
-#: C/switch.js.page:266(link) C/messagedialog.py.page:61(link)
-#: C/messagedialog.js.page:194(link) C/messagedialog.c.page:39(link)
-#: C/menubar.py.page:183(link) C/gmenu.py.page:77(link)
-#: C/gmenu.js.page:30(link) C/gmenu.c.page:32(link)
-#: C/filechooserdialog.py.page:78(link) C/aboutdialog.js.page:29(link)
-msgid "GSimpleAction"
-msgstr "GSimpleAction"
+#. (itstool) path: section/title
+#: C/guitar-tuner.cpp.page:129
+msgid "Using GStreamermm"
+msgstr "Utilisation de GStreamermm"
 
-#: C/switch.js.page:270(link) C/image.js.page:33(link)
-msgid "Gtk.Image"
-msgstr "Gtk.Image"
+#. (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 ""
+"Pour utiliser GStreamermm, il faut l'initialiser. Ajoutez la ligne de code "
+"suivante en dessous de la ligne <code>Gtk::Main kit(argc, argv);</code> du "
+"fichier <file>main.cc</file> :"
 
-#: C/switch.c.page:7(title)
-msgid "Switch (C)"
-msgstr "Switch (C)"
+#. (itstool) path: section/code
+#: C/guitar-tuner.cpp.page:132
+#, no-wrap
+msgid "\tGst::init (argc, argv);"
+msgstr "\tGst::init (argc, argv);"
 
-#: C/switch.c.page:24(p)
-msgid "This switch toggles the title of the window."
-msgstr "Cet interrupteur bascule le titre de la fenêtre."
+#. (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 ""
+"Vérifiez que le fichier <file>gstreamermm.h</file> est correctement inclus "
+"dans <file>main.cc</file>."
 
-#: C/strings.py.page:8(title)
-msgid "Strings (Python)"
-msgstr "Chaînes de caractères (Python)"
+#. (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 ""
+"Pour simplifier la gestion du pipeline, nous définissons une classe "
+"assistant <code>Sound</code>. Ceci est réalisé dans le fichier <file>main."
+"cc</file> pour garder toute sa simplicité à cet exemple, alors que "
+"normalement vous le feriez dans un fichier séparé :"
 
-#: C/strings.py.page:12(desc)
-msgid "An explanation of how to deal with strings in Python and GTK+."
+#. (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 ""
-"Une explication sur l'utilisation des chaînes de caractères dans Python et "
-"GTK+."
 
-#: C/strings.py.page:25(title)
-msgid "Strings"
-msgstr "Chaînes de caractères"
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:184
+msgid "The code has the following purpose:"
+msgstr "L'objectif du programme est le suivant :"
 
-#: C/strings.py.page:30(title)
-msgid "Definitions"
-msgstr "Définition"
+#. (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 ""
+"Le constructeur crée les éléments GStreamer source et sink (collecteur) "
+"(<code>Gst.Element</code>) et un élément pipeline (qui sera utilisé comme "
+"conteneur pour les deux autres). Le pipeline est nommé « note » ; la source "
+"est nommée « source » et définie comme étant le connecteur "
+"<code>audiotestsrc</code> et le collecteur est nommé « output » et défini "
+"comme étant le connecteur <code>autoaudiosink</code> (qui est la sortie par "
+"défaut de la carte son). Après avoir lié entre eux et ajouté les éléments au "
+"pipeline, il est prêt à fonctionner."
 
-#: C/strings.py.page:32(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:190
 msgid ""
-"Conceptionally, a <em>string</em> is a list of <em>characters</em> such as "
-"'A', 'B', 'C' or 'È'. Characters are abstract representations and their "
-"meaning depends on the language and context they are used in. The "
-"<em>Unicode standard</em> describes how characters are represented by "
-"<em>code points</em>. For example the characters above are represented with "
-"the code points U+0041, U+0042, U+0043, and U+00C9, respectively. Basically, "
-"code points are numbers in the range from 0 to 0x10FFFF."
+"<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 ""
-"Par principe, une <em>chaîne</em> est composée de <em>caractères</em> "
-"comme « A », « B », « C » ou « È ». Les caractères sont des représentations "
-"abstraites et leur signification dépend de la langue et du contexte dans "
-"lesquels ils sont utilisés. Le <em>standard Unicode</em> décrit comment les "
-"caractères sont représentés par des <em>points de code</em>. Par exemple, "
-"les caractères ci-dessus sont représentés respectivement par les points de "
-"code U+0041, U+0042, U+0043 et U+00C9. Basiquement, les points de code sont "
-"des nombres compris entre 0 et 0x10FFFF."
+"<code>start_playing</code> définit l'élément source à une fréquence donnée "
+"et démarre réellement le pipeline pour commencer à diffuser le son. Comme "
+"nous ne voulons pas jouer indéfiniment une note ennuyeuse, un délai de 200 "
+"ms est défini avant d'interrompre le pipeline en appelant la fonction "
+"<code>stop_playing</code>."
 
-#: C/strings.py.page:34(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:195
 msgid ""
-"The representation of a string as a list of code points is abstract. In "
-"order to convert this abstract representation into a sequence of bytes the "
-"Unicode string must be <em>encoded</em>. The simplest from of encoding is "
-"ASCII and is performed as follows:"
+"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 ""
-"La représentation d'une chaîne comme une liste de points de code est "
-"abstraite. Afin de convertir cette représentation abstraite en une séquence "
-"d'octets, la chaîne Unicode doit être <em>codée</em>. La méthode de codage "
-"la plus simple est l'ASCII et se présente ainsi :"
+"Dans <code>stop_playing</code>, après que la durée soit échue, le pipeline "
+"s'arrête et donc il n'y a plus de sortie son. Comme GStreamer utilise le "
+"comptage des références à l'objet <code>Glib::RefPtr</code>, la mémoire est "
+"automatiquement libérée dès que la classe <code>Sound</code> est détruite."
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.cpp.page:203
+msgid "Connecting the signals"
+msgstr "Connexion des signaux"
 
-#: C/strings.py.page:37(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:204
 msgid ""
-"If the code point is strictly less than 128, each byte is the same as the "
-"value of the code point."
+"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 ""
-"Si le point de code est strictement inférieur à 128, chaque octet est "
-"identique à la valeur du point de code."
+"Nous voulons jouer la note adéquate quand l'utilisateur clique sur un "
+"bouton. Cela signifie que nous devons connecter le signal émis par ce "
+"bouton. Nous voulons aussi informer la fonction appelée du son à diffuser. "
+"GTKmm rend la chose facile car il est facile de lier des informations avec "
+"la bibliothèque <em>sigc</em>."
 
-#: C/strings.py.page:38(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:209
 msgid ""
-"If the code point is 128 or greater, the Unicode string can’t be represented "
-"in this encoding. (Python raises a <sys>UnicodeEncodeError</sys> exception "
-"in this case.)"
+"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 ""
-"Si le point de code est égal ou supérieur à 128, la chaîne Unicode ne peut "
-"pas être codée de cette façon (Python retourne une exception "
-"<sys>UnicodeEncodeError</sys> dans ce cas)."
+"La fonction appelée lors d'un clic sur un bouton peut être très simple, car "
+"tout le travail intéressant se fait maintenant dans la classe assistant :"
 
-#: C/strings.py.page:41(p)
+#. (itstool) path: section/code
+#: C/guitar-tuner.cpp.page:211
+#, no-wrap
 msgid ""
-"Although ASCII encoding is simple to apply it can only encode for 128 "
-"different characters which is hardly enough. One of the most commonly used "
-"encodings that addresses this problem is UTF-8 (it can handle any Unicode "
-"code point). UTF stands for “Unicode Transformation Format”, and the ‘8’ "
-"means that 8-bit numbers are used in the encoding."
+"\n"
+"static void\n"
+"on_button_clicked(double frequency, Sound* sound)\n"
+"{\n"
+"\tsound-&gt;start_playing (frequency);\n"
+"}\n"
 msgstr ""
-"Bien que le codage en ASCII soit facile d'utilisation, il ne peut coder que"
-"128 caractères différents, ce qui est largement insuffisant. Pour contourner "
-"ce problème, une des méthodes de codage les plus utilisées est UTF-8 (elle "
-"prend en charge n'importe quel point de code Unicode). UTF signifie « Unicode "
-"Transformation Format » et le « 8 » signifie que des nombres à 8 bits "
-"sont utilisés dans le codage."
 
-#: C/strings.py.page:46(title)
-msgid "Strings in Python 2"
-msgstr "Les chaînes de caractères dans Python 2"
+#. (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 ""
+"Elle ne fait qu'appeler la classe assistant que nous avons configurée "
+"auparavant pour diffuser la fréquence appropriée. Avec un programme un peu "
+"plus malin, nous aurions pu aussi nous connecter directement à la classe "
+"sans passer par la fonction, mais laissons cela pour un exercice futur."
 
-#: C/strings.py.page:48(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:222
 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."
+"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 ""
-"Python 2 est livré avec deux types différents d'objets qui peuvent être "
-"utilisés pour représenter des chaînes : <code>str</code> et <code>unicode</"
-"code>. Les instances du type <code>unicode</code> sont utilisées pour exprimer "
-"des chaînes Unicode, alors que les exemples du type <code>str</code> sont "
-"des représentations d'octets (la chaîne codée). En interne, Python "
-"représente les chaînes Unicode par des entiers de 16 ou de 32 bits, en "
-"fonction du type de compilation de l'interpréteur Python."
+"Le code qui configure les signaux doit être ajouté à la fonction "
+"<code>main()</code>, juste après la ligne <code>builder-&gt;"
+"get_widget(\"main_window\",main_win);</code> :"
 
-#: C/strings.py.page:50(code)
+#. (itstool) path: section/code
+#: C/guitar-tuner.cpp.page:224
 #, no-wrap
 msgid ""
-"<![CDATA[\n"
-">>> unicode_string = u\"Fu\\u00dfb\\u00e4lle\"\n"
-">>> print unicode_string]]>\n"
-"Fußbälle\n"
+"\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 ""
-"<![CDATA[\n"
-">>> unicode_string = u\"Fu\\u00dfb\\u00e4lle\"\n"
-">>> print unicode_string]]>\n"
-"Fußbälle\n"
 
-#: C/strings.py.page:56(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:234
 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>):"
+"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 ""
-"Les chaînes Unicode peuvent être converties en 8 bits avec <code>unicode."
-"encode()</code>. Les chaînes Python en 8 bits contiennent une méthode "
-"<code>str.decode()</code> qui interprète la chaîne avec le codage qui lui "
-"est attribué (c'est donc l'inverse de <code>unicode.encode()</code>) :"
+"D'abord, nous créons une instance de notre classe assistant que nous voulons "
+"maintenant utiliser et déclarons une variable pour le bouton que nous "
+"voulons connecter."
 
-#: C/strings.py.page:69(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.cpp.page:238
 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."
+"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 ""
-"Malheureusement, Python 2.x vous permet de mélanger les types <code>unicode</"
-"code> et <code>str</code> s'il arrivait que la chaîne de 8 bits ne contienne "
-"que des octets de 7 bits (ASCII), mais retourne l'erreur "
-"<sys>UnicodeDecodeError</sys> si elle contient des valeurs qui ne sont pas "
-"ASCII."
+"Ensuite, nous récupérons l'objet bouton de l'interface utilisateur qui a été "
+"créé à partir du fichier de l'interface utilisateur. Souvenez-vous que "
+"<em>bouton_E</em> est le nom que nous avons donné au premier bouton."
 
-#: C/strings.py.page:74(title)
-msgid "Strings in Python 3"
-msgstr "Les chaînes dans Python 3"
+#. (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 ""
+"Enfin, nous connectons le signal <em>clicked</em>. Il est vrai que cela ne "
+"paraît pas très simple car nous prenons beaucoup de précautions sur le type "
+"des variables et que nous désirons en réalité transmettre notre classe "
+"assistant et la fréquence au récepteur de signal. <code>sigc::ptr_fun(&amp;"
+"on_button_clicked)</code> crée un <em>connecteur</em> pour la méthode "
+"<code>on_button_clicked</code> définie plus haut. Nous pouvons transmettre "
+"d'autres arguments avec <code>sigc::bind</code> et dans notre exemple, nous "
+"transmettons la fréquence (de type « double ») et notre classe assistant."
 
-#: C/strings.py.page:76(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:249
 msgid ""
-"Since Python 3.0, all strings are stored as Unicode in an instance of the "
-"<code>str</code> type. Encoded strings on the other hand are represented as "
-"binary data in the form of instances of the bytes type. Conceptionally, "
-"<code>str</code> refers to text, whereas bytes refers to data. Use "
-"<code>encode()</code> to go from <code>str</code> to <code>bytes</code>, and "
-"<code>decode()</code> to go from <code>bytes</code> to <code>str</code>."
+"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 ""
-"Depuis la version 3.0 de Python, toutes les chaînes sont stockées en Unicode "
-"dans une représentation du type <code>str</code>. D'autre part, les chaînes "
-"codées sont stockées en données binaires sous forme d'octets. "
-"Conceptuellement, le type <code>str</code> représente du texte, alors que "
-"les octets représentent des données. Utilisez la méthode <code>encode()</"
-"code> pour passer de <code>str</code> à <code>bytes</code> et <code>decode()"
-"</code> pour passer de <code>bytes</code> à <code>str</code>."
+"Après avoir configuré le bouton <em>E</em>, nous devons connecter les autres "
+"boutons en fonction de leur fréquence : 440 pour A, 587,33 pour D, 783,99 "
+"pour G, 987,77 pour B et 1318,5 pour E aiguë. Le processus est le même, "
+"seule la fréquence transmise au récepteur change."
 
-#: C/strings.py.page:78(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:256
 msgid ""
-"In addition, it is no longer possible to mix Unicode strings with encoded "
-"strings, because it will result in a <code>TypeError</code>:"
+"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 ""
-"En plus, il n'est plus possible de mélanger des chaînes Unicode avec des "
-"chaînes codées, car cela retournerait une erreur <code>TypeError</code> :"
+"À ce stade, tout le programme est fonctionnel. Cliquez sur "
+"<guiseq><gui>Construire</gui><gui>Construire le projet</gui></guiseq> pour "
+"tout reconstruire et faites <guiseq><gui>Exécuter</gui><gui>Exécuter</gui></"
+"guiseq> pour lancer l'application."
 
-#: C/strings.py.page:95(title)
-msgid "Unicode in GTK+"
-msgstr "Unicode dans GTK+"
+#. (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 ""
+"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
+"programme à ce <link href=\"guitar-tuner/guitar-tuner.cc\">programme de "
+"référence</link>."
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.cpp.page:266
+msgid "Further Reading"
+msgstr "Lecture complémentaire"
 
-#: C/strings.py.page:97(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.cpp.page:267
 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:"
+"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 ""
-"GTK+ utilise des chaînes au format UTF-8 pour tout ce qui est texte. Cela "
-"signifie que, si vous appelez une méthode qui renvoie une chaîne, vous "
-"obtenez toujours une représentation du type <code>str</code>. Cela "
-"s'applique également aux méthodes qui considèrent une ou plusieurs chaînes "
-"comme paramètres, elles doivent aussi être codées en UTF-8. Cependant, pour "
-"plus de souplesse, PyGObject convertit automatiquement n'importe quelle "
-"représentation Unicode au format str si vous lui donnez comme argument :"
+"Pour des informations plus détaillées sur les exemples ci-dessus, consultez "
+"le <link href=\"http://library.gnome.org/devel/gtkmm-tutorial/stable/";
+"\">manuel de GTKmm</link> qui couvre beaucoup plus de sujets clés pour "
+"utiliser toute la puissance de GTKmm, ainsi que la <link href=\"http://";
+"library.gnome.org/devel/gstreamermm/\">documentation de référence de "
+"gstreamermm</link>."
 
-#: C/strings.py.page:108(p)
-msgid "Furthermore:"
-msgstr "Furthermore:"
+#. (itstool) path: info/title
+#: C/guitar-tuner.js.page:7
+#, fuzzy
+#| msgid "Guitar Tuner"
+msgctxt "text"
+msgid "Guitar tuner (JavaScript)"
+msgstr "Accordeur de guitare"
 
-#: C/strings.py.page:113(p)
+#. (itstool) path: info/desc
+#: C/guitar-tuner.js.page:17
+#, fuzzy
+#| msgid ""
+#| "Use Gtk+ and GStreamer to build a simple guitar tuner application for "
+#| "GNOME."
 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)."
+"Use GTK+ and GStreamer to build a simple guitar tuner application for GNOME."
 msgstr ""
-"devrait renvoyer <code>False</code>, avec l'avertissement <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> renvoie toujours une représentation <code>str</code> ; en "
-"conséquence, <code>txt</code> et <code>unicode_string</code> sont inégaux)."
+"Utilisation de Gtk+ et de GStreamer pour construire une application "
+"d'accordeur de guitare simple pour GNOME."
 
-#: C/strings.py.page:115(p)
+#. (itstool) path: synopsis/p
+#: C/guitar-tuner.js.page:23
 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."
+"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 ""
+"Dans ce tutoriel, nous allons construire une petite application, Accordeur "
+"de guitare, utilisant JavaScript, GTK+ et GStreamer. Pour écrire et lancer "
+"tous les exemples de code vous-même, vous avez besoin d'un éditeur pour "
+"écrire le code, de Terminal et d'un ordinateur sur lequel GNOME 3 ou "
+"supérieur est installé. Dans ce guide, nous illustrerons les éléments "
+"suivants :"
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:25
+#, fuzzy
+#| msgid "An example GStreamer pipeline."
+msgid "<link xref=\"#gstreamer\">GStreamer pipelines</link>"
+msgstr "Un exemple de pipeline GStreamer."
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:26 C/weatherAppMain.js.page:23
+#, fuzzy
+#| msgid "Script for running the application"
+msgid "<link xref=\"#script\">Script for running the application</link>"
+msgstr "Script de lancement de l'application"
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:27 C/weatherAppMain.js.page:24
+msgid "<link xref=\"#imports\">Libraries to import</link>"
 msgstr ""
-"Cela est particulièrement important si vous voulez internationnaliser votre "
-"programme avec <link href=\"http://docs.python.org/library/gettext.html";
-"\"><code>gettext</code></link>. Vous devez vous assurer que <code>gettext</"
-"code> va renvoyer des chaînes codées en UTF-8 pour toutes les langues."
 
-#: C/strings.py.page:117(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:28 C/weatherAppMain.js.page:25
+#, fuzzy
+#| msgid "Creating the main window for the application"
 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."
+"<link xref=\"#mainwindow\">Creating the main window for the application</"
+"link>"
+msgstr "Création de la fenêtre principale de l'application"
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:29
+msgid "<link xref=\"#buttons\">Buttons for the tunes</link>"
 msgstr ""
-"D'une manière générale, nous vous recommandons de ne pas du tout utiliser "
-"d'objets <code>unicode</code> dans les applications GTK+, mais seulement des "
-"objets <code>str</code> codés en UTF-8, car GTK+ n'intègre pas tous les "
-"objets <code>unicode</code>."
 
-#: C/strings.py.page:119(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:30
+#, fuzzy
+#| msgid "Making the sounds with GStreamer"
+msgid "<link xref=\"#playSound\">Making the sounds with GStreamer</link>"
+msgstr "Création des sons avec GStreamer"
+
+#. (itstool) path: item/p
+#: C/guitar-tuner.js.page:31
+#, fuzzy
+#| msgid "Connecting buttons to playSound"
+msgid "<link xref=\"#connecting\">Connecting buttons to playSound</link>"
+msgstr "Connexion des boutons à playSound"
+
+#. (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
+#, fuzzy
+#| msgid "Running the application form Terminal"
+msgid "<link xref=\"#terminal\">Running the application form Terminal</link>"
+msgstr "Exécution de l'application à partir de Terminal"
+
+#. (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 ""
+"Après avoir suivi ce tutoriel, vous devriez voir ceci sur votre écran :"
+
+#. (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 "Script de lancement de l'application"
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.js.page:49 C/weatherAppMain.js.page:34
+#, no-wrap
 msgid ""
-"With Python 3.x things are much more consistent, because PyGObject will "
-"automatically encode/decode to/from UTF-8 if you pass a string to a method "
-"or a method returns a string. Strings, or text, will always be represented "
-"as instances of <code>str</code> only:"
+"\n"
+"  #!/usr/bin/gjs"
 msgstr ""
-"Avec Python 3.x, les choses sont beaucoup plus logiques, car PyGObject code "
-"ou décode automatiquement en UTF-8 si vous assignez une chaîne à une méthode "
-"ou inversement. Les chaînes, ou le texte, sont toujours représentés en "
-"<code>str</code> seulement :"
 
-#: C/strings.py.page:124(title) C/signals-callbacks.py.page:44(title)
-#: C/properties.py.page:49(title) C/model-view-controller.py.page:182(title)
-msgid "References"
-msgstr "Références"
+#. (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 ""
+"Cette ligne indique comment lancer le script. Elle doit être la première "
+"ligne de code et le script doit être exécutable. Pour donner les bonnes "
+"permissions, allez dans Terminal et lancer dans le dossier correct la "
+"commande : chmod +x nomduscript. Vous pouvez aussi utiliser le gestionnaire "
+"de fichiers graphique. Déplacez-vous dans le bon dossier où se trouve votre "
+"code, faites un clic-droit sur le fichier, sélectionnez Propriétés, cliquez "
+"sur l'onglet Permissions et cochez la case pour permettre l'exécution du "
+"fichier comme un programme."
 
-#: C/strings.py.page:126(link)
-msgid "How To Deal With Strings - The Python GTK+ 3 Tutorial"
-msgstr "Travailler avec les chaînes - Le tutoriel Python GTK+ 3"
+#. (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 ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/statusbar.vala.page:24(None) C/statusbar.py.page:24(None)
-msgid "@@image: 'media/statusbar.png'; md5=eb1aca55315d6cda57b12a5f36058ba8"
-msgstr "@@image: 'media/statusbar.png'; md5=eb1aca55315d6cda57b12a5f36058ba8"
+#. (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 ""
+"Afin que le programme fonctionne, vous devez importer quelques bibliothèques "
+"d'introspection GObject à utiliser. Pour faire une interface graphique, nous "
+"avons besoin de Gtk et pour que Gstreamer fonctionne, nous avons besoin de "
+"Gst. Elles sont importées au début afin de pouvoir les utiliser partout "
+"ensuite. Nous importons également au début une boucle principale Mainloop "
+"pour prendre en charge le délai à utiliser avec les sons d'accordage."
+
+#. (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 "Création de la fenêtre principale de l'application"
 
-#: C/statusbar.vala.page:7(title)
-msgid "Statusbar (Vala)"
-msgstr "Barre de statut (Vala)"
+#. (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 ""
 
-#: C/statusbar.vala.page:20(desc) C/statusbar.py.page:20(desc)
-#: C/statusbar.c.page:21(desc)
-msgid "Report messages of minor importance to the user"
+#. (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 ""
-"Rapporte les messages d'information d'importance mineure pour l'utilisateur"
+"L'importation de Gtk et Gst n'est pas suffisante, nous devons les "
+"initialiser afin qu'elles fonctionnent. Lorsque c'est fait, nous devons "
+"créer la fenêtre de l'application. Plus tard, nous allons placer tous les "
+"boutons pour faire les sons dans cette fenêtre. Afin que la fenêtre "
+"s'affiche, nous devons lui dire de s'afficher et nous avons besoin de lancer "
+"le code avec Gtk.main()."
 
-#: C/statusbar.vala.page:23(title) C/statusbar.py.page:23(title)
-#: C/statusbar.js.page:20(title) C/statusbar.c.page:24(title)
-msgid "Statusbar"
-msgstr "Barre de statut"
+#. (itstool) path: section/title
+#: C/guitar-tuner.js.page:78
+msgid "Buttons for the tunes"
+msgstr "Les boutons pour les sons"
 
-#: C/statusbar.vala.page:25(p)
-msgid "This statusbar tells you what's going on."
-msgstr "Cette barre de statut vous indique ce qui se passe."
+#. (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 ""
 
-#: C/statusbar.vala.page:32(link) C/statusbar.js.page:227(link)
-msgid "Gtk.Statusbar"
-msgstr "Gtk.Statusbar"
+#. (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 ""
+"Puisque Gtk.Window ne peut contenir qu'un seul élément graphique, nous "
+"devons créer quelque chose en dessous pour pouvoir ajouter tous les boutons "
+"nécessaires à l'intérieur. Dans cet exemple, nous utilisons Buttonbox. Après "
+"la création de Buttonbox, nous créons les boutons avec les étiquettes "
+"nécessaires. Après l'obtention des boutons, nous devons les ajouter au "
+"Buttonbox et celui-ci doit être ajouté au Gtk.Window et tout ce qui est dans "
+"Buttonbox doit être affiché."
 
-#: C/statusbar.py.page:7(title)
-#, fuzzy
-#| msgid "Statusbar"
-msgid "Statusbar (Python)"
-msgstr "Barre de statut"
+#. (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 ""
+"Après cette étape, vous devriez voir s'afficher une fenêtre à l'écran avec "
+"les 6 boutons. Pour l'instant, les boutons n'ont aucune action et nous "
+"verrons cela plus tard. Pour pouvoir connecter les signaux des boutons à "
+"quelque chose, il nous faut d'abord coder ce quelque chose."
 
-#: C/statusbar.py.page:25(p)
+#. (itstool) path: section/title
+#: C/guitar-tuner.js.page:103
+msgid "Making the sounds with GStreamer"
+msgstr "Création des sons avec GStreamer"
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.js.page:104
+#, no-wrap
 msgid ""
-"This statusbar tells you if you click the button or if you press any key "
-"(and which key)."
+"\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 ""
-"Cette barre de statut vous informe si vous cliquez sur le bouton ou si vous "
-"appuyez sur n'importe quelle touche (et sur quelle touche)."
 
-#: C/statusbar.py.page:34(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:123
+#, fuzzy
+#| msgid ""
+#| "The first thing we need to do is decide what tunes we want to make when "
+#| "we push a button. The frequencies list takes care of that. After that we "
+#| "get to actually making the sounds with the function playSound. For "
+#| "function playSound we give as an input a frequency (that we just defined "
+#| "in the frequencies variable). First thing we need to construct is a "
+#| "pipeline, a source and a sink. For the source we set the frequency. To "
+#| "the pipeline we add both the source and the sink and then we tell it to "
+#| "keep playing. As a last thing we use the const Mainloop to get the "
+#| "pipeline to pause after a 500ms."
 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>."
+"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 ""
-"La méthode <code>Gdk.keyval_name(event.keyval)</code> convertit la valeur "
-"des touches <code>event.keyval</code> en noms symboliques. Les noms et les "
-"valeurs correspondantes des touches se trouvent <link href=\"http://git.";
-"gnome.org/browse/gtk+/tree/gdk/gdkkeysyms.h\">ici</link>. À titre d'exemple, "
-"<code>GDK_KEY_BackSpace</code> devient la chaîne <code>« Retour arrière »</"
-"code>."
+"La chose à faire en premier est de décider quel son doit être émis à l'appui "
+"sur un bouton. La liste des fréquences gère cela. Ensuite, il nous faut "
+"émettre les sons avec la fonction playSound, à laquelle nous donnons en "
+"entrée une fréquence (définie par les variables fréquences). Construisons "
+"d'abord un pipeline, une source et un collecteur. Définissons la fréquence "
+"pour la source, ajoutons la source et le collecteur au pipeline et faisons "
+"le jouer. Enfin, utilisons la constante Mainloop pour arrêter l'émission du "
+"son après 500ms."
 
-#: C/statusbar.py.page:40(title)
-msgid "Useful methods for a Statusbar widget"
-msgstr "Méthodes utiles pour un élément graphique BarreDeStatut"
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:124
+#, fuzzy
+#| msgid ""
+#| "Now we have the method of playing a tune when clicking a button. Next "
+#| "well make the conncetions between pushing a button and playing the "
+#| "correct sound from that button."
+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 ""
+"Maintenant, nous avons la bonne méthode pour émettre un son après appui sur "
+"un bouton. Faisons ensuite la connexion entre l'appui sur un bouton et "
+"l'émission du son correct relié à ce bouton."
 
-#: C/statusbar.py.page:42(p)
+#. (itstool) path: section/title
+#: C/guitar-tuner.js.page:127
+msgid "Connecting buttons to playSound"
+msgstr "Connexion des boutons à playSound"
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.js.page:128
+#, no-wrap
 msgid ""
-"<code>pop(context_id)</code> removes the first message in the statusbar "
-"stack with the given <code>context_id</code>."
+"\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
+#, fuzzy
+#| msgid ""
+#| "The method of connecting button clicks to playSound with the correct tune "
+#| "is by using the connect method of the button widget. So we choose a "
+#| "button to be connected and type E.connect(\"clicked\", function()"
+#| "{playSound(frequencies.E);}); The connect tells that when pushing E, "
+#| "something should happen. The \"clicked\" tells the type of something "
+#| "happening to E and then in the function(){}; we the playSound happen with "
+#| "the correct tune that should be associated to the button."
+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 ""
-"La fonction <code>pop(context_id)</code> efface le premier message de la "
-"pile de la barre de statut avec le <code>context_id</code> donné."
+"Pour connecter les clics des boutons à la fonction playSound avec la "
+"tonalité correcte, utilisez la méthode connect de l'élément graphique "
+"button : choisissez un bouton à connecter et saisissez E.connect(\"clicked"
+"\", function(){playSound(frequencies.E);}) ; la connection indique qu'en "
+"appuyant sur E, quelque chose doit se produire. « clicked » indique ce qui "
+"arrive à E et ensuite ce qui se passe dans la function(){} ; enfin la "
+"fonction playSound renvoie la tonalité correcte à associer au bouton."
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.js.page:157
+msgid "The whole program"
+msgstr "Le programme complet"
 
-#: C/statusbar.py.page:43(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.js.page:158
+#, fuzzy
+#| 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)."
 msgid ""
-"<code>remove_all(context_id)</code> removes all the messages in the "
-"statusbar stack with the given <code>context_id</code>."
+"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 ""
-"La méhode <code>remove_all(context_id)</code> efface tous les messages de la "
-"pile de la barre de statut ayant l'identifiant <code>context_id</code> donné."
+"Voici donc ce que donne toutes les parties assemblées. Lorsque vous exécutez "
+"ce code, vous devriez être capable d'accorder votre guitare (si vous avez "
+"correctement calibré vos haut-parleurs)."
 
-#: C/statusbar.py.page:44(p)
+#. (itstool) path: section/code
+#: C/guitar-tuner.js.page:159
+#, no-wrap
 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."
+"\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 ""
-"La méthode <code>remove(context_id, message_id)</code> efface le message de "
-"la pile de la barre de statut avec le <code>context_id</code> donné. Le "
-"<code>message_id</code> est renvoyé par <code>push(context_id, lemessage)</"
-"code> quand il pousse le message dans la barre des statut."
 
-#: C/statusbar.py.page:52(link)
-msgid "GtkStatusbar"
-msgstr "GtkStatusbar"
+#. (itstool) path: section/title
+#: C/guitar-tuner.js.page:237
+msgid "Running the application form Terminal"
+msgstr "Exécution de l'application à partir de Terminal"
 
-#: C/statusbar.py.page:53(link) C/spinner.js.page:29(link)
-#: C/progressbar.py.page:57(link)
-msgid "Gdk - Key Values"
-msgstr "Gdk - Key Values"
+#. (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 ""
+"Pour lancer cette application, ouvrez Terminal, allez dans le dossier où "
+"votre application est enregistrée et lancez"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/statusbar.js.page:21(None)
-msgid "@@image: 'media/statusbar2.png'; md5=ff6f7e5b270827ca98b2d5f7087aa766"
-msgstr "@@image: 'media/statusbar2.png'; md5=ff6f7e5b270827ca98b2d5f7087aa766"
+#. (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 ""
+"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
+"programme à ce <link href=\"guitar-tuner/guitar-tuner.js\">programme de "
+"référence</link>."
 
-#: C/statusbar.js.page:7(title)
+#. (itstool) path: info/title
+#: C/guitar-tuner.py.page:8
 #, fuzzy
-#| msgid "JavaScript"
-msgid "Statusbar (JavaScript)"
-msgstr "JavaScript"
+#| msgid "Guitar Tuner"
+msgctxt "text"
+msgid "Guitar tuner (Python)"
+msgstr "Accordeur de guitare"
 
-#: C/statusbar.js.page:17(desc)
-msgid "Show notifications in a dedicated statusbar"
-msgstr "Afficher les notifications dans une barre de statut donnée"
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:46
+msgid "Basic knowledge of the Python programming language"
+msgstr "de connaissances de base du langage de programmation Python."
 
-#: C/statusbar.js.page:22(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:60
 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."
+"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 ""
-"Cette barre de statut enregistre le nombre de fois que vous avez cliqué sur "
-"un bouton. Des applications comme <link href=\"http://projects.gnome.org/";
-"gedit/\">gedit</link> utilisent une barre de statut pour rendre les "
-"informations visibles d'un coup d'œil sans interrompre l'utilisateur."
+"Sélectionnez <gui>PyGTK (automake)</gui> dans l'onglet <gui>Python</gui>, "
+"cliquez sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
+"suivantes. Utilisez <file>guitar-tuner</file> comme nom de projet et de "
+"répertoire."
 
-#: C/statusbar.js.page:23(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:63
 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."
+"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 ""
-"Les nouveaux messages sont ajoutés au sommet de la pile d'une barre de "
-"statut et peuvent être affichés pour consulter les plus récents. Vous pouvez "
-"aussi effacer tous les messages d'un type spécifique d'un seul coup. Cet "
-"exemple d'application explique ces fonctions."
+"Cliquez sur <gui>Appliquer</gui> et le projet est créé. Ouvrez <file>src/"
+"guitar_tuner.py</file> depuis l'onglet <gui>Projet</gui> ou l'onglet "
+"<gui>Fichiers</gui>. Vous devez voir apparaître du code commençant par les "
+"lignes :"
 
-#: C/statusbar.js.page:66(p)
+#. (itstool) path: item/code
+#: C/guitar-tuner.py.page:64
+#, no-wrap
 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."
+"\n"
+"from gi.repository import Gtk, GdkPixbuf, Gdk\n"
+"import os, sys"
 msgstr ""
-"Tout le code de cet exemple va dans la classe StatusbarExample. Le code ci-"
-"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
-"et la fenêtre qui les contient."
 
-#: C/statusbar.js.page:83(p)
+#. (itstool) path: section/title
+#: C/guitar-tuner.py.page:72
+msgid "Run the code for the first time"
+msgstr "Exécution du programme pour la première fois"
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:73
 msgid ""
-"The _buildUI function is where we put all the code to create the "
-"application's user interface. The first step is creating a new <link href="
-"\"GtkApplicationWindow.js.page\">Gtk.ApplicationWindow</link> to put all our "
-"widgets into. The next step is to create a vertically-oriented <link href="
-"\"paned.js.page\">Gtk.Paned</link> interface, to divide the window up into "
-"two sections. This way the statusbar looks like those used in other "
-"applications, and it stays at the bottom of the window, even if the user "
-"resizes it."
+"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 ""
-"Mettons tout le code nécessaire à la création de l'interface utilisateur "
-"dans la fonction _buildUI. Créons d'abord une <link href="
-"\"GtkApplicationWindow.js.page\">Gtk.ApplicationWindow</link> qui va "
-"contenir tous nos éléments graphiques. Ensuite, créons un panneau "
-"d'interface <link href=\"paned.js.page\">Gtk.Paned</link> orienté "
-"verticalement pour diviser la fenêtre en deux parties. De cette façon, la "
-"barre de statut va ressembler à celle d'autres application et restera en bas "
-"de la fenêtre, même si vous la redimensionnez."
+"La plupart du code dans ce fichier est générique. Il charge une fenêtre "
+"(vide) à partir du fichier de description de l'interface et l'affiche. Vous "
+"trouverez plus de détails ci-dessous ; passez cette liste si vous comprenez "
+"les bases :"
 
-#: C/statusbar.js.page:87(title)
-msgid "Creating the buttons"
-msgstr "Création des boutons"
+# Bruno : Pas de "include the"
+#. (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 ""
+"Les lignes <code>import</code> tout en haut, indiquent à Python de charger "
+"l'interface utilisateur et les bibliothèques système nécessaires."
 
-#: C/statusbar.js.page:106(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:81
 msgid ""
-"This code creates the three <link href=\"button.js.page\">Gtk.Buttons</link> "
-"we'll use to push a new message to the statusbar, pop the last one off, and "
-"clear all existing messages. The \"back\" and \"clear\" buttons are <link "
-"href=\"http://developer.gnome.org/gtk/2.24/gtk-Stock-Items.html\";>stock "
-"buttons,</link> which are automatically translated into any language GNOME "
-"supports."
+"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 ""
-"Ce code génère les trois boutons <link href=\"button.js.page\">Gtk.Buttons</"
-"link> que nous utiliserons pour ajouter un nouveau message à la barre de "
-"statut, pour l'afficher et pour effacer tous les messages existants. Les "
-"boutons « Retour arrière » et « Suppr » sont des <link href=\"http://";
-"developer.gnome.org/gtk/2.24/gtk-Stock-Items.html\">boutons de la "
-"collection</link> qui sont automatiquement traduits dans toutes les langues "
-"prises en charge par GNOME."
+"Nous déclarons une classe qui est la classe principale de notre application. "
+"Dans la méthode <code>__init__</code>, la fenêtre principale est chargée "
+"depuis le fichier GtkBuilder (<file>src/guitar-tuner.ui</file>) et les "
+"signaux sont connectés."
 
-#: C/statusbar.js.page:124(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:84
 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."
+"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 ""
-"Ce code génère la grille <link href=\"grid.js.page\">Gtk.Grid</link> que "
-"nous utiliserons pour organiser les boutons et les mettre dans le bon ordre. "
-"Il génère ensuite un cadre <link href=\"paned.js.page\">Gtk.Frame</link> "
-"qui occupe la majeure partie de la fenêtre et laisse beaucoup de marge "
-"autour des boutons, puis lui ajoute la grille. Il nous reste encore à placer "
-"le cadre dans le panneau interface et l'ajouter à l'ApplicationWindow."
+"Connecter des signaux, c'est décider de ce qui doit se passer quand on "
+"appuie sur un bouton ou quand quelque chose d'autre se produit. Ici, la "
+"méthode <code>destroy</code> est appelée (et quitte l'application) quand la "
+"fenêtre est fermée."
 
-#: C/statusbar.js.page:128(title)
-msgid "Creating the statusbar"
-msgstr "Création de la barre de statut"
+#. (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 ""
+"La fonction <code>main</code> est exécutée par défaut quand vous lancez une "
+"application Python. Elle crée juste une instance de la classe principale et "
+"démarre la boucle principale pour afficher la fenêtre."
 
-#: C/statusbar.js.page:145(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:92
 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."
+"This code is ready to be used, so you can run it by clicking "
+"<guiseq><gui>Run</gui><gui>Execute</gui></guiseq>."
 msgstr ""
-"Ici, nous créons la barre de statuts Gtk.Statusbar et lui ajoutons un "
-"message pour commencer. Puis, nous lui attribuons son propre cadre étroit au "
-"bas de la fenêtre."
+"Le programme est prêt à être utilisé et vous pouvez l'exécuter avec "
+"<guiseq><gui>Exécuter</gui><gui>Exécuter</gui></guiseq>."
 
-#: C/statusbar.js.page:146(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:97
 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."
+"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 ""
-"Chaque message doit avoir un identifiant de contexte, une valeur entière qui "
-"peut vous être donnée par la fonction get_context_id(). Son seul paramètre "
-"est la valeur de la chaîne que vous utilisez pour décrire cet identifiant "
-"particulier. Normalement, il y a un identifiant différent selon le type de "
-"message, de façon à pouvoir utiliser la fonction remove() pour supprimer un "
-"message spécifique et non pas seulement le dernier au sommet de la pile. "
-"Voici un exemple simple avec un seul type de message, nous n'en utiliserons "
-"donc qu'un seul pour tout."
+"Une description de l'interface utilisateur est contenue dans le fichier "
+"GtkBuilder. Pour la modifier, ouvrez le fichier <file>src/guitar_tuner.ui</"
+"file>. Ceci vous bascule vers le concepteur d'interface. La fenêtre de "
+"conception se trouve au centre ; les éléments graphiques et leurs propriétés "
+"sont sur la droite et la palette des composants graphiques disponibles est "
+"sur la gauche."
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.py.page:127
+msgid "Write the signal handler"
+msgstr "Écriture du gestionnaire de signal"
 
-#: C/statusbar.js.page:147(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:129
 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."
+"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 ""
-"La fonction push(), ajoute un nouveau message au-dessus de la pile. Son "
-"premier paramètre est l'identifiant de contexte, et le second, le message."
+"Pour cela, ouvrez <file>guitar_tuner.py</file> pendant que le fichier "
+"interface utilisateur est encore ouvert. Allez au même onglet <gui>Signaux</"
+"gui> que vous aviez déjà utilisé pour nommer le signal. Prenez la ligne où "
+"vous aviez défini le signal <gui>clicked</gui> et faites-la glisser dans la "
+"classe du fichier source. Le code suivant s'ajoute à votre fichier source :"
 
-#: C/statusbar.js.page:160(p)
+#. (itstool) path: section/code
+#: C/guitar-tuner.py.page:131
+#, no-wrap
 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."
+"\n"
+"def on_button_clicked (self, button):\n"
 msgstr ""
-"Ce code se termine par la création de la fenêtre, le placement du cadre dans "
-"le panneau et l'ordre donné à la fenêtre d'afficher tous ses éléments "
-"graphiques enfants."
 
-#: C/statusbar.js.page:164(title)
-msgid "Functions for interacting with the statusbar"
-msgstr "Fonctions interagissant avec la barre de statut"
+#. (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 ""
+"Ce récepteur de signal possède deux arguments : le pointeur classique de "
+"Python et <code>Gtk.Button</code> qui appelle la fonction."
 
-#: C/statusbar.js.page:205(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:153
 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."
+"Change the import line in <file>guitar_tuner.py</file>, just at the "
+"beginning to :"
 msgstr ""
-"Voici des fonctions qui montrent comment ajouter un message à la pile, "
-"comment afficher celui qui se trouve au sommet et comment effacer tous les "
-"messages avec un identifiant de contexte particulier. La fonction pop() ne "
-"prend qu'un argument, l'identifiant de contexte du type de message le plus "
-"récent à afficher. La fonction remove_all() se comporte de la même façon, "
-"sauf qu'elle supprime de la pile tous les messages de ce type."
+"Modifiez la ligne import au début du fichier <file>guitar_tuner.py</file> "
+"en :"
 
-#: C/statusbar.js.page:211(p)
+#. (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 ""
-"Finally, we create a new instance of the finished StatusbarExample class, "
-"and set the application running."
+"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 ""
-"Enfin, nous créons un nouvel exemple de la classe StatusbarExample terminée "
-"et nous démarrons l'application."
+"<code>Gst</code> contient la bibliothèque de GStreamer. Il vous faut aussi "
+"initialiser correctement GStreamer ce qui est réalisé dans la méthode "
+"<code>main()</code> par cet appel à ajouter au-dessus de la ligne <code>app "
+"= GUI()</code> :"
 
-#: C/statusbar.js.page:225(link)
-msgid "Gtk.Frame"
-msgstr "Gtk.Frame"
+#. (itstool) path: section/code
+#: C/guitar-tuner.py.page:158
+#, no-wrap
+msgid "Gst.init_check(sys.argv)"
+msgstr ""
 
-#: C/statusbar.js.page:226(link)
-msgid "Gtk.Paned"
-msgstr "Gtk.Paned"
+#. (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 ""
+"Copiez ensuite la fonction suivante quelque part dans la classe de "
+"<file>guitar_tuner.py</file> :"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/statusbar.c.page:26(None)
-msgid "@@image: 'media/statusbar3.png'; md5=60c71604fb44656237ee66dfb39a8689"
-msgstr "@@image: 'media/statusbar3.png'; md5=60c71604fb44656237ee66dfb39a8689"
+#. (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 ""
 
-#: C/statusbar.c.page:7(title)
-#, fuzzy
-#| msgid "Statusbar"
-msgid "Statusbar (C)"
-msgstr "Barre de statut"
+#. (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 ""
+"Les trois premières lignes créent les éléments GStreamer source et sink "
+"(collecteur) et un élément pipeline (qui sera utilisé comme conteneur pour "
+"les deux autres éléments). Le pipeline est nommé « note » ; la source est "
+"nommée « source » et est définie comme étant le connecteur "
+"<code>audiotestsrc</code> et le collecteur est nommé « output » et est "
+"défini comme étant le connecteur <code>autoaudiosink</code> (qui est la "
+"sortie par défaut de la carte son)."
 
-#: C/statusbar.c.page:27(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.py.page:178
 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."
+"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 ""
-"Cette barre de statut sert à démontrer comment les messages sont empilés "
-"dans l'ordre « le dernier au-dessus ». Le message au sommet de la pile est "
-"toujours celui qui est affiché."
+"L'appel à <code>source.set_property</code> définit la propriété <code>freq</"
+"code> de l'élément source à <code>frequency</code> qui est transmis comme "
+"argument de la fonction <code>play_sound</code>. Il s'agit simplement de la "
+"fréquence de la note de musique en Hertz ; certaines fréquences utiles "
+"seront définies plus tard."
+
+#. (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 ""
+"Les deux lignes suivantes appellent <code>pipeline.add</code> qui place la "
+"source et le collecteur dans le pipeline. Le pipeline peut contenir beaucoup "
+"d'autres éléments GStreamer. En général, vous pouvez ajouter autant "
+"d'éléments que vous voulez au pipeline en faisant autant d'appels "
+"supplémentaires à <code>add</code>."
+
+#. (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 ""
+"Ensuite, <code>pipeline.set_state</code> est utilisé pour démarrer la "
+"lecture en basculant l'état du pipeline à « playing » (lecture) (<code>Gst."
+"State.PLAYING</code>)."
 
-#: C/statusbar.c.page:37(link)
-msgid "GtkStatusBar"
-msgstr "GtkStatusBar"
+#. (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 ""
+"Comme nous ne voulons pas jouer indéfiniment une note ennuyeuse, la dernière "
+"chose que fait <code>play_sound</code> est d'appeler <code>GObject."
+"timeout_add</code> qui définit un délai avant la coupure du son ; cela "
+"attend <code>LENGTH</code> millisecondes avant d'appeler la fonction "
+"<code>pipeline_stop</code> et continuera à l'appeler jusqu'à ce que "
+"<code>pipeline_stop</code> renvoie la valeur <code>False</code>."
 
-#: C/statusbar.c.page:38(link) C/scale.c.page:38(link)
-msgid "String Utility Functions"
-msgstr "Fonctions de chaînes utilitaires"
+#. (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 ""
+"Écrivons maintenant la fonction <code>pipeline_stop</code> qui est appelée "
+"par <code>GObject.timeout_add</code>. Insérez le code suivant <em>au-dessus</"
+"em> de la fonction <code>play_sound</code> :"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/spinner.vala.page:21(None) C/spinner.py.page:21(None)
-#: C/spinner.js.page:21(None) C/spinner.c.page:23(None)
-msgid "@@image: 'media/spinner.png'; md5=d04f2d81f1d72c6c2f97e8729947dfed"
-msgstr "@@image: 'media/spinner.png'; md5=d04f2d81f1d72c6c2f97e8729947dfed"
+#. (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 ""
+"Vous devez définir la constante <code>LENGTH</code> dans la classe, donc "
+"ajoutez ce code au début de la classe principale :"
+
+#. (itstool) path: section/code
+#: C/guitar-tuner.py.page:201
+#, no-wrap
+msgid ""
+"\n"
+"LENGTH = 500\n"
+msgstr ""
 
-#: C/spinner.vala.page:7(title)
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:204
 #, fuzzy
-#| msgid "Spinner"
-msgid "Spinner (Vala)"
-msgstr "Indicateur d'activité"
+#| msgid ""
+#| "The call to <code>pipeline.set_state</code> pauses the playback of the "
+#| "pipeline."
+msgid ""
+"The call to <code>pipeline.set_state</code> stops the playback of the "
+"pipeline."
+msgstr ""
+"L'appel à <code>pipeline.set_state</code> met en pause la lecture du "
+"pipeline."
 
-#: C/spinner.vala.page:17(desc) C/spinner.py.page:17(desc)
-#: C/spinner.js.page:17(desc) C/spinner.c.page:18(desc)
-msgid "A spinner animation"
-msgstr "L'animation d'un indicateur d'activité"
+#. (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 ""
+"Nous voulons jouer la note adéquate quand l'utilisateur clique sur un "
+"bouton. Avant tout, nous devons connaître la fréquence de chacune des six "
+"cordes de la guitare qui sont définies (au début de la classe principale) "
+"dans un dictionnaire de façon à pouvoir facilement les associer aux noms des "
+"cordes :"
 
-#: C/spinner.vala.page:20(title) C/spinner.py.page:20(title)
-#: C/spinner.js.page:20(title) C/spinner.c.page:21(title)
-msgid "Spinner"
-msgstr "Indicateur d'activité"
+#. (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 ""
 
-#: C/spinner.vala.page:22(p) C/spinner.py.page:22(p) C/spinner.js.page:22(p)
-#: C/spinner.c.page:24(p)
-msgid "This Spinner is stopped and started by pressing the spacebar."
+#. (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 ""
-"Cet indicateur d'activité s'arrête et démarre en appuyant sur la barre "
-"d'espace."
 
-#: C/spinner.vala.page:29(link)
-msgid "Gtk.Widget"
-msgstr "Gtk.Widget"
+#. (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 ""
+"Le bouton qui a été cliqué est transmis comme argument (<code>button</code>) "
+"à <code>on_button_clicked</code>. On peut obtenir l'étiquette de ce bouton "
+"en utilisant <code>button.get_child</code> puis en extrayant le texte de "
+"cette étiquette avec <code>label.get_label</code>."
 
-#: C/spinner.vala.page:31(link)
-msgid "Gdk.keyval_name"
-msgstr "Gdk.keyval_name"
+#. (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 ""
+"Le texte de cette étiquette est alors utilisé comme clé du dictionnaire et "
+"la fonction <code>play_sound</code> est appelée avec la fréquence appropriée "
+"à cette note. Cela joue la note ; nous avons un accordeur de guitare "
+"opérationnel !"
 
-#: C/spinner.py.page:7(title)
-#, fuzzy
-#| msgid "Strings in Python 2"
-msgid "Spinner (Python)"
-msgstr "Les chaînes dans Python 2"
+#. (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 "Exécution de l'application"
 
-#: C/spinner.py.page:31(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.py.page:236
 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>."
+"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 ""
-"La fonction <code>Gdk.keyval_name(event.keyval)</code> donne à la touche "
-"<code>event.keyval</code> un nom symbolique. Les noms avec leurs valeurs "
-"correspondantes se trouvent <link href=\"http://git.gnome.org/browse/gtk+/";
-"tree/gdk/gdkkeysyms.h\">ici</link>, mais par exemple, "
-"<code>GDK_KEY_BackSpace</code> devient la chaîne <code>« Retour arrière »</"
-"code>."
+"Tout le programme nécessaire doit maintenant être fonctionnel. Cliquez sur "
+"<guiseq><gui>Exécuter</gui><gui>Exécuter</gui></guiseq> pour lancer "
+"l'application. Amusez-vous bien !"
 
-#: C/spinner.py.page:41(link)
-msgid "Key Values"
-msgstr "Valeurs des touches"
+#. (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 ""
+"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
+"programme à ce <link href=\"guitar-tuner/guitar-tuner.py\">programme de "
+"référence</link>."
 
-#: C/spinner.js.page:7(title)
+#. (itstool) path: info/desc
+#: C/guitar-tuner.vala.page:10
 #, fuzzy
-#| msgid "JavaScript"
-msgid "Spinner (JavaScript)"
-msgstr "JavaScript"
+#| 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."
+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 ""
+"Utilisation de <link href=\"http://developer.gnome.org/platform-overview/";
+"stable/gtk\">Gtk+</link> et de <link href=\"http://developer.gnome.org/";
+"platform-overview/stable/gstreamer\">GStreamer</link> pour construire une "
+"application d'accordeur de guitare simple pour GNOME. Explications sur la "
+"manière d'utiliser le concepteur d'interface."
 
-#: C/spinner.c.page:7(title)
-#, fuzzy
-#| msgid "Spinner"
-msgid "Spinner (C)"
-msgstr "Indicateur d'activité"
+#. (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 ""
+"Dans ce tutoriel, nous allons écrire un programme qui émet des sons servant "
+"à accorder une guitare. Nous allons apprendre comment :"
 
-#: C/spinner.c.page:34(link)
-msgid "GObject"
-msgstr "GObject"
+#. (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 ""
+"paramétrer un projet de base en utilisant <link xref=\"getting-ready"
+"\">Anjuta IDE</link>,"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/spinbutton.vala.page:23(None) C/spinbutton.py.page:22(None)
-#: C/spinbutton.c.page:25(None)
-msgid "@@image: 'media/spinbutton.png'; md5=993cbb7d9bd271a329727a926195712a"
-msgstr "@@image: 'media/spinbutton.png'; md5=993cbb7d9bd271a329727a926195712a"
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:38
+msgid "Create a simple GUI with <app>Anjuta</app>'s UI designer."
+msgstr ""
+"créer une interface graphique simple avec le concepteur d'interface "
+"utilisateur d'<app>Anjuta</app>,"
+
+#. (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 ""
+"utiliser la bibliothèque <link href=\"http://developer.gnome.org/platform-";
+"overview/stable/gstreamer\">GStreamer</link> pour jouer des sons."
+
+#. (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 ""
+"les connaissances de base du langage de programmation <link href=\"https://";
+"live.gnome.org/Vala/Tutorial\">Vala</link>."
+
+#. (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 "une copie installée de <em>Anjuta</em>."
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.vala.page:51
+msgid "Create a project in <app>Anjuta</app>"
+msgstr "Création d'un projet dans <app>Anjuta</app>"
+
+#. (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 ""
+"Lancez <app>Anjuta</app> et cliquez sur <gui>Créer un nouveau projet</gui> "
+"ou <guiseq><gui>Fichier</gui><gui>Nouveau</gui><gui>Projet</gui></guiseq> "
+"pour ouvrir l'assistant de création de projet."
 
-#: C/spinbutton.vala.page:7(title)
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:58
 #, fuzzy
-#| msgid "SpinButton"
-msgid "SpinButton (Vala)"
-msgstr "SpinButton"
+#| 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."
+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 ""
+"Sélectionnez <gui>Gtk+ (Simple)</gui> dans l'onglet <gui>Vala</gui>, cliquez "
+"sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
+"suivantes. Utilisez <file>guitar-tuner</file> comme nom de projet et de "
+"répertoire."
 
-#: C/spinbutton.vala.page:19(desc)
-msgid "Retrieve an integer or floating point number."
-msgstr "Renvoie un entier ou un nombre à virgule flottante."
+#. (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 ""
+"Assurez-vous que <gui>Configuration des paquets externes</gui> est basculée "
+"sur <gui>I</gui>. Sur la page suivante, choisissez <link href=\"http://";
+"valadoc.org/gstreamer-0.10/index.htm\"><em>gstreamer-0.10</em></link> dans "
+"la liste pour inclure la bibliothèque GStreamer à votre projet. Cliquez sur "
+"<gui>Continuer</gui>."
 
-#: C/spinbutton.vala.page:22(title) C/spinbutton.py.page:21(title)
-#: C/spinbutton.js.page:23(title) C/spinbutton.c.page:23(title)
-msgid "SpinButton"
-msgstr "SpinButton"
+#. (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 ""
+"Cliquez sur <gui>Appliquer</gui> et votre projet est créé. Ouvrez <file>src/"
+"guitar_tuner.vala</file> en faisant un double clic depuis l'onglet "
+"<gui>Projet</gui> ou l'onglet <gui>Fichiers</gui>. Vous devez voir "
+"apparaître du code commençant par les lignes :"
 
-#: C/spinbutton.vala.page:24(p) C/spinbutton.py.page:23(p)
-#: C/spinbutton.c.page:26(p)
-msgid "Choose a number, by entering it or by clicking on the -/+ buttons!"
+#. (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 ""
-"Choisissez un nombre en le saisissant ou en cliquant sur les boutons -/+ !"
 
-#: C/spinbutton.vala.page:31(link) C/spinbutton.js.page:205(link)
-msgid "Gtk.SpinButton"
-msgstr "Gtk.SpinButton"
+#. (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 ""
+"Ce programme charge une fenêtre (vide) à partir du fichier de description de "
+"l'interface et l'affiche. Vous trouverez plus de détails ci-dessous ; passez "
+"cette liste si vous comprenez les bases :"
 
-#: C/spinbutton.py.page:7(title)
-#, fuzzy
-#| msgid "SpinButton"
-msgid "SpinButton (Python)"
-msgstr "SpinButton"
+#. (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 ""
+"Les deux lignes <code>using</code> importent des espaces de noms que nous "
+"n'aurons plus à nommer explicitement."
 
-#: C/spinbutton.py.page:18(desc)
-msgid "Retrieve an integer or floating-point number from the user."
-msgstr "Renvoie un entier ou un nombre à virgule flottante de l'utilisateur."
+#. (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 ""
+"Le constructeur de la classe <code>Main</code> crée une nouvelle fenêtre en "
+"ouvrant un fichier GtkBuilder (<file>src/guitar-tuner.ui</file>, défini "
+"quelques lignes plus haut), en connectant son signal puis en l'affichant "
+"dans une fenêtre. Ce fichier GtkBuilder contient la description d'une "
+"interface utilisateur et tous ses éléments. On peut utiliser l'éditeur "
+"d'Anjuta pour concevoir des interfaces utilisateur GtkBuilder."
 
-#: C/spinbutton.py.page:33(title)
-msgid "Useful methods for a SpinButton widget"
-msgstr "Méthodes utiles pour un élément graphique BoutonDactivité"
+#. (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 ""
+"Connecter des signaux, c'est décider de ce qui doit se passer quand on "
+"appuie sur un bouton ou quand quelque chose d'autre se produit. Ici, la "
+"fonction <code>on_destroy</code> est appelée (et quitte l'application) quand "
+"la fenêtre est fermée."
 
-#: C/spinbutton.py.page:34(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:88
 msgid ""
-"For an explanation of signals and callback functions, see <link xref="
-"\"signals-callbacks.py\">this page</link>. An example is the <code>\"value-"
-"changed\"</code> signal, emitted when the value of the spinbutton changes."
+"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 ""
-"Pour de plus amples informations sur les signaux et les fonctions de rappel, "
-"consultez <link xref=\"signals-callbacks.py\">cette page</link>. Un exemple "
-"est le signal <code>\"value-changed\"</code>, émis quand la valeur du "
-"BoutonDactivité change."
+"La fonction statique <code>main</code> est exécutée par défaut quand vous "
+"lancez une application Vala. Elle appelle d'autres fonctions qui créent la "
+"classe Main, configurent puis exécutent l'application. La fonction <code>Gtk."
+"Main</code> démarre la boucle principale de GTK, qui lance l'interface "
+"utilisateur et commence à écouter les événements (comme des clics de souris "
+"ou des appuis sur des touches)."
 
-#: C/spinbutton.py.page:35(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:92
 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>."
+"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 ""
-"Il faut une valeur Gtk.Adjustment pour construire le Gtk.SpinButton. C'est "
-"la représentation d'une valeur avec une limite supérieure et une limite "
-"inférieure, avec des incréments d'étape et de page, avec une taille de page "
-"et elle se présente sous la forme <code>Gtk.Adjustment(valeur, inferieure, "
-"superieure, step_increment, page_increment, page_size)</code> où les champs "
-"sont du type <code>float</code> ; <code>step_increment</code> est "
-"l'incrément ou le décrément obtenu en agissant sur les touches du curseur ou "
-"sur les boutons du BoutonDactivité. Notez que les valeurs "
-"<code>page_increment</code> et <code>page_size</code> ne sont pas utilisés "
-"dans ce cas et qu'ils doivent être définis à <code>0</code>."
+"Le programme est prêt à être utilisé, donc vous pouvez le compiler en "
+"cliquant sur <guiseq><gui>Construire</gui><gui>Construire le projet</gui></"
+"guiseq> ou en appuyant sur <keyseq><key>Maj</key><key>F7</key></keyseq>. "
+"Ceci fait apparaître une boîte de dialogue. Pour configurer le répertoire de "
+"compilation, modifiez la <gui>Configuration</gui> à <gui>Par défaut</gui> et "
+"cliquez sur <gui>Exécuter</gui>. Il ne faut le faire qu'une seule fois, à la "
+"première compilation."
 
-#: C/spinbutton.py.page:37(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:97
 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."
+"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 ""
-"Si vous voulez que la valeur du BoutonDactivité aille à la ligne quand elle "
-"dépasse les limites supérieure ou inférieure, définissez la fonction "
-"<code>set_wrap(True)</code> sur vrai. Le signal <code>\"wrapped\"</code> est "
-"alors émis quand cela se produit."
+"Une description de l'interface utilisateur est contenue dans le fichier "
+"GtkBuilder <file>src/guitar_tuner.ui</file> défini au début de la classe. "
+"Pour la modifier, ouvrez le fichier <file>src/guitar_tuner.ui</file> en "
+"faisant un double clic depuis les onglets <gui>Projet</gui> ou "
+"<gui>Fichiers</gui>. Ceci vous renvoie vers le concepteur d'interface. La "
+"fenêtre de conception se trouve au centre ; les <gui>éléments graphiques</"
+"gui> et leurs propriétés sont sur la droite et la <gui>palette</gui> des "
+"éléments graphiques disponibles est sur la gauche."
 
-#: C/spinbutton.py.page:38(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:99
 msgid ""
-"<code>set_digits(digits)</code> sets the precision to be displayed by the "
-"spinbutton, up to 20 digits."
+"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 ""
-"La méthode <code>set_digits(caracteres)</code> définit la précision "
-"d'affichage du BoutonDactivité, jusqu'à 20 caractères."
+"La disposition de toute interface utilisateur dans GTK+ est organisée à "
+"l'aide de boîtes et de tableaux. Dans cet exemple, prenons une GtkButtonBox "
+"verticale pour y mettre six GtkButtons, un pour chacune des six cordes de la "
+"guitare."
 
-#: C/spinbutton.py.page:39(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:105
 msgid ""
-"To get the value of the spinbutton as an integer, use <code>get_value_as_int"
-"()</code>."
+"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 ""
-"Pour avoir la valeur du BoutonDactivité sous forme d'un nombre entier, "
-"utilisez <code>get_value_as_int()</code>."
+"Dans l'onglet <gui>Palette</gui> de la section <gui>Conteneurs</gui>, "
+"choisissez une <gui>Boîte</gui> (GtkButtonBox) en cliquant sur l'icône. "
+"Cliquez ensuite sur la fenêtre de conception au centre pour la placer dans "
+"la fenêtre. Une boîte de dialogue apparaît dans laquelle vous pouvez définir "
+"le <gui>nombre d'éléments</gui> à <input>6</input>. Cliquez ensuite sur "
+"<gui>Créer</gui>."
 
-#: C/spinbutton.py.page:47(link) C/spinbutton.c.page:36(link)
-msgid "GtkSpinButton"
-msgstr "GtkSpinButton"
+#. (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 ""
+"Vous pouvez aussi modifier le <gui>Nombre d'éléments</gui> et "
+"l'<gui>Orientation</gui> dans l'onglet <gui>Général</gui> sur la droite."
 
-#: C/spinbutton.py.page:48(link) C/spinbutton.c.page:38(link)
-#: C/scale.py.page:56(link) C/scale.c.page:37(link)
-msgid "GtkAdjustment"
-msgstr "GtkAdjustment"
+#. (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 ""
+"Maintenant, à partir de la section <gui>Contrôle et affichage</gui> de la "
+"section <gui>Palette</gui>, sélectionnez un <gui>Bouton</gui> (GtkButton) en "
+"cliquant dessus et disposez-le dans la première case du GtkButtonBox en "
+"cliquant sur celle-ci."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/spinbutton.js.page:24(None)
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:113
 msgid ""
-"@@image: 'media/spinbuttonkittens.png'; md5=577cce8a902140aacbab73fe8a76a010"
+"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 ""
-"@@image: 'media/spinbuttonkittens.png'; md5=577cce8a902140aacbab73fe8a76a010"
+"Pendant que le bouton est encore sélectionné, déplacez-vous dans l'onglet "
+"<gui>Général</gui> à droite de la propriété <gui>Étiquette</gui> et modifiez-"
+"la en <gui>E</gui>. C'est la corde E en bas de la guitare."
 
-#: C/spinbutton.js.page:7(title)
-#, fuzzy
-#| msgid "SpinButton"
-msgid "SpinButton (JavaScript)"
-msgstr "SpinButton"
+#. (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 ""
+"L'onglet <gui>Général</gui> est situé dans la section <gui>Composants "
+"graphiques</gui> sur la droite."
 
-#: C/spinbutton.js.page:20(desc)
-msgid "A number entry field that has + and - buttons"
-msgstr "Un champ de saisie de nombres avec des boutons + et -"
+#. (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 ""
+"Passez à l'onglet <gui>Signaux</gui> dans la section <gui>Composants "
+"graphiques</gui> et recherchez le signal <code>clicked</code> du bouton. "
+"Vous pouvez l'utiliser pour connecter un gestionnaire de signal qui sera "
+"appelé quand le bouton est cliqué. Pour cela, cliquez sur le signal et "
+"saisissez <code>main_on_button_clicked</code> dans la colonne "
+"<gui>Gestionnaire</gui> et appuyez sur <key>Entrée</key>."
 
-#: C/spinbutton.js.page:25(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:132
 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."
+"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 ""
-"Un BoutonDactivité n'a rien à voir avec un <link xref=\"spinner.js"
-"\">indicateur d'activité</link>. C'est un champ de saisie de texte qui "
-"n'accepte que des nombres et qui possède des boutons plus et moins pour "
-"pouvoir en modifier la valeur sans rien saisir."
+"Cette section va vous montrer comment créer un programme qui produit des "
+"sons. <link href=\"http://developer.gnome.org/platform-overview/stable/";
+"gstreamer\">GStreamer</link> est l'architecture multimédia de GNOME — vous "
+"pouvez vous en servir pour des jeux, des enregistrements, pour traiter des "
+"flux vidéo, audio, de webcam entre autres. Ici, nous allons nous en servir "
+"pour émettre des tonalités à une seule fréquence."
 
-#: C/spinbutton.js.page:26(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:133
 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."
+"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 ""
-"Son utilisation est optimale quand il apparaît évident que seul un nombre "
-"peut y être saisi. Dans cet exemple, nous utilisons deux BoutonDactivités "
-"pour définir le nombre de chatons et le nombre de boîtes de thon à leur "
-"donner."
+"Le concept de GStreamer est le suivant : il y a création d'un <link href="
+"\"http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/";
+"section-intro-basics-bins.html\"><em>pipeline</em></link> contenant "
+"plusieurs éléments de traitement en provenance d'une <em>source</em> à "
+"destination d'un <em>collecteur</em> (sortie). La source peut être un "
+"fichier image, une vidéo ou un fichier musical, par exemple, et la sortie un "
+"élément graphique ou une carte son."
 
-#: C/spinbutton.js.page:68(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:142
 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."
+"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 ""
-"Tout le code de cet exemple va dans la classe SpinButtonExample. Le code ci-"
-"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
-"et la fenêtre qui les contient."
+"Dans cet exemple, nous utilisons une source génératrice de son de fréquence "
+"pure appelée <code>audiotestsrc</code> et envoyons sa sortie au périphérique "
+"son par défaut du système, <code>autoaudiosink</code>. Il nous faut "
+"seulement configurer la fréquence du générateur accessible depuis la "
+"propriété <code>freq</code> de <code>audiotestsrc</code>."
 
-#: C/spinbutton.js.page:84(title)
-msgid "Creating the SpinButtons"
-msgstr "Création des BoutonDactivités"
+#. (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 ""
+"Il faut ajouter une ligne pour initialiser GStreamer ; écrivez le code "
+"suivant dans la ligne au-dessus de l'appel à <code>Gtk.init</code> dans la "
+"fonction <code>main</code> :"
 
-#: C/spinbutton.js.page:91(p)
+#. (itstool) path: section/code
+#: C/guitar-tuner.vala.page:145
+#, fuzzy, no-wrap
+#| msgid "\tGst::init (argc, argv);"
+msgid "Gst.init (ref args);"
+msgstr "\tGst::init (argc, argv);"
+
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:146
 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."
+"Then, copy the following function into <file>guitar_tuner.vala</file> inside "
+"our <code>Main</code> class:"
 msgstr ""
-"Utilisons la fonction new_with_range pour créer rapidement un nouveau "
-"BoutonDactivité. Son premier paramètre est la valeur de départ du "
-"BoutonDactivité, le second est la valeur maximale et le troisième est la "
-"valeur de l'incrément lorsque les boutons plus ou moins sont pressés."
+"Ensuite, copiez la fonction suivante dans le fichier <file>guitar_tuner."
+"vala</file> à l'intérieur de notre classe <code>Main</code> :"
 
-#: C/spinbutton.js.page:92(p)
+#. (itstool) path: section/code
+#: C/guitar-tuner.vala.page:147
+#, no-wrap
 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."
+"\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 ""
-"Après avoir généré le premier BoutonDactivité, nous connectons son signal "
-"value-changed à une fonction qui gère ce qui se passe quand le nombre à "
-"l'intérieur d'un des deux BoutonDactivités change."
 
-#: C/spinbutton.js.page:111(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:181
 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."
+"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 ""
-"Si vous souhaitez avoir un contrôle un peu plus fin sur un BoutonDactivité, "
-"ou si vous voulez créer beaucoup de BoutonDactivités qui utilisent tous les "
-"mêmes paramètres, vous pouvez créer un objet appelé <link href=\"http://www.";
-"roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Adjustment.html\">Adjustment.</link> "
-"Vous pouvez ensuite l'utiliser comme une propriété d'ajustement pour un "
-"nouveau BoutonDactivité qui paramètre d'un seul coup toutes les valeurs. "
-"Vous pouvez aussi modifier tous les BoutonDactivités utilisant ce réglage en "
-"modifiant les propriétés de l'objet Adjustment."
+"Les trois premières lignes créent les éléments GStreamer source et sink "
+"(collecteur) (<link href=\"http://valadoc.org/gstreamer-0.10/Gst.Element.html";
+"\"><code>Gst.Element</code></link>) et un élément <link href=\"http://";
+"valadoc.org/gstreamer-0.10/Gst.Pipeline.html\">pipeline element</link> (qui "
+"sera utilisé comme conteneur pour les deux autres). Ce sont des variables de "
+"classe et sont donc définies en dehors de la méthode. Le pipeline est nommé "
+"« note » ; la source est nommée « source » et le collecteur est nommé "
+"« output » et est défini comme étant le connecteur <code>autoaudiosink</"
+"code> (qui est la sortie par défaut de la carte son)."
 
-#: C/spinbutton.js.page:112(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:184
 msgid ""
-"The commented-out lines here show things you can do to customize your "
-"SpinButton. You can set the number of digits which go after the decimal "
-"point, for example, or tell it to wrap the number around if it goes past the "
-"upper or lower bounds that you set."
+"The 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 ""
-"Ici, les lignes placées en commentaires vous montrent des moyens de "
-"personnaliser votre BoutonDactivité. Vous pouvez, par exemple, définir le "
-"nombre de décimales après la virgule, ou lui indiquer qu'il doit aller à la "
-"ligne s'il dépasse les limites supérieures ou inférieures que vous avez "
-"définies."
+"L'appel à <link href=\"http://valadoc.org/gobject-2.0/GLib.Object.set.html";
+"\"><code>source.set</code></link> définit la propriété <code>freq</code> de "
+"l'élément source à <code>frequency</code> qui est transmis comme argument de "
+"la fonction <code>play_sound</code>. Il s'agit simplement de la fréquence de "
+"la note de musique en Hertz ; certaines fréquences utiles seront définies "
+"plus tard."
 
-#: C/spinbutton.js.page:113(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:187
 msgid ""
-"For the kitties' sake, please don't use set_digits to allow a decimal number "
-"of kittens."
+"<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 ""
-"Dans l'intérêt des chatons, il est préférable de ne pas autoriser set_digits "
-"à paramétrer un nombre décimal de chatons."
+"<link href=\"http://valadoc.org/gstreamer-0.10/Gst.Bin.add.html";
+"\"><code>pipeline.add</code></link> place la source et le collecteur dans le "
+"pipeline. Le pipeline est un <link href=\"http://valadoc.org/gstreamer-0.10/";
+"Gst.Bin.html\"><code>Gst.Bin</code></link>, c.-à-d. juste un élément qui "
+"peut contenir beaucoup d'autres éléments GStreamer. En général, vous pouvez "
+"ajouter autant d'éléments que vous voulez au pipeline en faisant autant "
+"d'appels supplémentaires à <code>pipeline.add</code>."
 
-#: C/spinbutton.js.page:117(title)
-msgid "Creating the rest of the UI"
-msgstr "Création du reste de l'interface utilisateur"
+#. (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 ""
+"Ensuite, <link href=\"http://valadoc.org/gstreamer-0.10/Gst.Element.link.html";
+"\"><code>sink.link</code></link> sert à lier les éléments ensemble, de sorte "
+"que la sortie de la source (une note) va à l'entrée du collecteur (et est "
+"ensuite envoyée à la carte son). <link href=\"http://www.valadoc.org/";
+"gstreamer-0.10/Gst.Element.set_state.html\"><code>pipeline.set_state</code></"
+"link> sert enfin à démarrer la lecture en basculant l'<link href=\"http://";
+"www.valadoc.org/gstreamer-0.10/Gst.State.html\">état du pipeline</link> à "
+"« playing » (lecture) (<code>Gst.State.PLAYING</code>)."
 
-#: C/spinbutton.js.page:128(p)
+#. (itstool) path: item/p
+#: C/guitar-tuner.vala.page:193
 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."
+"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 ""
-"Créons chaque <link xref=\"label.js\">étiquette</link> individuellement et "
-"attachons-les ensemble avec les BoutonDactivités. La dernière étiquette doit "
-"afficher le nombre de boîtes de thon par chaton, elle comprend donc une "
-"variable au milieu qui correspond à une équation qui utilise les fonctions "
-"get_value des BoutonDactivités pour trouver à quelles valeurs ils sont "
-"définis. On utilise une méthode mathématique de base en JavaScript pour "
-"arrondir le nombre de boîtes de thon par chaton à l'entier le plus proche."
+"Comme nous ne voulons pas jouer indéfiniment une note ennuyeuse, la dernière "
+"chose que fait <code>play_sound</code> est d'ajouter un <link href=\"http://";
+"www.valadoc.org/glib-2.0/GLib.TimeoutSource.html\"><code>TimeoutSource</"
+"code></link> qui définit un délai avant la coupure du son ; cela attend 200 "
+"millisecondes avant d'appeler un gestionnaire de signal défini ici même, qui "
+"stoppe et détruit le pipeline. Il renvoie <code>false</code> pour se "
+"supprimer lui-même du délai d'attente, sinon il serait constamment appelé "
+"toutes les 200 ms."
 
-#: C/spinbutton.js.page:154(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:204
 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."
+"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 ""
-"Ici, nous utilisons des éléments graphiques <link xref=\"grid.js\">grille</"
-"link> pour tout ranger. Une grille maintient les étiquettes et les "
-"BoutonDactivités dans l'ordre pendant que l'autre affiche la première grille "
-"en haut et la dernière étiquette en bas."
+"Dans le concepteur d'interface utilisateur, il a été fait en sorte que tous "
+"les boutons appellent la même fonction, <gui>on_button_clicked</gui> quand "
+"ils sont cliqués. En réalité, nous saisissons <gui>main_on_button_clicked</"
+"gui> qui indique au concepteur d'interface utilisateur que cette méthode "
+"fait partie de notre fonction <code>Main</code>. Nous devons ajouter cette "
+"fonction dans notre fichier source."
 
-#: C/spinbutton.js.page:155(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:205
 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."
+"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 ""
-"Il n'y a pas de mauvaise façon de ranger les éléments dans les grilles, à "
-"partir du moment où cela vous convient. Dans notre cas, la grille du haut "
-"comporte une marge en bas pour la séparer de l'étiquette qui se trouve au-"
-"dessous et qui est dans une grille indépendante centrée par rapport aux "
-"étiquettes et BoutonDactivités du haut."
+"Pour cela, dans le fichier interface utilisateur (guitar_tuner.ui), "
+"sélectionnez un des boutons en cliquant dessus, puis ouvrez "
+"<file>guitar_tuner.vala</file> (en cliquant sur l'onglet au milieu). Allez "
+"sur la droite, dans l'onglet <gui>Signaux</gui> que vous aviez déjà utilisé "
+"pour nommer le signal. Prenez maintenant la ligne où vous aviez défini le "
+"signal <gui>clicked</gui> et faites-la glisser dans le fichier source au "
+"début de la classe. Le code suivant s'ajoute à votre fichier source :"
 
-#: C/spinbutton.js.page:169(title)
-msgid "Function which handles the SpinButtons' numerical values being adjusted"
+#. (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 ""
-"Fonction prenant en charge les valeurs numériques des BoutonDactivités en "
-"cours de réglage"
 
-#: C/spinbutton.js.page:182(p)
+#. (itstool) path: note/p
+#: C/guitar-tuner.vala.page:212
 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."
+"You can also just type the code at the beginning of the class instead of "
+"using the drag and drop."
 msgstr ""
-"Ici, nous mettons à jour la variable parchaton en fonction des nouvelles "
-"valeurs des BoutonDactivités et utilisons les propriétés de set_label pour "
-"actualiser ce qu'affiche _lastLabel. Comme les deux BoutonDactivités ont "
-"leur signal value-changed connecté à cette fonction, celle-ci met à jour "
-"l'étiquette à chaque fois qu'un des nombres change."
+"Vous pouvez aussi saisir seulement le code au début de la classe au lieu "
+"d'utiliser le glisser-déposer."
 
-#: C/spinbutton.js.page:189(p)
+#. (itstool) path: section/p
+#: C/guitar-tuner.vala.page:213
 msgid ""
-"Finally, we create a new instance of the finished SpinButtonExample class, "
-"and set the application running."
+"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 ""
-"Enfin, nous créons un nouvel exemple de la classe SpinButtonExample et "
-"démarrons l'application."
+"Le récepteur du signal n'a qu'un seul argument : le <link href=\"http://";
+"valadoc.org/gtk+-3.0/Gtk.Widget.html\"><code>Gtk.Widget</code></link> qui a "
+"appelé la fonction (dans notre cas, toujours un <link href=\"http://valadoc.";
+"org/gtk+-3.0/Gtk.Button.html\"><code>Gtk.Button</code></link>)."
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.vala.page:219
+msgid "Define the signal handler"
+msgstr "Définition du gestionnaire de signal"
+
+#. (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 ""
+"Nous voulons jouer la note adéquate quand l'utilisateur clique sur un "
+"bouton. Pour cela, nous allons étoffer le gestionnaire de signal défini "
+"auparavant. Nous aurions pu connecter chaque bouton à un gestionnaire "
+"différent, mais cela aurait dupliqué beaucoup de code. Au lieu de ça, nous "
+"allons plutôt utiliser l'étiquette du bouton pour déterminer le bouton "
+"cliqué :"
+
+#. (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 ""
+"Le bouton <code>Gtk.Button</code> qui a été cliqué est transmis comme "
+"argument (<code>sender</code>) à <code>on_button_clicked</code>. Nous "
+"pouvons obtenir l'étiquette de ce bouton en utilisant <code>get_child</code> "
+"puis, le texte de cette étiquette en utilisant <code>get_label</code>."
+
+#. (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 ""
+"L'instruction « switch » compare le texte de l'étiquette à la note que nous "
+"pouvons jouer et <code>play_sound</code> est appelé avec la fréquence "
+"appropriée à cette note. Cela fonctionne ; nous obtenons un accordeur de "
+"guitare opérationnel !"
+
+#. (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 ""
+"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
+"programme à ce <link href=\"guitar-tuner/guitar-tuner.vala\">programme de "
+"référence</link>."
+
+#. (itstool) path: section/title
+#: C/guitar-tuner.vala.page:264 C/magic-mirror.vala.page:157
+msgid "Further reading"
+msgstr "Documentation complémentaire"
 
-#: C/spinbutton.js.page:200(link) C/scale.vala.page:32(link)
-#: C/scale.js.page:209(link)
-msgid "Gtk.Adjustment"
-msgstr "Gtk.Adjustment"
+#. (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 ""
+"Pour en savoir plus à propos de la programmation en langage Vala, consultez "
+"le <link href=\"http://live.gnome.org/Vala/Tutorial\";>manuel Vala</link> et "
+"la <link href=\"http://valadoc.org/\";>Documentation de Vala API</link>."
 
-#: C/spinbutton.c.page:7(title)
+#. (itstool) path: 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
 #, fuzzy
-#| msgid "SpinButton"
-msgid "SpinButton (C)"
-msgstr "SpinButton"
+#| msgid ""
+#| "@@image: 'media/switchanimals.png'; md5=513ae15dcf68e15eef30b76420b8c714"
+msgctxt "_"
+msgid ""
+"external ref='media/hellognomewebapp.png' "
+"md5='948efb6148ede3bc6b47b4b0bbe4a74f'"
+msgstr ""
+"@@image: 'media/switchanimals.png'; md5=513ae15dcf68e15eef30b76420b8c714"
 
-#: C/spinbutton.c.page:20(desc)
-msgid "Retrieve an integer or floating point number"
-msgstr "Renvoie un entier ou un nombre à virgule flottante"
+#. (itstool) path: info/desc
+#: C/hellognome.js.page:17
+#, fuzzy
+#| msgid "A first Gtk application"
+msgid "Your first GNOME application!"
+msgstr "Une première application Gtk"
+
+#. (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 ""
 
-#: C/signals-callbacks.py.page:8(title)
+#. (itstool) path: section/title
+#: C/hellognome.js.page:29
 #, fuzzy
-#| msgid "Signals and callbacks"
-msgid "Signals and callbacks (Python)"
-msgstr "Signaux et rappels"
+#| msgid "A button that links to a web page"
+msgid "Let's start with a web page"
+msgstr "Un bouton qui crée un lien vers une page Web"
 
-#: C/signals-callbacks.py.page:12(desc)
-msgid "An explanation of signals and callbacks in GTK+."
-msgstr "Une explication des signaux et rappels dans GTK+."
+#. (itstool) path: section/p
+#: C/hellognome.js.page:31
+msgid ""
+"Here's some basic HTML, CSS, and JavaScript code. Does this look familiar?"
+msgstr ""
 
-#: C/signals-callbacks.py.page:25(title)
-msgid "Signals and callbacks"
-msgstr "Signaux et rappels"
+#. (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 ""
 
-#: C/signals-callbacks.py.page:30(title) C/properties.py.page:30(title)
-#: C/model-view-controller.py.page:30(title)
-msgid "Overview"
-msgstr "Présentation"
+#. (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 ""
 
-#: C/signals-callbacks.py.page:32(p)
+#. (itstool) path: section/p
+#: C/hellognome.js.page:67
 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+."
+"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 ""
-"Comme la plupart des boîtes à outils d'interfaces utilisateurs, GTK+ utilise "
-"un modèle de programmation événementiel. Lorsque l'utilisateur ne fait rien, "
-"GTK+ attend qu'une entrée se fasse dans la boucle principale. Dès que "
-"l'utilisateur fait quelque chose (disons un clic de souris), alors la boucle "
-"principale « se réveille » et fournit un événement à GTK+."
 
-#: C/signals-callbacks.py.page:34(p)
+#. (itstool) path: section/p
+#: C/hellognome.js.page:68
 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."
+"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 ""
-"Lorsque les éléments graphiques reçoivent un événement, il émettent la "
-"plupart du temps un ou plusieurs signaux. Ces signaux indiquent à votre "
-"programme que « quelque chose d'intéressant vient de se passer » en "
-"exécutant les fonctions que vous leur avez connecté. Lorsque vos rappels "
-"sont exécutés, vous agissez normalement en conséquence. Après la fin d'un "
-"rappel, GTK+ retourne dans la boucle principale et attend d'autres "
-"événements."
 
-#: C/signals-callbacks.py.page:36(p)
+#. (itstool) path: section/title
+#: C/hellognome.js.page:72
+#, fuzzy
+#| msgid "Creating the main window for the application"
+msgid "Creating a GNOME window to frame our web app"
+msgstr "Création de la fenêtre principale de l'application"
+
+#. (itstool) path: section/p
+#: C/hellognome.js.page:74
 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."
+"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 ""
-"Voici un exemple générique : <code>handler_id = widget.connect(evenement, "
-"rappel, donnees)</code>. <code>widget</code> est un exemple d'élément "
-"graphique que nous avons créé un peu plus tôt. Puis vient l'<code>evenement</"
-"code> qui nous intéresse. Chaque élément graphique possède ses propres "
-"événements pouvant arriver. Par exemple, si vous connectez un Gtk.Button à "
-"l'événement « cliqué » : chaque fois que ce bouton est cliqué, le signal est "
-"émis. Un autre exemple avec le signal <code>notify::property</code> : chaque "
-"fois qu'une <link xref=\"properties.py\">propriété</link> d'un GObject est "
-"modifiée, GObject associe comme détail à l'émission de ce signal, le nom de "
-"la propriété modifiée au lieu de seulement émettre le signal <code>notify</"
-"code>. Cela permet aux clients qui ne veulent être informés des "
-"modifications que d'une seule propriété de filtrer la plupart des événements "
-"avant de les recevoir. Troisièmement, l'argument de rappel est le nom de la "
-"fonction de rappel, qui contient le code en cours d'exécution quand les "
-"signaux de ce type spécifique sont émis. Enfin, l'argument optionnel de "
-"données inclut toute donnée devant être passée quand le signal est émis."
 
-#: C/signals-callbacks.py.page:38(p)
+#. (itstool) path: section/code
+#: C/hellognome.js.page:75
+#, no-wrap
 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>."
+"\n"
+"#!/usr/bin/gjs\n"
 msgstr ""
-"La fonction renvoie un nombre (le <code>handler_id</code>) qui identifie "
-"cette paire particulière de signal-rappel. Ce nombre est nécessaire pour se "
-"déconnecter d'un signal de façon à ce que la fonction de rappel ne soit plus "
-"appelée, ni par la suite, ni pendant les émissions du signal à laquelle elle "
-"est actuellement connectée, comme dans <code>widget.disconnect(handler_id)</"
-"code>."
 
-#: C/signals-callbacks.py.page:45(p)
+#. (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 ""
-"<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
-"\">Signals</link> in GObject documentation"
+"\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 ""
-"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
-"signaux</link> dans la documentation GObject"
 
-#: C/signals-callbacks.py.page:46(p)
+#. (itstool) path: section/p
+#: C/hellognome.js.page:85
 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"
+"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 ""
-"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.";
-"html\">Les bases - Boucle principale et signaux</link> dans le tutoriel "
-"Python Gtk+ 3"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/set-up-gedit.js.page:24(None)
-msgid "@@image: 'media/geditview.png'; md5=f1438295662d95f56fcd1d8200efaaf2"
-msgstr "@@image: 'media/geditview.png'; md5=f1438295662d95f56fcd1d8200efaaf2"
+#. (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 ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/set-up-gedit.js.page:36(None)
-msgid "@@image: 'media/gediteditor.png'; md5=50db1ee8f2c545744879ee9fba5b4b24"
-msgstr "@@image: 'media/gediteditor.png'; md5=50db1ee8f2c545744879ee9fba5b4b24"
+#. (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 ""
 
-#: C/set-up-gedit.js.page:18(title)
-msgid "Set up gedit for JavaScript development"
-msgstr "Configuration de gedit pour le développement en JavaScript"
+#. (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
+#, fuzzy
+#| msgid "Creating the application window"
+msgid "Now we create the application itself:"
+msgstr "Création de la fenêtre de l'application"
 
-#: C/set-up-gedit.js.page:19(p)
+#. (itstool) path: section/code
+#: C/hellognome.js.page:93
+#, no-wrap
 msgid ""
-"This tutorial will show you how to set up <link href=\"http://projects.gnome.";
-"org/gedit/\">gedit,</link> GNOME's basic text editor, so that it has a "
-"handful of extra features which are useful for writing JavaScript code."
+"\n"
+"const HelloGNOME = new Lang.Class ({\n"
+"    Name: 'Hello GNOME',\n"
 msgstr ""
-"Ce tutoriel va vous montrer comment configurer <link href=\"http://projects.";
-"gnome.org/gedit/\">gedit,</link> l'éditeur de texte de base dans GNOME, pour "
-"qu'il intègre les fonctions optionnelles nécessaires à la programmation en "
-"JavaScript."
 
-#: C/set-up-gedit.js.page:22(title)
-msgid "Making code clearer"
-msgstr "Clarification du code"
+#. (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 ""
 
-#: C/set-up-gedit.js.page:23(p)
+#. (itstool) path: section/code
+#: C/hellognome.js.page:99
+#, no-wrap
 msgid ""
-"Click on <gui>Edit</gui> in gedit's menu bar, then click on <gui>Preferences."
-"</gui> You should see something like this:"
+"\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 ""
-"Dans l'onglet <gui>Édition</gui> de la barre de menu de gedit, cliquez sur "
-"<gui>Préférences</gui>. La boîte de dialogue suivante s'affiche :"
 
-#: C/set-up-gedit.js.page:25(p)
-msgid "Here are the options you want to make sure are turned on."
-msgstr "Voici les options à activer."
+#. (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 ""
 
-#: C/set-up-gedit.js.page:27(p)
+#. (itstool) path: section/p
+#: C/hellognome.js.page:120
 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."
+"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 ""
-"<gui>Afficher les numéros de ligne</gui> va vous aider à comparer votre code "
-"avec l'original et trouver plus facilement la ligne qui provoque une erreur "
-"s'il y a un bogue."
 
-#: C/set-up-gedit.js.page:28(p)
+#. (itstool) path: section/p
+#: C/hellognome.js.page:121
 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."
+"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 ""
-"<gui>Surligner la ligne actuelle</gui> vous permet de retrouver plus "
-"facilement votre ligne active quand vous vous déplacez souvent."
 
-#: C/set-up-gedit.js.page:29(p)
+#. (itstool) path: note/p
+#: C/hellognome.js.page:122
 msgid ""
-"<gui>Highlight matching brackets</gui> helps you make sure you didn't leave "
-"out a bracket by accident."
+"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 ""
-"<gui>Surligner les parenthèses correspondantes</gui> vous permet de penser à "
-"refermer la parenthèse."
 
-#: C/set-up-gedit.js.page:34(title)
-msgid "Making editing easier"
-msgstr "Faciliter l'édition"
+#. (itstool) path: section/title
+#: C/hellognome.js.page:126
+msgid "Designing our window's UI"
+msgstr ""
 
-#: C/set-up-gedit.js.page:35(p)
+#. (itstool) path: section/p
+#: C/hellognome.js.page:127
 msgid ""
-"In gedit's <gui>Preferences</gui> dialog, click on the <gui>Editor</gui> "
-"tab. You should see something like this:"
+"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 ""
-"Dans les <gui>Préférences</gui> de gedit, ouvrez l'onglet <gui>Éditeur</"
-"gui>. Cette boîte de dialogue s'affiche :"
 
-#: C/set-up-gedit.js.page:37(p)
+#. (itstool) path: section/code
+#: C/hellognome.js.page:129
+#, no-wrap
 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."
+"\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 ""
-"Cochez la case <gui>Activer l'indentation automatique</gui>. Cela oblige le "
-"curseur à rester sur le même indent qu'à la ligne précédente lorsque vous "
-"pressez sur la touche <key>Entrée</key>. Cela est très important en "
-"JavaScript car ce langage utilise l'indentation pour clarifier les fonctions "
-"de chaque partie du programme."
 
-#: C/set-up-gedit.js.page:38(p)
+#. (itstool) path: section/p
+#: C/hellognome.js.page:142
 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>"
+"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 ""
-"Pour pouvoir partager votre code avec d'autres personnes programmant des "
-"applications GNOME en JavaScript, réglez la <gui>Largeur des tabulations</"
-"gui> sur 4 et cochez la case <gui>Insérer des espaces au lieu de "
-"tabulations</gui>."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/separator.py.page:23(None)
-msgid "@@image: 'media/separator.png'; md5=8769b27662ce5c77f99e9ce33751a21a"
-msgstr "@@image: 'media/separator.png'; md5=8769b27662ce5c77f99e9ce33751a21a"
+#. (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 ""
 
-#: C/separator.py.page:7(title)
-msgid "Seperator (Python)"
+#. (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 ""
 
-#: C/separator.py.page:18(desc)
-msgid "A separator widget"
-msgstr "Un élément graphique séparateur"
+#. (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 ""
 
-#: C/separator.py.page:21(title)
-msgid "Separator"
-msgstr "Séparateur"
+#. (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 ""
 
-#: C/separator.py.page:24(p)
-msgid "A horizontal and a vertical separator divide some labels."
-msgstr "Un séparateur horizontal et un vertical séparent quelques étiquettes."
+#. (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 ""
 
-#: C/separator.py.page:34(title)
-msgid "API Reference"
-msgstr "Référence API"
+#. (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 ""
 
-#: C/separator.py.page:38(link)
-msgid "GtkSeparator"
-msgstr "GtkSeparator"
+#. (itstool) path: section/p
+#: C/hellognome.js.page:169
+#, fuzzy
+#| msgid ""
+#| "Finally, we create a new instance of the finished ScaleExample class, and "
+#| "set the application running."
+msgid ""
+"Finally, we create a new instance of our HelloGNOME class, and tell GNOME to "
+"run it."
+msgstr ""
+"Enfin, nous créons un nouvel exemple de la classe ScaleExemple et démarrons "
+"l'application."
+
+#. (itstool) path: section/title
+#: C/hellognome.js.page:173
+#, fuzzy
+#| msgid "Run the application"
+msgid "Running your GNOME application"
+msgstr "Exécution de l'application"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/scrolledwindow.vala.page:22(None) C/scrolledwindow.py.page:21(None)
+#. (itstool) path: section/p
+#: C/hellognome.js.page:175
 msgid ""
-"@@image: 'media/scrolledwindow.png'; md5=697bb3205d5c4fb0b4ea8db435843157"
+"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 ""
-"@@image: 'media/scrolledwindow.png'; md5=697bb3205d5c4fb0b4ea8db435843157"
 
-#: C/scrolledwindow.vala.page:7(title)
+#. (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"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"const Webkit = imports.gi.WebKit;\n"
+"\n"
+"const HelloGNOME = new Lang.Class ({\n"
+"    Name: 'Hello GNOME',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ();\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            title: \"Welcome to GNOME\",\n"
+"            default_height: 200,\n"
+"            default_width: 400,\n"
+"            window_position: Gtk.WindowPosition.CENTER });\n"
+"\n"
+"        // Create a webview to show the web app\n"
+"        this._webView = new Webkit.WebView ();\n"
+"\n"
+"        // Put the web app into the webview\n"
+"        this._webView.load_uri (GLib.filename_to_uri (GLib.get_current_dir() +\n"
+"            \"/hellognome.html\", null));\n"
+"\n"
+"        // Put the webview into the window\n"
+"        this._window.add (this._webView);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new HelloGNOME ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: 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
 #, fuzzy
-#| msgid "ScrolledWindow"
-msgid "ScrolledWindow (Vala)"
-msgstr "ScrolledWindow"
+#| msgid ""
+#| "@@image: 'media/helloWorldJs.png'; md5=4c88a27211dfd1b33e504c9f78602f2d"
+msgctxt "_"
+msgid ""
+"external ref='media/hello-world.png' md5='4c88a27211dfd1b33e504c9f78602f2d'"
+msgstr ""
+"@@image: 'media/helloWorldJs.png'; md5=4c88a27211dfd1b33e504c9f78602f2d"
 
-#: C/scrolledwindow.vala.page:18(desc) C/scrolledwindow.py.page:17(desc)
-msgid "Adds scrollbars to its child widget"
-msgstr "Ajoute des barres de défilement à son élément graphique enfant"
+#. (itstool) path: info/title
+#: C/hello-world.c.page:10
+#, fuzzy
+#| msgid "Hello World"
+msgctxt "link"
+msgid "Hello World (C)"
+msgstr "Hello World"
 
-#: C/scrolledwindow.vala.page:21(title) C/scrolledwindow.py.page:20(title)
-msgid "ScrolledWindow"
-msgstr "ScrolledWindow"
+#. (itstool) path: credit/name
+#: C/hello-world.c.page:24
+msgid "Bastian Ilsø"
+msgstr ""
 
-#: C/scrolledwindow.vala.page:23(p) C/scrolledwindow.py.page:22(p)
-msgid "An image in a scrolled window."
-msgstr "Une image dans une fenêtre avec barres de défilement."
+#. (itstool) path: info/desc
+#: C/hello-world.c.page:28
+#, fuzzy
+#| msgid ""
+#| "A little bit more than a simple \"Hello world\" application - write an "
+#| "image viewer in GTK."
+msgid "Creating a small \"Hello, World\" application using GTK+."
+msgstr ""
+"Un peu plus qu'une simple application « Hello world » - écrire un visionneur "
+"d'images en GTK."
 
-#: C/scrolledwindow.py.page:7(title)
+#. (itstool) path: page/title
+#: C/hello-world.c.page:31
 #, fuzzy
-#| msgid "ScrolledWindow"
-msgid "ScrolledWindow (Python)"
-msgstr "ScrolledWindow"
+#| msgid "Hello World"
+msgid "Hello world"
+msgstr "Hello World"
 
-#: C/scrolledwindow.py.page:31(title)
-msgid "Useful methods for a ScrolledWindow widget"
-msgstr "Méthodes utiles pour un élément graphique ScrolledWindow"
+#. (itstool) path: note/p
+#: C/hello-world.c.page:34
+#, fuzzy
+#| 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>."
+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 ""
+"Pour davantage d'informations sur la compilation des programmes Gtk+, "
+"consultez <link href=\"http://developer.gnome.org/gtk3/3.4/gtk-compiling.html";
+"\">Compilation d'applications Gtk+ sur UNIX</link>."
 
-#: C/scrolledwindow.py.page:33(p)
+#. (itstool) path: page/p
+#: C/hello-world.c.page:38
 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."
+"Writing a hello world GTK+ dialog in C can be done as seen in the code "
+"sample below:"
 msgstr ""
-"La méthode <code>set_policy(hscrollbar_policy, vscrollbar_policy)</code>, où "
-"chaque argument est l'un des <code>Gtk.Policy.AUTOMATIC, Gtk.Policy.ALWAYS, "
-"Gtk.Policy.NEVER</code>, définit laquelle des barres de défilement verticale "
-"ou horizontale doit s'afficher. <code>AUTOMATIC</code> les affiche seulement "
-"si nécessaire, <code>ALWAYS</code> et <code>NEVER</code> les affichent "
-"respectivement toujours ou jamais."
 
-#: C/scrolledwindow.py.page:34(p)
+#. (itstool) path: page/code
+#: C/hello-world.c.page:39
+#, no-wrap
 msgid ""
-"<code>add_with_viewport(widget)</code> is used to add the Gtk.Widget "
-"<code>widget</code> without native scrolling capabilities inside the window."
+"\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 ""
-"La méthode <code>add_with_viewport(widget)</code> est utilisé pour ajouter "
-"l'élément graphique Gtk.Widget <code>widget</code>, sans possibilité de "
-"défilement à l'intérieur de la fenêtre."
 
-#: C/scrolledwindow.py.page:35(p)
+#. (itstool) path: page/p
+#: C/hello-world.c.page:43
 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>."
+"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 ""
-"La méthode <code>set_placement(window_placement)</code> organise le cadrage "
-"du contenu de la fenêtre en fonction de ses barres de défilement. Les "
-"options possibles des arguments sont : <code>Gtk.CornerType.TOP_LEFT</code> "
-"(par défaut, les barres de défilement sont en bas et à droite de la "
-"fenêtre), <code>Gtk.CornerType.TOP_RIGHT, Gtk.CornerType.BOTTOM_LEFT, Gtk."
-"CornerType.BOTTOM_RIGHT</code>."
 
-#: C/scrolledwindow.py.page:36(p)
+#. (itstool) path: info/title
+#: C/hello-world.js.page:9
+#, fuzzy
+#| msgid "Hello World"
+msgctxt "text"
+msgid "Hello World (JavaScript)"
+msgstr "Hello World"
+
+#. (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 "Une application basique « hello, world »"
+
+#. (itstool) path: page/title
+#: C/hello-world.js.page:27 C/hello-world.py.page:27 C/hello-world.vala.page:27
 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>.)"
+"How to build, install and create a <file>tar.xz</file> of a Hello World "
+"program"
 msgstr ""
-"Les méthodes <code>set_hadjustment(ajustement)</code> et "
-"<code>set_vadjustment(ajustement)</code> définissent l'<code>ajustement</"
-"code> Gtk.Adjustment. C'est la représentation d'une valeur avec une limite "
-"inférieure et supérieure, des incréments d'étape et de page, d'une taille de "
-"page et est construite sous la forme <code>Gtk.Adjustment(valeur, "
-"inferieure, superieure, step_increment, page_increment, page_size)</code> où "
-"les champs sont du type <code>float</code>. (Notez que <code>step_increment</"
-"code> n'est pas utilisé dans notre exemple et qu'il peut être défini à "
-"<code>0</code>)."
 
-#: C/scrolledwindow.py.page:45(link) C/paned.py.page:42(link)
-#: C/image.vala.page:33(link) C/image.py.page:100(link)
-#: C/image.c.page:34(link) C/grid.py.page:58(link)
-msgid "GtkImage"
-msgstr "GtkImage"
+#. (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 ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/scale.vala.page:23(None) C/scale.py.page:22(None)
-msgid "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
-msgstr "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
+#. (itstool) path: item/p
+#: C/hello-world.js.page:32
+#, fuzzy
+#| msgid ""
+#| "A little bit more than a simple \"Hello world\" application - write an "
+#| "image viewer in GTK."
+msgid "create a small \"Hello, World\" application using JavaScript and GTK+"
+msgstr ""
+"Un peu plus qu'une simple application « Hello world » - écrire un visionneur "
+"d'images en GTK."
+
+#. (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 ""
 
-#: C/scale.vala.page:7(title)
+#. (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
 #, fuzzy
-#| msgid "Sample Vala code"
-msgid "Scale (Vala)"
-msgstr "Exemple de code Vala"
+#| msgid "The whole program"
+msgid "Create the program"
+msgstr "Le programme complet"
 
-#: C/scale.vala.page:19(desc) C/scale.py.page:18(desc) C/scale.c.page:19(desc)
-msgid "A slider widget for selecting a value from a range"
+#. (itstool) path: section/p
+#: C/hello-world.js.page:47
+msgid "This needs to be the first line of your script:"
 msgstr ""
-"Un élément graphique glissière pour choisir une valeur dans un intervalle"
 
-#: C/scale.vala.page:22(title) C/scale.py.page:21(title)
-#: C/scale.js.page:20(title) C/scale.c.page:22(title)
-msgid "Scale"
-msgstr "Échelle"
+#. (itstool) path: section/code
+#: C/hello-world.js.page:48
+#, no-wrap
+msgid "#!/usr/bin/gjs"
+msgstr ""
 
-#: C/scale.vala.page:24(p) C/scale.py.page:23(p) C/scale.c.page:25(p)
-msgid "Slide the scales!"
-msgstr "Faites glisser les échelles !"
+#. (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
+#, fuzzy, no-wrap
+#| msgid "const Lang = imports.lang;"
+msgid ""
+"const Lang = imports.lang;\n"
+"const Gtk = imports.gi.Gtk;"
+msgstr "const Lang = imports.lang;"
 
-#: C/scale.vala.page:31(link) C/scale.js.page:214(link)
-msgid "Gtk.Scale"
-msgstr "Gtk.Scale"
+#. (itstool) path: section/p
+#: C/hello-world.js.page:56 C/hello-world.py.page:49
+#, fuzzy
+#| msgid ""
+#| "In order for our script to work with GNOME, we need to import GNOME "
+#| "libraries via GObject Introspection. In this case, we're importing GTK+, "
+#| "the most basic library that contains the graphical widgets used to make "
+#| "GNOME apps."
+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 ""
+"Afin que notre script fonctionne avec GNOME, nous devons importer les "
+"bibliothèques GNOME via l'introspection GObject. Dans ce cas, nous importons "
+"GTK+, la bibliothèque la plus basique qui contient les éléments graphiques "
+"utilisé pour faire les applications GNOME."
 
-#: C/scale.vala.page:33(link)
-msgid "Gtk.PositionType"
-msgstr "Gtk.PositionType"
+#. (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 ""
 
-#: C/scale.vala.page:34(link)
-msgid "Gtk.Orientation"
-msgstr "Gtk.Orientation"
+#. (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 ""
 
-#: C/scale.py.page:7(title)
+#. (itstool) path: section/p
+#: C/hello-world.js.page:93
 #, fuzzy
-#| msgid "Python"
-msgid "Scale (Python)"
-msgstr "Python"
+#| msgid ""
+#| "After importing Gtk, we need to initialize it. After that, we can start "
+#| "building our first window. We do this by creating a variable called "
+#| "mywindow and assigning it a new Gtk.Window of type TOPLEVEL."
+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 ""
+"Après l'importation de Gtk, nous devons l'initialiser. Après cela, nous "
+"pouvons démarrer la construction de notre première fenêtre. Nous faisons "
+"cela en créant une variable appelée mywindow et en lui attribuant une "
+"nouvelle Gtk.Window de type TOPLEVEL."
 
-#: C/scale.py.page:33(title)
-msgid "Useful methods for a Scale widget"
-msgstr "Méthodes utiles pour un élément graphique échelle"
+#. (itstool) path: section/p
+#: C/hello-world.js.page:94 C/hello-world.py.page:73
+#, fuzzy
+#| msgid ""
+#| "After setting up our first window we'll give the window a property called "
+#| "title. 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."
+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 ""
+"Après la définition de notre première fenêtre, nous donnons à la fenêtre une "
+"propriété appelée « title ». Le titre peut être n'importe quelle chaîne de "
+"caractères. Pour être certain que cela fonctionne, il est préférable de se "
+"tenir à un codage UTF-8."
 
-#: C/scale.py.page:34(p)
+#. (itstool) path: section/p
+#: C/hello-world.js.page:95 C/hello-world.py.page:74 C/hello-world.vala.page:57
+#, fuzzy
+#| msgid ""
+#| "Now we have a window that has a title and a working \"close\" button. "
+#| "Let's add the actual \"Hello, world\" text."
 msgid ""
-"For an explanation of signals and callback functions, see <link xref="
-"\"signals-callbacks.py\">this page</link>. An example is the <code>\"value-"
-"changed\"</code> signal, emitted when the value of the scale changes."
+"Now we have a window which has a title and a working \"close\" button. Let's "
+"add the actual \"Hello World\" text."
 msgstr ""
-"Pour de plus amples informations sur les signaux et les fonctions de rappel, "
-"consultez <link xref=\"signals-callbacks.py\">cette page</link>. Un exemple "
-"est le signal <code>\"value-changed\"</code> qui est émis quand la valeur de "
-"l'échelle est modifiée."
+"Maintenant, nous avons une fenêtre qui possède un titre et un bouton de "
+"fermeture fonctionnel. Ajoutons le vrai texte « Hello, world »."
+
+#. (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 "Étiquette de la fenêtre"
 
-#: C/scale.py.page:35(p)
+#. (itstool) path: section/code
+#: C/hello-world.js.page:99
+#, no-wrap
 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>."
+"// 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 ""
-"Pour construire une échelle Gtk.Scale, il faut un Gtk.Adjustment. C'est la "
-"représentation d'une valeur avec une limite inférieure et supérieure, des "
-"incréments d'étape et de page, d'une taille de page et est construite sous "
-"la forme <code>Gtk.Adjustment(valeur, inferieure, superieure, "
-"step_increment, page_increment, page_size)</code>, où les champs sont du "
-"type flottant <code>float</code> ; <code>step_increment</code> est "
-"l'incrément ou décrément obtenu par l'utilisation des touches fléchées et "
-"<code>page_increment</code> est celui obtenu en cliquant sur l'échelle elle-"
-"même. Notez que la taille <code>page_size</code> n'est pas utilisée dans "
-"notre exemple et que sa valeur doit être définie à <code>0</code>."
 
-#: C/scale.py.page:37(p)
+#. (itstool) path: section/p
+#: C/hello-world.js.page:104
+#, fuzzy
+#| 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 tell GNOME to show the label and the window "
+#| "containing it to the user, and call Gtk.main() to get the app itself "
+#| "started."
 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."
+"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 ""
-"La méthode <code>get_value()</code> récupère la valeur actuelle de "
-"l'échelle ; <code>set_value(valeur)</code> la définit (si la <code>valeur</"
-"code>, du type <code>float</code>, est en dehors des limites inférieure ou "
-"supérieure, elle sera rétrécie pour tenir à l'intérieur). Ce sont les "
-"méthodes de la classe Gtk.Range."
+"Nous pouvons utiliser une étiquette de texte comme éléments graphiques GTK+ "
+"à condition d'avoir importer la bibliothèque GTK+. Pour l'utiliser, nous "
+"créons une nouvelle variable appelée « label » et lui attribuons un nouveau "
+"Gtk.Label. Ensuite nous lui donnons une propriété à l'intérieur des "
+"accolades {}. Dans ce cas, nous définissons le texte que l'étiquette "
+"contient. Enfin, nous disons à GNOME d'afficher l'étiquette et la fenêtre la "
+"contenant à l'écran et appelons Gtk.main() afin que l'application démarre "
+"elle-même."
 
-#: C/scale.py.page:38(p)
+#. (itstool) path: section/code
+#: C/hello-world.js.page:106
+#, no-wrap
 msgid ""
-"Use <code>set_draw_value(False)</code> to avoid displaying the current value "
-"as a string next to the slider."
+"//run the application\n"
+"let app = new Application();\n"
+"app.application.run(ARGV);"
 msgstr ""
-"Utilisez <code>set_draw_value(faux)</code> pour éviter d'afficher la valeur "
-"actuelle sous forme d'une chaîne à côté de la glissière."
 
-#: C/scale.py.page:39(p)
+#. (itstool) path: section/p
+#: C/hello-world.js.page:110 C/hello-world.py.page:97
+#: C/hello-world.vala.page:71
+#, fuzzy
+#| msgid ""
+#| "For the future, keep in mind that Gtk.Window can only hold one widget at "
+#| "a time. To construct more elaborate programs you need to create a holder "
+#| "widget (Gtk.Box, Gtk.Grid, Gtk.Application, and so on) of some kind "
+#| "inside the window, and then add all the other widgets to it."
 msgid ""
-"To highlight the part of the scale between the origin and the current value:"
+"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 ""
-"Pour surligner la partie d'échelle située entre l'origine et la valeur "
-"actuelle :"
+"À l'avenir, gardez à l'esprit que le Gtk.Window ne peut contenir qu'un seul "
+"élément graphique à la fois. Pour construire des programmes plus élaborés, "
+"vous devez créer un élément graphique conteneur (Gtk.Box, Gtk.Grid, Gtk."
+"Application, etc.) d'un certain type à l'intérieur de la fenêtre puis "
+"ajouter tous les autres éléments graphiques à l'intérieur."
+
+#. (itstool) path: section/title
+#: C/hello-world.js.page:114
+#, fuzzy
+#| msgid "helloWorld.js"
+msgid "hello-world.js"
+msgstr "helloWorld.js"
 
-#: C/scale.py.page:40(code)
+#. (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"
-"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 ""
+"const Lang = imports.lang;\n"
+"const Gtk = imports.gi.Gtk;\n"
 "\n"
-"self.h_scale.set_restrict_to_fill_level(faux)\n"
-"self.h_scale.set_fill_level(self.h_scale.get_value())\n"
-"self.h_scale.set_show_fill_level(vrai)"
+"const Application = new Lang.Class({\n"
+"    //A Class requires an explicit Name parameter. This is the Class Name.\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application();\n"
+"\n"
+"       //connect to 'activate' and 'startup' signals to handlers.\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"       this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    //create the UI\n"
+"    _buildUI: function() {\n"
+"        this._window = new Gtk.ApplicationWindow({ application: this.application,\n"
+"                                                   title: \"Hello World!\" });\n"
+"        this._window.set_default_size(200, 200);\n"
+"        this.label = new Gtk.Label({ label: \"Hello World\" });\n"
+"        this._window.add(this.label);\n"
+"    },\n"
+"\n"
+"    //handler for 'activate' signal\n"
+"    _onActivate: function() {\n"
+"        //show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"    //handler for 'startup' signal\n"
+"    _onStartup: function() {\n"
+"        this._buildUI();\n"
+"    }\n"
+"});\n"
+"\n"
+"//run the application\n"
+"let app = new Application();\n"
+"app.application.run(ARGV);\n"
+msgstr ""
 
-#: C/scale.py.page:44(p)
+#. (itstool) path: section/title
+#: C/hello-world.js.page:119 C/hello-world.py.page:106
+#: C/hello-world.vala.page:80
+#, fuzzy
+#| msgid "Running the application from Terminal"
+msgid "Running the application from terminal"
+msgstr "Exécution de l'application à partir de Terminal"
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:120
+#, fuzzy
+#| msgid ""
+#| "To run this application, first save it as helloWorld.js. Then open "
+#| "Terminal, go to the folder where your application is stored and run"
 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."
+"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 ""
+"Pour lancer cette application, enregistrez-la d'abord sous le nom helloWorld."
+"js, puis ouvrez Terminal, allez dans le dossier où l'application est "
+"enregistrée et lancez"
+
+#. (itstool) path: section/screen
+#: C/hello-world.js.page:121
+#, no-wrap
+msgid "<output style=\"prompt\">$ </output><input>gjs hello-world.js</input>"
 msgstr ""
-"dans la fonction de rappel du signal « value-changed », pour avoir le "
-"nouveau remplissage chaque fois que la valeur est modifiée. Ce sont les "
-"méthodes de la classe Gtk.Range."
 
-#: C/scale.py.page:46(p)
+#. (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
+#, fuzzy
+#| msgid ""
+#| "Running applications from the Terminal is useful at the beginning of the "
+#| "application making process. To have a fully working <link href=\"http://";
+#| "library.gnome.org/admin/system-admin-guide/stable/mimetypes-9.html.en"
+#| "\">application integration</link> in GNOME 3 requires a desktop launcher. "
+#| "For this you need to create a <file>.desktop</file> file. The .desktop "
+#| "file describes the application name, the used icon and various "
+#| "integration bits. A deeper insight to <file>.desktop</file> file can be "
+#| "found <link href=\"http://developer.gnome.org/desktop-entry-spec/\";>here</"
+#| "link>."
 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>."
+"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 ""
-"La méthode <code>add_mark(valeur, position, marqueur)</code> ajoute un "
-"marqueur à la <code>valeur</code> (<code>float</code> ou <code>int</code> "
-"selon la précision de l'échelle) dans <code>position</code> (<code>Gtk."
-"PositionType.LEFT, Gtk.PositionType.RIGHT, Gtk.PositionType.TOP, Gtk."
-"PositionType.BOTTOM</code>) avec le texte <code>Null</code> ou "
-"<code>marqueur</code> en langage Pango Markup. La fonction <code>clear_marks"
-"()</code> supprime les marqueurs."
+"Le lancement d'applications à partir de Terminal est utile au début du "
+"processus de création de l'application. Pour avoir une <link href=\"http://";
+"library.gnome.org/admin/system-admin-guide/stable/mimetypes-9.html.en"
+"\">intégration de l'application</link> fonctionnelle et complète dans GNOME "
+"3, il vous faut un lanceur de bureau. Pour cela vous devez créer un fichier "
+"<file>.desktop</file>. Le fichier .desktop fournit le nom de l'application, "
+"l'icône utilisée et les parties de l'intégration. Un aperçu complet des "
+"fichiers <file>.desktop</file> peut être trouvé <link href=\"http://";
+"developer.gnome.org/desktop-entry-spec/\">ici</link>."
 
-#: C/scale.py.page:47(p)
+#. (itstool) path: note/p
+#: C/hello-world.js.page:131
 msgid ""
-"<code>set_digits(digits)</code> sets the precision of the scale at "
-"<code>digits</code> digits."
+"Before continuing, resave <file>hello-world.js</file> as <file>hello-world</"
+"file>. Then run this in the command line:"
 msgstr ""
-"La méthode <code>set_digits(digits)</code> définit la précision de l'échelle "
-"aux caractères <code>digits</code>."
 
-#: C/scale.py.page:55(link) C/scale.c.page:35(link)
-msgid "GtkScale"
-msgstr "GtkScale"
+#. (itstool) path: note/screen
+#: C/hello-world.js.page:132
+#, no-wrap
+msgid "<output style=\"prompt\">$ </output><input>chmod +x hello-world</input>"
+msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/scale.js.page:21(None)
+#. (itstool) path: section/p
+#: C/hello-world.js.page:135 C/hello-world.py.page:115
+#: C/hello-world.vala.page:92
+#, fuzzy
+#| msgid ""
+#| "The example shows you the minimum requirements for a <code>.desktop</"
+#| "code> file."
 msgid ""
-"@@image: 'media/scalepenguins.png'; md5=2dbe6a833fec86fde71a5ddb421e2cd5"
+"The example shows you the minimum requirements for a <code>.desktop.in</"
+"code> file."
 msgstr ""
-"@@image: 'media/scalepenguins.png'; md5=2dbe6a833fec86fde71a5ddb421e2cd5"
+"L'exemple vous montre le minimum nécessaire pour un fichier <code>.desktop</"
+"code>."
 
-#: C/scale.js.page:7(title)
+#. (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
 #, fuzzy
-#| msgid "JavaScript"
-msgid "Scale (JavaScript)"
-msgstr "JavaScript"
+#| msgid "Now let's go through some parts of the <code>.desktop</code> file."
+msgid "Now let's go through some parts of the <code>.desktop.in</code> file."
+msgstr ""
+"Allons maintenant examiner quelques parties du fichier <code>.desktop</code>.­­"
 
-#: C/scale.js.page:17(desc)
-msgid "A slider which corresponds to a numerical value"
-msgstr "Une glissière qui correspond à une valeur numérique"
+#. (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 "Nom"
+
+#. (itstool) path: item/p
+#: C/hello-world.js.page:140 C/hello-world.py.page:120
+#: C/hello-world.vala.page:97
+#, fuzzy
+#| msgid "Run the application"
+msgid "The application name."
+msgstr "Exécution de l'application"
 
-#: C/scale.js.page:22(p)
+#. (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
+#, fuzzy
+#| msgid "Designing the application"
+msgid "A short description of the application."
+msgstr "Conception de l'application"
+
+#. (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
+#, fuzzy
+#| msgid ""
+#| "Line 6: Specifies a command to execute when you choose the item from the "
+#| "menu. In this example exec just tells where to find the <code>helloworld."
+#| "js</code> file and the file takes care of the rest."
 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."
+"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 ""
-"Une échelle est une glissière horizontale ou verticale représentant une "
-"valeur comprise dans une fourchette numérique. Pour créer une échelle, vous "
-"devez définir sa position par défaut, son étendue numérique et le pas auquel "
-"elle avance ou recule. Au lieu d'être obligé de tout recommencer à chaque "
-"fois que vous créez une nouvelle échelle, vous pouvez inclure toutes ces "
-"données dans un objet nommé Adjustment et qui garde en mémoire tous les "
-"paramètres. Ensuite, à chaque création d'une nouvelle échelle, il suffit de "
-"lui indiquer de prendre ces réglages."
+"Ligne 6 : spécifie une commande à exécuter lorsque vous choisissez l'élément "
+"de menu. Dans cet exemple, « exec » indique juste où trouver le fichier "
+"<code>helloworld.js</code> et le fichier prend en charge le reste."
 
-#: C/scale.js.page:23(p)
+#. (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
+#, fuzzy
+#| msgid ""
+#| "Line 8: Specifies whether the command in the Exec key runs in a terminal "
+#| "window."
 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."
+"Specifies whether the command in the Exec key runs in a terminal window."
 msgstr ""
-"Cette échelle est un simple élément graphique permettant d'ajuster la taille "
-"d'un iceberg sur lequel vivent des pingouins. Le nombre de pingouins sur "
-"l'iceberg est le produit des valeurs des deux glissières. Faites des essais "
-"en modifiant les valeurs et observez le résultat."
+"Ligne 8 : indique si la commande de la clé Exec se lance dans une fenêtre de "
+"terminal."
 
-#: C/scale.js.page:65(p)
+#. (itstool) path: section/p
+#: C/hello-world.js.page:146 C/hello-world.py.page:126
+#: C/hello-world.vala.page:103
+#, fuzzy
+#| msgid ""
+#| "To put your application to the right 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 spec</link>."
 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."
+"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 ""
-"Tout le code de cet exemple va dans la classe ScaleExemple. Le code ci-"
-"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
-"et la fenêtre qui les contient."
+"Pour mettre votre application dans la bonne catégorie, vous devez ajouter "
+"les catégories nécessaires à la ligne « Categories ». Plus d'informations "
+"sur les différentes catégories peuvent être trouvées dans les <link href="
+"\"http://standards.freedesktop.org/menu-spec/latest/apa.html";
+"\">spécifications de menu</link>."
 
-#: C/scale.js.page:81(title)
-msgid "Creating the scales"
-msgstr "Création des échelles"
+#. (itstool) path: section/p
+#: C/hello-world.js.page:147 C/hello-world.py.page:127
+#: C/hello-world.vala.page:104
+#, fuzzy
+#| msgid ""
+#| "In this example I used an existing icon. For a custom icon you need to "
+#| "have a .svg file of your icon, store it to /usr/share/icons/hicolor/"
+#| "scalable/apps. Write the name of your icon file to the .desktop file, on "
+#| "line 7. More information on icons in: <link href=\"http://library.gnome.";
+#| "org/admin/system-admin-guide/stable/themes-11.html.en\"> Installing Icons "
+#| "for Themes </link>, <link href=\"https://live.gnome.org/GnomeGoals/AppIcon";
+#| "\">Installing Icons for Themes</link> and <link href=\"http://freedesktop.";
+#| "org/wiki/Specifications/icon-theme-spec\">on freedesktop.org: "
+#| "Specifications/icon-theme-spec</link>."
+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 ""
+"Dans cet exemple, nous utilisons une icône existante. Pour une icône "
+"personnalisée, vous devez posséder un fichier .svg de votre icône, "
+"l'enregistrer dans /usr/share/icons/hicolor/scalable/apps. Inscrivez le nom "
+"de votre fichier icône dans le fichier .desktop en ligne 7. Plus "
+"d'informations sur les icônes dans : <link href=\"http://library.gnome.org/";
+"admin/system-admin-guide/stable/themes-11.html.en\">Installation d'icônes "
+"pour les thèmes</link>, <link href=\"https://live.gnome.org/GnomeGoals/";
+"AppIcon\">Installation d'icônes pour les thèmes</link> et <link href="
+"\"http://freedesktop.org/wiki/Specifications/icon-theme-spec\";>sur "
+"freedesktop.org : spécifications/icônes-thème-spécifications</link>."
 
-#: C/scale.js.page:91(p)
+#. (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 ""
-"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."
+"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 ""
-"La méthode new_with_range est l'un des moyens pour créer un nouvel élément "
-"graphique échelle. Les paramètres qu'elle utilise sont <link href=\"http://";
-"www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Orientation.html\">Gtk."
-"Orientation</link>, la valeur minimum et l'incrément pour une seule "
-"graduation. Ensuite, nous utilisons les méthodes de l'échelle pour définir "
-"sa valeur de départ et en combien de fractions décimales la diviser. Dans ce "
-"cas, il nous faut aussi définir son alignement vertical pour la placer dans "
-"la fenêtre."
+"Pour que votre application fasse partie intégrante de GNOME 3, vous devez "
+"l'installer à l'aide d'autotools. Autotools construit et installe tous les "
+"fichiers nécessaires et les place à leurs emplacements corrects."
+
+#. (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 "Auparavant, vous devez posséder les fichiers suivants :"
 
-#: C/scale.js.page:92(p)
+#. (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 ""
-"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."
+"#!/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 ""
-"Nous pouvons aussi lui indiquer s'il faut afficher ou non le nombre à côté "
-"de la glissière avec la méthode set_draw_value. Les explications se trouvent "
-"dans cet exemple."
 
-#: C/scale.js.page:104(p)
+#. (itstool) path: section/p
+#: C/hello-world.js.page:158 C/hello-world.py.page:138
+#: C/hello-world.vala.page:115
+#, fuzzy
+#| msgid "After the autogen.sh file is ready and saved run"
+msgid "After the <file>autogen.sh</file> file is ready and saved, run:"
+msgstr "Quand le fichier autogen.sh est prêt et enregistré, exécutez"
+
+#. (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 ""
-"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."
+"# 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 ""
-"Un Adjustment est un objet permettant de simplifier la procédure de création "
-"d'une nouvelle échelle. La propriété « valeur » de l'Adjustment est la "
-"valeur par défaut de l'échelle alors que les valeurs « superieure » et "
-"« inferieure » en représentent le début et la fin. Entre les deux, les "
-"valeurs de l'incrément définissent le pas auquel l'échelle se déplace "
-"lorsque vous cliquez dessus."
 
-#: C/scale.js.page:116(p)
+#. (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
+#, fuzzy
+#| msgid "README: Information user should read first."
+msgid "Information users should read first. This file can be blank."
+msgstr "README : informations à lire en premier par l'utilisateur."
+
+#. (itstool) path: section/p
+#: C/hello-world.js.page:176 C/hello-world.py.page:156
 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."
+"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 ""
-"Ici, nous créons un nouvel objet échelle en utilisant _adjustment comme "
-"étant sa propriété d'« ajustement ». Cela est un raccourci important. "
-"Cependant, il nous faut encore lui indiquer comment arrondir les décimales. "
-"Notez que nous y expliquons aussi la propriété draw_value : comment lui "
-"indiquer de ne pas afficher le nombre à côté de l'échelle lorsque vous "
-"décidez cette façon de faire."
 
-#: C/scale.js.page:132(p)
+#. (itstool) path: section/code
+#: C/hello-world.js.page:177 C/hello-world.py.page:157
+#, no-wrap
 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."
+"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 ""
-"La méthode get_value permet de trouver la valeur numérique à laquelle une "
-"échelle est définie. Ensuite, nous pouvons en faire ce que nous voulons, y "
-"compris multiplier les valeurs des deux échelles et obtenir une <link xref="
-"\"label.js\">étiquette</link> affichant le produit. Paramétrons le texte "
-"avec retour à la ligne, car nous avons aussi un message stupide à afficher."
 
-#: C/scale.js.page:133(p)
+#. (itstool) path: info/title
+#: C/hello-world.py.page:9
+#, fuzzy
+#| msgid "Hello World"
+msgctxt "text"
+msgid "Hello World (Python)"
+msgstr "Hello World"
+
+#. (itstool) path: item/p
+#: C/hello-world.py.page:32
+#, fuzzy
+#| msgid ""
+#| "A little bit more than a simple \"Hello world\" application - write an "
+#| "image viewer in GTK."
+msgid "create a small \"Hello, World\" application using Python and GTK+"
+msgstr ""
+"Un peu plus qu'une simple application « Hello world » - écrire un visionneur "
+"d'images en GTK."
+
+#. (itstool) path: section/code
+#: C/hello-world.py.page:47
+#, no-wrap
 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."
+"from gi.repository import Gtk\n"
+"import sys"
 msgstr ""
-"Ensuite, connectons les deux signaux « value-changed » à la fonction "
-"_recalc, qui recalcule le nombre de pingouins sur l'iceberg et affiche un "
-"nouveau message."
 
-#: C/scale.js.page:148(p)
+#. (itstool) path: section/code
+#: C/hello-world.py.page:53
+#, fuzzy, 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"
+#| "class MyLabel(Gtk.Label):\n"
+#| "    def __init__(self):\n"
+#| "        Gtk.Label.__init__(self)\n"
+#| "        self.set_text(\"Hello GNOME!\")\n"
+#| "\n"
+#| "class MyApplication(Gtk.Application):\n"
+#| "    def __init__(self):\n"
+#| "        Gtk.Application.__init__(self)\n"
+#| "\n"
+#| "    def do_activate(self):\n"
+#| "        # create an instance of MyWindow\n"
+#| "        win = MyWindow(self)\n"
+#| "        # create an instance of MyLabel\n"
+#| "        label = MyLabel()\n"
+#| "        # and add it to the window\n"
+#| "        win.add(label)\n"
+#| "        # show the window and everything on it\n"
+#| "        win.show_all()"
 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."
+"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 ""
-"Ici, nous créons une <link xref=\"grid.js\">grille</link> pour tout y mettre "
-"et nous lui lions tous nos éléments graphiques. Notez que cette fois (et "
-"pour quelques éléments graphiques) nous utilisons des marges pour espacer "
-"proprement les éléments."
+"\n"
+"# a class to define a window\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
+"        self.set_default_size(200, 100)\n"
+"\n"
+"# a class to define a label\n"
+"class MyLabel(Gtk.Label):\n"
+"    def __init__(self):\n"
+"        Gtk.Label.__init__(self)\n"
+"        self.set_text(\"Hello GNOME!\")\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        # create an instance of MyWindow\n"
+"        win = MyWindow(self)\n"
+"        # create an instance of MyLabel\n"
+"        label = MyLabel()\n"
+"        # and add it to the window\n"
+"        win.add(label)\n"
+"        # show the window and everything on it\n"
+"        win.show_all()"
 
-#: C/scale.js.page:157(p)
+#. (itstool) path: section/p
+#: C/hello-world.py.page:71 C/hello-world.vala.page:54
 msgid ""
-"Finally, we add the Grid to the window, then tell the window to show itself "
-"and all the widgets inside of it."
+"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 ""
-"Enfin, nous ajoutons la grille à la fenêtre et indiquons à celle-ci de "
-"s'afficher toute seule avec tout son contenu."
 
-#: C/scale.js.page:161(title)
-msgid "Function which handles the scales' values changing"
-msgstr "Fonction prenant en charge les modifications de valeurs de l'échelle"
+#. (itstool) path: section/p
+#: C/hello-world.py.page:72
+#, fuzzy
+#| msgid ""
+#| "After importing Gtk, we need to initialize it. After that, we can start "
+#| "building our first window. We do this by creating a variable called "
+#| "mywindow and assigning it a new Gtk.Window of type TOPLEVEL."
+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 ""
+"Après l'importation de Gtk, nous devons l'initialiser. Après cela, nous "
+"pouvons démarrer la construction de notre première fenêtre. Nous faisons "
+"cela en créant une variable appelée mywindow et en lui attribuant une "
+"nouvelle Gtk.Window de type TOPLEVEL."
 
-#: C/scale.js.page:191(p)
+#. (itstool) path: section/code
+#: C/hello-world.py.page:78
+#, no-wrap
 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."
+"# 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 ""
-"Souvenez-vous, nous pouvons obtenir la valeur d'une échelle avec la méthode "
-"get_value. Ici, nous ne faisons que recalculer le produit des deux valeurs "
-"après qu'une des deux échelles a bougé, ajouter un message stupide en "
-"fonction du nombre de pingouins restant et modifier le texte de l'étiquette "
-"avec le nouveau nombre et le message."
 
-#: C/scale.js.page:198(p)
+#. (itstool) path: section/p
+#: C/hello-world.py.page:89
+#, fuzzy
+#| 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 tell GNOME to show the label and the window "
+#| "containing it to the user, and call Gtk.main() to get the app itself "
+#| "started."
 msgid ""
-"Finally, we create a new instance of the finished ScaleExample class, and "
-"set the application running."
+"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 ""
-"Enfin, nous créons un nouvel exemple de la classe ScaleExemple et démarrons "
-"l'application."
+"Nous pouvons utiliser une étiquette de texte comme éléments graphiques GTK+ "
+"à condition d'avoir importer la bibliothèque GTK+. Pour l'utiliser, nous "
+"créons une nouvelle variable appelée « label » et lui attribuons un nouveau "
+"Gtk.Label. Ensuite nous lui donnons une propriété à l'intérieur des "
+"accolades {}. Dans ce cas, nous définissons le texte que l'étiquette "
+"contient. Enfin, nous disons à GNOME d'afficher l'étiquette et la fenêtre la "
+"contenant à l'écran et appelons Gtk.main() afin que l'application démarre "
+"elle-même."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/scale.c.page:24(None)
-msgid "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
-msgstr "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
+#. (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 ""
 
-#: C/scale.c.page:7(title)
+#. (itstool) path: section/title
+#: C/hello-world.py.page:101
 #, fuzzy
-#| msgid "Scale"
-msgid "Scale (C)"
-msgstr "Échelle"
-
-#: C/scale.c.page:36(link)
-msgid "GtkRange"
-msgstr "GtkRange"
+#| msgid "helloWorld.js"
+msgid "hello-world.py"
+msgstr "helloWorld.js"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/record-collection.js.page:64(None)
+#. (itstool) path: section/code
+#: C/hello-world.py.page:103 C/label.py.page:39
+#, fuzzy, 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"
+#| "class MyLabel(Gtk.Label):\n"
+#| "    def __init__(self):\n"
+#| "        Gtk.Label.__init__(self)\n"
+#| "        self.set_text(\"Hello GNOME!\")\n"
+#| "\n"
+#| "class MyApplication(Gtk.Application):\n"
+#| "    def __init__(self):\n"
+#| "        Gtk.Application.__init__(self)\n"
+#| "\n"
+#| "    def do_activate(self):\n"
+#| "        # create an instance of MyWindow\n"
+#| "        win = MyWindow(self)\n"
+#| "        # create an instance of MyLabel\n"
+#| "        label = MyLabel()\n"
+#| "        # and add it to the window\n"
+#| "        win.add(label)\n"
+#| "        # show the window and everything on it\n"
+#| "        win.show_all()"
 msgid ""
-"@@image: 'media/record-collection.png'; md5=2d645997687ed5aacd36aafafc16e072"
+"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 ""
-"@@image: 'media/record-collection.png'; md5=2d645997687ed5aacd36aafafc16e072"
+"\n"
+"# a class to define a window\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
+"        self.set_default_size(200, 100)\n"
+"\n"
+"# a class to define a label\n"
+"class MyLabel(Gtk.Label):\n"
+"    def __init__(self):\n"
+"        Gtk.Label.__init__(self)\n"
+"        self.set_text(\"Hello GNOME!\")\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        # create an instance of MyWindow\n"
+"        win = MyWindow(self)\n"
+"        # create an instance of MyLabel\n"
+"        label = MyLabel()\n"
+"        # and add it to the window\n"
+"        win.add(label)\n"
+"        # show the window and everything on it\n"
+"        win.show_all()"
 
-#: C/record-collection.js.page:7(title)
+#. (itstool) path: section/p
+#: C/hello-world.py.page:107
 #, fuzzy
-#| msgid "3 Record Collection"
-msgid "Record Collection (JavaScript)"
-msgstr "3 Discothèque"
+#| msgid ""
+#| "To run this application, first save it as helloWorld.js. Then open "
+#| "Terminal, go to the folder where your application is stored and run"
+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 ""
+"Pour lancer cette application, enregistrez-la d'abord sous le nom helloWorld."
+"js, puis ouvrez Terminal, allez dans le dossier où l'application est "
+"enregistrée et lancez"
 
-#: C/record-collection.js.page:10(desc)
-msgid "Create a small database application for ordering your music collection"
-msgstr "Création d'une petite base de données pour trier votre discothèque"
+#. (itstool) path: section/screen
+#: C/hello-world.py.page:108
+#, no-wrap
+msgid "<output style=\"prompt\">$ </output><input>python hello-world.py</input>"
+msgstr ""
 
-#: C/record-collection.js.page:14(name) C/image-viewer.vala.page:14(name)
-#: C/image-viewer.cpp.page:12(name) C/image-viewer.c.page:14(name)
-#: C/guitar-tuner.vala.page:13(name) C/guitar-tuner.py.page:14(name)
-#: C/guitar-tuner.cpp.page:12(name) C/guitar-tuner.c.page:14(name)
-#: C/getting-ready.page:11(name) C/audio-player.vala.page:13(name)
-msgid "GNOME Documentation Project"
-msgstr "Projet de Documentation GNOME"
+#. (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
+#, fuzzy
+#| msgid "Hello World"
+msgctxt "text"
+msgid "Hello World (Vala)"
+msgstr "Hello World"
 
-#: C/record-collection.js.page:15(email) C/index.page:8(email)
-#: C/image-viewer.vala.page:15(email) C/image-viewer.cpp.page:13(email)
-#: C/image-viewer.c.page:15(email) C/guitar-tuner.vala.page:14(email)
-#: C/guitar-tuner.py.page:15(email) C/guitar-tuner.cpp.page:13(email)
-#: C/guitar-tuner.c.page:15(email) C/getting-ready.page:12(email)
-#: C/audio-player.vala.page:14(email)
-msgid "gnome-doc-list gnome org"
-msgstr "gnome-doc-list gnome org"
-
-#: C/record-collection.js.page:18(name) C/photo-wall.c.page:17(name)
-#: C/magic-mirror.vala.page:18(name) C/index.page:17(name)
-#: C/image-viewer.vala.page:18(name) C/image-viewer.py.page:18(name)
-#: C/image-viewer.js.page:18(name) C/image-viewer.cpp.page:16(name)
-#: C/image-viewer.c.page:18(name) C/guitar-tuner.vala.page:17(name)
-#: C/guitar-tuner.py.page:18(name) C/guitar-tuner.cpp.page:16(name)
-#: C/guitar-tuner.c.page:18(name)
-msgid "Johannes Schmid"
-msgstr "Johannes Schmid"
+#. (itstool) path: item/p
+#: C/hello-world.vala.page:32
+#, fuzzy
+#| msgid ""
+#| "A little bit more than a simple \"Hello world\" application - write an "
+#| "image viewer in GTK."
+msgid "create a small \"Hello, World\" application using GTK+"
+msgstr ""
+"Un peu plus qu'une simple application « Hello world » - écrire un visionneur "
+"d'images en GTK."
 
-#: C/record-collection.js.page:19(email) C/photo-wall.c.page:18(email)
-#: C/magic-mirror.vala.page:19(email) C/index.page:18(email)
-#: C/image-viewer.vala.page:19(email) C/image-viewer.py.page:19(email)
-#: C/image-viewer.js.page:19(email) C/image-viewer.cpp.page:17(email)
-#: C/image-viewer.c.page:19(email) C/guitar-tuner.vala.page:18(email)
-#: C/guitar-tuner.py.page:19(email) C/guitar-tuner.cpp.page:17(email)
-#: C/guitar-tuner.c.page:19(email)
-msgid "jhs gnome org"
-msgstr "jhs gnome org"
-
-#: C/record-collection.js.page:23(title)
-msgid "3 Record Collection"
-msgstr "3 Discothèque"
+#. (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 ""
 
-#: C/record-collection.js.page:26(p) C/message-board.c.page:24(p)
-#: C/image-viewer.cpp.page:24(p) C/image-viewer.c.page:26(p)
-msgid "In this tutorial, you will learn:"
-msgstr "Dans ce tutoriel, vous allez apprendre :"
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:55
+#, fuzzy
+#| msgid ""
+#| "After importing Gtk, we need to initialize it. After that, we can start "
+#| "building our first window. We do this by creating a variable called "
+#| "mywindow and assigning it a new Gtk.Window of type TOPLEVEL."
+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 ""
+"Après l'importation de Gtk, nous devons l'initialiser. Après cela, nous "
+"pouvons démarrer la construction de notre première fenêtre. Nous faisons "
+"cela en créant une variable appelée mywindow et en lui attribuant une "
+"nouvelle Gtk.Window de type TOPLEVEL."
 
-#: C/record-collection.js.page:28(p)
-msgid "How to connect to a database using libgda"
-msgstr "comment vous connecter à une base de données en utilisant « libgda »"
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:56
+#, fuzzy
+#| msgid ""
+#| "After setting up our first window we'll give the window a property called "
+#| "title. 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."
+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 ""
+"Après la définition de notre première fenêtre, nous donnons à la fenêtre une "
+"propriété appelée « title ». Le titre peut être n'importe quelle chaîne de "
+"caractères. Pour être certain que cela fonctionne, il est préférable de se "
+"tenir à un codage UTF-8."
 
-#: C/record-collection.js.page:29(p)
-msgid "How to insert and browse records in a database table"
+#. (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 ""
-"comment insérer et parcourir des enregistrements dans une table de base de "
-"données"
 
-#: C/record-collection.js.page:34(title) C/photo-wall.c.page:36(title)
-msgid "Introduction"
-msgstr "Introduction"
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:65
+#, fuzzy
+#| msgid "Build and run the application"
+msgid "Finally, we create and run the application:"
+msgstr "Construction et lancement de l'application"
 
-#: C/record-collection.js.page:35(p)
+#. (itstool) path: section/code
+#: C/hello-world.vala.page:67
+#, no-wrap
 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."
+"int main (string[] args) {\n"
+"        return new MyApplication ().run (args);\n"
+"}"
 msgstr ""
-"Cet exemple utilise le langage Javascript. Nous allons vous montrer comment "
-"vous connecter à une base de données et l'utiliser à partir d'un programme "
-"GTK en utilisant la bibliothèque GDA (GNOME Data Access). Vous devez bien "
-"sûr avoir déjà installé cette dernière."
 
-#: C/record-collection.js.page:38(p)
+#. (itstool) path: section/title
+#: C/hello-world.vala.page:75
+#, fuzzy
+#| msgid "helloWorld.js"
+msgid "hello-world.vala"
+msgstr "helloWorld.js"
+
+#. (itstool) path: section/code
+#: C/hello-world.vala.page:77
+#, no-wrap
 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>."
+"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 ""
-"La bibliothèque GDA (GNOME Data Access) vous permet d'accéder de manière "
-"universelle à différentes sortes et types de sources de données, depuis les "
-"plus traditionnels systèmes de bases de données relationnelles, jusqu'à des "
-"sources aussi diverses qu'un serveur de messagerie, un répertoire LDAP, etc. "
-"Pour de plus amples informations et pour une documentation et l'API "
-"complète, consultez le <link href=\"http://library.gnome.org/devel/libgda/";
-"stable/\">Site Web de GDA</link>."
 
-#: C/record-collection.js.page:41(p)
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:81
+#, fuzzy
+#| msgid ""
+#| "To run this application, first save it as helloWorld.js. Then open "
+#| "Terminal, go to the folder where your application is stored and run"
 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."
+"To run this application, first save it as hello-world.vala. Then open "
+"Terminal, go to the folder where your application is stored."
 msgstr ""
-"Bien que la plus grosse partie du programme se réfère à l'interface "
-"utilisateur (GUI), nous allons orienter notre tutoriel sur les fonctions "
-"bases de données (avec des explications sur certaines autres fonctions que "
-"nous jugeons pertinentes). Pour de plus amples informations sur les "
-"programmes GNOME en Javascript, consultez le tutoriel <link xref=\"image-"
-"viewer.js\">Programme visionneur d'images</link>."
+"Pour lancer cette application, enregistrez-la d'abord sous le nom helloWorld."
+"js, puis ouvrez Terminal, allez dans le dossier où l'application est "
+"enregistrée et lancez"
 
-#: C/record-collection.js.page:47(title) C/photo-wall.c.page:46(title)
-#: C/message-board.c.page:41(title) C/magic-mirror.vala.page:44(title)
-#: C/image-viewer.vala.page:51(title) C/image-viewer.py.page:44(title)
-#: C/image-viewer.js.page:45(title) C/image-viewer.cpp.page:34(title)
-#: C/image-viewer.c.page:36(title) C/guitar-tuner.py.page:42(title)
-#: C/guitar-tuner.cpp.page:40(title) C/guitar-tuner.c.page:42(title)
-msgid "Create a project in Anjuta"
-msgstr "Création d'un projet dans Anjuta"
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:82
+#, fuzzy
+#| msgid "The whole program"
+msgid "Compile the program:"
+msgstr "Le programme complet"
+
+#. (itstool) path: section/screen
+#: C/hello-world.vala.page:83
+#, fuzzy, no-wrap
+#| msgid "valac --pkg gtk+-3.0 <var>filename</var>.vala"
+msgid "valac --pkg gtk+-3.0 <file>hello-world.vala</file>"
+msgstr "valac --pkg gtk+-3.0 <var>nomdufichier</var>.vala"
 
-#: C/record-collection.js.page:48(p) C/photo-wall.c.page:47(p)
-#: C/magic-mirror.vala.page:45(p) C/image-viewer.vala.page:52(p)
-#: C/image-viewer.py.page:45(p) C/image-viewer.js.page:46(p)
-#: C/image-viewer.cpp.page:35(p) C/image-viewer.c.page:37(p)
-#: C/guitar-tuner.vala.page:46(p) C/guitar-tuner.py.page:43(p)
-#: C/guitar-tuner.cpp.page:41(p) C/guitar-tuner.c.page:43(p)
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:84
+#, fuzzy
+#| msgid "The whole program"
+msgid "Run the program:"
+msgstr "Le programme complet"
+
+#. (itstool) path: section/screen
+#: C/hello-world.vala.page:85
+#, fuzzy, no-wrap
+#| msgid "./<var>filename</var>"
+msgid "./<var>hello-world</var>"
+msgstr "./<var>nomdufichier</var>"
+
+#. (itstool) path: section/code
+#: C/hello-world.vala.page:121
+#, no-wrap
 msgid ""
-"Before you start coding, you'll need to set up a new project in Anjuta. This "
-"will create all of the files you need to build and run the code later on. "
-"It's also useful for keeping everything together."
+"# 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 ""
-"Avant de commencer à programmer, vous devez ouvrir un nouveau projet dans "
-"Anjuta. Ceci crée tous les fichiers qui vous sont nécessaires pour "
-"construire et exécuter votre programme plus tard. C'est aussi utile pour "
-"tout regrouper en un seul endroit."
 
-#: C/record-collection.js.page:51(p) C/photo-wall.c.page:50(p)
-#: C/magic-mirror.vala.page:48(p) C/image-viewer.py.page:48(p)
-#: C/image-viewer.js.page:49(p) C/image-viewer.cpp.page:38(p)
-#: C/image-viewer.c.page:40(p) C/guitar-tuner.py.page:46(p)
-#: C/guitar-tuner.cpp.page:44(p) C/guitar-tuner.c.page:46(p)
+#. (itstool) path: section/code
+#: C/hello-world.vala.page:126
+#, no-wrap
 msgid ""
-"Start Anjuta and click <guiseq><gui>File</gui><gui>New</gui><gui>Project</"
-"gui></guiseq> to open the project wizard."
+"# 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 ""
-"Lancez Anjuta et cliquez sur <guiseq><gui>Fichier</gui><gui>Nouveau</"
-"gui><gui>Projet</gui></guiseq> pour ouvrir l'assistant de création de projet."
 
-#: C/record-collection.js.page:54(p)
+#. (itstool) path: section/p
+#: C/hello-world.vala.page:133
 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."
+"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 ""
-"Cliquez sur l'onglet <gui>JS</gui>, choisissez <gui>JavaScript générique</"
-"gui>, cliquez sur <gui>Continuer</gui> et renseignez les champs requis avec "
-"vos informations. Mettez <file>discotheque</file> (sans accent) comme nom du "
-"projet et répertoire."
 
-#: C/record-collection.js.page:57(p)
+#. (itstool) path: section/code
+#: C/hello-world.vala.page:134
+#, no-wrap
 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."
+"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 ""
-"Cliquez sur <gui>Appliquer</gui> et votre projet est créé. Ouvrez <file>src/"
-"main.js</file> depuis l'onglet <gui>Projet</gui> ou l'onglet <gui>Fichiers</"
-"gui>. Il contient un exemple de programme très basique."
 
-#: C/record-collection.js.page:63(title)
-msgid "Program Structure"
-msgstr "Structure du programme"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/image.png'; md5=9416aa74d9d6a857783f7a36338e7a02"
+msgctxt "_"
+msgid "external ref='media/image.png' md5='9416aa74d9d6a857783f7a36338e7a02'"
+msgstr "@@image: 'media/image.png'; md5=9416aa74d9d6a857783f7a36338e7a02"
+
+#. (itstool) path: info/title
+#: C/image.c.page:8
+#, fuzzy
+#| msgid "Image"
+msgctxt "text"
+msgid "Image (C)"
+msgstr "Image"
+
+#. (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 "Un élément graphique qui affiche une image"
+
+#. (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 "Image"
+
+#. (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 ""
+"Cette application Gtk affiche un fichier image issu du dossier en cours."
 
-#: C/record-collection.js.page:65(p)
+#. (itstool) path: note/p
+#: C/image.c.page:24 C/image.js.page:23 C/image.vala.page:24
 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."
+"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 ""
-"Cet exemple est une application GTK simple (avec une seule fenêtre) pouvant "
-"insérer des enregistrements dans une table de base de données et également "
-"consulter tous les enregistrements de cette table. Cette table possède deux "
-"champs : <code>id</code>, un entier et <code>name</code>, une variable de "
-"type caractère. La première section de l'application (en haut) vous permet "
-"d'insérer un enregistrement dans la table. La dernière (en bas) vous permet "
-"d'afficher tous les enregistrements de cette table. Son contenu est mis à "
-"jour à chaque fois qu'un nouvel enregistrement est inséré et au démarrage de "
-"l'application."
+"Si le fichier image n'est pas chargé correctement, l'image contient une "
+"icône en forme d'« image brisée ». Le <file>nomdufichier.png</file> doit "
+"être dans le dossier actuel pour que ce code fonctionne. Faites bon usage de "
+"votre photo favorite !"
 
-#: C/record-collection.js.page:70(title)
-msgid "Starting the fun"
-msgstr "Début du plaisir"
+#. (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 ""
 
-#: C/record-collection.js.page:71(p)
-msgid "Let's start by examining the skeleton of the program:"
-msgstr "Commençons par examiner le squelette du programme :"
+#. (itstool) path: item/p
+#: C/image.c.page:35
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkImage.html";
+"\">GtkImage</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: info/title
+#: C/image.js.page:7
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Image (JavaScript)"
+msgstr "JavaScript"
 
-#: C/record-collection.js.page:97(p)
+#. (itstool) path: page/code
+#: C/image.js.page:27
+#, no-wrap
 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."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ImageExample = new Lang.Class ({\n"
+"\tName: 'Image Example',\n"
+"\n"
+"\t/* Create the application itself\n"
+"\t   This boilerplate code is needed to build any GTK+ application. */\n"
+"        _init: function () {\n"
+"   \t     this.application = new Gtk.Application ({\n"
+"  \t          application_id: 'org.example.jsimage',\n"
+"  \t          flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"   \t     });\n"
+"\n"
+"\t// Connect 'activate' and 'startup' signals to the callback functions\n"
+"\tthis.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"\tthis.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"\t},\n"
+"\n"
+"\t// Callback function for 'activate' signal presents windows when active\n"
+"\t_onActivate: function () {\n"
+"\t\tthis._window.present ();\n"
+"\t},\n"
+"\n"
+"\t// Callback function for 'startup' signal initializes menus and builds the UI\n"
+"\t_onStartup: function () {\n"
+"\t\tthis._buildUI ();\n"
+"\t},\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\t// Build the application's UI\n"
+"\t_buildUI: function () {\n"
+"\n"
+"\t\t// Create the application window\n"
+"        \tthis._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                     \t     window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                     \t     title: \"Welcome to GNOME\",\n"
+"                                                     \t     default_height: 300,\n"
+"                                                     \t     default_width: 300 });\n"
+"\n"
+"\t\t// Create the label\n"
+"\t\tthis.jsimage = new Gtk.Image ({file: \"gnome-image.png\"});\n"
+"\t\tthis._window.add (this.jsimage);\n"
+"\n"
+"       \t \t// Show the window and all child widgets\n"
+"       \t \tthis._window.show_all();\n"
+"\t}\n"
+"\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ImageExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Lignes 1‒4 : importations initiales. Faites surtout attention à la ligne 3, "
-"qui commande à Javascript l'importation de la bibliothèque GDA, la cible de "
-"ce tutoriel."
 
-#: C/record-collection.js.page:98(p)
+#. (itstool) path: item/p
+#: C/image.js.page:34
+#, fuzzy
+#| 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."
 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."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html";
+"\">Gtk.Image</link>"
 msgstr ""
-"Lignes 6‒17 : définition de la classe <code>Demo</code>. Faites surtout "
-"attention aux lignes 13‒15, où nous appelons 3 méthodes qui font tout le "
-"travail. Elles sont détaillées plus bas."
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
 
-#: C/record-collection.js.page:99(p)
-msgid "Lines 19‒23: Start the application."
-msgstr "Lignes 19‒23 : lancement de l'application."
+#. (itstool) path: info/title
+#: C/image.py.page:8
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "Image (Python)"
+msgstr "Python"
 
-#: C/record-collection.js.page:104(title)
-msgid "Designing the application"
-msgstr "Conception de l'application"
+#. (itstool) path: credit/name
+#: C/image.py.page:20
+msgid "Sindhu S"
+msgstr ""
+
+#. (itstool) path: credit/years
+#: C/image.py.page:22
+msgid "2014"
+msgstr ""
 
-#: C/record-collection.js.page:105(p)
+#. (itstool) path: note/p
+#: C/image.py.page:32
+#, fuzzy
+#| msgid ""
+#| "If the image file is not loaded successfully, the image will contain a "
+#| "\"broken image\" icon. The <file>filename.png</file> needs to be in the "
+#| "current directory for this code to work."
 msgid ""
-"Let's take a look at the <code>setupWindow</code> method. It is responsible "
-"for creating the User Interface (UI). As UI is not our focus, we will "
-"explain only the relevant parts."
+"If 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 ""
-"Examinons la méthode <code>setupWindow</code>. C'est elle qui crée "
-"l'interface utilisateur. Comme l'interface utilisateur n'est pas notre "
-"sujet, nous en expliquons seulement les parties pertinentes."
+"Si le fichier image n'est pas chargé correctement, l'image contient une "
+"icône en forme d'« image brisée ». Le <file>nomdufichier.png</file> doit "
+"être dans le dossier actuel pour que ce code fonctionne."
 
-#: C/record-collection.js.page:156(p)
+#. (itstool) path: section/code
+#: C/image.py.page:43
+#, fuzzy, 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()"
 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."
+"\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 ""
-"Lignes 22 et 27 : création des 2 entrées (pour les 2 champs) dans lesquelles "
-"l'utilisateur saisit les choses à insérer dans la base de données."
+"\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()"
 
-#: C/record-collection.js.page:157(p)
+#. (itstool) path: section/p
+#: C/image.py.page:47
 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."
+"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 ""
-"Lignes 31‒34 : création du bouton « Insert ». Le signal <code>clicked</code> "
-"de ce bouton est connecté à la méthode privée <code>_insertClicked</code> de "
-"la classe. Cette méthode est décrite ci-dessous."
+"Une autre manière d'obtenir ce qu'il y a dans cet exemple est de créer "
+"l'image en tant qu'exemple d'une autre classe et de l'ajouter à "
+"<code>MyWindow</code> dans la méthode <code>do_activate(self)</code> :"
 
-#: C/record-collection.js.page:158(p)
+#. (itstool) path: section/code
+#: C/image.py.page:51
+#, fuzzy, 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()"
 msgid ""
-"Line 39: Create the widget (<code>TextView</code>) where we will show the "
-"contents of the table."
+"\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 ""
-"Ligne 39 : création de l'élément graphique (<code>TextView</code>) où nous "
-"affichons le contenu de la table."
+"\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()"
 
-#: C/record-collection.js.page:159(p)
+#. (itstool) path: note/p
+#: C/image.py.page:78
 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."
+"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 ""
-"Ligne 44 : création de l'étiquette où nous affichons le nombre "
-"d'enregistrements dans la table. Au début, elle est vide et est mise à jour "
-"ultérieurement."
 
-#: C/record-collection.js.page:164(title)
-msgid "Connecting to and initializing the database"
-msgstr "Connexion à la base de données et initialisation"
+#. (itstool) path: section/title
+#: C/image.py.page:85
+msgid "Useful methods for an Image widget"
+msgstr "Méthodes utiles pour un élément graphique Image"
 
-#: C/record-collection.js.page:165(p)
+#. (itstool) path: item/p
+#: C/image.py.page:89
+#, fuzzy
+#| msgid ""
+#| "To load an image over a network use <code>set_from_pixbuf(pixbuf)</code>, "
+#| "where <code>pixbuf</code> is a <link href=\"http://developer.gnome.org/";
+#| "gdk-pixbuf/unstable//index.html\">GdkPixbuf</link>."
 msgid ""
-"The code which makes the connection to the database is in the "
-"<code>setupDatabase</code> method below:"
+"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 ""
-"Le code permettant de se connecter à la base de données est dans la méthode "
-"<code>setupDatabase</code> ci-dessous :"
+"Pour charger une image en provenance d'un réseau, utilisez la fonction "
+"<code>set_from_pixbuf(pixbuf)</code>, où <code>pixbuf</code> est un <link "
+"href=\"http://developer.gnome.org/gdk-pixbuf/unstable//index.html";
+"\">GdkPixbuf</link>."
 
-#: C/record-collection.js.page:182(p)
+#. (itstool) path: item/code
+#: C/image.py.page:93
+#, fuzzy, 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)"
 msgid ""
-"Lines 2‒3: Create the GDA's <code>Connection</code> object. We must supply "
-"to its constructor some properties:"
+"\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 ""
-"Lignes 2‒3 : création de l'objet <code>Connection</code> de GDA. Il faut "
-"transmettre quelques propriétés à son constructeur :"
+"\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)"
 
-#: C/record-collection.js.page:185(p)
+#. (itstool) path: item/p
+#: C/image.py.page:115
 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)."
+"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 ""
-"<code>provider</code> : l'un des fournisseurs reconnus par GDA. GDA prend en "
-"charge SQLite, MySQL, PostgreSQL, Oracle et beaucoup d'autres. Pour les "
-"besoins de l'exemple, nous utilisons une base de données SQLite car elle est "
-"déjà incluse par défaut dans la plupart des distributions et elle est facile "
-"à utiliser (elle n'a besoin que d'un fichier comme base de données)."
+"Si <code>preserve_aspect_ratio=True</code> est vrai, utilisez "
+"<code>new_from_file_at_size(nomdufichier, largeur, hauteur)</code>. Si "
+"<code>largeur</code> ou <code>hauteur</code> est <code>-1</code>, il n'y a "
+"pas de contrainte."
 
-#: C/record-collection.js.page:188(p)
+#. (itstool) path: item/p
+#: C/image.py.page:119
+#, fuzzy
+#| msgid ""
+#| "For loading from an input stream, see <code>new_from_stream()</code> and "
+#| "<code>new_from_stream_at_scale()</code> in the documentation"
 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)."
+"For loading from an input stream, see <code>new_from_stream()</code> and "
+"<code>new_from_stream_at_scale()</code> in the documentation."
 msgstr ""
-"<code>cnc_string</code> : la chaîne de connexion. Elle peut être différente "
-"en fonction du fournisseur. La syntaxe pour SQLite est : "
-"<code>DB_DIR=<var>CHEMIN</var>;DB_NAME=<var>NOM2FICHIER</var></code>. Dans "
-"cet exemple, nous accédons à une base de données nommée gnome_demo dans le "
-"dossier personnel de l'utilisateur (notez l'appel à la fonction "
-"<code>get_home_dir</code> de GLib)."
+"Pour charger à partir d'un flux entrant, consultez <code>new_from_stream()</"
+"code> et <code>new_from_stream_at_scale()</code> dans la documentation"
 
-#: C/record-collection.js.page:192(p)
+#. (itstool) path: item/p
+#: C/image.py.page:131
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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>."
+"<link href=\"https://developer.gnome.org/gtk3/unstable/GtkImage.html\";> "
+"GtkImage</link>"
 msgstr ""
-"Si le fournisseur n'est pas reconnu par GDA, ou si la chaîne de connexion "
-"n'est pas complète, la ligne 2 provoque une exception. Donc, en pratique, il "
-"faut gérer cette exception grâce à l'instruction JavaScript <code>try</"
-"code>...<code>catch</code>."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/record-collection.js.page:196(p)
+#. (itstool) path: item/p
+#: C/image.py.page:135
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Line 4: Open the connection. In the SQLite provider, if the database does "
-"not exist, it will be created in this step."
+"<link href=\"https://developer.gnome.org/gtk3/unstable/GtkWindow.html\";> "
+"GtkWindow</link>"
 msgstr ""
-"Ligne 4 : ouverture de la connexion. Pour le fournisseur SQLite, si la base "
-"de donnée n'existe pas, elle est créée à cette étape."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
+
+#. (itstool) path: info/title
+#: C/image.vala.page:8
+#, fuzzy
+#| msgid "Images and labels"
+msgctxt "text"
+msgid "Image (Vala)"
+msgstr "Images et étiquettes"
 
-#: C/record-collection.js.page:198(p)
+#. (itstool) path: page/code
+#: C/image.vala.page:27
+#, no-wrap
 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)."
+"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 ""
-"Lignes 6‒10 : tentative de faire une simple instruction « select » pour "
-"vérifier que la table existe (ligne 7). Si elle n'existe pas (parce que la "
-"base de données vient juste d'être créée), cette instruction provoque une "
-"exception qu'il faut gérer grâce au bloc <code>try</code>...<code>catch</"
-"code>. Dans ce cas, il faut exécuter l'instruction « create table » pour "
-"créer la table (ligne 9)."
 
-#: C/record-collection.js.page:199(p)
+#. (itstool) path: item/p
+#: C/image.vala.page:32 C/separator.vala.page:40
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"In order to run the SQL commands above we are using global GDA functions, "
-"<code>execute_select_command</code> and <code>execute_non_select_command</"
-"code>. They are simple to use, and just require two arguments: The "
-"<code>Connection</code> object and the SQL command to be parsed."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Application.html";
+"\">GtkApplication</link>"
 msgstr ""
-"Pour exécuter les commandes SQL ci-dessus, nous utilisons les fonctions "
-"globales de GDA, <code>execute_select_command</code> et "
-"<code>execute_non_select_command</code>. Elles sont simples d'utilisation et "
-"ne requièrent que deux arguments : l'objet <code>Connection</code> et la "
-"commande SQL à analyser."
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/record-collection.js.page:203(p)
-msgid "At this point we have the database set up, and are ready to use it."
+#. (itstool) path: item/p
+#: C/image.vala.page:33
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ApplicationWindow.html";
+"\">GtkApplicationWindow</link>"
 msgstr ""
-"À ce niveau, nous avons configuré la base de données et cette dernière est "
-"fonctionnelle."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/record-collection.js.page:207(title)
-msgid "Selecting"
-msgstr "Sélection"
+#. (itstool) path: item/p
+#: C/image.vala.page:34 C/paned.vala.page:38
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Image.html\";>GtkImage</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/record-collection.js.page:208(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/image-viewer.png'; md5=7720360611243b14283b83527be968c2"
+msgctxt "_"
 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:"
+"external ref='media/image-viewer.png' md5='7720360611243b14283b83527be968c2'"
 msgstr ""
-"Après connexion à la base de données, le constructeur de notre exemple "
-"appelle la méthode <code>selectData</code>. C'est elle qui récupère tous les "
-"enregistrements de la table et qui les affiche dans l'élément graphique "
-"<code>TextView</code>. Regardons à quoi elle ressemble :"
+"@@image: 'media/image-viewer.png'; md5=7720360611243b14283b83527be968c2"
+
+#. (itstool) path: info/title
+#: C/image-viewer.c.page:8
+#, fuzzy
+#| msgid "Image Viewer"
+msgctxt "text"
+msgid "Image viewer (C)"
+msgstr "Visionneur d'images"
+
+#. (itstool) path: info/desc
+#: C/image-viewer.c.page:11
+msgid "A little bit more than a simple \"Hello world\" Gtk application."
+msgstr "Un peu plus qu'une simple application Gtk « Hello world »."
+
+#. (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
+#, fuzzy
+#| msgid "Image Viewer"
+msgid "Image viewer"
+msgstr "Visionneur d'images"
 
-#: C/record-collection.js.page:229(p)
+#. (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 "Dans ce tutoriel, vous allez apprendre :"
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:34
+msgid "Some basic concepts of C/GObject programming"
+msgstr "quelques concepts de base de la programmation en C/GObject,"
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:35
+msgid "How to write a Gtk application in C"
+msgstr "comment écrire une application GTK en C."
+
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:49
+#, fuzzy
+#| 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."
 msgid ""
-"Line 2: The <code>SELECT</code> command. We are using the global GDA's "
-"function <code>execute_select_command</code> for that. It returns a "
-"<code>DataModel</code> object, which is later used to retrieve the rows."
+"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 ""
-"Ligne 2 : la commande <code>SELECT</code>. Nous utilisons la fonction "
-"globale <code>execute_select_command</code> de GDA pour cela. Elle retourne "
-"un objet <code>DataModel</code> qui servira plus tard à récupérer les lignes."
+"Sélectionnez <gui>GTK+ (Simple)</gui> dans l'onglet <gui>C++</gui>, cliquez "
+"sur <gui>Continuer</gui> et saisissez vos informations sur les quelques "
+"pages suivantes. Mettez <file>image-viewer</file> comme nom de projet et de "
+"répertoire."
 
-#: C/record-collection.js.page:230(p)
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:52
 msgid ""
-"Line 3: Create an <code>Iter</code> object, which is used to iterate over "
-"the <code>DataModel</code>'s records."
+"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 ""
-"Ligne 3 : création d'un objet <code>Iter</code> qui sert à itérer sur les "
-"enregistrements de <code>DataModel</code>."
+"Assurez-vous d'avoir désactivé <gui>Utiliser GtkBuilder pour l'interface "
+"utilisateur</gui> car nous allons créer l'interface utilisateur manuellement "
+"dans cet exemple. Consultez le tutoriel <link xref=\"guitar-tuner.c\">Guitar-"
+"Tuner</link> pour un exemple d'utilisation du constructeur d'interfaces."
 
-#: C/record-collection.js.page:231(p)
+#. (itstool) path: section/p
+#: C/image-viewer.c.page:67
 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."
+"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 ""
-"Ligne 7 : Itération sur tous les enregistrements en les récupérant à l'aide "
-"de l'objet <code>Iter</code>. À cet endroit, la variable <code>Iter</code> "
-"contient les informations trouvées. La méthode <code>move_next</code> "
-"retourne le message <code>false</code> quand elle atteint le dernier "
-"enregistrement."
+"« C » est un langage plutôt verbeux, donc ne soyez pas surpris par la "
+"quantité de code que contient le fichier. La plupart du code est générique. "
+"Il charge une fenêtre (vide) et l'affiche. Vous trouverez plus de détails ci-"
+"dessous ; passez cette liste si vous comprenez les bases :"
 
-#: C/record-collection.js.page:233(p)
-msgid "Lines 8‒9: We do two things in each line:"
-msgstr "Lignes 8‒9 : nous faisons deux choses dans chaque ligne :"
+#. (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 ""
+"La fonction <code>create_window</code> crée une nouvelle fenêtre (vide) et "
+"connecte un signal pour quitter l'application quand la fenêtre est fermée."
+
+#. (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 "Création de l'interface utilisateur"
 
-#: C/record-collection.js.page:235(p)
+#. (itstool) path: section/p
+#: C/image-viewer.c.page:91
 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."
+"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 ""
-"Utilisez la méthode <code>get_value_at</code> d'<code>Iter</code> qui n'a "
-"besoin que d'un argument : le numéro de colonne à récupérer, en commençant "
-"par 0. Comme notre commande <code>SELECT</code> ne retourne que deux "
-"colonnes, nous récupérons donc les colonnes 0 et 1."
+"Nous allons maintenant donner vie à la fenêtre vide. GTK organise "
+"l'interface utilisateur avec des <code>GtkContainer</code> qui peuvent "
+"contenir d'autres éléments graphiques et même d'autres conteneurs. Ici, nous "
+"allons utiliser le plus simple conteneur disponible, une boîte <code>GtkBox</"
+"code> :"
 
-#: C/record-collection.js.page:236(p)
+#. (itstool) path: section/code
+#: C/image-viewer.c.page:94
+#, no-wrap
 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>."
+"\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 ""
-"La méthode <code>get_value_at</code> retourne l'information sur les champs "
-"au format <code>GValue</code> de GLib. Pour convertir ce format en chaîne de "
-"caractères, utilisez simplement la fonction globale <code>value_stringify</"
-"code> de GDA. C'est ce que nous faisons ici puis nous enregistrons les "
-"résultats dans les variables <code>id_field</code> et <code>name_field</"
-"code>."
 
-#: C/record-collection.js.page:239(p)
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:129
 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."
+"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 ""
-"Ligne 11 : concaténation des deux chaînes pour former une seule ligne de "
-"texte en les séparant par <code>\"=&gt;\"</code> et enregistrement dans la "
-"variable <code>text</code>."
+"Les premières lignes créent les éléments graphiques que nous voulons "
+"utiliser : un bouton pour pouvoir ouvrir une image, l'élément graphique "
+"image lui-même et la boîte qui nous sert de conteneur. Nous utilisons des "
+"macros comme <code>GTK_BOX</code> pour contrôler et convertir de manière "
+"dynamique les types d'objet ce qui est nécessaire car le C n'est pas prévu "
+"nativement pour prendre en charge la programmation orientée objets."
 
-#: C/record-collection.js.page:240(p)
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:134
 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."
+"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 ""
-"Ligne 14 : à la fin de la boucle, tous les enregistrements sont formatés "
-"dans la variable <code>text</code>. À cette ligne, nous attribuons le "
-"contenu de cette variable au <code>TextView</code>."
+"Les appels à <code>gtk_box_pack_start</code> ajoutent les deux éléments "
+"graphiques à la boîte et définissent leur comportement. L'image va s'étendre "
+"pour occuper tout l'espace disponible alors que le bouton va prendre juste "
+"la taille nécessaire. Notez que nous ne définissons pas explicitement les "
+"dimensions des éléments graphiques. Avec GTK, ce n'est habituellement pas "
+"nécessaire car cela facilite grandement l'obtention d'une bonne disposition "
+"pour différentes tailles de fenêtre. La boîte est ensuite ajoutée dans la "
+"fenêtre."
 
-#: C/record-collection.js.page:241(p)
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:140
 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."
+"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 ""
-"Ligne 15 : affichage du nombre d'enregistrements dans la table avec la "
-"fonction <code>get_n_rows</code> de <code>DataModel</code>."
+"Il nous faut définir ce qui se passe quand l'utilisateur clique sur le "
+"bouton. GTK utilise le concept de <em>signaux</em>. Quand le bouton est "
+"cliqué, il envoie le signal <em>clicked</em> qu'il est possible de relier à "
+"une action. Cela a été réalisé avec la méthode <code>g_signal_connect</code> "
+"qui commande à GTK d'appeler la fonction <code>on_open_image</code> quand le "
+"bouton est cliqué et de transmettre l'image à cette fonction comme argument "
+"additionnel. Nous définirons la <em>fonction de rappel</em> à la section "
+"suivante."
 
-#: C/record-collection.js.page:246(title)
-msgid "Inserting"
-msgstr "Insertion"
+#. (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 ""
+"Le dernier signal <code>g_signal_connect()</code> assure que l'application "
+"quitte quand la fenêtre est fermée."
 
-#: C/record-collection.js.page:247(p)
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:148
 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."
+"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 ""
-"Bien, nous savons comment nous connecter à une base de données et comment "
-"sélectionner des lignes dans une table. Il est temps maintenant d'apprendre "
-"à faire une insertion à l'aide de la commande <code>INSERT</code> dans la "
-"table. Souvenez-vous, dans la méthode <code>setupWindow</code>, nous avions "
-"relié le signal <code>clicked</code> du bouton <gui>Insert</gui> à la "
-"méthode <code>_insertClicked</code>. Voyons la mise en place de cette "
-"méthode."
+"Pour finir, assurez-vous de remplacer l'appel <code>gtk_widget_show</code> "
+"de la fonction principale <code>main()</code> par "
+"<code>gtk_widget_show_all()</code> pour afficher la fenêtre et tous les "
+"éléments graphiques qu'elle contient."
 
-#: C/record-collection.js.page:268(p)
+#. (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 "Affichage de l'image"
+
+#. (itstool) path: section/p
+#: C/image-viewer.c.page:156
 msgid ""
-"We have learned how to use GDA's convenience functions "
-"<code>execute_select_command</code> and <code>execute_non_select_command</"
-"code> to quickly execute SQL commands on the database. GDA allows one to "
-"build a SQL statement indirectly, by using its <code>SqlBuilder</code> "
-"object. What are the benefits of this? GDA will generate the SQL statement "
-"dynamically, and it will be valid for the connection provider used (it will "
-"use the same SQL dialect the provider uses). Let's study the code:"
+"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 ""
-"Nous avons appris comment utiliser les fonctions bien pratiques "
-"<code>execute_select_command</code> et <code>execute_non_select_command</"
-"code> de GDA pour appliquer rapidement des commandes SQL sur la base de "
-"données. GDA nous permet aussi de construire une instruction SQL "
-"indirectement en utilisant son objet <code>SqlBuilder</code>. Quels en sont "
-"les avantages ? GDA crée l'instruction SQL dynamiquement et celle-ci est "
-"compatible avec le fournisseur de connexion utilisé (elle utilise le même "
-"langage SQL que celui du fournisseur). Voyons en détail le programme :"
+"Nous allons maintenant définir le gestionnaire de signal pour le signal "
+"<em>clicked</em> du bouton ci-dessus. Ajoutez ce code avant la méthode "
+"<code>create_window()</code>."
 
-#: C/record-collection.js.page:272(p)
+#. (itstool) path: section/code
+#: C/image-viewer.c.page:159
+#, no-wrap
 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."
+"\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 ""
-"Lignes 2‒3 : vérification du bon renseignement par l'utilisateur de tous les "
-"champs. Le code de la méthode privée <code>_validateFields</code> est "
-"vraiment simple et vous pouvez le consulter dans le programme source complet "
-"de l'exemple."
 
-#: C/record-collection.js.page:273(p)
+#. (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 ""
-"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."
+"This is a bit more complicated than anything we've attempted so far, so "
+"let's break it down:"
 msgstr ""
-"Ligne 5 : la façon la plus rapide pour faire l'insertion à l'aide de la "
-"commande <code>INSERT</code>. Celle-ci est mise en commentaire car nous "
-"voulons vous montrer comment utiliser l'objet <code>SqlBuilder</code> pour "
-"construire une instruction SQL qui soit indépendante de la base de données."
+"C'est un peu plus compliqué que tout ce que nous avons essayé jusqu'à "
+"présent, donc décortiquons cette partie étape par étape :"
 
-#: C/record-collection.js.page:274(p)
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:194
 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>."
+"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 ""
-" Ligne 7 : création de l'objet <code>SqlBuilder</code>. Nous devons "
-"transmettre le type d'instruction que nous voulons construire. Cela peut "
-"être <code>SELECT</code>, <code>UPDATE</code>, <code>INSERT</code> ou "
-"<code>DELETE</code>."
+"Le premier argument du signal est toujours l'élément graphique qui envoie le "
+"signal. Il y a parfois d'autres arguments attachés au signal, mais "
+"<em>clicked</em> n'en a aucun. Ensuite vient l'argument <code>user_data</"
+"code> qui est un pointeur vers les données transmises en connectant le "
+"signal. Ici, c'est notre objet <code>GtkImage</code>."
 
-#: C/record-collection.js.page:275(p)
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:200
 msgid ""
-"Line 8: Set the name of the table on which the built statement will operate "
-"(it will generate <code>INSERT INTO demo</code>)"
+"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 ""
-"Ligne 8 : détermination du nom de la table sur laquelle l'instruction "
-"construite va agir (le code <code>INSERT INTO demo</code> est généré)"
+"La prochaine ligne intéressante est celle où est créée la boîte de dialogue "
+"pour choisir le fichier avec <code>gtk_file_chooser_dialog_new</code>. La "
+"fonction prend comme argument le titre et la fenêtre parente de la boîte de "
+"dialogue et plusieurs options telles que le numéro des boutons et leurs "
+"valeurs correspondantes."
 
-#: C/record-collection.js.page:276(p)
+#. (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 ""
-"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."
+"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 ""
-"Lignes 9‒10 : détermination des champs et de leurs valeurs qui font partie "
-"de l'instruction. Le premier argument est le nom du champ (comme dans la "
-"table). Le second est la valeur pour ce champ."
+"Notez que nous utilisons les noms de bouton de la <em>collection</em> "
+"(stock) Gtk au lieu de saisir manuellement « Cancel » ou « Open ». "
+"L'avantage d'utiliser les noms de la collection est que les étiquettes des "
+"boutons seront déjà traduites dans la langue de l'utilisateur."
 
-#: C/record-collection.js.page:277(p)
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:207
 msgid ""
-"Line 11: Get the dynamically generated <code>Statement</code> object, which "
-"represents a SQL statement."
+"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 ""
-"Ligne 11 : fabrication de l'objet <code>Statement</code> généré "
-"dynamiquement et qui représente une instruction SQL."
+"Les deux lignes suivantes limitent la boîte de dialogue <gui>Open</gui> à "
+"l'affichage des seuls fichiers pouvant être ouverts par <code>GtkImage</"
+"code>. Un objet filtre est d'abord créé ; ensuite nous ajoutons tous les "
+"types de fichier pris en charge par <code>GdkPixbuf</code> (ce qui inclut la "
+"plupart des formats d'image comme PNG ou JPEG) au filtre. Enfin, nous "
+"appliquons ce filtre à la boîte de dialogue <gui>Open</gui>."
 
-#: C/record-collection.js.page:278(p)
-msgid "Line 12: Finally, execute the SQL statement (<code>INSERT</code>)."
+#. (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 ""
-"Ligne 12 : enfin, exécution de l'instruction SQL (<code>INSERT</code>)."
+"<code>gtk_dialog_run</code> affiche la boîte de dialogue <gui>Open</gui>. La "
+"boîte de dialogue attend que l'utilisateur choisisse une image ; quand c'est "
+"fait, <code>gtk_dialog_run</code> retourne la valeur "
+"<code>GTK_RESPONSE_ACCEPT</code> (il retourne la valeur "
+"<code>GTK_RESPONSE_CANCEL</code> si l'utilisateur clique sur <gui>Cancel</"
+"gui>). L'instruction <code>switch</code> teste cette réponse."
 
-#: C/record-collection.js.page:279(p)
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:212
 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."
+"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 ""
-"Ligne 14 : effacement des champs « id » et « name » à l'écran. Le code de la "
-"méthode privée <code>_clearFields</code> est vraiment simple et vous pouvez "
-"le consulter dans le programme source complet de l'exemple."
+"Supposons que l'utilisateur a cliqué sur le bouton <gui>Ouvrir</gui>, la "
+"ligne suivante attribue le nom du fichier image choisi par l'utilisateur aux "
+"propriétés <code>file</code> du GtkImage. Ensuite, GtkImage charge et "
+"affiche l'image choisie."
 
-#: C/record-collection.js.page:280(p)
+#. (itstool) path: item/p
+#: C/image-viewer.c.page:215
 msgid ""
-"Line 15: Refresh the view on the screen by doing another <code>SELECT</code>."
+"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 ""
-"Ligne 15 : mise à jour de l'affichage à l'écran en faisant un nouveau "
-"<code>SELECT</code>."
+"Dans la dernière ligne de cette méthode, nous détruisons la boîte de "
+"dialogue <gui>Open</gui> car on n'en a plus besoin. La destruction masque "
+"automatiquement la boîte de dialogue."
 
-#: C/record-collection.js.page:282(p)
+#. (itstool) path: section/p
+#: C/image-viewer.c.page:224 C/image-viewer.cpp.page:212
 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."
+"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 ""
-"Vous pouvez aussi faire usage de paramètres pour construire l'instruction. "
-"En utilisant les objets <code>SqlBuilder</code> et des paramètres, vous êtes "
-"moins exposé à des attaques du type injection SQL. Consultez la <link href="
-"\"http://library.gnome.org/devel/libgda/stable/\";>documentation GDA</link> "
-"pour plus d'informations sur les paramètres."
+"Si ce n'est pas encore fait, sélectionnez l'application <file>Debug/src/"
+"image-viewer</file> dans la boîte de dialogue qui s'affiche et cliquez sur "
+"<gui>Exécuter</gui>. Amusez-vous bien !"
 
-#: C/record-collection.js.page:286(title) C/image-viewer.py.page:220(title)
-#: C/image-viewer.js.page:306(title) C/guitar-tuner.py.page:224(title)
-msgid "Run the application"
-msgstr "Exécution de l'application"
+#. (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 ""
+"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
+"programme à ce <link href=\"image-viewer/image-viewer.c\">programme de "
+"référence</link>."
 
-#: C/record-collection.js.page:287(p)
+#. (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 ""
-"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!"
+"Have the user select a directory rather than a file, and provide controls to "
+"cycle through all of the images in a directory."
 msgstr ""
-"Tout le programme nécessaire doit maintenant être en place, donc essayez de "
-"l'exécuter. Vous disposez maintenant d'une base de donnée pour votre "
-"discothèque !"
+"Faire que l'utilisateur puisse sélectionner un dossier plutôt qu'un fichier "
+"et fournir les contrôles pour naviguer parmi toutes les images d'un dossier."
 
-#: C/record-collection.js.page:291(title) C/photo-wall.c.page:379(title)
-#: C/magic-mirror.vala.page:144(title) C/image-viewer.vala.page:282(title)
-#: C/image-viewer.py.page:225(title) C/image-viewer.js.page:311(title)
-#: C/image-viewer.cpp.page:210(title) C/image-viewer.c.page:222(title)
-#: C/guitar-tuner.vala.page:253(title) C/guitar-tuner.py.page:229(title)
-#: C/guitar-tuner.js.page:234(title) C/guitar-tuner.cpp.page:255(title)
-#: C/guitar-tuner.c.page:257(title)
-msgid "Reference Implementation"
-msgstr "Implémentation de référence"
+#. (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 ""
+"Appliquer au hasard des filtres et des effets à l'image quand elle est "
+"chargée et permettre à l'utilisateur d'enregistrer l'image modifiée."
 
-#: C/record-collection.js.page:292(p)
+#. (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 ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"record-collection/record-collection.js\">reference code</link>."
+"<link href=\"http://www.gegl.org/api.html\";>GEGL</link> provides powerful "
+"image manipulation capabilities."
 msgstr ""
-"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"record-collection/record-collection.js"
-"\">programme de référence</link>."
+"<link href=\"http://www.gegl.org/api.html\";>GEGL</link> fournit de "
+"puissantes possibilités de manipulation d'image."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/radiobutton.vala.page:24(None) C/radiobutton.py.page:25(None)
-#: C/radiobutton.c.page:24(None)
-msgid "@@image: 'media/radiobutton.png'; md5=d115460280d8e41493dd98054b5822a5"
-msgstr "@@image: 'media/radiobutton.png'; md5=d115460280d8e41493dd98054b5822a5"
+#. (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 ""
+"Permettre à l'utilisateur de charger des images depuis des sites de partage, "
+"des scanners ou d'autres sources plus sophistiquées."
 
-#: C/radiobutton.vala.page:7(title)
-#, fuzzy
-#| msgid "RadioButton"
-msgid "RadioButton (Vala)"
-msgstr "RadioButton"
+#. (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 tranfers and the like, and <link href=\"http://";
+"library.gnome.org/devel/gnome-scan/unstable/\">GNOME Scan</link> to handle "
+"scanning."
+msgstr ""
+"Vous pouvez utiliser <link href=\"http://library.gnome.org/devel/gio/";
+"unstable/\">GIO</link> pour gérer des transferts de fichiers en ligne et des "
+"choses du même type et <link href=\"http://library.gnome.org/devel/gnome-";
+"scan/unstable/\">GNOME Scan</link> pour gérer les documents scannés."
 
-#: C/radiobutton.vala.page:20(desc)
-msgid "A choice from multiple CheckButtons."
-msgstr "Un choix entre plusieurs CheckButtons."
+#. (itstool) path: info/desc
+#: C/image-viewer.cpp.page:9
+msgid "A little bit more than a simple \"Hello world\" GTKmm application."
+msgstr "Un peu plus qu'une simple application GTKmm « Hello world »."
 
-#: C/radiobutton.vala.page:23(title) C/radiobutton.py.page:24(title)
-#: C/radiobutton.js.page:20(title) C/radiobutton.c.page:22(title)
-msgid "RadioButton"
-msgstr "RadioButton"
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:32
+msgid "Some basic concepts of C++/GObject programming"
+msgstr "quelques concepts de base de la programmation en C++/GObject,"
 
-#: C/radiobutton.vala.page:25(p)
-msgid "These RadioButtons report their activity in the terminal."
-msgstr "Ces boutons radio signalent leur activité dans le terminal."
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:33
+msgid "How to write a Gtk application in C++"
+msgstr "comment écrire une application Gtk en C++."
 
-#: C/radiobutton.py.page:7(title)
-#, fuzzy
-#| msgid "RadioButton"
-msgid "RadioButton (Python)"
-msgstr "RadioButton"
+#. (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 ""
+"Sélectionnez <gui>GTKmm (Simple)</gui> dans l'onglet <gui>C++</gui>, cliquez "
+"sur <gui>Continuer</gui> et saisissez vos informations sur les quelques "
+"pages suivantes. Mettez <file>image-viewer</file> comme nom de projet et de "
+"répertoire."
 
-#: C/radiobutton.py.page:21(desc)
-msgid "Mutually exclusive buttons."
-msgstr "Boutons exclusifs."
+#. (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 ""
+"Assurez-vous d'avoir désactivé <gui>Utiliser GtkBuilder pour l'interface "
+"utilisateur</gui> car nous allons créer l'interface utilisateur manuellement "
+"dans cet exemple. Consultez le tutoriel <link xref=\"guitar-tuner.cpp"
+"\">Guitar-Tuner</link> pour un exemple d'utilisation du constructeur "
+"d'interfaces."
 
-#: C/radiobutton.py.page:26(p)
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:55
 msgid ""
-"Three RadioButtons. You can see in the terminal if they are turned off or on."
+"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 ""
-"Trois boutons radio. Vous pouvez voir dans le terminal s'ils sont activés ou "
-"non."
+"Cliquez sur <gui>Appliquer</gui> et le projet est créé. Ouvrez <file>src/"
+"main.cc</file> depuis l'onglet <gui>Projet</gui> ou l'onglet <gui>Fichiers</"
+"gui>. Vous devez voir apparaître du code commençant par les lignes :"
 
-#: C/radiobutton.py.page:36(title)
-msgid "Useful methods for a RadioButton widget"
-msgstr "Méthodes utiles pour un élément graphique RadioButton"
+#. (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 ""
 
-#: C/radiobutton.py.page:39(p)
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:70
 msgid ""
-"Instead of <code>button1 = Gtk.RadioButton(label=\"Button 1\")</code> we "
-"could create the button and label it with"
+"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 ""
-"Au lieu de <code>button1 = Gtk.RadioButton(label=« bouton 1 »)</code>, nous "
-"pourrions créer le bouton et l'étiquette qui va avec"
+"Les trois lignes <code>#include</code> du haut incorporent les bibliothèques "
+"<code>config</code> (définitions utiles pour la construction autoconf), "
+"<code>gtkmm</code> (interface utilisateur) et <code>iostream</code> (C++-"
+"STL). Les fonctions de ces bibliothèques seront utilisées dans le reste du "
+"programme."
+
+#. (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 ""
+"La fonction <code>main</code> crée une nouvelle fenêtre (vide) et configure "
+"le titre de la fenêtre."
+
+#. (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 ""
+"L'appel <code>kit::run()</code> démarre la boucle principale de GTKmm qui "
+"exécute l'interface utilisateur et commence à écouter les événements (comme "
+"des clics ou des appuis sur des touches). Comme la fenêtre est fournie comme "
+"argument de la fonction, l'application quitte automatiquement quand la "
+"fenêtre est fermée."
+
+#. (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 ""
+"Nous allons maintenant donner vie à la fenêtre vide. La disposition de "
+"l'interface utilisateur est faite par GTKmm avec les conteneurs <code>Gtk::"
+"Container</code> qui peuvent contenir d'autres éléments graphiques et même "
+"d'autres conteneurs. Ici, on utilise le plus simple des conteneurs "
+"disponibles, une boîte <code>Gtk::Box</code> :"
 
-#: C/radiobutton.py.page:40(code)
+#. (itstool) path: section/code
+#: C/image-viewer.cpp.page:91
 #, no-wrap
 msgid ""
 "\n"
-"button1 = Gtk.RadioButton()\n"
-"button1.set_label(\"Button 1\")."
+"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 ""
+"Les premières lignes créent les éléments graphiques dont nous avons besoin : "
+"un bouton pour ouvrir une image, l'élément graphique image lui-même et la "
+"boîte que nous utilisons comme conteneur."
+
+#. (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 ""
+"Les appels à <code>pack_start</code> ajoutent les deux éléments graphiques à "
+"la boîte et définissent leur comportement. L'image va s'étendre pour occuper "
+"tout l'espace disponible alors que le bouton va prendre juste la taille "
+"nécessaire. Notez que nous ne définissons pas explicitement les dimensions "
+"des éléments graphiques. Avec GTKmm, ce n'est habituellement pas nécessaire "
+"car cela facilite grandement l'obtention d'une bonne disposition pour "
+"différentes tailles de fenêtre. La boîte est ensuite ajoutée dans la fenêtre."
+
+#. (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 ""
+"Il nous faut définir ce qui se passe quand l'utilisateur clique sur le "
+"bouton. GTKmm utilise le concept de <em>signaux</em>. Quand le bouton est "
+"cliqué, il envoie le signal <em>clicked</em> qu'il est possible de relier à "
+"une action. Cela a été réalisé avec la méthode <code>signal_clicked()."
+"connect</code> qui commande à GTKmm d'appeler la fonction "
+"<code>on_open_image</code> quand le bouton est cliqué. Nous définirons la "
+"<em>fonction de rappel</em> à la section suivante."
+
+#. (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 ""
+"La dernière étape consiste à afficher tous les éléments graphiques avec la "
+"commande <code>show_all_children()</code>. Ceci équivaut à appliquer la "
+"méthode <code>show()</code> séparément à chaque élément graphique enfant."
+
+#. (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 ""
+"Nous allons maintenant définir le gestionnaire de signal pour le signal "
+"<em>clicked</em> du bouton ci-dessus. Ajoutez ce code avant la méthode "
+"<code>main</code>."
+
+#. (itstool) path: section/code
+#: C/image-viewer.cpp.page:146
+#, no-wrap
+msgid ""
 "\n"
-"button1 = Gtk.RadioButton()\n"
-"button1.set_label(« bouton 1 »)."
+"Gtk::Image* image = 0;\n"
+"\n"
+"static void\n"
+"on_open_image ()\n"
+"{\n"
+"\tGtk::FileChooserDialog dialog(\"Open image\",\n"
+"\t                              Gtk::FILE_CHOOSER_ACTION_OPEN);\n"
+"\tdialog.add_button (Gtk::Stock::OPEN,\n"
+"\t                   Gtk::RESPONSE_ACCEPT);\n"
+"\tdialog.add_button (Gtk::Stock::CANCEL,\n"
+"\t                   Gtk::RESPONSE_CANCEL);\n"
+"\n"
+"\tGlib::RefPtr&lt;Gtk::FileFilter&gt; filter =\n"
+"\t\tGtk::FileFilter::create();\n"
+"\tfilter-&gt;add_pixbuf_formats();\n"
+"\tfilter-&gt;set_name(\"Images\");\n"
+"\tdialog.add_filter (filter);\n"
+"\n"
+"\tconst int response = dialog.run();\n"
+"\tdialog.hide();\n"
+"\n"
+"\tswitch (response)\n"
+"\t{\n"
+"\t\tcase Gtk::RESPONSE_ACCEPT:\n"
+"\t\t\timage-&gt;set(dialog.get_filename());\n"
+"\t\t\tbreak;\n"
+"\t\tdefault:\n"
+"\t\t\tbreak;\n"
+"\t}\n"
+"}\n"
+msgstr ""
 
-#: C/radiobutton.py.page:43(p)
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:181
 msgid ""
-"For a general discussion of this, see <link xref=\"properties.py\">here</"
-"link>."
+"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 ""
-"Pour de plus amples informations sur cela, voyez <link xref=\"properties.py"
-"\">ici</link>."
+"La boîte de dialogue pour choisir le fichier en utilisant le constructeur "
+"<code>Gtk::FileChooserDialog</code>. Celui-ci prend comme argument le titre "
+"et le type de la boîte de dialogue. Ici, c'est un dialogue <em>OPEN</em> "
+"(ouvrir)."
 
-#: C/radiobutton.py.page:44(p)
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:185
 msgid ""
-"Yet another way to create a new RadioButton with a label is <code>button1 = "
-"Gtk.RadioButton.new_with_label(None, \"Button 1\")</code> (the first "
-"arguement is the group of the radiobuttons, which we can get with "
-"<code>get_group()</code>, the second argument is the label)."
+"The next two lines add an <em>Open</em> and a <em>Close</em> button to the "
+"dialog."
 msgstr ""
-"Il y a encore une autre manière de créer un nouveau bouton de radio : "
-"<code>button1 = Gtk.RadioButton.new_with_label(None, « bouton 1 »)</code> où "
-"le premier argument est le groupe de boutons de radio que nous pouvons "
-"obtenir avec <code>get_group()</code> et le second argument est l'étiquette."
+"Les deux lignes suivantes ajoutent les boutons <em>Open</em> et <em>Close</"
+"em> à la boîte de dialogue."
 
-#: C/radiobutton.py.page:53(link)
-msgid "GtkRadioButton"
-msgstr "GtkRadioButton"
+#. (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 ""
+"Le second argument de la méthode <code>add_button()</code> est une valeur "
+"identifiant le bouton cliqué. Nous utilisons ici aussi les valeurs de GTKmm "
+"fournies par défaut."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/radiobutton.js.page:21(None)
+#. (itstool) path: item/p
+#: C/image-viewer.cpp.page:192
 msgid ""
-"@@image: 'media/radiobuttontravel.png'; md5=0c5f01ee160bb42716ccf5dccbd080c0"
+"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 ""
-"@@image: 'media/radiobuttontravel.png'; md5=0c5f01ee160bb42716ccf5dccbd080c0"
+"Les deux lignes suivantes limitent la boîte de dialogue <gui>Open</gui> à "
+"l'affichage des seuls fichiers pouvant être ouverts par <code>Gtk::Image</"
+"code>. Un objet filtre est d'abord créé ; ensuite nous ajoutons tous les "
+"types de fichier pris en charge par <code>Gdk::Pixbuf</code> (ce qui inclut "
+"la plupart des formats d'image comme PNG ou JPEG) au filtre. Enfin, nous "
+"appliquons ce filtre à la boîte de dialogue <gui>Open</gui>."
 
-#: C/radiobutton.js.page:7(title)
+#. (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 ""
+"<code>Glib::RefPtr</code> utilisé ici, est un pointeur intelligent qui "
+"surveille que le filtre soit bien détruit quand il n'a plus de référence "
+"vers lui."
+
+#. (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 ""
+"<code>dialog.run</code> affiche la boîte de dialogue <gui>Open</gui>. La "
+"boîte de dialogue attend que l'utilisateur choisisse une image ; quand c'est "
+"fait, <code>dialog.run</code> retourne la valeur <code>Gtk::RESPONSE_ACCEPT</"
+"code> (il retourne la valeur <code>Gtk::RESPONSE_CANCEL</code> si "
+"l'utilisateur clique sur <gui>Cancel</gui>). L'instruction <code>switch</"
+"code> teste cette réponse."
+
+#. (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 ""
+"Nous masquons la boîte de dialogue <gui>Open</gui> car on n'en a plus "
+"besoin. Elle aurait de toute façon été masquée plus tard, car ce n'est "
+"qu'une variable locale qui est détruite (et donc disparaît) lorsqu'elle sort "
+"de la portée."
+
+#. (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 ""
+"Supposons que l'utilisateur a cliqué sur le bouton <gui>Ouvrir</gui>, la "
+"ligne suivante charge le fichier dans le<code>Gtk::Image</code> afin qu'elle "
+"s'affiche."
+
+#. (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 ""
+"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
+"programme à ce <link href=\"image-viewer/image-viewer.cc\">programme de "
+"référence</link>."
+
+#. (itstool) path: info/title
+#: C/image-viewer.js.page:8
 #, fuzzy
-#| msgid "RadioButton"
-msgid "RadioButton (JavaScript)"
-msgstr "RadioButton"
+#| msgid "Classes in JavaScript"
+msgctxt "text"
+msgid "Image viewer (JavaScript)"
+msgstr "Les classes en JavaScript"
 
-#: C/radiobutton.js.page:17(desc)
-msgid "Only one can be selected at a time"
-msgstr "Un seul peut être sélectionné à la fois"
+#. (itstool) path: info/desc
+#: C/image-viewer.js.page:11
+#, fuzzy
+#| msgid ""
+#| "A little bit more than a simple \"Hello world\" application - write an "
+#| "image viewer in GTK. Includes an introduction to the JavaScript language."
+msgid ""
+"A little bit more than a simple \"Hello world\" application - write an image "
+"viewer in GTK+. Includes an introduction to the JavaScript language."
+msgstr ""
+"Un peu plus qu'une simple application « Hello world » - programmer un "
+"visionneur d'images avec GTK. Inclut une introduction au langage JavaScript."
 
-#: C/radiobutton.js.page:22(p)
+#. (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 ""
-"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."
+"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 ""
-"Le terme « bouton de radio » provient de l'analogie avec les anciennes "
-"radios de nos vieux véhicules. Ils avaient des boutons poussoirs programmés "
-"et un seul pouvait resté enfoncé à la fois, transmettant une seule station. "
-"Si vous en enfonciez un autre, cela faisait sortir automatiquement le "
-"précédent. Ici, nos RadioButtons fonctionnent exactement de la même façon."
+"Dans ce tutoriel, nous allons écrire une application GTK très simple qui "
+"charge et affiche un fichier image. Vous allez apprendre comment :"
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:34
+msgid "Write a basic GTK user interface in JavaScript"
+msgstr "écrire une interface utilisateur GTK de base en JavaScript,"
+
+#. (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 ""
+"travailler avec des événements en connectant des signaux à des gestionnaires "
+"de signaux,"
+
+#. (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 "mettre en forme des interfaces utilisateur GTK avec des conteneurs,"
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:37 C/image-viewer.py.page:37
+msgid "Load and display image files"
+msgstr "charger et afficher des fichiers image."
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:42
+msgid "An installed copy of the <em>gjs</em> interpreter"
+msgstr "une copie installée de l'interpréteur <em>gjs</em>,"
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:43
+msgid "Basic knowledge of any object-orientated programming language"
+msgstr "des connaissances de base d'un langage de programmation objet."
 
-#: C/radiobutton.js.page:23(p)
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:57
 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."
+"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 ""
-"Chaque bouton de radio nécessite une étiquette texte et un groupe. Un seul "
-"bouton d'un même groupe peut être sélectionné à la fois. Ne nommez pas "
-"chaque groupe ; définissez seulement les nouveaux boutons à l'intérieur d'un "
-"groupe qui existe déjà. Si vous créez un bouton en dehors d'un groupe "
-"existant, il générera automatiquement un nouveau groupe pour s'y loger."
+"Sélectionnez <gui>JavaScript générique</gui> dans l'onglet <gui>JS</gui>, "
+"cliquez sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
+"suivantes. Mettez <file>visionneur_image</file> comme nom de projet et de "
+"répertoire."
 
-#: C/radiobutton.js.page:82(title)
-msgid "Creating the radiobuttons"
-msgstr "Création des boutons de radio"
+#. (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 ""
+"Cliquez sur <gui>Appliquer</gui> et le projet est créé. Ouvrez <file>src/"
+"main.js</file> depuis l'onglet <gui>Projet</gui> ou l'onglet <gui>Fichiers</"
+"gui>. Il contient un exemple de programme très basique."
 
-#: C/radiobutton.js.page:88(p)
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:67
+msgid "JavaScript basics: Hello World"
+msgstr "Les bases JavaScript : Hello World"
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:68
 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."
+"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 ""
-"Utilisez une étiquette <link xref=\"label.js\">Gtk.Label</link> pour définir "
-"chaque groupe de boutons de radio séparément. Vous pouvez mettre les boutons "
-"de radio de tous les différents groupes où vous voulez, donc si vous voulez "
-"que l'on sache lesquels vont ensemble, vous devez organiser les choses en "
-"fonction."
+"Avant de commencer à programmer le visionneur d'images, regardons de plus "
+"près la façon dont JavaScript est utilisé dans GNOME. Bien sûr, votre tout "
+"premier contact avec n'importe quel langage de programmation devrait être le "
+"« Hello World » du fichier <file>main.js</file> :"
+
+# Bruno : with no space between print and (
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:69
+#, no-wrap
+msgid "print (\"Hello world!\");"
+msgstr "print(\"Hello world!\");"
 
-#: C/radiobutton.js.page:101(p)
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:70
 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."
+"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 ""
-"Voici trois méthodes différentes pour créer des boutons de radio. La "
-"première est la méthode habituelle, où nous créons un nouveau Gtk."
-"RadioButton et lui assignons ses propriétés en même temps. La seconde et la "
-"troisième utilisent des fonctions qui prennent en charge automatiquement "
-"quelques unes des propriétés ; new_from_widget ne prend qu'un argument : le "
-"nouveau bouton de radio que vous voulez mettre dans le même groupe, alors "
-"que new_with_label_from_widget prend ce même argument et l'étiquette qui va "
-"avec en même temps."
+"Ceci doit vous sembler très normal si vous êtes familier avec la plupart des "
+"langages de programmation. La fonction <code>print</code> est appelée avec "
+"l'argument <code>\"Hello world!\"</code> qui est imprimé à l'écran. Notez "
+"que chaque ligne du programme se termine par un point-virgule."
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:74
+msgid "Classes in JavaScript"
+msgstr "Les classes en JavaScript"
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:75
+msgid "This is the standard way to define a class in JavaScript:"
+msgstr "Voici la méthode standard pour définir une classe en JavaScript :"
 
-#: C/radiobutton.js.page:102(p)
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:76
+#, no-wrap
 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."
+"\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 ""
-"Le premier bouton de radio d'un groupe est celui sélectionné par défaut. "
-"Décommentez la dernière ligne de cet exemple de code pour apprendre comment "
-"en définir un autre pour qu'il devienne celui sélectionné par défaut."
 
-#: C/radiobutton.js.page:113(p)
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:98
 msgid ""
-"Here we create the label for the second group of buttons, and then create "
-"them all the same way."
+"This defines a class called <code>MyClass</code>. Let's go through each part "
+"of the class definition:"
 msgstr ""
-"Ici, nous créons l'étiquette du second groupe de boutons et ensuite nous les "
-"générons tous de la même manière."
+"Ceci définit une classe appelée <code>MyClass</code>. Passons en revue "
+"chaque partie de la définition d'une classe :"
 
-#: C/radiobutton.js.page:129(p)
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:101
 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."
+"<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 ""
-"Ce code crée un bouton <link xref=\"button.js\">Gtk.Button</link> et le lie "
-"à une fonction qui affiche un message stupide si on clique sur OK, selon les "
-"boutons qui sont sélectionnés."
+"<code>function MyClass</code> est le constructeur de la classe — son nom "
+"doit correspondre au nom de la classe. Vous avez accès à n'importe quel "
+"membre de la classe avec l'objet <code>this</code> ; ici, le générateur "
+"appelle la méthode <code>_init</code> de la classe."
 
-#: C/radiobutton.js.page:130(p)
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:104
 msgid ""
-"To make sure the button's \"OK\" label shows up properly in every language "
-"that GNOME is translated into, remember to use one of Gtk's <link href="
-"\"http://developer.gnome.org/gtk/2.24/gtk-Stock-Items.html\";>stock button "
-"types.</link>"
+"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 ""
-"Assurez-vous d'utiliser un des <link href=\"http://developer.gnome.org/";
-"gtk/2.24/gtk-Stock-Items.html\">types de bouton de la collection Gtk</link> "
-"pour que votre bouton « OK » s'affiche dans toutes les langues traduites de "
-"GNOME."
+"Le bloc <code>MyClass.prototype</code> est l'endroit où vous définissez la "
+"<em>structure</em> de la classe. Chaque classe est constituée de méthodes "
+"(les fonctions) et de champs (les variables) ; il y a trois méthodes et deux "
+"champs dans cet exemple."
 
-#: C/radiobutton.js.page:166(p)
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:107
 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."
+"The first method defined here is called <code>_init</code>, and we specify "
+"that it is a function with no arguments:"
 msgstr ""
-"Organisons chaque groupe de boutons de radio dans une grille <link xref="
-"\"grid.js\">Gtk.Grid</link> séparée. Comme cela, nous pouvons modifier "
-"l'agencement plus aisément plus tard. Mettons une marge en haut de la "
-"deuxième grille pour séparer visuellemnt les deux ensembles de choix."
+"La première méthode définie ici est appelée <code>_init</code> et nous "
+"spécifions que c'est une fonction sans argument :"
 
-#: C/radiobutton.js.page:167(p)
+#. (itstool) path: item/code
+#: C/image-viewer.js.page:108
+#, no-wrap
+msgid "_init: function ()"
+msgstr "_init: function ()"
+
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:109
 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."
+"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 ""
-"Après les avoir organisé, nous les mettons dans une troisième grille "
-"principale, avec le bouton OK. Puis, nous lions le tout à la fenêtre."
+"Nous écrivons la fonction à l'intérieur d'accolades. Deux champs sont "
+"définis ici, <code>propertyA</code> et <code>propertyB</code>. Le premier "
+"est défini comme une chaîne et le second comme un nombre entier (10). La "
+"fonction ne retourne aucune valeur."
 
-#: C/radiobutton.js.page:175(p)
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:112
 msgid ""
-"Finally, we tell the window and everything inside it to become visible when "
-"the application is run."
+"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 ""
-"Enfin, nous indiquons à la fenêtre de s'afficher avec son contenu au "
-"démarrage de l'application."
+"La méthode suivante est appelée <code>aMethod</code> et possède deux "
+"arguments qu'elle affiche quand vous l'appelez. La dernière méthode est "
+"<code>dumpProperties</code> et elle affiche les champs <code>propertyA</"
+"code> et <code>propertyB</code>."
 
-#: C/radiobutton.js.page:180(title) C/combobox.js.page:169(title)
-#: C/comboboxtext.js.page:112(title)
-msgid "Function which handles your selection"
-msgstr "Fonction prenant en charge votre sélection"
+#. (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 ""
+"Notez comment la définition de la classe (prototype) est structurée ; chaque "
+"définition de fonction est séparée par une virgule."
 
-#: C/radiobutton.js.page:200(p)
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:119
+msgid "Now that MyClass has been defined, we can play with it:"
+msgstr "Maintenant que MyClass a été défini, nous pouvons jouer avec :"
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:120
+#, no-wrap
 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."
+"\n"
+"var o = new MyClass ();\n"
+"o.aMethod (\"Hello\", \"world\");\n"
+"o.propertyA = \"Just changed its value!\";\n"
+"o.dumpProperties ();"
 msgstr ""
-"Quand vous cliquez sur OK, une boîte de dialogue <link xref=\"messagedialog."
-"js\">Gtk.MessageDialog</link> s'affiche. Cette fonction crée et affiche le "
-"message surgissant et ensuite connecte son bouton OK à une fonction qui le "
-"ferme. Le contenu du message surgissant dépend de la fonction _messageText"
-"(), qui renvoie une valeur différente selon les options que vous avez "
-"choisies."
 
-#: C/radiobutton.js.page:246(p)
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:125
 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."
+"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 ""
-"La méthode get_active() permet de savoir quel bouton de radio a été pressé. "
-"Cette fonction renvoie un message stupide différent selon le bouton qui a "
-"été pressé. Sa valeur de retour est utilisée comme propriété du texte de la "
-"boîte de dialogue de message."
+"Ce code crée une nouvelle version de la classe appelée <code>o</code>, "
+"appelle <code>aMethod</code>, modifie <code>propertyA</code> en une chaîne "
+"différente et ensuite appelle <code>dumpProperties</code> (qui affiche les "
+"champs)."
 
-#: C/radiobutton.js.page:257(p)
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:126
 msgid ""
-"This function is called when the MessageDialog's OK button is pressed. It "
-"simply makes the popup go away."
+"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 ""
-"Cette fonction est appelée quand le bouton OK du texte de la boîte de "
-"dialogue de message est pressé. Elle fait seulement disparaître le message "
-"surgissant."
+"Enregistrez le code dans le fichier <file>main.js</file> et ensuite lancez-"
+"le avec <guiseq><gui>Exécuter</gui><gui>Exécuter</gui></guiseq> à partir du "
+"menu ou de la barre d'outils."
 
-#: C/radiobutton.c.page:7(title)
-#, fuzzy
-#| msgid "RadioButton"
-msgid "RadioButton (C)"
-msgstr "RadioButton"
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:131 C/image-viewer.py.page:70
+msgid "A first Gtk application"
+msgstr "Une première application Gtk"
 
-#: C/radiobutton.c.page:19(desc)
-msgid "A choice from multiple checkbuttons"
-msgstr "Un choix entre plusieurs boutons de vérification."
+#. (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 ""
+"Voyons à quoi ressemble une application Gtk très basique écrite en "
+"JavaScript :"
 
-#: C/radiobutton.c.page:25(p)
-msgid "These radiobuttons report their activity in the terminal."
-msgstr "Ces boutons de radio signalent leur activité dans le terminal."
+#. (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 ""
 
-#: C/py.page:6(title)
-msgid "Python"
-msgstr "Python"
+#. (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 "Regardons ce qui se passe :"
 
-#: C/py.page:15(title)
-msgid "Tutorials, code samples and platform demos in Python"
-msgstr "Tutoriels, exemples de code et plateformes de démonstration en Python"
+#. (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 ""
+"La première ligne importe l'espace de nom Gtk (c.-à-d. cela inclut la "
+"bibliothèque Gtk). Les bibliothèques sont fournies par « GObject "
+"Introspection (gi) » qui fournit les liens de langage à beaucoup de "
+"bibliothèques GNOME."
 
-#: C/properties.py.page:8(title)
-#, fuzzy
-#| msgid "Properties"
-msgid "Properties (Python)"
-msgstr "Propriétés"
+#. (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 ""
+"<code>Gtk.init</code> initialise la bibliothèque Gtk ; cette instruction est "
+"obligatoire pour tous les programmes Gtk."
 
-#: C/properties.py.page:12(desc)
-msgid "An explanation of properties, getters and setters."
+#. (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 ""
-"Une explication des propriétés, des mécanismes d'obtention et de définition."
+"La ligne suivante crée la fenêtre principale en créant un nouvel objet "
+"<code>Gtk.Window</code>. Vous pouvez transmettre plusieurs propriétés au "
+"constructeur de la fenêtre avec la syntaxe <code>{propriété: valeur, "
+"propriété: valeur, ...}</code>. Dans ce cas, le titre de la fenêtre est "
+"défini."
 
-#: C/properties.py.page:25(title)
-msgid "Properties"
-msgstr "Propriétés"
+#. (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 ""
+"La ligne suivante affiche explicitement la fenêtre. Dans Gtk, chaque élément "
+"graphique est masqué par défaut."
 
-#: C/properties.py.page:32(p)
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:153
 msgid ""
-"<em>Properties</em> describe the configuration and state of widgets, and "
-"each widget has its own particular set of properties. For example, a widget "
-"such as a button or a label has the property \"label\" which contains the "
-"text of the widget. You can specify the name and value of any number of "
-"properties as keyword arguments when creating an instance of a widget: for "
-"example, to create a label aligned to the right with the text “Hello World” "
-"and an angle of 25 degrees, you can use:"
+"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 ""
-"Les <em>Propriétés</em> décrivent la configuration et l'état des éléments "
-"graphiques, chacun d'eux ayant son propre paquet de propriétés spécifiques. "
-"Par exemple, un bouton ou une étiquette possède la propriété « label » qui "
-"contient le texte de l'élément graphique. Lorsque vous créez un exemple "
-"d'élément graphique, vous pouvez spécifier le nom et la valeur de n'importe "
-"quel nombre de propriétés en tant qu'arguments. Par exemple, pour créer une "
-"étiquette alignée à droite, contenant le texte « Hello World » et ayant un "
-"angle de 25 degrés, utilisez le code suivant :"
+"Enfin, <code>Gtk.main</code> lance la boucle principale — en d'autres "
+"termes, il exécute le programme. La boucle principale écoute les événements "
+"(signaux) en provenance de l'interface utilisateur et appelle un "
+"gestionnaire de signal qui fera quelque chose d'utile. Nous en apprendrons "
+"davantage sur les signaux bientôt."
+
+#. (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 ""
+"Enregistrez le code dans le fichier <file>main.js</file> et exécutez-le. "
+"Notez que l'application ne quitte pas quand vous fermez la fenêtre. C'est "
+"parce que nous n'avons pas encore défini de gestionnaire de signal qui prend "
+"en charge le signal <code>destroy</code> de fermeture. Nous le ferons "
+"prochainement, mais en attendant, pressez seulement <keyseq><key>Ctrl</"
+"key><key>C</key></keyseq> dans la fenêtre du terminal pour quitter le "
+"programme."
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:161
+msgid "Adding classes"
+msgstr "Ajout de classes"
+
+#. (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 ""
+"La bonne méthode de programmation avec Gtk est l'utilisation de classes. "
+"Récrivons le bout de programme que l'on vient d'écrire en utilisant des "
+"classes :"
 
-#: C/properties.py.page:33(code)
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:163
 #, no-wrap
 msgid ""
 "\n"
-"label = Gtk.Label(label=\"Hello World\", angle=25, halign=Gtk.Align.END)"
+"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 ""
+"Notez que le programme reste le même ; on a juste déplacé le code de "
+"création de la fenêtre dans notre propre classe <code>ImageViewer</code>. Le "
+"constructeur de la classe appelle la méthode <code>_init</code> qui crée et "
+"affiche la fenêtre. Ensuite, on crée une instance de la classe avant de "
+"lancer la boucle principale (<code>Gtk.main</code>)."
+
+#. (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 ""
+"Ce programme est modulaire et peut être divisé facilement en plusieurs "
+"fichiers ce qui le rend plus propre et plus facile à lire."
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:186 C/image-viewer.py.page:119
+msgid "Signals"
+msgstr "Les signaux"
+
+#. (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 ""
+"Les signaux sont un des concepts clé de la programmation Gtk. Chaque fois "
+"que quelque chose arrive à un objet, il émet un signal ; par exemple, quand "
+"un bouton est cliqué, il renvoie le signal <code>clicked</code>. Si vous "
+"voulez que votre programme réagisse en conséquence, il faut connecter une "
+"fonction (un « gestionnaire de signal ») à ce signal. Voici un exemple :"
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:188
+#, no-wrap
+msgid ""
 "\n"
-"label = Gtk.Label(label=\"Hello World\", angle=25, halign=Gtk.Align.END)"
+"function button_clicked () {\n"
+"  print (\"you clicked me!\");\n"
+"}\n"
+"var b = new Gtk.Button ({label:\"Click me\"});\n"
+"b.connect (\"clicked\", button_clicked);"
+msgstr ""
 
-#: C/properties.py.page:36(p)
-msgid "This is equivalent to:"
-msgstr "Ce qui est équivalent à :"
+#. (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 ""
+"Les deux dernières lignes créent un bouton <code>Gtk.Button</code> appelé "
+"<code>b</code> et connectent son signal <code>clicked</code> à la fonction "
+"<code>button_clicked</code> définie au-dessus. Chaque fois que ce bouton est "
+"cliqué, le code de la fonction <code>button_clicked</code> est exécuté. Il "
+"affiche juste un message dans cet exemple."
 
-#: C/properties.py.page:37(code)
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:195
+msgid "The syntax for connecting any signal to a function is:"
+msgstr "Voici la syntaxe pour connecter n'importe quel signal à une fonction :"
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:196
 #, 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)"
+"object.connect (&lt;signal_name&gt;, &lt;function_to_be_called&gt;);"
+msgstr ""
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:198
+#, fuzzy
+#| msgid ""
+#| "You can find signal definitions for any object in the <link href=\"http://";
+#| "library.gnome.org/devel/gtk/stable/ch01.html\">GTK class reference</link>."
+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 ""
+"Vous pouvez consulter les définitions de signal pour n'importe quel objet "
+"dans la <link href=\"http://library.gnome.org/devel/gtk/stable/ch01.html";
+"\">Référence des classes GTK</link>."
+
+#. (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 ""
+"Vous pouvez simplifier le code avec une définition de fonction en ligne :"
+
+#. (itstool) path: note/code
+#: C/image-viewer.js.page:202
+#, 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)"
+"b.connect (\"clicked\", function () { print (\"you clicked me!\"); });"
+msgstr ""
 
-#: C/properties.py.page:43(p)
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:209
+msgid "Closing the window"
+msgstr "Fermeture de la fenêtre"
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:210
 msgid ""
-"Once you have created such a label, you can get the text with the getter "
-"<code>label.get_label()</code>."
+"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 ""
-"Une fois cette étiquette créée, utilisez la méthode d'obtention <code>label."
-"get_label()</code> pour récupérer le texte."
+"Quand vous fermez une fenêtre Gtk, elle n'est pas vraiment fermée, mais "
+"masquée. Cela permet de la garder accessible (utile si on veut poser la "
+"question à l'utilisateur s'il veut oui ou non fermer la fenêtre, par "
+"exemple)."
 
-#: C/properties.py.page:45(p)
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:211
 msgid ""
-"Instead of using getters and setters you can also get and set the properties "
-"with <code>get_property(\"prop-name\")</code> and <code>set_property(\"prop-"
-"name\", value)</code>, respectively."
+"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 ""
-"Au lieu d'utiliser les mécanismes d'obtention et de définition, vous pouvez "
-"aussi obtenir et définir respectivement les propriétés avec les fonctions "
-"<code>get_property(\"prop-name\")</code> et <code>set_property(\"prop-name"
-"\", value)</code>."
+"Dans notre cas, on veut réellement fermer la fenêtre. La façon la plus "
+"simple de le faire est de connecter le signal <code>hide</code> de l'objet "
+"fenêtre « GtkWindow » à une fonction qui ferme l'application. Retournez au "
+"fichier <file>image-viewer.js</file> et ajoutez le code suivant à la méthode "
+"<code>_init</code> dans la ligne au-dessus de <code>this.window.show</code> :"
 
-#: C/properties.py.page:51(p)
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:212
+#, no-wrap
+msgid "this.window.connect (\"hide\", Gtk.main_quit);"
+msgstr "this.window.connect (\"hide\", Gtk.main_quit);"
+
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:213
 msgid ""
-"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.";
-"html\">Basics - Properties</link> in Python Gtk+ 3 Tutorial"
+"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 ""
-"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.";
-"html\">Propriétés de base</link> dans le tutoriel Python Gtk+ 3"
+"Ceci connecte le signal <code>hide</code> de la fenêtre à la fonction "
+"<code>main_quit</code> de Gtk, qui met fin à l'exécution de la boucle "
+"principale de Gtk. Lorsque cette boucle s'arrête, la fonction <code>Gtk."
+"main</code> est quittée. Notre programme aurait continué d'exécuter "
+"n'importe quel code écrit après la ligne <code>Gtk.main ();</code>, mais "
+"comme nous n'avons plus de code après cela, le programme s'arrête."
+
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:217 C/image-viewer.py.page:131
+msgid "Containers: Laying-out the user interface"
+msgstr "Les conteneurs : agencement de l'interface utilisateur"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/progressbar.vala.page:21(None) C/progressbar.c.page:23(None)
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:218 C/image-viewer.py.page:132
 msgid ""
-"@@image: 'media/progressbar_fill.ogv'; md5=287763d1d3f4a328212ea2243910f5e4"
+"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 ""
-"@@image: 'media/progressbar_fill.ogv'; md5=287763d1d3f4a328212ea2243910f5e4"
+"Les éléments graphiques (les contrôles, comme les boutons ou les étiquettes) "
+"peuvent être disposés dans la fenêtre à l'aide de <em>conteneurs</em>. Vous "
+"pouvez organiser l'agencement en mélangeant différents types de conteneurs, "
+"comme des boîtes ou des grilles."
 
-#: C/progressbar.vala.page:7(title)
-#, fuzzy
-#| msgid "ProgressBar"
-msgid "ProgressBar (Vala)"
-msgstr "Barre de progression"
+#. (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 ""
+"Une fenêtre <code>Gtk.Window</code> est elle-même un type de conteneur, mais "
+"vous ne pouvez y insérer directement qu'un seul élément graphique. Nous "
+"aimerions avoir deux éléments graphiques, une image et un bouton, donc nous "
+"devons placer un conteneur de « plus haute capacité » dans la fenêtre pour "
+"tout contenir. Plusieurs <link href=\"http://library.gnome.org/devel/gtk/";
+"stable/GtkContainer.html\">types de conteneurs</link> sont disponibles, mais "
+"nous allons utiliser ici une boîte <code>Gtk.Box</code>. Une boîte <code>Gtk."
+"Box</code> peut contenir plusieurs éléments graphiques, disposés "
+"horizontalement ou verticalement. On pourrait créer des agencements plus "
+"complexes en mettant plusieurs boîtes dans une autre et ainsi de suite."
 
-#: C/progressbar.vala.page:17(desc) C/progressbar.c.page:18(desc)
-msgid "A widget which indicates progress visually"
-msgstr "Un élément graphique qui matérialise visuellement la progression"
+#. (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 ""
+"Il existe un concepteur graphique d'interface utilisateur appelé <app>Glade</"
+"app> intégré à <app>Anjuta</app> ce qui rend la conception d'interface "
+"utilisateur vraiment facile. Dans cet exemple simple, cependant, nous allons "
+"tout programmer à la main."
 
-#: C/progressbar.vala.page:20(title) C/progressbar.py.page:20(title)
-#: C/progressbar.js.page:19(title) C/progressbar.c.page:21(title)
-msgid "ProgressBar"
-msgstr "Barre de progression"
+#. (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 ""
+"Ajoutons la boîte et les éléments graphiques à la fenêtre. Insérez le code "
+"suivant dans la méthode <code>_init</code> immédiatement au-dessus de la "
+"ligne <code>this.window.show</code> :"
 
-#: C/progressbar.vala.page:22(p) C/progressbar.c.page:24(p)
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:224
+#, no-wrap
 msgid ""
-"This ProgressBar \"fills in\" by a fraction of the bar until it is full."
+"\n"
+"var main_box = new Gtk.Box ({orientation: Gtk.Orientation.VERTICAL, spacing: 0});\n"
+"this.window.add (main_box);"
 msgstr ""
-"Cette barre de progression se « rempli » par fractions jusqu'à ce qu'elle "
-"soit pleine."
 
-#: C/progressbar.vala.page:29(link) C/progressbar.js.page:41(link)
-#: C/grid.js.page:37(link)
-msgid "Gtk.ProgressBar"
-msgstr "Gtk.ProgressBar"
+#. (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 ""
+"La première ligne crée une boîte <code>Gtk.Box</code> appelée "
+"<code>main_box</code> et définit deux de ses propriétés : "
+"l'<code>orientation</code> est fixée à verticale (donc les éléments "
+"graphiques sont disposés en colonne) et l'espacement <code>spacing</code> "
+"entre les éléments graphiques est fixé à 0 pixel. La ligne suivante ajoute "
+"cette nouvelle boîte <code>Gtk.Box</code> à la fenêtre."
 
-#: C/progressbar.vala.page:30(link)
-msgid "GLib.Timeout"
-msgstr "GLib.Timeout"
+#. (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 ""
+"Pour l'instant, la fenêtre ne contient qu'une boîte <code>Gtk.Box</code> "
+"vide et si vous exécutez le programme, vous ne verrez pas encore de "
+"changement (la boîte <code>Gtk.Box</code> est un conteneur transparent et "
+"vous ne le voyez donc pas)."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/progressbar.py.page:21(None) C/progressbar.js.page:20(None)
-msgid "@@image: 'media/progressbar.ogv'; md5=36deab3dd4b5be968828fa2ef416d612"
-msgstr "@@image: 'media/progressbar.ogv'; md5=36deab3dd4b5be968828fa2ef416d612"
+#. (itstool) path: section/title
+#: C/image-viewer.js.page:232 C/image-viewer.py.page:150
+msgid "Packing: Adding widgets to the container"
+msgstr "Placement : ajout d'éléments graphiques au conteneur"
 
-#: C/progressbar.py.page:7(title)
-#, fuzzy
-#| msgid "ProgressBar"
-msgid "ProgressBar (Python)"
-msgstr "Barre de progression"
+#. (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 ""
+"Pour ajouter des éléments graphiques à la boîte <code>Gtk.Box</code>, "
+"insérez le code suivant juste en dessous de la ligne <code>this.window.add "
+"(main_box)</code> :"
 
-#: C/progressbar.py.page:17(desc)
-msgid "A widget which indicates progress visually."
-msgstr "Un élément graphique qui matérialise visuellement la progression."
+#. (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 ""
 
-#: C/progressbar.py.page:25(p) C/progressbar.js.page:24(p)
-msgid "Pressing any key stops and starts this ProgressBar."
+#. (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 ""
-"L'appui sur n'importe quelle touche démarre et arrête la barre de "
-"progression (ProgressBar)."
+"La première ligne crée une nouvelle <code>Gtk.Image</code> appelée "
+"<code>image</code> qui servira à afficher un fichier image. Puis, l'élément "
+"graphique image est ajouté (<em>placé</em>) dans le conteneur "
+"<code>main_box</code> par la méthode <link href=\"http://library.gnome.org/";
+"devel/gtk/stable/GtkBox.html#gtk-box-pack-start\"><code>pack_start</code></"
+"link> de <code>Gtk.Box</code> ."
 
-#: C/progressbar.py.page:32(p) C/progressbar.js.page:31(p)
-msgid "This ProgressBar is stopped and started by pressing any key."
+#. (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 ""
-"Pour démarrer ou arrêter cette barre de progression, appuyez sur n'importe "
-"quelle touche."
+"<code>pack_start</code> prend 4 arguments : l'élément graphique enfant "
+"(<code>child</code>) qui doit être ajouté à la boîte <code>Gtk.Box</code> ; "
+"si la boîte <code>Gtk.Box</code> doit s'agrandir (<code>expand</code>) quand "
+"le nouvel élément graphique est ajouté ; si le nouvel élément graphique doit "
+"prendre tout le nouvel espace créé quand la boîte <code>Gtk.Box</code> "
+"s'agrandit (<code>fill</code>) ; et enfin combien d'espace libre "
+"(<code>padding</code>), en pixels, il doit y avoir entre l'élément graphique "
+"et ses voisins à l'intérieur de la <code>Gtk.Box</code>."
 
-#: C/progressbar.py.page:44(title)
-msgid "Useful methods for a ProgressBar widget"
-msgstr "Méthodes utiles pour un élément graphique barre de progression"
+#. (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 ""
+"Si vous les laissez faire, les conteneurs Gtk (et les éléments graphiques) "
+"s'agrandissent dynamiquement pour occuper tout l'espace disponible. Vous ne "
+"positionnez pas les éléments graphiques dans la fenêtre en leur spécifiant "
+"des coordonnées x,y précises mais vous les positionnez les uns par rapport "
+"aux autres. Ceci permet un redimensionnement plus aisé de la fenêtre et les "
+"éléments graphiques devraient automatiquement prendre une taille raisonnable "
+"dans la plupart des cas."
 
-#: C/progressbar.py.page:46(p)
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:240 C/image-viewer.py.page:159
 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>."
+"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 ""
-"Contrairement à <code>pulse()</code>, qui fait avancer ou reculer la barre, "
-"si nous voulons que notre barre de progression se remplisse par fractions "
-"(un nombre flottant <code>float</code> compris entre <code>0.0</code> et "
-"<code>1.0</code> inclus) toujours dans le même sens, nous utilisons la "
-"méthode <code>set_fraction(fraction)</code>."
+"Notez aussi de quelle manière les éléments graphiques sont organisés "
+"hiérarchiquement. Une fois placée dans la <code>Gtk.Box</code>, l'image "
+"<code>Gtk.Image</code> est considérée comme un <em>enfant</em> de la boîte "
+"<code>Gtk.Box</code>. Ceci vous permet de traiter tous les enfants d'un "
+"élément graphique comme un groupe ; par exemple, vous pouvez masquer la "
+"boîte <code>Gtk.Box</code> qui du coup, masque tous ses enfants en même "
+"temps."
 
-#: C/progressbar.py.page:47(p)
+#. (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 ""
+"Insérez maintenant ces deux lignes en dessous des deux que vous venez "
+"d'ajouter :"
+
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:242
+#, no-wrap
 msgid ""
-"To set a text and show it (superimposed over the bar) use <code>set_text"
-"(\"some text\")</code> and <code>set_show_text(True)</code>. If a text is "
-"not set and <code>set_show_text(True)</code> the text will be the percentage "
-"of the work that has been completed."
+"\n"
+"var open_button = new Gtk.Button ({label: \"Open a picture...\"});\n"
+"main_box.pack_start (open_button, false, false, 0);"
 msgstr ""
-"Pour définir un texte et l'afficher en superposition sur la barre, utilisez "
-"<code>set_text(« texte »)</code> et <code>set_show_text(vrai)</code>. Si "
-"vous ne définissez pas un texte et si vous appliquez <code>set_show_text"
-"(vrai)</code>, le texte remplira la barre en fonction du pourcentage de "
-"l'avancement de la tâche."
 
-#: C/progressbar.py.page:55(link) C/progressbar.c.page:34(link)
-#: C/grid.c.page:33(link)
-msgid "GtkProgressBar"
-msgstr "GtkProgressBar"
+#. (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 ""
+"Ces lignes ressemblent aux deux premières, mais cette fois elles créent un "
+"bouton <code>Gtk.Button</code> et l'ajoute à la <code>main_box</code>. Notez "
+"que nous paramétrons ici l'argument <code>expand</code> (le second) sur "
+"<code>false</code>, alors qu'il était sur <code>true</code> pour l'image "
+"<code>Gtk.Image</code>. Ceci va conduire à ce que l'image prenne tout "
+"l'espace disponible et le bouton seulement l'espace nécessaire. Lors d'un "
+"redimensionnement de la fenêtre, la taille du bouton reste identique, alors "
+"que la taille de l'image va augmenter pour occuper le reste de la fenêtre."
 
-#: C/progressbar.py.page:56(link)
-msgid "GLib - The Main Event Loop"
-msgstr "GLib - La boucle de l'événement principal"
+#. (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 ""
+"Finalement, nous devons modifier la ligne <code>this.window.show ();</code> "
+"pour devenir :"
 
-#: C/progressbar.js.page:6(title)
-#, fuzzy
-#| msgid "ProgressBar"
-msgid "ProgressBar (JavaScript)"
-msgstr "Barre de progression"
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:247
+#, no-wrap
+msgid "this.window.show_all ();"
+msgstr "this.window.show_all ();"
 
-#: C/progressbar.js.page:16(desc)
-msgid "A bar which animates to indicate progress"
-msgstr "Une barre qui s'anime pour indiquer la progression"
+#. (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 ""
+"Ceci affiche l'enfant de la fenêtre Gtk et tous ses enfants, enfants de ses "
+"enfants et ainsi de suite (souvenez-vous que les éléments graphiques Gtk "
+"sont tous masqués par défaut)."
 
-#: C/progressbar.js.page:38(link)
-msgid "GLib"
-msgstr "GLib"
+#. (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 ""
+"Chargement de l'image : connexion au signal <code>clicked</code> du bouton"
 
-#: C/progressbar.c.page:7(title)
-#, fuzzy
-#| msgid "ProgressBar"
-msgid "ProgressBar (C)"
-msgstr "Barre de progression"
+#. (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 ""
+"Quand l'utilisateur clique sur le bouton <gui>Open a picture</gui>, une "
+"boîte de dialogue devrait apparaître pour permettre le choix d'une image. "
+"Une fois ce choix effectué, la photo est chargée et affichée dans l'élément "
+"graphique image."
 
-#: C/progressbar.c.page:35(link)
-msgid "G_Timeout"
-msgstr "G_Timeout"
+#. (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 ""
+"Connectez d'abord le signal <code>clicked</code> du bouton à une fonction de "
+"gestion de signal que vous appelez <code>_openClicked</code>. Mettez ce code "
+"immédiatement après la ligne <code>var open_button = new Gtk.Button</code> "
+"où le bouton a été créé :"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/photo-wall.c.page:78(None)
-msgid "@@image: 'media/photo-wall.png'; md5=f19590d97e8ec029cda3c44b769c11cd"
-msgstr "@@image: 'media/photo-wall.png'; md5=f19590d97e8ec029cda3c44b769c11cd"
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:255
+#, no-wrap
+msgid ""
+"\n"
+"open_button.connect (\"clicked\", Lang.bind (this, this._openClicked));"
+msgstr ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/photo-wall.c.page:81(None)
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:257
 msgid ""
-"@@image: 'media/photo-wall-focused.png'; md5=9f1ceecf3a28c1e468597b093a10cbae"
+"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 ""
-"@@image: 'media/photo-wall-focused.png'; md5=9f1ceecf3a28c1e468597b093a10cbae"
+"Ici, nous utilisons l'assistant JavaScript <em>Lang</em>. Il nous permet de "
+"connecter une <em>class method</em> au signal plutôt qu'à une simple "
+"fonction (sans classe) que nous avions utilisée avant pour le signal de "
+"masquage <code>hide</code>. Ne vous préoccupez pas de cela pour le moment, "
+"ce n'est qu'un détail technique. Pour que cela fonctionne, vous devez aussi "
+"ajouter cette ligne en haut du fichier :"
 
-#: C/photo-wall.c.page:6(title)
-#, fuzzy
-#| msgid "Photo Wall"
-msgid "Photo Wall (C)"
-msgstr "Mur de photos"
+#. (itstool) path: section/code
+#: C/image-viewer.js.page:258
+#, no-wrap
+msgid "const Lang = imports.lang;"
+msgstr "const Lang = imports.lang;"
 
-#: C/photo-wall.c.page:9(desc)
-msgid "A Clutter image viewer"
-msgstr "Un visionneur d'images avec Clutter"
+#. (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 "Chargement de l'image : écriture de la fonction de rappel du signal"
 
-#: C/photo-wall.c.page:13(name)
-msgid "Chris Kühl"
-msgstr "Chris Kühl"
+#. (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 ""
+"Nous pouvons maintenant créer la méthode <code>_openClicked()</code>. "
+"Insérez ce qui suit dans le bloc de code <code>ImageViewer.prototype</code>, "
+"après la méthode <code>_init</code> (et sans oublier la virgule) :"
 
-#: C/photo-wall.c.page:14(email)
-msgid "chrisk openismus com"
-msgstr "chrisk openismus com"
+#. (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 ""
 
-#: C/photo-wall.c.page:22(title)
-msgid "Photo Wall"
-msgstr "Mur de photos"
+#. (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 ""
+"La ligne commençant par <code>var chooser</code> crée une boîte de dialogue "
+"<gui>Ouvrir</gui> qui permet à l'utilisateur de choisir des fichiers. Nous "
+"paramétrons quatre propriétés : le titre de la boîte de dialogue ; la "
+"fonction (le type) de la boîte de dialogue (c'est une boîte de dialogue "
+"« OPEN », mais on aurait pu utiliser (<code>SAVE</code>) (enregistrer) si "
+"notre intention avait été d'enregistrer un fichier) ; <code>transient_for</"
+"code>, qui définit la fenêtre parent de la boîte de dialogue ; et "
+"<code>modal</code> qui, s'il est fixé à <code>true</code> empêche "
+"l'utilisateur de cliquer sur un autre emplacement de l'application jusqu'à "
+"ce que la boîte de dialogue soit fermée."
 
-#: C/photo-wall.c.page:25(p)
+#. (itstool) path: item/p
+#: C/image-viewer.js.page:289 C/image-viewer.py.page:203
 msgid ""
-"For this example we will build a simple image viewer using Clutter. You will "
-"learn:"
+"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 ""
-"Dans cet exemple, nous allons fabriquer un visionneur d'images simple avec "
-"Clutter. Vous apprendrez :"
+"Les deux lignes suivantes ajoutent les boutons <gui>Cancel</gui> (Annuler) "
+"et <gui>Open</gui> (Ouvrir) à la boîte de dialogue. Le second argument de la "
+"méthode <code>add_button</code> est la valeur (de type entier) qui est "
+"retournée lorsque le bouton est cliqué : 0 pour <gui>Annuler</gui> et 1 pour "
+"<gui>Ouvrir</gui>."
 
-#: C/photo-wall.c.page:27(p)
-msgid "How to size and position <code>ClutterActor</code>s"
-msgstr "comment dimensionner et positionner les <code>ClutterActor</code>,"
+#. (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 ""
+"<code>set_default_response</code> détermine le bouton qui est activé quand "
+"l'utilisateur fait un double-clic sur un fichier ou appuie sur la touche "
+"<key>Entrée</key>. Ici, nous utilisons le bouton <gui>Open</gui> (qui a la "
+"valeur 1)."
 
-#: C/photo-wall.c.page:28(p)
-msgid "How to place an image in a <code>ClutterActor</code>"
-msgstr "comment placer une image dans un <code>ClutterActor</code>,"
+#. (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 ""
+"Les trois lignes suivantes limitent la boîte de dialogue <gui>Ouvrir</gui> à "
+"l'affichage des seuls fichiers pouvant être ouverts par <code>Gtk.Image</"
+"code>. Un objet filtre est d'abord créé ; ensuite nous ajoutons tous les "
+"types de fichier pris en charge par <code>Gdk.Pixbuf</code> (ce qui inclut "
+"la plupart des formats d'image comme PNG ou JPEG) au filtre. Enfin, nous "
+"appliquons ce filtre à la boîte de dialogue <gui>Open</gui>."
 
-#: C/photo-wall.c.page:29(p)
-msgid "How to do simple transitions using Clutter's animation framework"
+#. (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 ""
-"comment faire des transitions simples avec la structure d'animation de "
-"Clutter,"
+"<code>chooser.run</code> affiche la boîte de dialogue <gui>Open</gui>. La "
+"boîte de dialogue attend que l'utilisateur choisisse une image ; quand c'est "
+"fait, <code>chooser.run</code> retourne la valeur <output>1</output> (il "
+"retourne la valeur <output>0</output> si l'utilisateur clique sur "
+"<gui>Annuler</gui>). L'instruction <code>if</code> teste cette réponse."
 
-#: C/photo-wall.c.page:30(p)
-msgid "How to make <code>ClutterActor</code>s respond to mouse events"
+#. (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 ""
-"comment faire réagir les <code>ClutterActor</code> aux événements de la "
-"souris,"
+"Supposons que l'utilisateur a cliqué sur le bouton <gui>Ouvrir</gui>, la "
+"ligne suivante définit la propriété <code>file</code> du <code>Gtk.Image</"
+"code> au nom de fichier image sélectionné. <code>Gtk.Image</code> charge "
+"alors l'image choisie et l'affiche."
 
-#: C/photo-wall.c.page:31(p)
-msgid "How to get file names from a directory"
-msgstr "et comment récupérer des noms de fichier depuis un répertoire."
+#. (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 ""
+"La dernière ligne de cette méthode détruit la boîte de dialogue <gui>Open</"
+"gui> car nous n'en avons plus besoin."
 
-#: C/photo-wall.c.page:37(p)
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:312
 msgid ""
-"Clutter is a library for creating dynamic user interfaces using OpenGL for "
-"hardware acceleration. This example demonstates a small, but central, part "
-"of the Clutter library to create a simple but attractive image viewing "
-"program."
+"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 ""
-"Clutter est une bibliothèque pour créer des interfaces utilisateur "
-"dynamiques utilisant OpenGL pour l'accélération matérielle. Cet exemple "
-"montre une petite partie, mais néanmoins centrale, de la bibliothèque "
-"Clutter pour écrire un programme simple, mais sympathique, de visionneur "
-"d'images."
+"Tout le programme nécessaire est maintenant en place, donc essayez de "
+"l'exécuter. Cela devrait fonctionner ; un visionneur d'images totalement "
+"fonctionnel (et une visite éclair de JavaScript et de Gtk) en très peu de "
+"temps !"
 
-#: C/photo-wall.c.page:40(p)
+#. (itstool) path: section/p
+#: C/image-viewer.js.page:317
 msgid ""
-"To help us reach our goal we will be utilising a few other common pieces of "
-"GLib as well. Most importantly, we'll use one <code>GSList</code>, a singly-"
-"linked list, to hold our <code>ClutterActor</code>s and another one for file "
-"path names. We will also use <code>GDir</code>, a utility for working with "
-"directories, to access our image directory and gather file paths."
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"image-viewer/image-viewer.js\">reference code</link>."
 msgstr ""
-"Pour nous aider dans cette tâche, nous utilisons également quelques autres "
-"éléments classiques de GLib. Parmi les plus importants, nous utiliserons "
-"<code>GSList</code>, une liste simplement chaînée, pour contenir nos "
-"<code>ClutterActor</code> et une autre pour les noms de chemin des fichiers. "
-"Nous utiliserons également <code>GDir</code>, un utilitaire pour travailler "
-"avec des répertoires, afin d'accéder au répertoire de nos images et de "
-"récupérer les chemins de fichier."
+"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
+"programme à ce <link href=\"image-viewer/image-viewer.js\">programme de "
+"référence</link>."
 
-#: C/photo-wall.c.page:53(p)
+#. (itstool) path: info/title
+#: C/image-viewer.py.page:8
+#, fuzzy
+#| msgid "Image Viewer"
+msgctxt "text"
+msgid "Image viewer (Python)"
+msgstr "Visionneur d'images"
+
+#. (itstool) path: info/desc
+#: C/image-viewer.py.page:11
 msgid ""
-"Choose <gui>Gtk+ (simple)</gui> from the <gui>C</gui> tab, click "
+"A little bit more than a simple \"Hello world\" application - write an image "
+"viewer in GTK."
+msgstr ""
+"Un peu plus qu'une simple application « Hello world » - écrire un visionneur "
+"d'images en GTK."
+
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:34
+msgid "Write a basic GTK user interface in Python"
+msgstr "écrire une interface graphique GTK en Python,"
+
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:42
+msgid "Basic knowledge of the python programming language"
+msgstr "des connaissances de base du langage de programmation python."
+
+#. (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>photo-wall</file> as project name and directory."
+"<file>image-viewer</file> as project name and directory."
 msgstr ""
-"Cliquez sur l'onglet <gui>C</gui>, choisissez <gui>Gtk+ (simple)</gui>, "
-"cliquez sur <gui>Continuer</gui> et renseignez les champs requis des pages "
-"suivantes avec vos informations. Saisissez <file>murdephotos</file> (sans "
-"accent) comme nom de projet et de répertoire."
+"Sélectionnez <gui>PyGTK (automake)</gui> dans l'onglet <gui>Python</gui>, "
+"cliquez sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
+"suivantes. Mettez <file>image-viewer</file> comme nom de projet et de "
+"répertoire."
 
-#: C/photo-wall.c.page:56(p)
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:59
 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."
+"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 ""
 "Assurez-vous d'avoir désactivé <gui>Utiliser GtkBuilder pour l'interface "
 "utilisateur</gui> car nous allons créer l'interface utilisateur manuellement "
-"dans cet exemple. Consultez le tutoriel <link xref=\"guitar-tuner.c"
-"\">Accordeur de guitare</link> si vous souhaitez savoir comment utiliser le "
-"constructeur d'interface GtkBuilder."
+"dans cet exemple. Consultez <link xref=\"guitar-tuner.py\">l'exemple Guitar-"
+"Tuner</link> pour un exemple d'utilisation du constructeur d'interfaces."
 
-#: C/photo-wall.c.page:61(p)
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:64
 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."
+"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 ""
-"Activez <gui>Configuration des paquets externes</gui>. Sur la page suivante, "
-"sélectionnez <em>clutter-1.0</em> dans la liste pour inclure la bibliothèque "
-"Clutter à votre projet."
+"Cliquez sur <gui>Appliquer</gui> et le projet est créé. Ouvrez <file>src/"
+"image_viewer.py</file> depuis l'onglet <gui>Projet</gui> ou l'onglet "
+"<gui>Fichiers</gui>. Il contient quelques lignes de code très basique."
 
-#: C/photo-wall.c.page:65(p) C/image-viewer.c.page:51(p)
-#: C/guitar-tuner.c.page:56(p)
+#. (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 "Voyons à quoi ressemble une application Gtk basique écrite en Python :"
+
+#. (itstool) path: section/code
+#: C/image-viewer.py.page:72
+#, no-wrap
 msgid ""
-"Click <gui>Apply</gui> and the project will be created for you. Open "
-"<file>src/main.c</file> from the <gui>Project</gui> or <gui>File</gui> tabs. "
-"You should see some code which starts with the lines:"
+"\n"
+"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 ""
-"Cliquez sur <gui>Appliquer</gui> et votre projet est créé. Ouvrez <file>src/"
-"main.c</file> depuis l'onglet <gui>Projet</gui> ou l'onglet <gui>Fichiers</"
-"gui>. Vous devez voir apparaître du code commençant par les lignes :"
 
-#: C/photo-wall.c.page:74(title)
-msgid "A look at Photo Wall"
-msgstr "Un aperçu du mur de photos"
+#. (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 ""
+"La méthode <code>__init__</code> de la classe <code>GUI</code> crée une "
+"fenêtre <code>Gtk.Window</code> (vide), définit son titre, puis connecte un "
+"signal pour quitter l'application quand la fenêtre est fermée. C'est "
+"globalement très simple. Nous en verrons un peu plus sur les signaux plus "
+"tard."
 
-#: C/photo-wall.c.page:75(p)
-msgid "Our image viewer presents the user with a wall of images."
-msgstr "Notre visionneur d'images vous montre un mur de photos."
+#. (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 ""
+"Ensuite est définie la méthode <code>destroy</code> qui quitte juste "
+"l'application. Elle est appelée par le signal connecté ci-dessus."
+
+#. (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 ""
+"Le reste du fichier effectue l'initialisation pour Gtk et affiche "
+"l'interface graphique."
 
-#: C/photo-wall.c.page:79(p)
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:114
 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."
+"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 ""
-"Quand une image est cliquée, elle est animée pour remplir la zone "
-"d'affichage. Lorsque la photo qui possède le focus est cliquée, elle "
-"retourne à sa position d'origine en utilisant une animation qui dure "
-"également 500 millisecondes."
+"Ce programme est prêt à être utilisé, donc essayez-le en utilisant le menu "
+"<guiseq><gui>Exécuter</gui><gui>Exécuter</gui></guiseq>. Cela devrait vous "
+"afficher une fenêtre vide."
 
-#: C/photo-wall.c.page:85(title)
-msgid "Initial setup"
-msgstr "Configuration initiale"
+#. (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 ""
 
-#: C/photo-wall.c.page:86(p)
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:137
 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>:"
+"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 ""
-"La partie de code suivante contient beaucoup de définitions et de variables "
-"qui sont utilisées dans les sections suivantes. Servez-vous en comme "
-"référence. Copiez ce code au début du fichier <file>src/main.c</file> :"
+"Ajoutons la boîte et les éléments graphiques à la fenêtre. Insérez le code "
+"suivant dans la méthode <code>__init__</code>, juste après la ligne "
+"<code>window.connect_after</code> :"
 
-#: C/photo-wall.c.page:123(title)
-msgid "Jumping into the code"
-msgstr "Immersion dans le code"
+#. (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 ""
 
-#: C/photo-wall.c.page:124(p)
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:145
 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."
+"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 ""
-"Nous commencerons par analyser la fonction <code>main()</code> dans son "
-"ensemble. Ensuite nous discuterons des autres parties du programme en "
-"détail. Modifiez le fichier <file>src/main.c</file> pour qu'il contienne la "
-"fonction <code>main()</code>. Vous pouvez aussi supprimer la fonction "
-"<code>create_window()</code> car on n'en a plus besoin dans cet exemple."
+"La première ligne crée une <code>Gtk.Box</code> nommée <code>box</code> et "
+"les lignes suivantes définissent deux de ses propriétés : "
+"l'<code>orientation</code> est verticale (donc les éléments graphiques sont "
+"disposés en colonne) et l'espacement entre les éléments graphiques est fixé "
+"à 5 pixels. La ligne suivante ajoute ensuite cette nouvelle <code>Gtk.Box</"
+"code> à la fenêtre."
 
-#: C/photo-wall.c.page:165(p)
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:151
 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."
+"To add some widgets to the <code>Gtk.Box</code>, insert the following code "
+"directly below the <code>window.add (box)</code> line:"
 msgstr ""
-"Ligne 4 : configuration de <code>ClutterColor</code> en paramétrant les "
-"valeurs rouge, vert, bleu et celle de transparence (alpha). Les valeurs sont "
-"comprises entre 0 et 255. Pour la transparence, une valeur de 255 représente "
-"l'opacité."
+"Pour ajouter d'autres éléments graphiques à la fenêtre, insérez ce code "
+"juste dessous la ligne <code>window.add (box)</code> :"
 
-#: C/photo-wall.c.page:166(p)
+#. (itstool) path: section/code
+#: C/image-viewer.py.page:152
+#, no-wrap
 msgid ""
-"Line 7: You must initialize Clutter. If you forget to do this, you will get "
-"very strange errors. Be warned."
+"\n"
+"self.image = Gtk.Image()\n"
+"box.pack_start (self.image, False, False, 0)"
 msgstr ""
-"Ligne 7 : vous devez initialiser Clutter. Attention, si vous oubliez de le "
-"faire, vous aurez de très étranges messages d'erreur. Vous êtes prévenu."
 
-#: C/photo-wall.c.page:167(p)
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:155
 msgid ""
-"Lines 9‒11: Here we get the default <code>ClutterStage</code> that was "
-"provided by <code>clutter_init</code>. We then set the size using the "
-"defines from the previous section and the address of the <code>ClutterColor</"
-"code> we just defined."
+"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 ""
-"Lignes 9‒11 : ici nous obtenons le <code>ClutterStage</code> par défaut qui "
-"a été fourni par <code>clutter_init</code> puis nous définissons sa taille "
-"en utilisant les variables définies à la section précédente et l'adresse du "
-"<code>ClutterColor</code> que nous venons de définir."
+"La première ligne crée une nouvelle image <code>Gtk.Image</code> nommée "
+"<code>image</code> qui sera utilisée pour afficher un fichier image. Comme "
+"nous en avons besoin plus tard dans la fonction de gestion de signal, nous "
+"la définissons comme étant un attribut de classe. Vous devez ajouter "
+"<code>image = 0</code> au début de la classe <code>GUI</code>. Puis, "
+"l'élément graphique image est ajouté (<em>placé</em>) dans le conteneur "
+"<code>box</code> à l'aide de la méthode <link href=\"http://library.gnome.";
+"org/devel/gtk/stable/GtkBox.html#gtk-box-pack-start\"><code>pack_start</"
+"code></link> de GtkBox."
 
-#: C/photo-wall.c.page:168(p)
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:157
 msgid ""
-"A <code>ClutterStage</code> is the top-level <code>ClutterActor</code> onto "
-"which other <code>ClutterActor</code>s are placed."
+"<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 ""
-"Un <code>ClutterStage</code> est le <code>ClutterActor</code> de premier "
-"niveau sur lequel les autres <code>ClutterActor</code> sont disposés."
+"<code>pack_start</code> prend 4 arguments : l'élément graphique enfant "
+"(<code>child</code>) qui doit être ajouté à la boîte <code>Gtk.Box</code> ; "
+"si la boîte <code>Gtk.Box</code> doit s'agrandir (<code>expand</code>) quand "
+"le nouvel élément graphique est ajouté ; si le nouvel élément graphique doit "
+"prendre tout le nouvel espace créé quand la boîte <code>Gtk.Box</code> "
+"s'agrandit (<code>fill</code>) ; et enfin combien d'espace libre "
+"(<code>padding</code>), en pixels, il doit y avoir entre l'élément graphique "
+"et ses voisins à l'intérieur de la <code>Gtk.Box</code>."
 
-#: C/photo-wall.c.page:170(p)
+#. (itstool) path: section/code
+#: C/image-viewer.py.page:161
+#, no-wrap
 msgid ""
-"Line 12: Here we call our function for getting the image file paths. We'll "
-"look at this in a bit."
+"\n"
+"button = Gtk.Button (\"Open a picture...\")\n"
+"box.pack_start (button, False, False, 0)\n"
 msgstr ""
-"Ligne 13 : ici nous appelons notre fonction pour obtenir les chemins des "
-"fichiers image. Nous l'examinerons dans un instant."
 
-#: C/photo-wall.c.page:171(p)
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:165
 msgid ""
-"Lines 14‒26: This is where we set up the <code>ClutterActor</code>s, load "
-"the images and place them into their spot in the image wall. We will look at "
-"this in detail in the next section."
+"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 ""
-"Ligne 15-27 : c'est l'endroit où nous paramétrons les <code>ClutterActor</"
-"code>, chargeons les images et les disposons au bon endroit dans le mur "
-"d'images. Nous regarderons cela en détail dans la section suivante."
+"Ces lignes ressemblent aux deux premières, mais cette fois elles créent un "
+"bouton <code>Gtk.Button</code> et l'ajoute à la <code>box</code>. Notez que "
+"nous paramétrons ici l'argument <code>expand</code> (le second) sur "
+"<code>False</code>, alors qu'il était sur <code>True</code> pour l'image "
+"<code>Gtk.Image</code>. Ceci va conduire à ce que l'image prenne tout "
+"l'espace disponible et le bouton seulement l'espace nécessaire. Lors d'un "
+"redimensionnement de la fenêtre, la taille du bouton reste identique, alors "
+"que la taille de l'image va augmenter pour occuper le reste de la fenêtre."
 
-#: C/photo-wall.c.page:172(p)
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:170
 msgid ""
-"Line 29: Show the stage and <em>all its children</em>, meaning our images."
+"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 ""
-"Ligne 29 : affichage de « stage » et de <em>tous ses enfants</em>, c'est-à-"
-"dire nos images."
+"Quand l'utilisateur clique sur le bouton <gui>Open a picture...</gui>, une "
+"boîte de dialogue s'affiche pour lui permettre de choisir une image. Une "
+"fois ce choix effectué, la photo est chargée et affichée dans l'élément "
+"graphique image."
 
-#: C/photo-wall.c.page:173(p)
-msgid "Line 32: Start the Clutter main loop."
-msgstr "Ligne 32 : démarrage de la boucle principale de Clutter."
+#. (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 ""
+"Connectez d'abord le signal <code>clicked</code> du bouton à une fonction de "
+"gestion de signal que vous appelez <code>on_open_clicked</code>. Mettez ce "
+"code immédiatement après la ligne <code>button = Gtk.Button()</code> où le "
+"bouton a été créé :"
 
-#: C/photo-wall.c.page:178(title)
-msgid "Setting up our image actors"
-msgstr "Mise en place de nos acteurs image"
+#. (itstool) path: section/code
+#: C/image-viewer.py.page:172
+#, no-wrap
+msgid ""
+"\n"
+"button.connect_after('clicked', self.on_open_clicked)\n"
+msgstr ""
 
-#: C/photo-wall.c.page:179(p)
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:175
 msgid ""
-"In Clutter, an actor is the most basic visual element. Basically, everything "
-"you see is an actor."
+"This will connect the <code>clicked</code> signal to <code>on_open_clicked</"
+"code> method that we will define below."
 msgstr ""
-"Dans Clutter, un acteur est l'élément visuel le plus élémentaire. En gros, "
-"tout ce que vous voyez est un acteur."
+"Cela connecte le signal <code>clicked</code> à la méthode "
+"<code>on_open_clicked</code> que nous définirons ci-dessous."
 
-#: C/photo-wall.c.page:180(p)
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:181
 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."
+"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 ""
-"Dans cette section, nous allons regarder plus en détail la boucle utilisée "
-"pour paramétrer les <code>ClutterActor</code> qui affichent nos images."
+"On peut maintenant créer la méthode <code>on_open_clicked</code>. Insérez ce "
+"qui suit dans le bloc de code de la classe <code>GUI</code>, après la "
+"méthode <code>__init__</code> :"
 
-#: C/photo-wall.c.page:198(p)
+#. (itstool) path: section/code
+#: C/image-viewer.py.page:182
+#, no-wrap
 msgid ""
-"Line 5: Here we want to get the path at the <var>n</var>th location in the "
-"<code>GSList</code> that is holding our image path names. The <var>n</var>th "
-"position is calculated based on <code>row</code> and <code>col</code>. The "
-"return value is a pointer to a <code>GSList</code> which is just a node in "
-"the list. We will use this to get the actual path in the next line. The "
-"first parameter is a pointer to the head of the list."
+"\n"
+"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 ""
-"Ligne 5 : ici nous voulons obtenir le chemin à la <var>n</var>ième position "
-"de la <code>GSList</code> qui contient les noms de chemin de nos images. La "
-"<var>n</var>ième position est calculée à partir de <code>row</code> et "
-"<code>col</code>. La valeur retournée est un pointeur vers une <code>GSList</"
-"code> qui est juste un nœud dans la liste. Nous l'utiliserons dans la ligne "
-"suivante pour obtenir le chemin réel. Le premier argument est un pointeur "
-"vers le début de la liste."
 
-#: C/photo-wall.c.page:200(p)
+#. (itstool) path: item/p
+#: C/image-viewer.py.page:200
 msgid ""
-"Line 6: This is where we actually create the <code>ClutterActor</code> and "
-"place the image into the actor. The first argument is the path which we "
-"access through our <code>GSList</code> node. The second argument is for "
-"error reporting but we are ignoring that to keep things short."
+"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 ""
-"Ligne 6 : c'est ici que nous créons réellement le <code>ClutterActor</code> "
-"et disposons l'image dans l'acteur. Le premier argument est le chemin qui "
-"permet d'accéder au nœud de notre <code>GSList</code>. Le deuxième sert à "
-"rapporter une erreur mais nous allons ignorer cela pour faire court."
+"La ligne commençant par <code>dialog</code> crée une boîte de dialogue "
+"<gui>Open</gui> qui permet à l'utilisateur de choisir des fichiers. Nous "
+"paramétrons trois propriétés : le titre de la boîte de dialogue ; la "
+"fonction (le type) de la boîte de dialogue (c'est une boîte de dialogue "
+"« OPEN », mais on aurait pu utiliser (<code>SAVE</code>) (enregistrer) si "
+"notre intention avait été d'enregistrer un fichier) et <code>transient_for</"
+"code>, qui définit la fenêtre parent de la boîte de dialogue."
 
-#: C/photo-wall.c.page:202(p)
-msgid "Line 7: We'll look at this function in a later section."
-msgstr "Ligne 7 : nous regarderons cette fonction dans une section ultérieure."
+#. (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 ""
+"<code>dialog.run</code> affiche la boîte de dialogue <gui>Open</gui>. La "
+"boîte de dialogue attend que l'utilisateur choisisse une image ; quand c'est "
+"fait, <code>dialog.run</code> retourne la valeur <output>1</output> (il "
+"retourne la valeur <output>0</output> si l'utilisateur clique sur "
+"<gui>Annuler</gui>). L'instruction <code>if</code> teste cette réponse."
 
-#: C/photo-wall.c.page:204(p)
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:226
 msgid ""
-"Line 8: This adds the <code>ClutterActor</code> to the stage, which is a "
-"container. It also assumes ownership of the <code>ClutterActor</code> which "
-"is something you'll want to look into as you get deeper into GNOME "
-"development. See the <link href=\"http://library.gnome.org/devel/gobject/";
-"stable/gobject-memory.html\"><code>GObject</code> documentation</link> for "
-"the gory details."
+"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 ""
-"Ligne 8 : cela ajoute le <code>ClutterActor</code> au « stage », qui est un "
-"conteneur. Cela suppose une notion d'appartenance du <code>ClutterActor</"
-"code> qui est quelque chose que vous devrez comprendre lorsque vous irez un "
-"peu plus loin dans le développement de GNOME. Consultez la <link href="
-"\"http://library.gnome.org/devel/gobject/stable/gobject-memory.html";
-"\">documentation de <code>GObject</code></link> pour des détails pointus."
+"Tout le programme nécessaire est maintenant en place, donc essayez de "
+"l'exécuter. Cela devrait fonctionner ; un visionneur d'images totalement "
+"fonctionnel (et une visite éclair de Python et de Gtk) en très peu de temps !"
 
-#: C/photo-wall.c.page:206(p)
+#. (itstool) path: section/p
+#: C/image-viewer.py.page:231
 msgid ""
-"Line 9: This adds our <code>ClutterActor</code> to a <code>GSList</code> so "
-"that we can later iterate over the <code>ClutterActor</code>s."
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"image-viewer/image-viewer.py\">reference code</link>."
 msgstr ""
-"Ligne 9 : cela ajoute notre <code>ClutterActor</code> à une <code>GSList</"
-"code> afin que nous puissions plus tard itérer sur les <code>ClutterActor</"
-"code>."
+"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
+"programme à ce <link href=\"image-viewer/image-viewer.py\">programme de "
+"référence</link>."
+
+#. (itstool) path: info/title
+#: C/image-viewer.vala.page:8
+#, fuzzy
+#| msgid "Image Viewer"
+msgctxt "text"
+msgid "Image viewer (Vala)"
+msgstr "Visionneur d'images"
+
+#. (itstool) path: info/desc
+#: C/image-viewer.vala.page:11
+#, fuzzy
+#| msgid "A little bit more than a simple \"Hello world\" GTKmm application."
+msgid "A little bit more than a simple \"Hello world\" GTK+ application."
+msgstr "Un peu plus qu'une simple application GTKmm « Hello world »."
+
+#. (itstool) path: credit/name
+#: C/image-viewer.vala.page:23
+msgid "Philip Chimento"
+msgstr "Philip Chimento"
 
-#: C/photo-wall.c.page:207(p)
+#. (itstool) path: synopsis/p
+#: C/image-viewer.vala.page:39
 msgid ""
-"Interesting to note is that we want to prepend the <code>ClutterActor</"
-"code>s rather than append so that we avoid traversing the list upon each "
-"insertion. You will often see <code>g_slist_prepend</code> followed by "
-"<code>g_slist_reverse</code> because it faster than inserting many objects "
-"at the end of the list."
+"In this tutorial you will create an application which opens and displays an "
+"image file. You will learn:"
 msgstr ""
-"Il est intéressant de noter que nous ajoutons les <code>ClutterActor</code> "
-"en tête de liste plutôt qu'en fin de liste afin d'éviter d'avoir à parcourir "
-"la liste à chaque insertion. Vous verrez souvent <code>g_slist_prepend</"
-"code> suivi de <code>g_slist_reverse</code> car c'est plus rapide que "
-"d'insérer beaucoup d'objets à la fin de la liste."
+"Dans ce tutoriel, nous allons écrire une application qui charge et affiche "
+"un fichier image. Vous allez apprendre :"
 
-#: C/photo-wall.c.page:213(title)
-msgid "Loading the images"
-msgstr "Chargement des images"
+#. (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 ""
+"comment paramétrer un projet de base en utilisant <link xref=\"getting-ready"
+"\">Anjuta IDE</link>,"
 
-#: C/photo-wall.c.page:214(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:42
 msgid ""
-"Let's take a short break from Clutter to see how we can get the file names "
-"from our image directory."
+"How to write a <link href=\"http://developer.gnome.org/platform-overview/";
+"stable/gtk\">Gtk application</link> in Vala"
 msgstr ""
-"Oublions un court instant Clutter pour regarder comment nous pouvons obtenir "
-"les noms des fichiers contenus dans notre répertoire d'images."
+"comment écrire une <link href=\"http://developer.gnome.org/platform-overview/";
+"stable/gtk\">application Gtk</link> en Vala,"
 
-#: C/photo-wall.c.page:241(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:43
 msgid ""
-"Lines 5 and 12: This opens our directory or, if an error occured, returns "
-"after printing an error message."
+"Some basic concepts of <link href=\"http://developer.gnome.org/gobject/";
+"stable/\">GObject</link> programming"
 msgstr ""
-"Lignes 5 et 12 : cela ouvre notre répertoire ou, en cas d'erreur, quitte la "
-"fonction après affichage d'un message d'erreur."
+"quelques concepts de base sur la programmation <link href=\"http://developer.";
+"gnome.org/gobject/stable/\">GObject</link>,"
 
-#: C/photo-wall.c.page:242(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:50
 msgid ""
-"Lines 14‒23: The first line gets another file name from the <code>GDir</"
-"code> we opened earlier. If there was an image file (which we check by "
-"looking at its extension, \".png\" or \".jpg\") in the directory we proceed "
-"to prepend the image directory path to the filename and prepend that to the "
-"list we set up earlier. Lastly we attempt to get the next path name and "
-"reenter the loop if another file was found."
+"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 ""
-"Ligne 14-23 : la première ligne récupère un nouveau nom de fichier à partir "
-"du <code>GDir</code> que nous avons ouvert précédemment. S'il existe des "
-"fichiers images (ce que nous vérifions en examinant son extension, « .png » "
-"ou « .jpg ») dans le répertoire, nous continuons en ajoutant le chemin du "
-"répertoire de l'image devant le nom de fichier puis en l'ajoutant en tête de "
-"la liste définie auparavant. Enfin, nous essayons d'obtenir le prochain nom "
-"de fichier et nous recommençons la boucle si un autre fichier a été trouvé."
+"Vous pourriez trouver la référence API de <link href=\"http://valadoc.org/gtk";
+"+-3.0/\">gtk+-3.0</link> utile, bien qu'il ne soit pas nécessaire de suivre "
+"le tutoriel."
 
-#: C/photo-wall.c.page:247(title)
-msgid "Set up the actors"
-msgstr "Mise en place des acteurs"
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:66
+#, fuzzy
+#| 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."
+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 ""
+"Sélectionnez <gui>Gtk+ (Simple)</gui> dans l'onglet <gui>Vala</gui>, cliquez "
+"sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
+"suivantes. Utilisez <file>image-viewer</file> comme nom de projet et de "
+"répertoire."
 
-#: C/photo-wall.c.page:248(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:70
 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."
+"Make sure that <gui>Use GtkBuilder for user interface</gui> is unchecked as "
+"we will create the UI manually in this tutorial."
 msgstr ""
-"Examinons maintenant le choix de la taille et du positionnement des "
-"<code>ClutterActor</code> et également la préparation du <code>ClutterActor</"
-"code> pour une interaction de l'utilisateur."
+"Assurez-vous d'avoir désactivé <gui>Utiliser GtkBuilder pour l'interface "
+"utilisateur</gui> car nous allons créer l'interface utilisateur manuellement "
+"dans cet exemple."
 
-#: C/photo-wall.c.page:267(p)
+#. (itstool) path: note/p
+#: C/image-viewer.vala.page:71
 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."
+"You will learn how to use the interface builder in the <link xref=\"guitar-"
+"tuner.vala\">Guitar-Tuner</link> tutorial."
 msgstr ""
-"Ligne 7 : le fait de définir un acteur comme « reactive » signifie qu'il "
-"réagit aux événements, au <code>button-press-event</code> dans notre cas. "
-"Pour le mur de photos, tous les <code>ClutterActor</code> du mur doivent "
-"être initialisés comme « reactive »."
+"Consultez le tutoriel <link xref=\"guitar-tuner.c\">Accordeur de guitare</"
+"link> si vous souhaitez savoir comment utiliser le constructeur d'interface "
+"GtkBuilder."
 
-#: C/photo-wall.c.page:270(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:75
 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."
+"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 ""
-"Ligne 9-12 : nous connectons maintenant l'événement <code>button-press-"
-"event</code> à la fonction de rappel <code>actor_clicked_cb</code> que nous "
-"examinons ci-dessous."
+"Cliquez sur <gui>Continuer</gui> et le projet est créé. Ouvrez <file>src/"
+"image_viewer.vala</file> depuis l'onglet <gui>Projet</gui> ou l'onglet "
+"<gui>Fichiers</gui>. Vous verrez apparaître ce code :"
 
-#: C/photo-wall.c.page:273(p)
-msgid "At this point we've got a wall of images that are ready to be viewed."
+#. (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 ""
-"À cet instant, nous obtenons un mur d'images qui sont prêtes à être "
-"regardées."
 
-#: C/photo-wall.c.page:277(title)
-msgid "Reacting to the clicks"
-msgstr "Réaction aux clics"
+#. (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 ""
+"Ce programme charge une fenêtre (vide) à partir du fichier de description de "
+"l'interface et l'affiche. Vous trouverez plus de détails ci-dessous ; passez "
+"cette liste si vous comprenez les bases :"
 
-#: C/photo-wall.c.page:322(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:119
 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."
+"The two <code>using</code> lines at the top import namespaces so we don't "
+"have to name them explicitly."
 msgstr ""
-"Ligne 1-4 : nous devons être sûr que notre fonction de rappel correspond à "
-"la signature requise par notre signal <code>button_clicked_event</code>. "
-"Dans notre exemple, nous n'utilisons que le premier argument, le "
-"<code>ClutterActor</code> qui est réellement cliqué."
+"Les deux lignes <code>using</code> du début importent des espaces de noms "
+"que nous n'aurons plus à nommer explicitement."
 
-#: C/photo-wall.c.page:324(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:122
 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."
+"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 ""
-"Quelques mots sur les arguments que nous n'utilisons pas dans cet exemple. "
-"L'événement <code>ClutterEvent</code> est différent en fonction de "
-"l'événement géré. Par exemple, un événement appui sur une touche du clavier "
-"produit un <code>ClutterKeyEvent</code> à partir duquel vous pouvez obtenir "
-"comme information, entre autres, la touche qui a été enfoncée. Pour un "
-"événement clic de souris, vous obtenez un <code>ClutterButtonEvent</code> à "
-"partir duquel vous pouvez connaître les valeurs <code>x</code> et <code>y</"
-"code>. Consultez la documentation de Clutter pour les autres types "
-"d'événement <code>ClutterEvent</code>."
+"Le constructeur de la classe principale <code>Main</code> crée une nouvelle "
+"fenêtre (vide) et connecte un <link href=\"https://live.gnome.org/Vala/";
+"SignalsAndCallbacks\">signal</link> pour quitter l'application quand cette "
+"fenêtre est fermée."
 
-#: C/photo-wall.c.page:325(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:127
 msgid ""
-"The <code>user_data</code> is what one uses to pass data into the the "
-"function. A pointer to any data type can be passed in. If you need multiple "
-"data to be passed into the callback, you can place the data into a struct "
-"and pass its address in."
+"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 ""
-"<code>user_data</code> est ce qui sert à transmettre des données dans la "
-"fonction. Un pointeur vers n'importe quel type de données peut être "
-"transmis. Si vous avez besoin de transmettre plusieurs données à la fonction "
-"de rappel, vous pouvez mettre les données dans une structure et transmettre "
-"son adresse."
+"La fonction <code>statique main</code> est exécutée par défaut quand vous "
+"lancez une application Vala. Elle appelle d'autres fonctions qui créent la "
+"classe <code>Main</code>, configurent puis exécutent l'application. La "
+"fonction <link href=\"http://valadoc.org/gtk+-3.0/Gtk.main.html\";><code>Gtk."
+"main</code></link> démarre la <link href=\"http://en.wikipedia.org/wiki/";
+"Event_loop\">boucle principale</link> de GTK, qui lance l'interface "
+"utilisateur et commence à écouter les événements (comme des clics de souris "
+"ou des appuis sur des touches)."
 
-#: C/photo-wall.c.page:329(p)
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:134 C/magic-mirror.vala.page:94
 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."
+"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 ""
-"Ligne 7 : nous définissons un drapeau de type « static » pour enregistrer "
-"l'état dans lequel nous sommes : en mode mur ou en mode focus. Nous "
-"commençons en mode mur donc aucune image ne possède le focus, par "
-"conséquent, nous paramétrons le drapeau à <code>FALSE</code> (FAUX) au "
-"départ."
+"Pour configurer le répertoire de compilation, modifiez la "
+"<gui>Configuration</gui> à <gui>Par défaut</gui> et cliquez sur "
+"<gui>Exécuter</gui>. Il ne faut le faire qu'une seule fois, à la première "
+"compilation."
 
-#: C/photo-wall.c.page:330(p)
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:140
 msgid ""
-"Line 9: This line of code runs a custom function, "
-"<code>foreach_set_focus_state</code>, for each element in our "
-"<code>actor_list</code>, passing it the address to the <code>is_focused</"
-"code> flag. We'll see the definition of the <code>foreach_set_focus_state</"
-"code> function in the next section."
+"Now 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 ""
+"Nous allons maintenant donner vie à la fenêtre vide. GTK organise "
+"l'interface utilisateur avec des <link href=\"http://www.valadoc.org/gtk";
+"+-2.0/Gtk.Container.html\"><code>Gtk.Container</code></link> qui peuvent "
+"contenir d'autres éléments graphiques et même d'autres conteneurs. Ici, nous "
+"allons utiliser le plus simple conteneur disponible, une boîte <link href="
+"\"http://unstable.valadoc.org/gtk+-2.0/Gtk.Box.html\";><code>Gtk.Box</code></"
+"link> :"
+
+#. (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 ""
-"Ligne 9 : cette ligne de code exécute une fonction personnalisée "
-"<code>foreach_set_focus_state</code>, pour chaque élément de notre "
-"<code>actor_list</code>, en lui transmettant l'adresse du drapeau "
-"<code>is_focused</code>. Nous verrons la définition de la fonction "
-"<code>foreach_set_focus_state</code> dans la prochaine section."
+"Ajoutez les lignes suivantes au dessus de la classe <code>Main</code> :"
 
-#: C/photo-wall.c.page:331(p)
+#. (itstool) path: section/code
+#: C/image-viewer.vala.page:145
+#, no-wrap
 msgid ""
-"Lines 13‒19: Reaching this code means that one image currently has focus and "
-"we want to return to wall mode. The <code>clutter_actor_animate</code> "
-"function is used to animate a <code>ClutterActor</code>'s property or "
-"properties from the current state(s) to the specified state(s). The "
-"arguments are as follows:"
+"\n"
+"private Window window;\n"
+"private Image image;\n"
 msgstr ""
-"Ligne 13-19 : ces lignes sont atteintes lorsqu'une image possède "
-"actuellement le focus et que nous voulons retourner en mode mur. La fonction "
-"<code>clutter_actor_animate</code> est utilisée pour animer une ou des "
-"propriétés d'un <code>ClutterActor</code> à partir du ou des états actuels "
-"vers les états spécifiés. Les arguments sont les suivants :"
 
-#: C/photo-wall.c.page:333(p)
-msgid "The address of the <code>ClutterActor</code> to animate"
-msgstr "L'adresse du <code>ClutterActor</code> à animer"
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:150
+msgid "Now replace the current constructor with the one below:"
+msgstr "Remplacez maintenant le constructeur actuel par celui ci-dessous :"
 
-#: C/photo-wall.c.page:334(p)
+#. (itstool) path: section/code
+#: C/image-viewer.vala.page:151
+#, no-wrap
 msgid ""
-"The animation mode to use. Here we use <code>CLUTTER_LINEAR</code> so that "
-"we have a constant speed for animation."
+"\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 ""
-"Le mode d'animation à utiliser. Ici nous utilisons <code>CLUTTER_LINEAR</"
-"code> pour avoir une vitesse d'animation constante."
 
-#: C/photo-wall.c.page:335(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:176
 msgid ""
-"The duration of the animation in milliseconds. I've chosen 500 ms for this "
-"example."
+"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 ""
-"La durée de l'animation en millisecondes. J'ai choisi 500 ms pour cet "
-"exemple."
+"Les deux premières lignes sont les parties de l'interface graphique "
+"auxquelles nous aurons besoin d'accéder depuis plus d'une méthode. Nous les "
+"déclarons avant afin qu'elles soient accessibles depuis la classe plutôt que "
+"seulement dans la méthode où elles sont crées."
 
-#: C/photo-wall.c.page:336(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:180
 msgid ""
-"The remaining arguments are property/value pairs. Here we want to set the "
-"<code>x</code> value to the starting <code>x</code> value this "
-"<code>ClutterActor</code> was at before being brought into focus."
+"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 ""
-"Les arguments restants sont des paires propriété/valeur. Ici nous voulons "
-"définir la valeur <code>x</code> à la valeur <code>x</code> initiale, où ce "
-"<code>ClutterActor</code> était avant de posséder le focus."
+"Les premières lignes du constructeur créent la fenêtre vide. Les lignes "
+"suivantes créent les éléments graphiques dont nous avons besoin : un bouton "
+"pour ouvrir une image, l'élément graphique image lui-même et la boîte que "
+"nous utilisons comme conteneur."
 
-#: C/photo-wall.c.page:337(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:184
 msgid ""
-"The last argument must always be <code>NULL</code> to indicate that there "
-"are no more properties to be set."
+"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 ""
-"Le dernier argument doit toujours être <code>NULL</code> pour indiquer qu'il "
-"n'y a plus de propriétés à définir."
+"Les appels à <link href=\"http://unstable.valadoc.org/gtk+-2.0/Gtk.Box.";
+"pack_start.html\"><code>pack_start</code></link> ajoutent les deux éléments "
+"graphiques à la boîte et définissent leur comportement. L'image va s'étendre "
+"pour occuper tout l'espace disponible alors que le bouton va prendre juste "
+"la taille nécessaire. Notez que nous ne définissons pas explicitement les "
+"dimensions des éléments graphiques. Avec GTK, ce n'est habituellement pas "
+"nécessaire car cela facilite grandement l'obtention d'une bonne disposition "
+"pour différentes tailles de fenêtre. La boîte est ensuite ajoutée dans la "
+"fenêtre."
 
-#: C/photo-wall.c.page:339(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:191
 msgid ""
-"The <code>depth</code> property needs a little more explaining. We need to "
-"raise the focused image so that it doesn't slide behind other "
-"<code>ClutterActor</code>s. In this section we are returning it to the same "
-"depth as the others on the wall."
+"We need to define what happens when the user clicks on the button. GTK uses "
+"the concept of <em>signals</em>."
 msgstr ""
-"La propriété <code>depth</code> nécessite un peu plus d'explications. Nous "
-"avons besoin de mettre au premier plan l'image qui possède le focus afin "
-"qu'elle ne glisse pas derrière d'autres <code>ClutterActor</code>. Dans "
-"cette section, nous réajustons sa propriété à la même altitude que les "
-"autres images sur le mur."
+"Nous devons définir ce qui se produit lorsque l'utilisateur clique sur le "
+"bouton. GTK utilise le concept de <em>signaux</em>."
 
-#: C/photo-wall.c.page:340(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:192
 msgid ""
-"Depth also determines which <code>ClutterActor</code>s receive events. A "
-"<code>ClutterActor</code> with a higher depth value receives the click "
-"events and can choose whether the event gets sent to <code>ClutterActor</"
-"code>s under it. We'll see how that works in a few steps."
+"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 ""
-"« Depth » détermine aussi quels <code>ClutterActor</code> reçoivent les "
-"événements. Un <code>ClutterActor</code> avec une altitude plus grande "
-"reçoit les événements de clic et peut choisir si l'événement est transmis au "
-"<code>ClutterActor</code> en dessous de lui. Nous verrons comment cela "
-"fonctionne un peu plus loin."
+"Lorsque le <link href=\"http://valadoc.org/gtk+-3.0/Gtk.Button.html";
+"\">bouton</link> est cliqué, il émet le signal <link href=\"http://valadoc.";
+"org/gtk+-3.0/Gtk.Button.clicked.html\"><code>clicked</code></link> que nous "
+"pouvons connecter à des actions (définies dans une <link href=\"https://live.";
+"gnome.org/Vala/SignalsAndCallbacks\">fonction de rappel</link>)."
 
-#: C/photo-wall.c.page:342(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:195
 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."
+"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 ""
-"Ligne 24 : ces lignes sont atteintes lorsque nous sommes actuellement dans "
-"l'état mur et que nous allons donner le focus à un <code>ClutterActor</"
-"code>. Ici nous enregistrons la position de départ afin de pouvoir le "
-"repositionner plus tard."
+"On le fait en utilisant la méthode <code>connect</code> du signal "
+"<code>clicked</code> du bouton qui dans ce cas indique à GTK d'appeler la "
+"fonction de rappel (pas encore définie) <code>on_image_open</code> lorsque "
+"le bouton est cliqué. Nous définirons la <em>fonction de rappel</em> dans la "
+"prochaine section."
 
-#: C/photo-wall.c.page:343(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:199
 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."
+"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 ""
-"Ligne 25 : le fait de paramétrer la propriété <code>reactive</code> du "
-"<code>ClutterActor</code> à <code>TRUE</code> rend ce <code>ClutterActor</"
-"code> réactif aux événements. Dans cet état de focus, le seul "
-"<code>ClutterActor</code> qui doit recevoir des événements est le "
-"<code>ClutterActor</code> qui est actuellement affiché. Un clic sur ce "
-"<code>ClutterActor</code> le repositionne à sa position de départ."
+"Dans la fonction de rappel, nous avons besoin d'accéder aux éléments "
+"graphiques <code>window</code> (fenêtre) et <code>image</code>, c'est "
+"pourquoi nous les définissons comme membres privés (private) au début de "
+"notre classe."
 
-#: C/photo-wall.c.page:344(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:203
 msgid ""
-"Lines 27‒33: This is similar to the above block of code. Notice that we are "
-"setting the the depth to raise it above the other images."
+"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 ""
-"Ligne 27-33 : similaire au bloc de code ci-dessus. Notez que nous "
-"paramétrons l'altitude afin de placer l'acteur devant les autres images."
+"Le dernier appel <code>connect</code> permet d'être sûr que l'application "
+"quitte lorsque la fenêtre est fermée. Le code généré par Anjuta appelle une "
+"fonction de rappel <code>on_destroy</code> qui appelle <link href=\"http://";
+"www.valadoc.org/gtk+-2.0/Gtk.main_quit.html\"><code>Gtk.main_quit</code></"
+"link> bien qu'il soit plus facile de connecter directement notre signal à "
+"<code>main_quit</code>. Vous pouvez supprimer la méthode <code>on_destroy</"
+"code>."
 
-#: C/photo-wall.c.page:345(p)
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:211
 msgid ""
-"Line 37: Here we toggle the <code>is_focused</code> flag to the current "
-"state."
+"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 ""
-"Ligne 37 : ici nous basculons le drapeau <code>is_focused</code> vers l'état "
-"actuel."
+"Nous allons maintenant définir le gestionnaire de signal pour le signal "
+"<code>clicked</code> du bouton ci-dessus. Ajoutez ce code après le "
+"constructeur :"
 
-#: C/photo-wall.c.page:346(p)
+#. (itstool) path: section/code
+#: C/image-viewer.vala.page:214
+#, no-wrap
 msgid ""
-"As mentioned previously, the <code>ClutterActor</code>s with higher "
-"<code>depth</code> values receive events but can allow <code>ClutterActor</"
-"code>s below them to also receive events. Returning <code>TRUE</code> will "
-"stop events from being passed down, while <code>FALSE</code> will pass "
-"events down."
+"\n"
+"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 ""
-"Comme mentionné ci-dessus, les <code>ClutterActor</code> qui possèdent des "
-"valeurs <code>depth</code> plus grandes reçoivent les événements mais "
-"peuvent autoriser les <code>ClutterActor</code> en dessous d'eux à recevoir "
-"les événements également. En renvoyant <code>TRUE</code>, l'acteur empêche "
-"la transmission des événements alors qu'en renvoyant <code>FALSE</code> la "
-"transmission se fait."
 
-#: C/photo-wall.c.page:348(p)
+#. (itstool) path: section/p
+#: C/image-viewer.vala.page:237
+msgid "This is a bit complicated, so let's break it down:"
+msgstr ""
+"C'est un peu compliqué, donc décortiquons cette partie étape par étape :"
+
+#. (itstool) path: note/p
+#: C/image-viewer.vala.page:238
 msgid ""
-"Remember, however, that to receive events the <code>ClutterActor</code>s "
-"must be set <code>reactive</code>."
+"A signal handler is a type of callback method that is called when a signal "
+"is emitted. Here the terms are used interchangeably."
 msgstr ""
-"Rappelez-vous cependant que pour recevoir des événements les "
-"<code>ClutterActor</code> doivent être définis à <code>reactive</code>."
+"Un gestionnaire de signal est un type de fonction de rappel qui est appelé "
+"lorsqu'un signal est émis. Ici les termes sont utilisés indifféremment."
 
-#: C/photo-wall.c.page:352(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:241
 msgid ""
-"The following is the convenience function passed to <code>g_slist_foreach</"
-"code>."
+"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 ""
-"Ce qui suit est la fonction bien commode transmise à <code>g_slist_foreach</"
-"code>."
+"Le premier argument de la fonction de rappel est toujours l'élément "
+"graphique qui a envoyé le signal. Parfois d'autres arguments apparaissent "
+"derrière reliés au signal, mais <em>clicked</em> n'en a aucun."
 
-#: C/photo-wall.c.page:365(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:243
 msgid ""
-"Lines 2‒5: The signature of this function requires two <code>gpointer</"
-"code>s. The first is a pointer to the <code>ClutterActor</code> that our "
-"<code>GSList</code> holds and the other is the <code>is_focused</code> flag "
-"that we've passed in the previous section. We want to cast these and store "
-"them for easy use."
+"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 ""
-"Ligne 2-5 : la signature de cette fonction nécessite deux <code>gpointer</"
-"code>. Le premier est un pointeur vers le <code>ClutterActor</code> que "
-"notre <code>GSList</code> contient et l'autre est le drapeau "
-"<code>is_focused</code> que nous avons transmis dans la section précédente. "
-"Nous allons en garder une trace et les enregistrer pour pouvoir les utiliser "
-"facilement."
+"Dans ce cas, le <code>bouton</code> envoie le signal <code>clicked</code> "
+"qui est connecté à la fonction de rappel <code>on_open_image</code> :"
 
-#: C/photo-wall.c.page:366(p)
+#. (itstool) path: item/code
+#: C/image-viewer.vala.page:244
+#, no-wrap
 msgid ""
-"Line 7: Depending on which boolean value is passed in, the "
-"<code>ClutterActor</code> will be set to respond to events or not."
+"\n"
+"        button.clicked.connect (on_open_image);\n"
 msgstr ""
-"Ligne 7 : en fonction de la valeur booléenne transmise, le "
-"<code>ClutterActor</code> est paramétré pour répondre aux événements ou pas."
 
-#: C/photo-wall.c.page:371(title) C/image-viewer.vala.page:274(title)
-#: C/image-viewer.cpp.page:204(title) C/image-viewer.c.page:216(title)
-#: C/guitar-tuner.vala.page:247(title) C/guitar-tuner.cpp.page:249(title)
-#: C/guitar-tuner.c.page:251(title)
-msgid "Build and run the application"
-msgstr "Construction et lancement de l'application"
+#. (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 ""
+"Le méthode <code>on_open_image</code> prend comme paramètre le bouton qui a "
+"émis le signal :"
 
-#: C/photo-wall.c.page:372(p)
+#. (itstool) path: item/code
+#: C/image-viewer.vala.page:249
+#, no-wrap
 msgid ""
-"All of the code should now be ready to go. All you need now is some pictures "
-"to load. By default, the pictures are loaded from a <file>berlin_images</"
-"file> directory. If you want, you can change the <code>#define "
-"IMAGE_DIR_PATH</code> line near the top to refer to your photo directory, or "
-"create a <file>berlin_images</file> directory by clicking "
-"<guiseq><gui>Project</gui><gui>New Directory...</gui></guiseq> and creating "
-"a <file>berlin_images</file> directory as a subdirectory of the <file>photo-"
-"wall</file> directory. Make sure to put at least twelve images in the "
-"directory!"
+"\n"
+"        public void on_open_image (Button self)\n"
 msgstr ""
-"Le programme complet devrait maintenant être prêt à fonctionner. Tout ce "
-"dont vous avez besoin est de quelques images à charger. Par défaut, les "
-"images sont chargées à partir d'un répertoire <file>berlin_images</file>. "
-"Vous pouvez, si vous voulez, modifier la ligne <code>#define IMAGE_DIR_PATH</"
-"code> qui se trouve au début du fichier pour faire référence à votre "
-"répertoire de photos ou créer un répertoire <file>berlin_images</file> en "
-"cliquant sur <guiseq><gui>Projet</gui><gui>Nouveau répertoire...</gui></"
-"guiseq> et en créant un sous-répertoire <file>berlin_images</file> dans le "
-"répertoire <file>murdephotos</file>. Assurez-vous de mettre au moins 12 "
-"images dans le répertoire !"
 
-#: C/photo-wall.c.page:374(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:254
 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."
+"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 ""
-"Après avoir fait cela, cliquez sur <guiseq><gui>Construire</"
-"gui><gui>Construire le projet</gui></guiseq> pour tout reconstruire, puis "
-"sur <guiseq><gui>Exécuter</gui><gui>Exécuter</gui></guiseq> pour lancer "
-"l'application."
+"La prochaine ligne intéressante est celle où est créée la boîte de dialogue "
+"pour choisir le fichier. Le constructeur de <link href=\"http://www.valadoc.";
+"org/gtk+-3.0/Gtk.FileChooserDialog.html\"><code>FileChooserDialog</code></"
+"link> prend comme argument le titre, la fenêtre parente de la boîte de "
+"dialogue et plusieurs options telles que l'étiquette des boutons et les "
+"actions correspondantes."
 
-#: C/photo-wall.c.page:375(p)
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:256
 msgid ""
-"If you haven't already done so, choose the <file>Debug/src/photo-wall</file> "
+"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 ""
+"Notez que nous utilisons les noms de bouton de la <link href=\"http://";
+"unstable.valadoc.org/gtk+-3.0/Gtk.Stock.html\"><em>collection</em></link> "
+"(stock) Gtk au lieu de saisir manuellement « Cancel » ou « Open ». "
+"L'avantage d'utiliser les noms de la collection est que les étiquettes des "
+"boutons sont déjà traduites dans la langue de l'utilisateur."
+
+#. (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 ""
+"Les deux lignes suivantes limitent la boîte de dialogue <gui>Open</gui> à "
+"l'affichage des seuls fichiers pouvant être ouverts par <em>GtkImage</em> "
+"qui est un élément graphique qui affiche une image. Un objet filtre est "
+"d'abord créé ; ensuite nous ajoutons tous les types de fichiers pris en "
+"charge par <link href=\"http://www.valadoc.org/gdk-pixbuf-2.0/Gdk.Pixbuf.html";
+"\"><code>Gdk.Pixbuf</code></link> (ce qui inclut la plupart des formats "
+"d'image comme PNG ou JPEG) au filtre. Enfin, nous appliquons ce filtre à la "
+"boîte de dialogue <gui>Open</gui>."
+
+#. (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 ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.run.html";
+"\"><code>dialog.run</code></link> affiche la boîte de dialogue <gui>Open</"
+"gui>. La boîte de dialogue attend que l'utilisateur choisisse une image ; "
+"quand c'est fait, <code>dialog.run</code> retourne la valeur <link href="
+"\"http://www.valadoc.org/gtk+-3.0/Gtk.ResponseType.html\";>ResponseType</"
+"link> <code>ResponseType.ACCEPT</code> (il retourne la valeur "
+"<code>ResponseType.CANCEL</code> si l'utilisateur clique sur <gui>Cancel</"
+"gui>). L'instruction <code>switch</code> teste cette réponse."
+
+#. (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 ""
+"Supposons que l'utilisateur a cliqué sur le bouton <gui>Ouvrir</gui>, la "
+"ligne suivante récupère le nom de fichier de l'image sélectionnée par "
+"l'utilisateur et indique à l'élément graphique <code>GtkImage</code> de "
+"charger et d'afficher l'image choisie."
+
+#. (itstool) path: item/p
+#: C/image-viewer.vala.page:274
+msgid "Destroying automatically hides the dialog."
+msgstr "La destruction masque automatiquement la boîte de dialogue."
+
+#. (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 ""
-"Si vous ne l'avez pas déjà fait, choisissez l'application <file>Debug/src/"
-"murdephotos</file> dans la boîte de dialogue qui apparaît. Enfin, cliquez "
-"sur <gui>Lancer</gui> et amusez-vous !"
+"Si ce n'est pas encore fait, sélectionnez l'application <file>src/image-"
+"viewer</file> dans la boîte de dialogue qui s'affiche et cliquez sur "
+"<gui>Exécuter</gui>. Amusez-vous bien !"
 
-#: C/photo-wall.c.page:380(p)
+#. (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=\"photo-wall/photo-wall.c\">reference code</link>."
+"<link href=\"image-viewer/image-viewer.vala\">reference code</link>."
 msgstr ""
 "Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"photo-wall/photo-wall.c\">programme de "
+"programme à ce <link href=\"image-viewer/image-viewer.vala\">programme de "
 "référence</link>."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/paned.py.page:21(None)
+#. (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 ""
+"Paramètre en sorte que lorsque la fenêtre s'ouvre, elle fasse une taille de "
+"départ spécifiée, par exemple 200 X 200 pixels."
+
+#. (itstool) path: credit/name
+#: C/index.page:8
+msgid "GNOME Documentation Team"
+msgstr "Équipe de documentation GNOME"
+
+#. (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 "Exemples de la plateforme de développement GNOME"
+
+#. (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
 #, fuzzy
-#| msgid "@@image: 'media/window.png'; md5=eb0cde3530978619c25bddfaeb453345"
-msgid "@@image: 'media/paned.png'; md5=01e36d8a51ee18313616d63d2e15d993"
-msgstr "@@image: 'media/window.png'; md5=eb0cde3530978619c25bddfaeb453345"
+#| msgid "JavaScript"
+msgctxt "link"
+msgid "JavaScript"
+msgstr "JavaScript"
+
+#. (itstool) path: credit/name
+#: C/js.page:21
+msgid "Ekaterina Gerasimova"
+msgstr ""
+
+#. (itstool) path: page/title
+#: C/js.page:26
+msgid "Tutorials, code samples and platform demos in JavaScript"
+msgstr ""
+"Tutoriels, exemples de code et plateformes de démonstration en JavaScript"
+
+#. (itstool) path: section/title
+#: C/js.page:31
+#, fuzzy
+#| msgid "Gtk Widget Sample Code and Tutorials"
+msgid "Code samples and tutorials"
+msgstr "Exemple de code pour l'élément graphique Gtk et tutoriels"
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/label.png'; md5=734975c18653d88379f983e4501c3fc0"
+msgctxt "_"
+msgid "external ref='media/label.png' md5='734975c18653d88379f983e4501c3fc0'"
+msgstr "@@image: 'media/label.png'; md5=734975c18653d88379f983e4501c3fc0"
+
+#. (itstool) path: info/title
+#: C/label.c.page:8
+#, fuzzy
+#| msgid "Label"
+msgctxt "text"
+msgid "Label (C)"
+msgstr "Étiquette"
+
+#. (itstool) path: info/desc
+#: C/label.c.page:19 C/label.vala.page:18
+msgid "A widget which displays text"
+msgstr "Un élément graphique qui affiche du texte"
+
+#. (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 "Étiquette"
+
+#. (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 "Une étiquette simple"
+
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/3.4/GtkLabel.html\";>GtkLabel</"
+"link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/paned.py.page:7(title)
+#. (itstool) path: info/title
+#: C/label.js.page:8
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Label (JavaScript)"
+msgstr "JavaScript"
+
+#. (itstool) path: info/desc
+#: C/label.js.page:18
+msgid "A label which can contain text"
+msgstr "Une étiquette qui peut contenir du texte"
+
+#. (itstool) path: page/p
+#: C/label.js.page:23
+msgid "A label displaying a friendly message."
+msgstr "Une étiquette qui affiche un message sympathique."
+
+#. (itstool) path: page/code
+#: C/label.js.page:25
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const LabelExample = new Lang.Class ({\n"
+"    Name: 'Label Example',\n"
+"\n"
+"    /* Create the application itself\n"
+"       This boilerplate code is needed to build any GTK+ application. */\n"
+"        _init: function () {\n"
+"            this.application = new Gtk.Application ({\n"
+"                application_id: 'org.example.jslabel',\n"
+"                flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"            });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"            this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                              window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                              title: \"Welcome to GNOME\",\n"
+"                                                              default_height: 100,\n"
+"                                                              default_width: 200 });\n"
+"\n"
+"        // Create the label\n"
+"        this.label = new Gtk.Label ({label: \"Hello GNOME!\"});\n"
+"        this._window.add (this.label);\n"
+"\n"
+"                // Show the window and all child widgets\n"
+"                this._window.show_all();\n"
+"    }\n"
+"\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new LabelExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
+
+#. (itstool) path: item/p
+#: C/label.js.page:32
+#, fuzzy
+#| 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."
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Label.html";
+"\">Gtk.Label</link>"
+msgstr ""
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
+
+#. (itstool) path: info/title
+#: C/label.py.page:9
 #, fuzzy
 #| msgid "Python"
-msgid "Paned (Python)"
+msgctxt "text"
+msgid "Label (Python)"
 msgstr "Python"
 
-#: C/paned.py.page:17(desc)
-msgid "A widget with two adjustable panes"
+#. (itstool) path: info/desc
+#: C/label.py.page:27
+msgid "A widget that displays a small to medium amount of text"
+msgstr ""
+"Un élément graphique qui affiche une petite à moyenne quantité de texte"
+
+#. (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 ""
+"Une autre manière d'obtenir ce que contient cet exemple est de créer "
+"l'étiquette comme étant un exemple d'une autre classe et de l'ajouter à "
+"<code>MyWindow</code> dans la méthode <code>do_activate(self)</code> :"
+
+#. (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
+#, fuzzy, 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"
+#| "class MyLabel(Gtk.Label):\n"
+#| "    def __init__(self):\n"
+#| "        Gtk.Label.__init__(self)\n"
+#| "        self.set_text(\"Hello GNOME!\")\n"
+#| "\n"
+#| "class MyApplication(Gtk.Application):\n"
+#| "    def __init__(self):\n"
+#| "        Gtk.Application.__init__(self)\n"
+#| "\n"
+#| "    def do_activate(self):\n"
+#| "        # create an instance of MyWindow\n"
+#| "        win = MyWindow(self)\n"
+#| "        # create an instance of MyLabel\n"
+#| "        label = MyLabel()\n"
+#| "        # and add it to the window\n"
+#| "        win.add(label)\n"
+#| "        # show the window and everything on it\n"
+#| "        win.show_all()"
+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"
+"<hi>\n"
+"class MyLabel(Gtk.Label):\n"
+"    def __init__(self):\n"
+"        Gtk.Label.__init__(self)\n"
+"        self.set_text(\"Hello GNOME!\")\n"
+"</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"
+"<hi>\n"
+"        label = MyLabel()\n"
+"</hi>\n"
+"        # and add it to the window\n"
+"<hi>\n"
+"        win.add(label)\n"
+"</hi>\n"
+"        # show the window and everything on it\n"
+"        win.show_all()"
 msgstr ""
+"\n"
+"# a class to define a window\n"
+"class MyWindow(Gtk.ApplicationWindow):\n"
+"    def __init__(self, app):\n"
+"        Gtk.Window.__init__(self, title=\"Welcome to GNOME\", application=app)\n"
+"        self.set_default_size(200, 100)\n"
+"\n"
+"# a class to define a label\n"
+"class MyLabel(Gtk.Label):\n"
+"    def __init__(self):\n"
+"        Gtk.Label.__init__(self)\n"
+"        self.set_text(\"Hello GNOME!\")\n"
+"\n"
+"class MyApplication(Gtk.Application):\n"
+"    def __init__(self):\n"
+"        Gtk.Application.__init__(self)\n"
+"\n"
+"    def do_activate(self):\n"
+"        # create an instance of MyWindow\n"
+"        win = MyWindow(self)\n"
+"        # create an instance of MyLabel\n"
+"        label = MyLabel()\n"
+"        # and add it to the window\n"
+"        win.add(label)\n"
+"        # show the window and everything on it\n"
+"        win.show_all()"
+
+#. (itstool) path: section/title
+#: C/label.py.page:82
+msgid "Useful methods for a Label widget"
+msgstr "Méthodes utiles pour un élément graphique étiquette"
 
-#: C/paned.py.page:20(title)
+#. (itstool) path: note/p
+#: C/label.py.page:85
 #, fuzzy
-#| msgid "Gtk.Paned"
-msgid "Paned"
-msgstr "Gtk.Paned"
+#| msgid ""
+#| "An explanation of how to deal with strings and Unicode (and a recap of "
+#| "what these things are) can be found <link xref=\"strings.py.page\">here</"
+#| "link>."
+msgid ""
+"An explanation of how to work with strings in GTK+ can be found in <link "
+"xref=\"strings.py\"/>."
+msgstr ""
+"Vous trouverez une documentation sur la façon de se servir des chaînes de "
+"caractères et des caractères Unicode (ainsi qu'un récapitulatif de ce que "
+"c'est) <link xref=\"strings.py.page\">ici</link>."
 
-#: C/paned.py.page:22(p)
-msgid "Two images in two adjustable panes, horizontally aligned."
+#. (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 ""
+"La fonction <code>set_line_wrap(True)</code> renvoie le texte de l'étiquette "
+"à la ligne s'il excède la largeur de l'élément graphique."
+
+#. (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 ""
+"La fonction <code>set_justify(Gtk.Justification.LEFT)</code> (ou <code>Gtk."
+"Justification.RIGHT, Gtk.Justification.CENTER, Gtk.Justification.FILL</"
+"code>) définit l'alignement des lignes du texte de l'étiquette à une "
+"position relative les unes par rapport aux autres. La méthode n'a aucun "
+"effet sur une étiquette comportant une seule ligne."
 
-#: C/paned.py.page:32(title)
+#. (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 ""
+"Pour décorer le texte, nous pouvons utiliser <code>set_markup(\"text\")</"
+"code>, où <code>\"text\"</code> est mis en <link href=\"http://developer.";
+"gnome.org/pango/stable/PangoMarkupFormat.html\">langage Markup pango</link>. "
+"Voici un exemple :"
+
+#. (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"
+"                 \"in the &lt;a href=\\\"http://www.gtk.org\\\"; \"\n"
+"                 \"title=\\\"Click to find out more\\\"&gt;internets&lt;/a&gt;.\")"
+msgstr ""
+
+#. (itstool) path: info/title
+#: C/label.vala.page:8
 #, fuzzy
-#| msgid "Useful methods for a Scale widget"
-msgid "Useful methods for a Paned widget"
-msgstr "Méthodes utiles pour un élément graphique échelle"
+#| msgid "Label"
+msgctxt "text"
+msgid "Label (Vala)"
+msgstr "Étiquette"
 
-#: C/paned.py.page:33(p)
+#. (itstool) path: page/code
+#: C/label.vala.page:25
+#, no-wrap
 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."
+"\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 ""
 
-#: C/paned.py.page:40(link)
+#. (itstool) path: p/link
+#: C/legal.xml:3
 #, fuzzy
-#| msgid "Gtk.Paned"
-msgid "GtkPaned"
-msgstr "Gtk.Paned"
+#| msgid "Creative Commons Share Alike 3.0"
+msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License"
+msgstr ""
+"Licence Creative Commons Paternité-Partage des Conditions Initiales à "
+"l'Identique 3.0 Unported"
+
+#. (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 ""
 
-#: C/model-view-controller.py.page:8(title)
+#. (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
 #, fuzzy
-#| msgid "The Model/View/Controller design"
-msgid "The Model/View/Controller design (Python)"
-msgstr "Le concept Modèle/Vue/Contrôleur"
+#| msgid "The code has the following purpose:"
+msgid "Under the following conditions:"
+msgstr "L'objectif du programme est le suivant :"
 
-#: C/model-view-controller.py.page:12(desc)
-#: C/model-view-controller.py.page:25(title)
-msgid "The Model/View/Controller design"
-msgstr "Le concept Modèle/Vue/Contrôleur"
+#. (itstool) path: item/title
+#: C/license.page:38
+#, fuzzy
+#| msgid "Introduction"
+msgid "<em>Attribution</em>"
+msgstr "Introduction"
 
-#: C/model-view-controller.py.page:32(p)
+#. (itstool) path: item/p
+#: C/license.page:39
 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>)."
+"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 ""
-"Les deux éléments graphiques <link xref=\"treeview_simple_liststore.py"
-"\">TreeView</link> et <link xref=\"combobox.py\">BoiteCombinee</link> "
-"sont construits sur le concept <em>Modèle/Vue/Contrôleur</em>. Le "
-"<em>Modèle</em> (une implémentation de <code>Gtk.TreeModel</code>, "
-"habituellemnt soit <code>Gtk.TreeStore</code>, soit <code>Gtk.ListStore</"
-"code>) stocke les données ; la<em>Vue</em> (par ex. <code>Gtk.TreeView</"
-"code>, <code>Gtk.ComboBox</code>, ou <code>Gtk.ComboBoxText</code>) obtient "
-"les notifications de modifications et affiche le contenu du modèle. Enfin, "
-"le <em>Contrôleur</em> modifie l'état du modèle (à l'aide de méthodes dans "
-"l'implémentation du modèle, comme <code>append()</code>, ou <code>remove()</"
-"code>) et indique à la Vue ces modifications (à l'aide de signaux comme "
-"<code>\"changed\"</code>)."
-
-#: C/model-view-controller.py.page:37(title)
-msgid "The Model"
-msgstr "Le Modèle"
 
-#: C/model-view-controller.py.page:39(p)
+#. (itstool) path: item/p
+#: C/license.page:47
 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)."
+"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 ""
-"La principale différence entre les deux implémentations principales de "
-"<code>Gtk.TreeModel</code> est que <code>Gtk.ListStore</code> ne contient "
-"que des lignes de données sans enfant, alors que <code>Gtk.TreeStore</code> "
-"contient aussi des lignes de données mais que chacune d'elle peut contenir "
-"des lignes enfants (qui à leur tour peuvent aussi contenir des lignes "
-"enfants et ainsi de suite)."
 
-#: C/model-view-controller.py.page:41(p)
+#. (itstool) path: page/p
+#: C/license.page:53
 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>."
+"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 ""
-"Les données du modèle peuvent être supprimées ou modifiées avec l'itérateur "
-"arborescent et l'indexe de la colonne, ou avec <code>Gtk.TreeIter</code>, ou "
-"<code>Gtk.TreePath</code>."
 
-#: C/model-view-controller.py.page:43(p)
+#. (itstool) path: note/p
+#: C/license.page:60
 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>."
+"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 ""
-"Comme avec l'objet liste intégré dans Python, vous pouvez obtenir le nombre "
-"de lignes avec <code>len()</code> et utiliser des segments pour récupérer ou "
-"définir des valeurs. D'une autre façon, la méthode <code>append()</code> "
-"renvoie un exemple de <code>Gtk.TreeIter</code> qui pointe vers "
-"l'emplacement de la ligne qui vient d'être insérée. L'appel à la fonction "
-"<code>get_iter()</code> récupère aussi un <code>Gtk.TreeIter</code>."
 
-#: C/model-view-controller.py.page:45(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/linkbutton.png'; md5=3712eae8953e87c65a6aa74503b8e32b"
+msgctxt "_"
 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."
+"external ref='media/linkbutton.png' md5='3712eae8953e87c65a6aa74503b8e32b'"
+msgstr "@@image: 'media/linkbutton.png'; md5=3712eae8953e87c65a6aa74503b8e32b"
+
+#. (itstool) path: info/title
+#: C/linkbutton.c.page:8
+#, fuzzy
+#| msgid "LinkButton"
+msgctxt "text"
+msgid "LinkButton (C)"
+msgstr "LinkButton"
+
+#. (itstool) path: info/desc
+#: C/linkbutton.c.page:18 C/linkbutton.vala.page:18
+msgid "Create buttons bound to a URL"
+msgstr "Créer des boutons reliés à un URL"
+
+#. (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 "LinkButton"
+
+#. (itstool) path: page/p
+#: C/linkbutton.c.page:24
+msgid "This button links to the GNOME live webpage."
+msgstr "Ce bouton se connecte à la page Web de GNOME live."
+
+#. (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 ""
-"Comme <code>Gtk.ListStore</code> n'a qu'un seul niveau, c-à-d. les nœuds "
-"n'ont aucun nœud enfant, un chemin est essentiellement représenté par "
-"l'index de la ligne à laquelle vous souhaitez accéder. En ce qui concerne "
-"<code>Gtk.TreeStore</code>, un chemin est représenté par une liste d'indexes "
-"ou une chaîne de caractères. La chaîne se présente sous la forme d'une liste "
-"de nombres séparés par une colonne. Chaque nombre se réfère au décalage à ce "
-"niveau. Donc, le chemin <code>\"0\"</code> se réfère au nœud racine et le "
-"chemin <code>\"2:4\"</code> se réfère au cinquième enfant du troisième nœud."
 
-#: C/model-view-controller.py.page:47(p)
-msgid "Useful methods for a <code>Gtk.TreeModel</code>:"
-msgstr "Méthodes utiles pour un <code>Gtk.TreeModel</code> :"
+#. (itstool) path: item/p
+#: C/linkbutton.c.page:34
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkLinkButton.html";
+"\">GtkLinkButton</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/model-view-controller.py.page:49(p)
+#. (itstool) path: info/title
+#: C/linkbutton.js.page:8
+#, fuzzy
+#| msgid "LinkButton widget"
+msgctxt "text"
+msgid "LinkButton (JavaScript)"
+msgstr "Élément graphique LinkButton"
+
+#. (itstool) path: info/desc
+#: C/linkbutton.js.page:18
+msgid "A button that links to a web page"
+msgstr "Un bouton qui crée un lien vers une page Web"
+
+#. (itstool) path: page/p
+#: C/linkbutton.js.page:23
+msgid "A button that links to live.gnome.org."
+msgstr "Un bouton qui crée un lien vers live.gnome.org."
+
+#. (itstool) path: page/code
+#: C/linkbutton.js.page:25
+#, no-wrap
 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."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const LinkButtonExample = new Lang.Class ({\n"
+"    Name: 'LinkButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"        _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"              application_id: 'org.example.jslinkbutton',\n"
+"              flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"         });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"    this._window = new Gtk.ApplicationWindow  ({ application: this.application,\n"
+"                                                 window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                 title: \"GNOME LinkButton\",\n"
+"                                                 default_height: 50,\n"
+"                                                 default_width: 250 });\n"
+"\n"
+"        // Create the LinkButton and have it link to live.gnome.org\n"
+"        this.LinkButton = new Gtk.LinkButton ({label: \"Link to GNOME live!\",\n"
+"                               uri: \"http://live.gnome.org\"});\n"
+"        this._window.add (this.LinkButton);\n"
+"\n"
+"    // Show the window and all child widgets\n"
+"    this._window.show_all();\n"
+"    },\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new LinkButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"La méthode <code>get_iter(chemin)</code> renvoie un exemple de <code>Gtk."
-"TreeIter</code> qui pointe vers le <code>chemin</code>. Ce chemin est soit "
-"une liste de nombres séparés par une colonne, soit un tuple. Par exemple, la "
-"chaîne de caractères <code>\"10:4:0\"</code> est équivalente au tuple <code>"
-"(10, 4, 0)</code>, car tous deux créent un chemin de niveau 3 pointant vers "
-"le 11ème enfant du nœud racine, le 5ème enfant de cet 11ème enfant et le 1er "
-"enfant de ce 5ème enfant."
 
-#: C/model-view-controller.py.page:50(p)
+#. (itstool) path: item/p
+#: C/linkbutton.js.page:32
 msgid ""
-"<code>iter_next(treeiter)</code> returns a <code>Gtk.TreeIter</code> "
-"instance pointing the node following treeiter at the current level or "
-"<code>None</code> if there is no next iter."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.LinkButton.";
+"html\">Gtk.LinkButton</link>"
 msgstr ""
-"La méthode <code>iter_next(TreeIter)</code> renvoie un exemple de "
-"<code>Gtk.TreeIter</code> qui pointe vers le nœud TreeIter suivant "
-"situé au même niveau, ou vers <code>None</code> s'il n'y a rien derrière."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.LinkButton.";
+"html\">Gtk.LinkButton</link>"
+
+#. (itstool) path: info/title
+#: C/linkbutton.py.page:8
+msgctxt "text"
+msgid "LinkButton (Python)"
+msgstr "LinkButton (Python)"
 
-#: C/model-view-controller.py.page:51(p)
+#. (itstool) path: info/desc
+#: C/linkbutton.py.page:19
+msgid "A button bound to an URL"
+msgstr "Un bouton relié à un URL"
+
+#. (itstool) path: page/p
+#: C/linkbutton.py.page:25
+msgid "A button that links to a web page."
+msgstr "Un bouton qui crée un lien vers une page Web."
+
+#. (itstool) path: section/code
+#: C/linkbutton.py.page:32
+#, fuzzy, 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()"
 msgid ""
-"<code>iter_has_child(treeiter)</code> returns <code>True</code> if "
-"<code>treeiter</code> has children, <code>False</code> otherwise."
+"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 ""
-"La méthode <code>iter_has_child(TreeIter)</code> renvoie la valeur "
-"<code>vrai</code> si <code>TreeIter</code> a des enfants, ou "
-"<code>faux</code> dans le cas contraire."
+"\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()"
 
-#: C/model-view-controller.py.page:52(p)
+#. (itstool) path: section/title
+#: C/linkbutton.py.page:36
+msgid "Useful methods for a LinkButton widget"
+msgstr "Méthodes utiles pour un élément graphique LinkButton"
+
+#. (itstool) path: item/p
+#: C/linkbutton.py.page:38
 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."
+"<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 ""
-"La méthode <code>iter_children(TreeIter)</code> renvoie un exemple de "
-"<code>Gtk.TreeIter</code> qui pointe vers le premier enfant de "
-"<code>TreeIter</code>, ou sur <code>None</code> si "
-"<code>TreeIter</code> n'a pas d'enfant."
+"La méthode <code>get_visited()</code> renvoie l'état "
+"« visited » (<code>True</code> ou <code>False</code>) de l'URI vers lequel "
+"pointe le LinkButton. Le bouton se change en visited quand il est cliqué."
 
-#: C/model-view-controller.py.page:53(p)
+#. (itstool) path: item/p
+#: C/linkbutton.py.page:39
 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."
+"<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 ""
-"La fonction <code>get_iter_first()</code> renvoie un exemple de <code>Gtk."
-"TreeIter</code> qui pointe vers le premier itérateur arborescent (celui du "
-"chemin <code>\"0\"</code>) ou sur <code>None</code> si l'arborescence est "
-"vide."
+"La méthode <code>set_visited(vrai)</code> définit l'état « visited » de "
+"l'URI vers lequel pointe le LinkButton à <code>vrai</code> (même chose pour "
+"<code>faux</code>)."
 
-#: C/model-view-controller.py.page:56(p)
-msgid "Useful methods for a <code>Gtk.ListStore</code>:"
-msgstr "Méthodes utiles pour un <code>Gtk.ListStore</code> :"
+#. (itstool) path: item/p
+#: C/linkbutton.py.page:40
+#, fuzzy
+#| msgid ""
+#| "Each time the button is clicked, the signal <code>\"activate-link\"</"
+#| "code> is emitted. For an explanation of signals and callback functions, "
+#| "see <link xref=\"signals-callbacks.py\">this page</link>."
+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 ""
+"À chaque fois que le bouton es cliqué, le signal <code>\"activate-link\"</"
+"code> est émis. Pour de plus amples informations sur les signaux et les "
+"fonctions de rappel, consultez <link xref=\"signals-callbacks.py\">cette "
+"page</link>."
 
-#: C/model-view-controller.py.page:58(p)
+#. (itstool) path: item/p
+#: C/linkbutton.py.page:48
 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."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkLinkButton.html";
+"\">GtkLinkButton</link>"
 msgstr ""
-"La méthode <code>append(ligne)</code> ajoute une nouvelle ligne à ce magasin "
-"liste, où <code>ligne</code> peut être une liste de valeurs pour chaque "
-"colonne ; <code>ligne</code> peut aussi être omis ou avoir la valeur "
-"<code>None</code> et dans ces cas une colonne vide est ajoutée. La méthode "
-"renvoie un <code>Gtk.TreeIter</code> qui pointe vers la ligne ajoutée."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkLinkButton.html";
+"\">GtkLinkButton</link>"
 
-#: C/model-view-controller.py.page:59(p) C/model-view-controller.py.page:65(p)
+#. (itstool) path: info/title
+#: C/linkbutton.vala.page:8
+msgctxt "text"
+msgid "LinkButton (Vala)"
+msgstr "LinkButton (Vala)"
+
+#. (itstool) path: page/p
+#: C/linkbutton.vala.page:23
+msgid "This button links to GNOME live."
+msgstr "Ce bouton se connecte à la page Web de GNOME live."
+
+#. (itstool) path: page/code
+#: C/linkbutton.vala.page:25
+#, no-wrap
 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."
+"/* 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 ""
-"La méthode <code>remove(iter)</code> supprime l'<code>iter</code> du magasin "
-"<code>Gtk.ListStore</code> et renvoie la valeur <code>vrai</code> si "
-"l'itérateur est valide ou <code>faux</code> dans le cas contraire. Après sa "
-"suppression, l'<code>iter</code> est configuré pour devenir la prochaine "
-"ligne valide."
 
-#: C/model-view-controller.py.page:62(p)
-msgid "Useful methods for a <code>Gtk.TreeStore</code>:"
-msgstr "Méthodes utiles pour un <code>Gtk.TreeStore</code> :"
+#. (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 ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.LinkButton.html\";>Gtk."
+"LinkButton</link>"
 
-#: C/model-view-controller.py.page:64(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/magic-mirror.png'; md5=8171faea6ed3b6ddac0da084c29e4e22"
+msgctxt "_"
 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."
+"external ref='media/magic-mirror.png' md5='8171faea6ed3b6ddac0da084c29e4e22'"
 msgstr ""
-"La méthode <code>append(parent, ligne)</code> ajoute une nouvelle ligne à ce "
-"magasin arborescent ; <code>parent</code> doit être un Gtk.TreeIter valide. "
-"Si la valeur du parent est différente de <code>None</code>, alors elle "
-"ajoute la nouvelle ligne après le dernier enfant du parent, sinon elle "
-"ajoute une ligne au premier niveau ; <code>ligne</code> peut être une liste "
-"de valeurs pour chaque colonne, ou alors peut être omis ou avoir la valeur "
-"<code>None</code> ; dans ce dernier cas, une colonne vide est ajoutée. La "
-"méthode renvoie un <code>Gtk.TreeIter</code> qui pointe vers la ligne "
-"ajoutée."
+"@@image: 'media/magic-mirror.png'; md5=8171faea6ed3b6ddac0da084c29e4e22"
 
-#: C/model-view-controller.py.page:71(title)
-msgid "The View: the TreeView case"
-msgstr "La Vue : le cas de la TreeView"
+#. (itstool) path: info/title
+#: C/magic-mirror.vala.page:8
+#, fuzzy
+#| msgid "4 Magic Mirror"
+msgctxt "text"
+msgid "Magic mirror (Vala)"
+msgstr "4 Miroir magique"
+
+#. (itstool) path: info/desc
+#: C/magic-mirror.vala.page:11
+#, fuzzy
+#| msgid "Use your webcam as a mirror using the GStreamer framework and Gtk+"
+msgid "Use your webcam as a mirror using the GStreamer framework and GTK+"
+msgstr "Utilisation de votre webcam comme miroir avec GStreamer et Gtk+"
 
-#: C/model-view-controller.py.page:73(p)
+#. (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 "Miroir magique"
+
+#. (itstool) path: synopsis/p
+#: C/magic-mirror.vala.page:32
+#, fuzzy
+#| msgid ""
+#| "Your mirror just fell off the wall and broke into a thousand pieces — but "
+#| "you need a mirror to shave your beard off or add some makeup! You only "
+#| "have 15 minutes left before catching the bus to work. So what can you do?"
 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>."
+"<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 ""
-"Une TreeView affiche la structure des éléments enfants et parents "
-"sous la forme des branches d'un arbre. Regardez cet <link xref="
-"\"treeview_treestore.py\">exemple</link>."
+"Votre miroir vient juste de tomber du mur et s'est cassé en mille morceaux. "
+"Mais il vous faut un miroir pour vous raser ou pour vous maquiller ! Il ne "
+"vous reste que 15 minutes avant d'attraper le bus pour aller au travail. "
+"Comment faire ?"
 
-#: C/model-view-controller.py.page:75(p)
+#. (itstool) path: synopsis/p
+#: C/magic-mirror.vala.page:33
 msgid ""
-"The <code>Gtk.TreeViewColumn</code> is used to organize the vertical columns."
+"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 ""
-"La <code>Gtk.TreeViewColumn</code> est utilisée pour organiser les colonnes "
-"verticales."
+"Dans ce tutoriel, nous allons faire un programme qui va vous permettre "
+"d'utiliser votre webcam comme miroir. Vous apprendrez comment :"
 
-#: C/model-view-controller.py.page:77(p)
-msgid "Useful methods for a <code>Gtk.TreeView</code>:"
-msgstr "Méthodes utiles pour une vue <code>Gtk.TreeView</code> :"
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:35
+msgid "Create a GTK+ application"
+msgstr "créer une application GTK+,"
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:36
+msgid "Access your webcam using GStreamer and embed the result into a window"
+msgstr ""
+"accéder à votre webcam en utilisant GStreamer et intégrer le résultat dans "
+"une fenêtre,"
 
-#: C/model-view-controller.py.page:79(p)
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:37
+msgid "Grab photos off your webcam"
+msgstr "récupérer des photos de votre webcam,"
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:42
+msgid "Installed copies of GTK, GStreamer, and a Vala compiler"
+msgstr "l'installation des paquets GTK, GStreamer et d'un compilateur Vala,"
+
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:43
+msgid "Basic knowledge of an object-oriented programming language"
+msgstr "des connaissances de base d'un langage de programmation d'objets."
+
+# BUG : "magic_mirror" au lieu de "guitar-tuner"
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:57
+#, fuzzy
+#| msgid ""
+#| "Choose <gui>Gtk+ (simple)</gui> from the <gui>Vala</gui> tab, click "
+#| "<gui>Forward</gui>, and fill out your details on the next few pages. Use "
+#| "<file>guitar-tuner</file> as project name and directory."
 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."
+"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 ""
-"La méthode <code>set_model(modele)</code> définit le modèle de cette vue "
-"arborescente. Si elle a déjà un modèle défini, la fonction le supprime avant "
-"de lui définir le nouveau. Si la valeur du modèle est <code>None</code>, la "
-"fonction supprime l'ancien modèle."
+"Sélectionnez <gui>Gtk+ (simple)</gui> dans l'onglet <gui>Vala</gui>, cliquez "
+"sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
+"suivantes. Utilisez <file>miroir_magique</file> comme nom de projet et de "
+"répertoire."
 
-#: C/model-view-controller.py.page:80(p)
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:60
 msgid ""
-"<code>get_model()</code> returns the model this tree view is based on, "
-"<code>None</code> if the model is unset."
+"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 ""
-"La méthode <code>get_model()</code> renvoie le modèle sur lequel est "
-"construite cette vue arborescente, ou <code>None</code> si le modèle n'est "
-"pas défini."
+"Désactivez <gui>Utiliser GtkBuilder pour l'interface utilisateur</gui> car "
+"nous allons créer l'interface utilisateur manuellement. Consultez le "
+"tutoriel <link xref=\"guitar-tuner.vala\">Accordeur de guitare</link> à "
+"propos de l'utilisation du constructeur d'interface GtkBuilder."
 
-#: C/model-view-controller.py.page:81(p)
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:65
 msgid ""
-"<code>append_column(column)</code> appends <code>column</code> to the list "
-"of columns."
+"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 ""
-"La méthode <code>append_column(colonne)</code> ajoute <code>colonne</code> à "
-"la liste de colonnes."
+"Assurez-vous que <gui>Configuration des paquets externes</gui> est activé. "
+"Sur la page suivante, sélectionnez <em>gstreamer-0.10</em> dans la liste "
+"pour inclure la bibliothèque <app>GStreamer</app> à votre projet."
 
-#: C/model-view-controller.py.page:82(p)
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:69
 msgid ""
-"<code>get_selection()</code> gets the <code>Gtk.TreeSelection</code> "
-"associated with this tree view."
+"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 ""
-"La méthode <code>get_selection()</code> récupère la sélection <code>Gtk."
-"TreeSelection</code> associée à cette vue arborescente."
+"Cliquez sur <gui>Appliquer</gui> et votre projet est créé. Ouvrez <file>src/"
+"miroir_magique.vala</file> depuis l'onglet <gui>Projet</gui> ou l'onglet "
+"<gui>Fichiers</gui>. Vous devez voir apparaître du code commençant par les "
+"lignes :"
 
-#: C/model-view-controller.py.page:85(p)
-msgid "Useful methods for a <code>Gtk.TreeViewColumn</code>:"
-msgstr "Méthodes utiles pour une <code>Gtk.TreeViewColumn</code> :"
+#. (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 ""
+"Le programme charge et affiche une fenêtre (vide). Vous trouverez plus de "
+"détails ci-dessous ; passez cette liste si vous comprenez les bases :"
 
-#: C/model-view-controller.py.page:87(p)
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:85
 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>"
+"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 ""
-"La méthode <code>add_attribute(renderer, attribut, valeur)</code> ajoute un "
-"mappage d'attribut à cette colonne. <code>attribut</code> est le paramètre "
-"du <code>renderer</code> à définir à partir de la valeur <code>valeur</code>"
+"Le constructeur de la classe principale <code>Main</code> crée une nouvelle "
+"fenêtre et définit son titre. Ensuite, la fenêtre est affichée et un signal "
+"permettant de quitter l'application est connecté à la fermeture de la "
+"fenêtre. Plus d'informations sur les signaux sont données plus tard."
 
-#: C/model-view-controller.py.page:88(p)
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:89
 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>."
+"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 ""
-"La méthode <code>pack_start(renderer, expand)</code> compresse le "
-"<code>renderer</code> au début de cette colonne. Si la valeur "
-"d'<code>expand</code> est <code>False</code>, alors il est alloué au "
-"<code>renderer</code> juste l'espace qui lui est nécessaire. Tout espace "
-"inutilisé est divisé à parts égales entre les cellules pour lesquelles la "
-"valeur est <code>True</code>."
+"La fonction statique <code>main</code> est exécutée par défaut quand vous "
+"lancez une application Vala. Elle appelle d'autres fonctions qui créent la "
+"classe « Main », initialise et ensuite exécute l'application. La fonction "
+"<code>Gtk.Main</code> démarre la boucle principale GTK, qui lance "
+"l'interface utilisateur et commence à écouter les événements (comme des "
+"clics de souris ou des appuis sur des touches)."
+
+#. (itstool) path: section/title
+#: C/magic-mirror.vala.page:98
+msgid "Access the webcam video stream with GStreamer"
+msgstr "Accès au flux vidéo de votre webcam avec GStreamer"
 
-#: C/model-view-controller.py.page:89(p)
+#. (itstool) path: section/p
+#: C/magic-mirror.vala.page:99
 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>."
+"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 ""
-"La méthode <code>pack_end(renderer, expand)</code> compresse le "
-"<code>renderer</code> à la fin de cette colonne. Si la valeur "
-"d'<code>expand</code> est <code>False</code>, alors il est alloué au "
-"<code>renderer</code> juste l'espace qui lui est nécessaire. Tout espace "
-"inutilisé est divisé à parts égales entre les cellules pour lesquelles la "
-"valeur est <code>True</code>."
+"L'architecture multimédia de GStreamer sait gérer les vidéos en provenance "
+"de webcams. Ajoutons GStreamer à notre application et nous pouvons ainsi "
+"accéder au flux vidéo."
 
-#: C/model-view-controller.py.page:90(p)
+#. (itstool) path: section/code
+#: C/magic-mirror.vala.page:101
+#, no-wrap
 msgid ""
-"<code>set_sort_column_id(sort_column_id)</code> sets the column of the model "
-"by which this column (of the view) should be sorted. This also makes the "
-"columnd header clickable."
+"\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 ""
-"La méthode <code>set_sort_column_id(sort_column_id)</code> définit par quel "
-"argument la colonne (de cette vue) doit être triée. Elle rend aussi "
-"cliquable l'en-tête de la colonne."
 
-#: C/model-view-controller.py.page:91(p)
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:126
 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>."
+"First we remove the window we created before because GStreamer will take "
+"care of showing the picture on screen."
 msgstr ""
-"La méthode <code>set_sort_indicator(setting)</code> définit s'il faut "
-"afficher une petite flèche dans l'en-tête de la colonne ; le <code>setting</"
-"code> possible peut être soit <code>True</code> (la flèche est visible), "
-"soit <code>False</code>."
+"Enlevons d'abord la fenêtre créée précédemment, car GStreamer va gérer "
+"l'affichage de l'image à l'écran."
 
-#: C/model-view-controller.py.page:92(p)
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:130
 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>."
+"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 ""
-"La méthode <code>set_sort_order(ordre)</code> modifie l'ordre de tri de la "
-"colonne ; l'<code>ordre</code> peut être soit <code>Gtk.SortType.ASCENDING</"
-"code>, soit <code>Gtk.SortType.DESCENDING</code>."
+"Créons maintenant un élément GStreamer qui va accéder à notre webcam. Nous "
+"utilisons l'élément « Camerabin », qui est un élément caméra tout-en-un et "
+"qui sait faire des photos, des vidéos, appliquer des effets et beaucoup plus "
+"encore. Parfait dans notre cas ! Avec <code>this.camerabin.set_state (Gst."
+"State.PLAYING)</code> nous disons au pipeline GStreamer, que nous venons de "
+"créer, de commencer la lecture. Facile, non ?"
 
-#: C/model-view-controller.py.page:98(title)
-msgid "The View: the ComboBox case"
-msgstr "La Vue : cas de l'élément graphique BoiteCombinee"
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:137
+msgid ""
+"Of course it is also possible to integrate the video more tighly into other "
+"windows but that is an advanced topic that includes some details of the X "
+"Window System we will omit here."
+msgstr ""
+"Bien sûr, il est aussi possible d'ajuster plus précisément la vidéo dans "
+"d'autres fenêtres, mais c'est un sujet avancé, qui inclut des détails sur le "
+"système X Window et que nous ne traiterons pas ici."
 
-#: C/model-view-controller.py.page:100(p)
+#. (itstool) path: item/p
+#: C/magic-mirror.vala.page:141
 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."
+"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 ""
-"Une <code>Gtk.ComboBox</code> permet de sélectionner un élément à partir "
-"d'un menu déroulant, regardez <link xref=\"combobox.py\">cet exemple</link>. "
-"Pour une liste de choix textuels, on peut aussi utiliser plus simplement un "
-"<code>Gtk.ComboBoxText</code>. Les deux peuvent contenir une entrée."
+"Compilez et exécutez le programme à nouveau. Vous obtenez finalement deux "
+"fenêtres. À l'étape suivante, nous allons intégrer la vidéo dans la fenêtre "
+"GTK+."
 
-#: C/model-view-controller.py.page:102(p)
-msgid "Useful methods for a <code>Gtk.ComboBox</code>:"
-msgstr "Méthodes utiles pour un élément graphique <code>Gtk.ComboBox</code> :"
+#. (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 ""
+"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
+"programme à ce <link href=\"magic-mirror/magic-mirror.vala\">programme de "
+"référence</link>. Il existe aussi une <link href=\"magic-mirror/magic-mirror-"
+"advanced.vala\">implémentation plus complète</link> qui intègre la fenêtre à "
+"une fenêtre standard Gtk, mais qui nécessite des techniques avancées ainsi "
+"que l'ajout de boutons pour lire/arrêter l'image."
 
-#: C/model-view-controller.py.page:104(p)
+#. (itstool) path: section/p
+#: C/magic-mirror.vala.page:158
 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."
+"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 ""
-"La méthode statique <code>new_with_entry()</code> crée une nouvelle "
-"BoiteCombinee <code>Gtk.ComboBox</code> avec une entrée ; la méthode "
-"statique <code>new_with_model(model)</code> en crée une nouvelle à partir du "
-"modèle initialisé à <code>model</code> ; et la méthode statique "
-"<code>new_with_model_and_entry(model)</code> est une combinaison des deux "
-"autres."
+"Pour en savoir plus à propos de la programmation en langage Vala, consultez "
+"le <link href=\"http://live.gnome.org/Vala/Tutorial\";>manuel Vala</link>."
 
-#: C/model-view-controller.py.page:105(p)
+#. (itstool) path: section/title
+#: C/magic-mirror.vala.page:163
+msgid "Conclusion"
+msgstr "Conclusion"
+
+#. (itstool) path: section/p
+#: C/magic-mirror.vala.page:164
 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."
+"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 ""
-"La méthode <code>get_active_iter()</code> renvoie un <code>Gtk.TreeIter</"
-"code> qui pointe vers l'élément actif actuel. S'il n'y en a pas, elle "
-"renvoie <code>None</code>."
+"Ça y est ; vous avez réussi à créer une application fonctionnelle pour "
+"webcam en 15 minutes. Maintenant, vous pouvez vous raser ou maquiller votre "
+"joli visage avant de passer une belle journée sur votre lieu de travail, où "
+"vous allez pouvoir épater vos amis et collègues avec une application géniale "
+"faite en 15 minutes."
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/menubar.png'; md5=7b642aaa1628d5e43ab85ac230ac1c78"
+msgctxt "_"
+msgid "external ref='media/menubar.png' md5='7b642aaa1628d5e43ab85ac230ac1c78'"
+msgstr "@@image: 'media/menubar.png'; md5=7b642aaa1628d5e43ab85ac230ac1c78"
+
+#. (itstool) path: info/title
+#: C/menubar.c.page:8
+msgctxt "text"
+msgid "MenuBar (C)"
+msgstr "MenuBar (C)"
+
+#. (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 ""
+"Un composant graphique qui contient des éléments graphiques GtkMenuItem"
 
-#: C/model-view-controller.py.page:106(p)
+#. (itstool) path: page/title
+#: C/menubar.c.page:23 C/menubar.vala.page:23
+msgid "MenuBar"
+msgstr "BarreDeMenu"
+
+#. (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 "Une BarreDeMenu créée avec XML et GtkBuilder."
+
+#. (itstool) path: note/p
+#: C/menubar.c.page:27
 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."
+"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 ""
-"La méthode <code>set_model(model)</code> définit le modèle utilisé par la "
-"boîte combinée à <code>model</code> et annule le modèle précédent s'il "
-"existait déjà. Si la valeur <code>model</code> est <code>None</code>, alors "
-"la fonction annule le paramétrage du modèle. Notez que cette fonction ne "
-"supprime pas les générateurs de rendu de cellules."
 
-#: C/model-view-controller.py.page:107(p)
+#. (itstool) path: page/code
+#: C/menubar.c.page:31
+#, no-wrap
 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)."
+"\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 ""
-"La méthode <code>set_entry_text_column(text_column)</code> définit la "
-"colonne du modèle que cette boîte combinée doit utiliser pour que ses "
-"chaînes de caractères soient du type <code>text_column</code>. La colonne "
-"<code>text_column</code> dans ce modèle de boîte combinée doit être du type "
-"<code>str</code> (ceci n'est pertinent que si cette boîte combinée a été "
-"créée avec la propriété « has-entry » définie à True)."
 
-#: C/model-view-controller.py.page:108(p)
+#. (itstool) path: item/p
+#: C/menubar.c.page:37 C/scrolledwindow.c.page:34
+#, fuzzy
+#| msgid ""
+#| "How to write a <link href=\"http://developer.gnome.org/platform-overview/";
+#| "stable/gtk\">Gtk application</link> in Vala"
 msgid ""
-"<code>set_wrap_width(width)</code> sets the wrap width of this combo box to "
-"be <code>width</code>. The wrap width is basically the preferred number of "
-"columns when you want the popup to be layed out in a grid."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkApplication.html";
+"\">GtkApplication</link>"
 msgstr ""
-"La méthode <code>set_wrap_width(largeur)</code> définit la largeur du texte "
-"de cette boîte combinée à <code>largeur</code>. Basiquement, la largeur du "
-"texte est votre nombre préféré de colonnes quand vous voulez que le message "
-"surgissant soit placé dans une grille."
+"comment écrire une <link href=\"http://developer.gnome.org/platform-overview/";
+"stable/gtk\">application Gtk</link> en Vala,"
 
-#: C/model-view-controller.py.page:111(p)
-msgid "Useful methods for a <code>Gtk.ComboBoxText</code>:"
-msgstr "Méthodes utiles pour une boîte <code>Gtk.ComboBoxText</code> :"
+#. (itstool) path: item/p
+#: C/menubar.c.page:40
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk/stable/GtkAboutDialog.html";
+"\">GtkAboutDialog</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/model-view-controller.py.page:113(p)
+#. (itstool) path: item/p
+#: C/menubar.c.page:41
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"The static method <code>new_with_entry()</code> creates a new empty "
-"<code>Gtk.ComboBoxText</code> with an entry."
+"<link href=\"http://developer.gnome.org/glib/stable/glib-GVariantType.html";
+"\">GtkVariantType</link>"
 msgstr ""
-"La méthode statique <code>new_with_entry()</code> crée une nouvelle "
-"<code>Gtk.ComboBoxText</code> vide avec une entrée."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/model-view-controller.py.page:114(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/menubar_choices.png'; md5=47cdfa12caf85ba20dd3e835bd7f893f"
+msgctxt "_"
 msgid ""
-"<code>append_text(text)</code> appends <code>text</code> to the list of "
-"strings stored in this combo box."
+"external ref='media/menubar_choices.png' "
+"md5='47cdfa12caf85ba20dd3e835bd7f893f'"
 msgstr ""
-"La méthode <code>append_text(texte)</code> ajoute le <code>texte</code> à la "
-"liste des chaînes stockées dans cette boîte combinée."
+"@@image: 'media/menubar_choices.png'; md5=47cdfa12caf85ba20dd3e835bd7f893f"
+
+#. (itstool) path: info/title
+#: C/menubar.py.page:8
+msgctxt "text"
+msgid "MenuBar (Python)"
+msgstr "MenuBar (Python)"
+
+#. (itstool) path: page/title
+#: C/menubar.py.page:28
+#, fuzzy
+#| msgid "A MenuBar created using XML and GtkBuilder."
+msgid "MenuBar created using XML and GtkBuilder"
+msgstr "Une BarreDeMenu créée avec XML et GtkBuilder."
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:34 C/menubar.vala.page:29
+msgid "Create a MenuBar using XML"
+msgstr "Création d'une BarreDeMenu avec XML"
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:35 C/menubar.vala.page:30
+msgid "To create the menubar using XML:"
+msgstr "Pour créer une BarreDeMenu avec XML :"
+
+#. (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 ""
+"créez le fichier <file>barredemenu.ui</file> avec votre éditeur de texte "
+"favorit."
+
+#. (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 "Saisissez la ligne suivante en haut du fichier :"
 
-#: C/model-view-controller.py.page:115(p)
+#. (itstool) path: item/code
+#: C/menubar.py.page:39 C/menubar.vala.page:34
+#, no-wrap
 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)."
+"\n"
+"&lt;?xml version=\"1.0\"? encoding=\"UTF-8\"?&gt;"
 msgstr ""
-"La méthode <code>get_active_text()</code> renvoie la chaîne active actuelle "
-"de cette boîte combinée, ou <code>None</code> si aucune chaîne n'est "
-"sélectionnée. Si la boîte combinée contient une entrée, la méthode renvoie "
-"son contenu (qui n'est pas nécessairement un élément de la liste)."
 
-#: C/model-view-controller.py.page:121(title)
-msgid "The View: the Cellrenderers"
-msgstr "La Vue : les Cellrenderers"
+#. (itstool) path: item/p
+#: C/menubar.py.page:42 C/menubar.vala.page:37
+#, fuzzy
+#| msgid ""
+#| "We want to create the interface which will contain our menubar and it's "
+#| "submenus. Our menubar will contain <gui>File</gui>, <gui>Edit</gui>, "
+#| "<gui>Choices</gui> and <gui>Help</gui> submenus. We add the following XML "
+#| "code to the file:"
+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 ""
+"Nous souhaitons créer une interface contenant notre BarreDeMenu et ses "
+"SousMenus. Notre BarreDeMenu contient les SousMenus <gui>Fichier</gui>, "
+"<gui>Édition</gui>, <gui>Choix</gui> et <gui>Aide</gui>. Ajoutons le code "
+"XML suivant au fichier :"
 
-#: C/model-view-controller.py.page:123(p)
+#. (itstool) path: item/code
+#: C/menubar.py.page:43 C/menubar.vala.page:38
+#, no-wrap
 msgid ""
-"The View makes use of <code>Gtk.CellRenderer</code>s of various types to "
-"draw the data."
+"&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 ""
-"La Vue se sert de <code>Gtk.CellRenderer</code> de différents types pour "
-"dessiner les données."
+"Maintenant, créons le fichier .py et utilisons GtkBuilder pour importer le "
+"fichier <file>barredemenu.ui</file> que nous venons de faire."
 
-#: C/model-view-controller.py.page:125(p)
-msgid "Implementations of <code>Gtk.CellRenderer</code> and useful methods:"
-msgstr "Implémentations de <code>Gtk.CellRenderer</code> et méthodes utiles :"
+#. (itstool) path: section/title
+#: C/menubar.py.page:49 C/menubar.vala.page:43
+msgid "Add the MenuBar to the window using GtkBuilder"
+msgstr "Ajout de la BarreDeMenu à la fenêtre avec GtkBuilder"
 
-#: C/model-view-controller.py.page:127(p)
-msgid "<code>Gtk.CellRendererText</code> - renders text in a cell"
-msgstr "<code>Gtk.CellRendererText</code> - génère du texte dans une cellule"
+#. (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 ""
 
-#: C/model-view-controller.py.page:128(p)
+#. (itstool) path: section/p
+#: C/menubar.py.page:51
 msgid ""
-"<code>Gtk.CellRendererToggle</code> - renders a toggle or radio button in a "
-"cell. Useful methods:"
+"Now run the python application. It should look like the picture at the top "
+"of this page."
 msgstr ""
-"<code>Gtk.CellRendererToggle</code> - génère un bouton de basculement ou de "
-"radio dans une cellule. Méthodes utiles :"
+"Démarrez maintenant l'application python. Vous devriez voir quelque chose "
+"qui ressemble à l'image en haut de cette page."
 
-#: C/model-view-controller.py.page:130(p)
+#. (itstool) path: section/title
+#: C/menubar.py.page:55 C/menubar.vala.page:51
+msgid "Add items to the menus"
+msgstr "Ajout d'éléments aux menus"
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:56 C/menubar.vala.page:52
 msgid ""
-"<code>set_active(setting)</code> - activates or deactivates a cell renderer"
+"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 ""
-"<code>set_active(setting)</code> - active ou désactive un générateur de rendu"
+"Commençons par ajouter 2 éléments au menu <gui>Fichier</gui> : <gui>Nouveau</"
+"gui> et <gui>Quitter</gui>. Pour ce faire, ajoutons une <code>section</code> "
+"contenant ces éléments au SouMenu <code>Fichier</code>. Le fichier "
+"<file>barredemenu.ui</file> devrait ressembler à ceci (les lignes 6 à 13 "
+"comportent la section nouvellement ajoutée) :"
 
-#: C/model-view-controller.py.page:131(p)
-msgid "<code>get_active()</code> - returns whether the cell renderer is active"
+#. (itstool) path: listing/title
+#: C/menubar.py.page:59
+msgid "menubar.ui"
 msgstr ""
-"<code>get_active()</code> - indique si le générateur de rendu est actif"
 
-#: C/model-view-controller.py.page:132(p)
+#. (itstool) path: listing/code
+#. (itstool) path: section/code
+#: C/menubar.py.page:60 C/menubar.vala.page:53
+#, no-wrap
 msgid ""
-"<code>set_radio(radio)</code> - if radio is <code>True</code>, the cell "
-"renderer renders a radio toggle (i.e. a toggle in a group of mutually-"
-"exclusive toggles); if <code>False</code>, it renders a check toggle (a "
-"standalone boolean option)"
+"\n"
+"&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 ""
-"<code>set_radio(radio)</code> - si la valeur radio est <code>True</code>, le "
-"générateur crée un bouton de radio inverseur (par ex. un inverseur d'un "
-"groupe mutuellement exclusif) ; si la valeur est <code>False</code>, il "
-"génère un inverseur de vérification (une option boléenne autonome)"
+"En suivant ce modèle, ajoutez maintenant les éléments <code>Copier</code> et "
+"<code>Coller</code> au SousMenu <code>Édition</code> et un élément <code>À "
+"propos</code> au SousMenu <code>Aide</code>."
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:93 C/menubar.vala.page:87
+msgid "Setup actions"
+msgstr "Définition des actions"
 
-#: C/model-view-controller.py.page:133(p)
+#. (itstool) path: section/p
+#: C/menubar.py.page:95
 msgid ""
-"<code>get_radio()</code> - returns whether we are rendering radio toggles "
-"rather than checkboxes."
+"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 ""
-"<code>get_radio()</code> - indique si nous générons des boutons de "
-"basculement au lieu de cases à cocher."
+"Dans le fichier Python, créons les actions « Nouveau » et « Quitter » et "
+"connectons-les à une fonction de rappel ; par exemple, créons « new » de "
+"cette façon :"
 
-#: C/model-view-controller.py.page:136(p)
-msgid "<code>Gtk.CellRendererPixbuf</code> - renders an image in a cell"
+#. (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 ""
-"<code>Gtk.CellRendererPixbuf</code> - génère un rendu image dans une cellule"
+"\n"
+"new_action = Gio.SimpleAction.new(\"new\", None)\n"
+"new_action.connect(\"activate\", self.new_callback)"
 
-#: C/model-view-controller.py.page:137(p)
+#. (itstool) path: section/p
+#: C/menubar.py.page:100
+msgid "And we create the callback function of \"new\" as"
+msgstr "et la fonction de rappel de « new » de cette façon :"
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:101
+#, no-wrap
 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."
+"\n"
+"def new_callback(self, action, parameter):\n"
+"    print \"You clicked \\\"New\\\"\""
 msgstr ""
-"<code>Gtk.CellRendererCombo</code> - génère un rendu texte dans une "
-"cellule ; mais, alors que <code>Gtk.CellRendererText</code> n'offre qu'une "
-"simple entrée pour modifier le texte, <code>Gtk.CellRendererCombo</code> "
-"offre un élément graphique <code>Gtk.ComboBox</code> pour la même action. Il "
-"peut être utilisé avec ou sans un élément graphique Gtk.Entry associé, en "
-"fonction de la propriété de la valeur « has-entry »."
+"\n"
+"def new_callback(self, action, parameter):\n"
+"    print \"You clicked \\\"New\\\"\""
 
-#: C/model-view-controller.py.page:138(p)
+#. (itstool) path: section/p
+#: C/menubar.py.page:105
+#, fuzzy
+#| msgid ""
+#| "Now, in the XML file, we we connect the menu items to the actions in the "
+#| "XML file by adding the \"action\" attribute:"
 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"
+"Now, in the XML file, we connect the menu items to the actions in the XML "
+"file by adding the \"action\" attribute:"
 msgstr ""
-"<code>Gtk.CellRendererProgress</code> - génère une valeur numérique sous "
-"forme de barre de progression dans une cellule ; il peut afficher du texte "
-"au-dessus de la barre de progression"
+"Maintenant, dans le fichier XML, connectons les éléments du menu aux actions "
+"en y ajoutant l'attibut « action » :"
 
-#: C/model-view-controller.py.page:139(p)
+#. (itstool) path: section/code
+#: C/menubar.py.page:106
+#, no-wrap
 msgid ""
-"<code>Gtk.CellRendererSpinner</code> - renders a spinning animation in a cell"
+"\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 ""
-"<code>Gtk.CellRendererSpinner</code> - génère l'animation d'un indicateur "
-"dans une cellule"
 
-#: C/model-view-controller.py.page:140(p)
-msgid "<code>Gtk.CellRendererSpin</code> - renders a spin button in a cell"
+#. (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 ""
-"<code>Gtk.CellRendererSpin</code> - génère un bouton d'activité dans une "
-"cellule"
+"Notez que pour une action relative à l'application, nous utilisons le "
+"préfixe <code>app.</code>, et que pour une action relative à la fenêtre, "
+"nous utilisons le préfixe <code>win.</code>."
 
-#: C/model-view-controller.py.page:141(p)
+#. (itstool) path: section/p
+#: C/menubar.py.page:114
 msgid ""
-"<code>Gtk.CellRendererAccel</code> - renders a keyboard accelerator in a cell"
+"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 ""
-"<code>Gtk.CellRendererAccel</code> - génère un accélérateur de clavier dans "
-"une cellule"
+"Finalement, nous ajoutons l'action à l'application ou à la fenêtre dans le "
+"fichier python - ainsi, par exemple, <code>app.new</code> est ajouté à "
+"l'application dans la méthode <code>do_startup(self)</code> de cette façon :"
 
-#: C/model-view-controller.py.page:147(title)
-msgid "The Controller: the Selection"
-msgstr "Le contrôleur : la sélection"
+#. (itstool) path: section/code
+#: C/menubar.py.page:115
+#, no-wrap
+msgid ""
+"\n"
+"self.add_action(new_action)"
+msgstr ""
+"\n"
+"self.add_action(new_action)"
 
-#: C/model-view-controller.py.page:149(p)
+#. (itstool) path: section/p
+#: C/menubar.py.page:118
 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."
+"See <link xref=\"signals-callbacks.py\"/> for a more detailed explanation of "
+"signals and callbacks."
 msgstr ""
-"La plupart des applications doivent non seulement afficher des données, mais "
-"aussi réceptionner les événements émis par les utilisateurs. Pour faire "
-"cela, il faut tout simplement obtenir une référence pour un objet "
-"sélectionné et la connecter au signal « changed »."
 
-#: C/model-view-controller.py.page:151(code)
+#. (itstool) path: section/title
+#: C/menubar.py.page:122 C/menubar.vala.page:139
+msgid "Actions: Application or Window?"
+msgstr "Actions : application ou fenêtre ?"
+
+#. (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 ""
+"Ci-dessus, nous créons les actions « new » et « open » comme faisant partie "
+"de la classe MyApplication. Les actions qui gèrent l'application elle-même "
+"(comme « quit »), doivent être créées de la même façon."
+
+#. (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 ""
+"Quelques actions, comme « copy » et « paste » gèrent la fenêtre, pas "
+"l'application. Les actions gérant la fenêtre doivent être créées dans la "
+"classe window."
+
+#. (itstool) path: section/p
+#: C/menubar.py.page:127
+#, fuzzy
+#| msgid ""
+#| "The complete example files contain both application actions and window "
+#| "applications. The window actions are the ones usually included in the "
+#| "<link xref=\"gmenu.py\">application menu</link> also. It is not good "
+#| "practice to include window actions in the applcation menu. For "
+#| "demonstration purposes, the complete example files which follow include "
+#| "XML in the UI file which creates the application menu which includes a "
+#| "\"New\" and \"Open\" item, and these are hooked up to the same actions as "
+#| "the menubar items of the same name."
+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 ""
+"Les fichiers complets de l'exemple contiennent à la fois les actions qui "
+"gèrent l'application et celles qui gèrent la fenêtre. Les actions gérant la "
+"fenêtre sont aussi celles habituellement inclues dans <link xref=\"gmenu.py"
+"\">application menu</link>. Ce n'est pas une bonne façon de faire que "
+"d'inclure les actions gérant la fenêtre dans le menu de l'application. "
+"Néanmoins, pour les besoins de cette démonstration, les fichiers exemple "
+"complets suivants incluent le code XML dans le fichier de l'interface "
+"utilisateur. Celui-ci crée le menu de l'application en y incluant les "
+"éléments « new » et « open » et les lie aux mêmes actions que celles "
+"attribuées aux éléments de la BarreDeMenu ayant le même nom."
+
+#. (itstool) path: section/title
+#: C/menubar.py.page:131 C/menubar.vala.page:133
+msgid "Choices submenu and items with state"
+msgstr "Le SousMenu Choix et les éléments avec leur état"
+
+#. (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 ""
+"Les lignes 30 à 80 inclue de <link xref=\"menubar.py#xml-code\"/> décrivent "
+"le code XML utilisé pour créer le menu <gui>Choix</gui> de l'interface "
+"utilisateur."
+
+#. (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 ""
+"les actions créées jusqu'à présent sont <em>sans état (stateless)</em>, c-à-"
+"d. qu'elles ne prennent pas ni ne dépendent pas d'un état définit par "
+"l'action elle-même. Par contre, les actions que nous avons besoin de créer "
+"pour le SousMenu Choix sont <em>avec état (stateful)</em>. Voici un exemple "
+"de création d'une action stateful :"
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:136
 #, no-wrap
 msgid ""
 "\n"
-"select = tree.get_selection()\n"
-"select.connect(\"changed\", on_tree_selection_changed)\n"
+"shape_action = Gio.SimpleAction.new_stateful(\"shape\", GLib.VariantType.new('s'), 
GLib.Variant.new_string('line'))"
 msgstr ""
 "\n"
-"select = tree.get_selection()\n"
-"select.connect(\"changed\", on_tree_selection_changed)\n"
+"shape_action = Gio.SimpleAction.new_stateful(\"shape\", GLib.VariantType.new('s'), 
GLib.Variant.new_string('line'))"
 
-#: C/model-view-controller.py.page:156(p)
-msgid "Then to retrieve data for the row selected:"
-msgstr "Ensuite, pour récupérer les données pour la colonne sélectionnée :"
+#. (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 ""
+"où les variables de la méthode sont : le nom, le type de paramètre (dans ce "
+"cas, une chaîne - voyez <link href=\"http://developer.gnome.org/glib/";
+"unstable/glib-GVariantType.html\">ici</link> pour une liste complète des "
+"significations des caractères), l'état initial (dans ce cas, « line » - dans "
+"le cas d'une valeur boléenne <code>True</code>, il devrait être <code>Glib."
+"Variant.new_boolean(True)</code> et ainsi de suite. Voyez <link href="
+"\"http://developer.gnome.org/glib/unstable/glib-GVariant.html\";>ici</link> "
+"pour consulter une liste complète)"
 
-#: C/model-view-controller.py.page:158(code)
+#. (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 ""
+"Après avoir créé l'ActionSimple stateful, nous la connectons à la fonction "
+"de rappel et nous l'ajoutons à la fenêtre (ou à l'application selon le cas) "
+"comme auparavant :"
+
+#. (itstool) path: section/code
+#: C/menubar.py.page:143
 #, 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"
+"shape_action.connect(\"activate\", self.shape_callback)\n"
+"self.add_action(shape_action)"
 msgstr ""
 "\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"
+"shape_action.connect(\"activate\", self.shape_callback)\n"
+"self.add_action(shape_action)"
 
-#: C/model-view-controller.py.page:165(p)
-msgid "Useful method for a <code>Gtk.TreeSelection</code>:"
-msgstr "Méthodes utiles pour une <code>Gtk.TreeSelection</code> :"
+#. (itstool) path: section/title
+#: C/menubar.py.page:150 C/menubar.vala.page:154
+msgid "Complete XML UI file for this example"
+msgstr "Fichier XML complet de l'interface utilisateur de cet exemple"
 
-#: C/model-view-controller.py.page:168(p)
+#. (itstool) path: section/code
+#: C/menubar.py.page:151 C/menubar.vala.page:155
+#, no-wrap
 msgid ""
-"<code>set_mode(type)</code> sets the type of selection, where type is one of"
+"&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 "Fichier Python complet de cet exemple"
+
+#. (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 ""
-"La méthode <code>set_mode(type)</code> définit le type de sélection, où type "
-"est l'un des"
 
-#: C/model-view-controller.py.page:170(p)
-msgid "<code>Gtk.SelectionMode.NONE</code> - no selection is possible"
-msgstr "<code>Gtk.SelectionMode.NONE</code> - pas de sélection possible"
+#. (itstool) path: section/title
+#: C/menubar.py.page:159
+msgid "Mnemonics and Accelerators"
+msgstr "Mnémoniques et raccourcis clavier"
 
-#: C/model-view-controller.py.page:171(p)
+#. (itstool) path: section/p
+#: C/menubar.py.page:160 C/menubar.vala.page:162
 msgid ""
-"<code>Gtk.SelectionMode.SINGLE</code> - zero or one element may be selected"
+"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 ""
-"<code>Gtk.SelectionMode.SINGLE</code> - zéro ou un élément peut être "
-"sélectionné"
+"Les étiquettes peuvent contenir des mnémoniques. Les mnémoniques sont les "
+"caractères soulignés dans l'étiquette et sont utilisés pour se déplacer à "
+"l'aide des touches du clavier. Par exemple, « _Fichier » au lieu de "
+"seulement « Fichier » dans l'attribut barredemenu.ui de l'étiquette."
 
-#: C/model-view-controller.py.page:172(p)
+#. (itstool) path: section/p
+#: C/menubar.py.page:161 C/menubar.vala.page:163
 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."
+"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 ""
-"<code>Gtk.SelectionMode.BROWSE</code> - exactement un élément est "
-"sélectionné. Dans certaines circonstances, comme au début ou pendant une "
-"opération de recherche, il est possible qu'il n'y ait aucun élément pouvant "
-"être sélectionné. Ce qui est réellement imposé, c'est l'impossibilité pour "
-"l'utilisateur de désélectionner un élément actuellement sélectionné sauf "
-"s'il en sélectionne un autre."
+"Vous pouvez voir les mnémoniques en appuyant sur la touche <key>Alt</key>. "
+"Pour ouvrir le menu <gui>Fichier</gui>, appuyez sur la combinaison de "
+"touches <keyseq><key>Alt</key><key>F</key></keyseq>."
 
-#: C/model-view-controller.py.page:173(p)
+#. (itstool) path: section/p
+#: C/menubar.py.page:163 C/menubar.vala.page:168
 msgid ""
-"<code>Gtk.SelectionMode.MULTIPLE</code> -any number of elements may be "
-"selected. Clicks toggle the state of an item. Any number of elements may be "
-"selected. The Ctrl key may be used to enlarge the selection, and Shift key "
-"to select between the focus and the child pointed to. Some widgets may also "
-"allow Click-drag to select a range of elements."
+"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 ""
-"<code>Gtk.SelectionMode.MULTIPLE</code> - n'importe quel nombre d'éléments "
-"peuvent être sélectionnés. Un clic sur un élément modifie son état. La "
-"touche Ctrl permet d'élargir la sélection et la touche Maj d'y ajouter les "
-"enfants pointés. Quelques éléments graphiques peuvent aussi permettre le "
-"cliqué-glissé pour sélectionner un ensemble d'éléments."
+"Des raccourcis clavier peuvent être explicitement ajoutés aux définitions de "
+"l'interface utilisateur. Il est par exemple usuel de pouvoir quitter une "
+"application en appuyant sur la combinaison <keyseq><key>Ctrl</key><key>Q</"
+"key></keyseq> ou enregistrer un fichier avec <keyseq><key>Ctrl</key><key>S</"
+"key></keyseq>. Pour ajouter un raccourci clavier à la définition de "
+"l'interface, ajoutez simplement un attribut « accel » à l'élément."
 
-#: C/model-view-controller.py.page:176(p)
+#. (itstool) path: section/p
+#: C/menubar.py.page:164 C/menubar.vala.page:169
+#, fuzzy
+#| msgid ""
+#| "<code mime=\"text\"><![CDATA[<attribute name=\"accel\">&lt;Primary&gt;q</"
+#| "attribute>]]></code> will create the <keyseq><key>Ctrl</key><key>Q</key></"
+#| "keyseq> sequence when added to the <code>Quit</code> label item. Here, "
+#| "\"Primary\" refers to the <key>Ctrl</key> key on a PC or the <key>⌘</key> "
+#| "key on a Mac."
 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."
+"<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 ""
-"La méthode <code>get_selected()</code> renvoie un tuple <code>(modele, "
-"TreeIter)</code>, où <code>modele</code> est le modèle actuel et "
-"<code>TreeIter</code> un <code>Gtk.TreeIter</code> qui pointe soit "
-"vers la ligne actuellement sélectionnée, soit vers None si aucune ligne "
-"n'est sélectionnée. La méthode ne marche pas si le type de sélection est "
-"défini à <code>Gtk.SelectionMode.MULTIPLE</code> ; dans ce cas, utilisez à "
-"la place la fonction <code>get_selected_rows()</code>, qui renvoie une liste "
-"d'exemples <code>Gtk.TreePath</code> de toutes les lignes sélectionnées."
+"Le code <code mime=\"text\"><![CDATA[<attribute name=\"accel\">&lt;"
+"Primary&gt;q</attribute>]]></code> va créer la combinaison "
+"<keyseq><key>Ctrl</key><key>Q</key></keyseq> quand il est ajouté à l'élément "
+"de l'étiquette <code>Quit</code>. Ici, \"Primary\" représente la touche "
+"<key>Ctrl</key> sur un PC ou la touche <key>⌘</key> sur un Mac."
 
-#: C/model-view-controller.py.page:188(link)
-#: C/combobox_multicolumn.py.page:43(link) C/combobox.py.page:40(link)
-msgid "GtkComboBox"
-msgstr "GtkComboBox"
+#. (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 ""
 
-#: C/model-view-controller.py.page:189(link)
-msgid "GtkCellRenderer"
-msgstr "GtkCellRenderer"
+#. (itstool) path: section/title
+#: C/menubar.py.page:174 C/menubar.vala.page:179
+msgid "Translatable strings"
+msgstr "Chaînes de caractères traduisibles"
 
-#: C/model-view-controller.py.page:190(link)
-msgid "The Python Gtk+ 3 Tutorial - Tree and List Widgets"
-msgstr "Le tutoriel Python Gtk+ 3 - éléments graphiques arborescents et listes"
+#. (itstool) path: section/p
+#: C/menubar.py.page:175 C/menubar.vala.page:180
+#, fuzzy
+#| msgid ""
+#| "Since GNOME applications are being translated into <link href=\"http://";
+#| "l10n.gnome.org/languages/\">many languages</link>, it is important that "
+#| "the strings in your application are translable. To make a label "
+#| "translatable, simple set <code>translatable=\"yes\"</code>:"
+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 ""
+"Étant donné que les applications GNOME sont traduites dans <link href="
+"\"http://l10n.gnome.org/languages/\";>beaucoup de langues</link>, il est "
+"important que les chaînes de votre application soient traduisibles. Pour "
+"qu'une étiquette soit traduisible, définissez <code>translatable=\"yes\"</"
+"code> :"
 
-#: C/model-view-controller.py.page:191(link)
-msgid "The Python Gtk+ 3 Tutorial - CellRenderers"
-msgstr "Le tutoriel Python Gtk+ 3 - Générateurs de rendu"
+#. (itstool) path: section/code
+#: C/menubar.py.page:179
+#, no-wrap
+msgid "&lt;attribute name=\"label\" translatable=\"yes\"&gt;Quit&lt;/attribute&gt;"
+msgstr ""
 
-#: C/model-view-controller.py.page:192(link)
-msgid "The Python Gtk+ 3 Tutorial - ComboBox"
-msgstr "Le tutoriel Python Gtk+ 3 - Boîte combinée"
+#. (itstool) path: item/p
+#: C/menubar.py.page:186
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gio/unstable/GSimpleAction.html";
+"\">GSimpleAction</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/messagedialog.vala.page:21(None) C/messagedialog.py.page:22(None)
-#: C/messagedialog.js.page:24(None) C/messagedialog.c.page:23(None)
+#. (itstool) path: item/p
+#: C/menubar.py.page:187 C/toolbar_builder.py.page:197
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"@@image: 'media/messagedialog.png'; md5=1956288274018e2386d9cba96a2101de"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkBuilder.html";
+"\">GtkBuilder</link>"
 msgstr ""
-"@@image: 'media/messagedialog.png'; md5=1956288274018e2386d9cba96a2101de"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/messagedialog.vala.page:7(title)
+#. (itstool) path: info/title
+#: C/menubar.vala.page:8
 #, fuzzy
-#| msgid "MessageDialog"
-msgid "MessageDialog (Vala)"
-msgstr "Boîte de dialogue de message"
+#| msgid "MenuBar"
+msgctxt "text"
+msgid "MenuBar (Vala)"
+msgstr "BarreDeMenu"
 
-#: C/messagedialog.vala.page:17(desc) C/messagedialog.py.page:18(desc)
-#: C/messagedialog.c.page:18(desc)
-msgid "A message window"
-msgstr "Une fenêtre de message"
+#. (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 ""
+"Créons maintenant le fichier .vala et utilisons GtkBuilder pour importer le "
+"fichier <file>barredemenu.ui</file> que nous venons de faire."
 
-#: C/messagedialog.vala.page:20(title) C/messagedialog.py.page:21(title)
-#: C/messagedialog.js.page:23(title) C/messagedialog.c.page:21(title)
-msgid "MessageDialog"
-msgstr "Boîte de dialogue de message"
+#. (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 ""
 
-#: C/messagedialog.vala.page:22(p) C/messagedialog.c.page:24(p)
-msgid "A modal message dialog which can cause the world to explode."
+#. (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 ""
-"Une boîte de dialogue de message modal qui peut faire exploser le monde."
+"Maintenant, compilez le fichier vala et lancez-le. L'application devrait "
+"ressembler à l'image en haut de cette page."
 
-#: C/messagedialog.vala.page:30(link)
-msgid "Gtk.ResponseType"
-msgstr "Gtk.ResponseType"
+#. (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 ""
+"En suivant ce modèle, ajoutez les éléments <code>Copier</code> et "
+"<code>Coller</code> au SousMenu <code>Édition</code> et un élément <code>À "
+"propos</code> au SousMenu <code>Aide</code>. Nous allons attendre pour "
+"ajouter des éléments au SousMenu <link xref=\"menubar.vala#choices\">Choix</"
+"link> d'être un peu plus loin dans ce guide."
 
-#: C/messagedialog.vala.page:31(link) C/messagedialog.js.page:197(link)
-#: C/entry.js.page:32(link) C/combobox.js.page:243(link)
-#: C/comboboxtext.js.page:183(link)
-msgid "Gtk.MessageDialog"
-msgstr "Gtk.MessageDialog"
+#. (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 ""
+"Il es inutile de recompiler le programme vala si vous n'avez apporté des "
+"modifications qu'au fichier barredemenu.ui. Éxecutez seulement votre "
+"application compilée précédemment et les modifications dans l'interface "
+"utilisateur vont être prises en compte."
 
-#: C/messagedialog.vala.page:32(link)
-msgid "Gtk.DialogFlags"
-msgstr "Gtk.DialogFlags"
+#. (itstool) path: section/p
+#: C/menubar.vala.page:88
+msgid "This is a three step process."
+msgstr "Ceci est un processus en trois étapes."
 
-#: C/messagedialog.vala.page:33(link)
-msgid "Gtk.MessageType"
-msgstr "Gtk.MessageType"
+#. (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 ""
+"Premièrement, créons la matrice ActionEntry dans la classe MyApplication. "
+"Une ActionEntry se compose :"
 
-#: C/messagedialog.vala.page:34(link)
-msgid "Gtk.ButtonsType"
-msgstr "Gtk.ButtonsType"
+#. (itstool) path: item/p
+#: C/menubar.vala.page:93
+msgid "the \"action name\" (mandatory)"
+msgstr "du nom « action name » (obligatoire)"
 
-#: C/messagedialog.py.page:7(title)
-#, fuzzy
-#| msgid "MessageDialog"
-msgid "MessageDialog (Python)"
-msgstr "Boîte de dialogue de message"
+#. (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 ""
+"de la fonction de rappel pour connecter le signal « activate » à l'action "
+"(si applicable)"
 
-#: C/messagedialog.py.page:23(p)
+#. (itstool) path: item/p
+#: C/menubar.vala.page:95
 msgid ""
-"A message dialog which prints messages on the terminal, depending on your "
-"choices."
+"the type of the parameter that must be passed to the activate function for "
+"the action (if applicable)"
 msgstr ""
-"Une boîte de dialogue qui affiche les messages sur le terminal en fonction "
-"de vos choix."
+"du type de paramètre qui doit être transmis à la fonction activate pour "
+"l'action (si applicable)"
 
-#: C/messagedialog.py.page:35(title)
-msgid "Useful methods for a MessageDialog widget"
-msgstr "Méthodes utiles pour un élément graphique BoiteDeDialogueDemessage"
+#. (itstool) path: item/p
+#: C/menubar.vala.page:96
+msgid "the initial state for this action (if applicable)"
+msgstr "de l'état initial de cette action (si applicable)"
 
-#: C/messagedialog.py.page:38(p)
+#. (itstool) path: item/p
+#: C/menubar.vala.page:97
+msgid "the callback to connect to \"change-state\" signal (if applicable)"
+msgstr "du rappel à connecter au signal « change-state » (si applicable)"
+
+#. (itstool) path: item/code
+#: C/menubar.vala.page:99
+#, no-wrap
 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)."
+"\n"
+"const ActionEntry[] actions = {\n"
+"    { \"new\", new_cb }, // {\"action name\", callback_function}\n"
+"    { \"quit\", quit_cb }\n"
+"};"
 msgstr ""
-"Dans le constructeur de BoiteDeDialogueDemessage, nous pouvons définir les "
-"drapeaux à <code>Gtk.DialogFlags.DESTROY_WITH_PARENT</code> (pour la "
-"détruire si sa fenêtre parente est détruite), ou à <code>Gtk.DialogFlags."
-"MODAL</code> (aucune interaction avec les autres fenêtres de l'application)."
+"\n"
+"const ActionEntry[] actions = {\n"
+"    { \"new\", new_cb }, // {\"action name\", callback_function}\n"
+"    { \"quit\", quit_cb }\n"
+"};"
 
-#: C/messagedialog.py.page:39(p)
-msgid ""
-"In the constructor of MessageDialog we could set type as any of <code>Gtk."
-"MessageType.INFO, Gtk.MessageType.WARNING, Gtk.MessageType.QUESTION, Gtk."
-"MessageType.ERROR, Gtk.MessageType.OTHER</code> depending on what type of "
-"message we want."
+#. (itstool) path: item/p
+#: C/menubar.vala.page:106
+msgid "Second, we create the callback functions the actions are connected to."
 msgstr ""
-"Dans le constructeur de BoiteDeDialogueDemessage, nous pouvons définir le "
-"type à <code>Gtk.MessageType.INFO, Gtk.MessageType.WARNING, Gtk.MessageType."
-"QUESTION, Gtk.MessageType.ERROR, Gtk.MessageType.OTHER</code> en fonction du "
-"type de message voulu."
+"Deuxièmement, nous créons les fonctions de rappel qui sont connectées aux "
+"actions."
 
-#: C/messagedialog.py.page:40(p)
+#. (itstool) path: item/code
+#: C/menubar.vala.page:107
+#, fuzzy, 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 ();  **Bug #674090**\n"
+#| "}"
 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."
+"\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 ""
-"Dans le constructeur de BoiteDeDialogueDemessage, nous pouvons définir les "
-"boutons à <code>Gtk.ButtonsType.NONE, Gtk.ButtonsType.OK, Gtk.ButtonsType."
-"CLOSE, Gtk.ButtonsType.CANCEL, Gtk.ButtonsType.YES_NO, Gtk.ButtonsType."
-"OK_CANCEL</code>, ou n'importe quel bouton utilisant <code>add_button()</"
-"code> comme dans Gtk.Dialog."
+"\n"
+"void new_cb (SimpleAction action, Variant? parameter) {\n"
+"    print (\"You clicked \\\"New\\\"\\n\");\n"
+"    //new MyWindow (this).show ();\n"
+"}\n"
+"\n"
+"void quit_cb (SimpleAction action, Variant? parameter) {\n"
+"    print (\"You clicked \\\"Quit\\\"\\n\");\n"
+"    //this.quit ();  **Bug #674090**\n"
+"}"
 
-#: C/messagedialog.py.page:41(p)
+#. (itstool) path: item/p
+#: C/menubar.vala.page:118
 msgid ""
-"We could substitute the default image of the MessageDialog with another "
-"image using"
+"And lastly, we connect the menu items to the actions in the XML file by "
+"adding the \"action\" attribute:"
 msgstr ""
-"Nous pouvons substituer l'image par défaut de la BoiteDeDialogueDemessage "
-"par une autre avec"
+"Et troisièmement, nous connectons les éléments du menu aux actions dans le "
+"fichier XML en y ajoutant l'attribut « action » :"
 
-#: C/messagedialog.py.page:42(code)
+#. (itstool) path: item/code
+#: C/menubar.vala.page:119
 #, 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)"
+"&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 ""
-"\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)"
 
-#: C/messagedialog.py.page:47(p)
+#. (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 ""
+"Les lignes 30 à 80 inclues de <link xref=\"menubar.vala#xml-code\"/> "
+"décrivent le code XML utilisé pour créer le menu <gui>Choix</gui> de "
+"l'interface utilisateur."
+
+#. (itstool) path: section/p
+#: C/menubar.vala.page:146
 #, fuzzy
 #| msgid ""
-#| "where <code>Gtk.STOCK_CAPS_LOCK_WARNING</code> is any image from <link "
-#| "href=\"http://developer.gnome.org/gtk3/3.4/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>."
+#| "The complete example files contain both application actions and window "
+#| "applications. The window actions are the ones usually included in the "
+#| "<link xref=\"gmenu.vala\">application menu</link> also. It is not good "
+#| "practice to include window actions in the applcation menu. For "
+#| "demonstration purposes, the complete example files which follow include "
+#| "XML in the UI file which creates the application menu which includes a "
+#| "\"New\" and \"Open\" item, and these are hooked up to the same actions as "
+#| "the menubar items of the same name."
 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>."
+"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 ""
-"où <code>Gtk.STOCK_CAPS_LOCK_WARNING</code> est n'importe quelle image des "
-"<link href=\"http://developer.gnome.org/gtk3/3.4/gtk3-Stock-Items.html";
-"\">Éléments de la collection</link>. Nous pouvons aussi définir n'importe "
-"quelle image comme dans l'élément graphique Image, avec la fonction "
-"<code>image.set_from_file(« nomdufichier.png »)</code>."
+"Les fichiers complets de l'exemple contiennent à la fois les actions qui "
+"gèrent l'application et celles qui gèrent la fenêtre. Les actions gérant la "
+"fenêtre sont aussi celles habituellement inclues dans <link xref=\"gmenu.vala"
+"\">application menu</link>. Ce n'est pas une bonne façon de faire que "
+"d'inclure les actions gérant la fenêtre dans le menu de l'application. "
+"Néanmoins, pour les besoins de cette démonstration, les fichiers exemple "
+"complets suivants incluent le code XML dans le fichier de l'interface "
+"utilisateur. Celui-ci crée le menu de l'application en y incluant les "
+"éléments « new » et « open » et les lie aux mêmes actions que celles "
+"attribuées aux éléments de la BarreDeMenu ayant le même nom."
+
+#. (itstool) path: section/title
+#: C/menubar.vala.page:157
+msgid "Complete Vala file for this example"
+msgstr "Fichier vala complet de cet exemple"
 
-#: C/messagedialog.py.page:48(p)
+#. (itstool) path: section/code
+#: C/menubar.vala.page:158
+#, no-wrap
 msgid ""
-"<code>format_secondary_text(\"some secondary message\")</code> sets a "
-"secondary message. The primary text becomes bold."
+"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 ""
-"La méthode <code>format_secondary_text(« messagesecondaire »)</code> définit "
-"un message secondaire. Le texte principal se met en gras."
 
-#: C/messagedialog.py.page:58(link) C/messagedialog.c.page:38(link)
-msgid "GtkMessageDialog"
-msgstr "GtkMessageDialog"
+#. (itstool) path: section/title
+#: C/menubar.vala.page:161
+msgid "Mnemonics"
+msgstr "Mnémoniques"
 
-#: C/messagedialog.py.page:59(link) C/dialog.py.page:49(link)
-#: C/dialog.c.page:35(link)
-msgid "GtkDialog"
-msgstr "GtkDialog"
+#. (itstool) path: section/title
+#: C/menubar.vala.page:167
+msgid "Accelerators"
+msgstr "Raccourcis clavier"
 
-#: C/messagedialog.py.page:62(link) C/messagedialog.c.page:40(link)
-#: C/aboutdialog.c.page:38(link)
-msgid "GActionMap"
-msgstr "GActionMap"
+#. (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 ""
 
-#: C/messagedialog.js.page:7(title)
+#. (itstool) path: item/p
+#: C/menubar.vala.page:192
 #, fuzzy
-#| msgid "MessageDialog"
-msgid "MessageDialog (JavaScript)"
-msgstr "Boîte de dialogue de message"
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://valadoc.org/gio-2.0/GLib.ActionEntry.html\";>Glib."
+"ActionEntry</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/messagedialog.js.page:20(desc)
-msgid "A popup message attached to a window"
-msgstr "Un message surgissant lié à une fenêtre"
+#. (itstool) path: item/p
+#: C/menubar.vala.page:193
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://valadoc.org/gio-2.0/Gtk.Builder.html\";>Gtk.Builder</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/messagedialog.js.page:25(p)
+#. (itstool) path: 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 ""
-"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."
+"external ref='media/menubutton.png' md5='99eedc5ef2d6c56d32ca9ae7f3f3320f'"
 msgstr ""
-"Une BoiteDeDialogueDemessage contient un message modale surgissant auquel "
-"vous devez d'abord répondre avant de pouvoir retourner travailler dans la "
-"fenêtre à laquelle elle est liée. Elle peut faire exploser le monde (ou au "
-"moins elle le prétend). Pour faire apparaître le message surgissant quand "
-"vous exécutez cet exemple, cliquez sur « Message » dans le menu de son "
-"application : c'est le menu qui s'affiche quand vous cliquez sur le nom de "
-"l'application dans le coin supérieur gauche de l'écran, à côté de "
-"« Activités »."
 
-#: C/messagedialog.js.page:26(p)
+#. (itstool) path: info/title
+#: C/menubutton.c.page:8 C/menubutton.py.page:8
+#, fuzzy
+#| msgid "MenuButton"
+msgctxt "text"
+msgid "MenuButton"
+msgstr "MenuButton"
+
+#. (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 "Un élément graphique qui affiche un menu quand il est cliqué"
+
+#. (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 "MenuButton"
+
+#. (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 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."
+"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 ""
-"La différence entre une BoiteDeDialogueDemessage et une <link xref=\"dialog."
-"js\">Boîte de dialogue</link> est que la boîte de dialogue peut contenir "
-"n'importe quel élément graphique ou contenu que vous souhaitez y mettre, "
-"alors que la BoiteDeDialogueDemessage est juste un moyen pratique de faire "
-"s'afficher un message basique surgissant avec des boutons."
+"L'élément graphique GtkMenuButton sert à afficher un menu quand il est "
+"cliqué. Le menu peut provenir soit d'un GtkMenu, soit d'un GMenuModel "
+"abstrait. L'élément graphique GtkMenuButton peut contenir n'importe quel "
+"élément graphique enfant valide. Ceci dit, il peut contenir pratiquement "
+"n'importe quel autre GtkWidget standard. L'enfant le plus souvent utilisé "
+"est la flèche GtkArrow fournie."
 
-#: C/messagedialog.js.page:69(p) C/comboboxtext.js.page:65(p)
+#. (itstool) path: note/p
+#: C/menubutton.c.page:25 C/menubutton.js.page:27
+#, fuzzy
+#| msgid "You need to be running GNOME 3.6 for the MenuButton to work."
+msgid "You need to be running GNOME 3.6 or later for the MenuButton to work."
+msgstr ""
+"Pour que le MenuButton fonctionne, il vous faut avoir installé GNOME 3.6"
+
+#. (itstool) path: section/code
+#: C/menubutton.c.page:31
+#, no-wrap
 msgid ""
-"All the code for this sample goes in the MessageDialogExample class. The "
-"above code creates a <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/";
-"gjs/Gtk.Application.html\">Gtk.Application</link> for our widgets and window "
-"to go in."
+"#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 ""
-"Tout le code de cet exemple va dans la classe MessageDialogExample. Le code "
-"ci-dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/";
-"gjs/Gtk.Application.html\">Gtk.Application</link> pour nos éléments "
-"graphiques et la fenêtre qui les contient."
 
-#: C/messagedialog.js.page:91(p)
+#. (itstool) path: item/p
+#: C/menubutton.c.page:38
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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>"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMenuButton.html";
+"\">GtkMenuButton</link>"
 msgstr ""
-"Dans cet exemple, nous avons dans la BoiteDeDialogueDemessage une <link xref="
-"\"label.js\">Étiquette</link> contenant un stupide message d'avertissement."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/messagedialog.js.page:95(title)
-msgid "Creating the application's menu"
-msgstr "Création du menu de l'application"
+#. (itstool) path: item/p
+#: C/menubutton.c.page:39
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMenu.html";
+"\">GtkMenu</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/messagedialog.js.page:121(p)
+#. (itstool) path: item/p
+#: C/menubutton.c.page:40
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"https://developer.gnome.org/gio/unstable/GMenuModel.html";
+"\">GMenuModel</link>"
 msgstr ""
-"Ici, nous construisons le <link xref=\"gmenu.js\">GMenu</link> où nous "
-"mettons le bouton « Message » qui active la BoiteDeDialogueDemessage. le "
-"GMenu est le menu qui s'affiche quand vous cliquez sur le nom de "
-"l'application dans le coin supérieur gauche de l'écran, à côté de "
-"« Activités ». Notre menu ne contient que deux options : Message et Quit."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/messagedialog.js.page:125(title)
-msgid "Creating the MessageDialog"
-msgstr "Création de la BoiteDeDialogueDemessage"
+#. (itstool) path: item/p
+#: C/menubutton.c.page:41
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkArrow.html";
+"\">GtkArrow</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/messagedialog.js.page:141(p)
+#. (itstool) path: info/title
+#: C/menubutton.js.page:8
+#, fuzzy
+#| msgid "MenuButton"
+msgctxt "text"
+msgid "MenuButton (JavaScript)"
+msgstr "MenuButton"
+
+#. (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 ""
-"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."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const Application = new Lang.Class ({\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application ({ application_id: 'org.example.myapp',\n"
+"                                                  flags: Gio.ApplicationFlags.FLAGS_NONE });\n"
+"\n"
+"       //connect to 'activate' and 'startup' signals to the callback functions\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"       this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    //create the UI (in this case it's just the ApplicationWindow)\n"
+"    _buildUI: function() {\n"
+"        this._window = new Gtk.ApplicationWindow({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"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 = new 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: function() {\n"
+"    print(\"You clicked \\\"New\\\"\");\n"
+"    },\n"
+"\n"
+"    _showAbout: function() {\n"
+"        print(\"You clicked \\\"About\\\"\");\n"
+"    },\n"
+"\n"
+"    //create the menu items and connect the signals to the callback functions.\n"
+"    _initMenus: function() {\n"
+"        let newAction = new Gio.SimpleAction({ name: 'new' });\n"
+"        newAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showNew();\n"
+"            }));\n"
+"        this.application.add_action(newAction);\n"
+"\n"
+"        let aboutAction = new Gio.SimpleAction({ name: 'about' });\n"
+"        aboutAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showAbout();\n"
+"            }));\n"
+"        this.application.add_action(aboutAction);\n"
+"\n"
+"        let quitAction = new Gio.SimpleAction({ name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"         this.application.add_action(quitAction);\n"
+"\n"
+"        this.menuModel = new Gio.Menu();\n"
+"\n"
+"        this.menuItemNew = Gio.MenuItem.new(\"New\", 'app.new');\n"
+"        this.menuItemAbout = Gio.MenuItem.new(\"About\", 'app.about');\n"
+"        this.fileMenuItem = Gio.MenuItem.new(\"Other\", null);\n"
+"\n"
+"        this.menuModel.append_item(this.menuItemNew);\n"
+"        this.menuModel.append_item(this.menuItemAbout);\n"
+"\n"
+"        //submenu\n"
+"        this.subMenu = new Gio.Menu();\n"
+"        this.fileMenuItem.set_submenu(this.subMenu);\n"
+"        this.menuItemQuit = Gio.MenuItem.new(\"Quit\", 'app.quit');\n"
+"        this.subMenu.append_item(this.menuItemQuit);\n"
+"        this.menuModel.append_item(this.fileMenuItem);\n"
+"    },\n"
+"\n"
+"    //callback function for 'activate' signal\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    //callback function for 'startup' signal\n"
+"    _onStartup: function() {\n"
+"        //You must call _initMenus() before calling _buildUI().\n"
+"        this._initMenus();\n"
+"        this._buildUI();\n"
+"    }\n"
+"});\n"
+"\n"
+"//run the application\n"
+"let app = new Application();\n"
+"app.application.run(ARGV);\n"
 msgstr ""
-"Pour que notre BoiteDeDialogueDemessage soit liée à la fenêtre principale, "
-"nous définissons sa propriété modale à vrai et la configurons comme une "
-"\"transient_for\" _window. Ensuite, nous définissons quel type de bouton et "
-"quel genre de message nous voulons y mettre (celui-ci va déterminer le type "
-"d'icône qui accompagnera le message). Enfin nous y saisissons le texte du "
-"message et connectons son signal « response » à la fonction de rappel qui le "
-"prend en charge."
 
-#: C/messagedialog.js.page:142(p)
-msgid "Here are some resources for making your own MessageDialogs:"
+#. (itstool) path: item/p
+#: C/menubutton.js.page:33 C/menubutton.vala.page:33
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/3.5/gtk3-GtkMenuButton.html";
+"\">MenuButton</link>"
 msgstr ""
-"Voici quelques ressources pour bâtir vos propres BoiteDeDialogueDemessage"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (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 ""
+"Pour que le MenuButton fonctionne, il vous faut avoir installé GNOME 3.6"
 
-#: C/messagedialog.js.page:144(link)
-msgid "List of button types"
-msgstr "Liste de types de boutons"
+#. (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 ""
 
-#: C/messagedialog.js.page:145(link)
-msgid "List of message types"
-msgstr "Liste de types de messages"
+#. (itstool) path: section/title
+#: C/menubutton.py.page:42
+#, fuzzy
+#| msgid "Useful methods for a Button widget"
+msgid "Useful methods for a MenuButton widget"
+msgstr "Méthode utiles pour un élément graphique Bouton"
 
-#: C/messagedialog.js.page:172(p)
+#. (itstool) path: section/p
+#: C/menubutton.py.page:43
 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."
+"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 ""
-"Cette fonction prend deux paramètres : la BoiteDeDialogueDemessage et son "
-"identifiant response_id. Les deux sont fournis automatiquement (il n'y a pas "
-"besoins d'intervention manuelle pour que cela fonctionne). Ici, nous "
-"utilisons un interrupteur simple pour modifier le texte « warning label » en "
-"fonction de l'option sélectionnée. Le DELETE_EVENT se produit en appuyant "
-"sur la touche Échap pour annuler la BoiteDeDialogueDemessage au lieu de "
-"cliquer sur OK ou Cancel. Quel que soit votre choix, le message surgissant "
-"est détruit ensuite."
 
-#: C/messagedialog.js.page:179(p)
+#. (itstool) path: section/p
+#: C/menubutton.py.page:45
 msgid ""
-"Finally, we create a new instance of the finished MessageDialogExample "
-"class, and set the application running."
+"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 ""
-"Pour finir, nous créons un nouvel exemple de la classe MessageDialogExample "
-"terminée et nous démarrons l'application."
 
-#: C/messagedialog.c.page:7(title)
+#. (itstool) path: section/p
+#: C/menubutton.py.page:49
 #, fuzzy
-#| msgid "MessageDialog"
-msgid "MessageDialog (C)"
-msgstr "Boîte de dialogue de message"
+#| msgid ""
+#| "<code>get_text()</code> and <code>set_text(\"some text\")</code> can be "
+#| "used to get and set the content for the entry."
+msgid ""
+"<code>set_align_widget(alignment)</code> and <code>set_direction(direction)</"
+"code> can be used to set these properties."
+msgstr ""
+"Les fonctions <code>get_text()</code> et <code>set_text(\"some text\")</"
+"code> peuvent être utilisées pour obtenir et définir le contenu de l'entrée."
 
-#: C/messagedialog.c.page:25(p)
+#. (itstool) path: item/p
+#: C/menubutton.py.page:56
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMenuButton.html";
+"\">MenuButton</link>"
 msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/messagedialog.c.page:36(link)
+#. (itstool) path: info/title
+#: C/menubutton.vala.page:8
 #, fuzzy
-#| msgid "GtkApplication"
-msgid "GApplication"
-msgstr "GtkApplication"
+#| msgid "MenuButton"
+msgctxt "text"
+msgid "MenuButton (Vala)"
+msgstr "MenuButton"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/message-board.c.page:36(None)
+#. (itstool) path: page/code
+#: C/menubutton.vala.page:28
+#, no-wrap
 msgid ""
-"@@image: 'media/message-board.ogv'; md5=beb80c4538776dc2cdd26c95abea5027"
+"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: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/message-board.ogv'; md5=beb80c4538776dc2cdd26c95abea5027"
+msgctxt "_"
+msgid ""
+"external ref='media/message-board.ogv' md5='beb80c4538776dc2cdd26c95abea5027'"
 msgstr ""
 "@@image: 'media/message-board.ogv'; md5=beb80c4538776dc2cdd26c95abea5027"
 
-#: C/message-board.c.page:7(title)
+#. (itstool) path: info/title
+#: C/message-board.c.page:8
 #, fuzzy
 #| msgid "Message Board"
-msgid "Message Board (C)"
+msgctxt "text"
+msgid "Message board (C)"
 msgstr "Visionneur de messages"
 
-#: C/message-board.c.page:10(desc)
+#. (itstool) path: info/desc
+#: C/message-board.c.page:11
 msgid "A simple program using WebKitGTK+ and the DOM."
 msgstr "Un programme simple utilisant WebKitGTK+ et DOM."
 
-#: C/message-board.c.page:14(name) C/index.page:12(name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/message-board.c.page:15(email) C/index.page:13(email)
-msgid "shaunm gnome org"
-msgstr "shaunm gnome org"
-
-#: C/message-board.c.page:16(years) C/index.page:14(years)
-msgid "2010"
-msgstr "2010"
-
-#: C/message-board.c.page:21(title)
-msgid "Message Board"
+#. (itstool) path: page/title
+#: C/message-board.c.page:26
+#, fuzzy
+#| msgid "Message Board"
+msgid "Message board"
 msgstr "Visionneur de messages"
 
-#: C/message-board.c.page:26(p)
+#. (itstool) path: item/p
+#: C/message-board.c.page:31
 msgid "How to display a web page with WebKit."
 msgstr "comment afficher une page Web avec Webkit,"
 
-#: C/message-board.c.page:27(p)
+#. (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 ""
 "comment manipuler le contenu d'une page Web en utilisant les fonctions DOM "
 "de WebKit."
 
-#: C/message-board.c.page:30(p)
+#. (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 "
@@ -9038,7 +24174,8 @@ msgstr ""
 "associer des fonctions de rappel à des signaux. Consultez <link xref=\"image-"
 "viewer.c\"/> pour apprendre les bases de GTK+."
 
-#: C/message-board.c.page:43(p)
+#. (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 "
@@ -9050,7 +24187,8 @@ msgstr ""
 "afficher des pages Web sur internet, mais aussi pour créer de riches "
 "interfaces utilisateur qui peuvent être facilement stylisées par CSS."
 
-#: C/message-board.c.page:48(p)
+#. (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 "
@@ -9062,15 +24200,21 @@ msgstr ""
 "texte et de l'ajouter à une liste de messages en HTML. Avant de débuter, "
 "vous devez créer un projet dans Anjuta."
 
-#: C/message-board.c.page:54(p)
+#. (itstool) path: item/p
+#: C/message-board.c.page:59
+#, fuzzy
+#| msgid ""
+#| "In Anjuta, click <guiseq><gui>File</gui><gui>New</gui><gui>Project</gui></"
+#| "guiseq> to open the new project assistant."
 msgid ""
-"In Anjuta, click <guiseq><gui>File</gui><gui>New</gui><gui>Project</gui></"
+"In Anjuta, click <guiseq><gui>File</gui><gui>New</gui> <gui>Project</gui></"
 "guiseq> to open the new project assistant."
 msgstr ""
 "Dans Anjuta, cliquez sur <guiseq><gui>Fichier</gui><gui>Nouveau</"
 "gui><gui>Projet</gui></guiseq> pour ouvrir l'assistant de nouveau projet."
 
-#: C/message-board.c.page:56(p)
+#. (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>."
@@ -9078,7 +24222,8 @@ msgstr ""
 "Sélectionnez <gui>GTK+ (simple)</gui> dans l'onglet <gui>C</gui> et cliquez "
 "sur <gui>Continuer</gui>."
 
-#: C/message-board.c.page:58(p)
+#. (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>."
@@ -9087,7 +24232,8 @@ msgstr ""
 "<input>message-board</input> comme nom de projet et cliquez sur "
 "<gui>Continuer</gui>."
 
-#: C/message-board.c.page:61(p)
+#. (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."
@@ -9095,7 +24241,8 @@ msgstr ""
 "Désactivez l'option <gui>Utiliser GtkBuilder pour l'interface utilisateur</"
 "gui> car ce tutoriel construit l'interface manuellement."
 
-#: C/message-board.c.page:64(p)
+#. (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</"
@@ -9108,7 +24255,8 @@ msgstr ""
 "gui>. Sur la page <gui>Configuration des paquets externes</gui>, cochez "
 "<gui>webkitgtk-3.0</gui>."
 
-#: C/message-board.c.page:70(p)
+#. (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 "
@@ -9124,12 +24272,14 @@ msgstr ""
 "faut avant tout y inclure les entêtes WebKit. Après la ligne contenant "
 "<code>gtk/gtk.h</code>, ajoutez cette ligne :"
 
-#: C/message-board.c.page:77(code)
+#. (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;"
 
-#: C/message-board.c.page:79(p)
+#. (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 "
@@ -9144,9 +24294,15 @@ msgstr ""
 "Acceptez celles qui vous sont proposées par défaut, et cliquez sur "
 "<gui>Exécuter</gui>."
 
-#: C/message-board.c.page:85(p)
+#. (itstool) path: section/p
+#: C/message-board.c.page:90
+#, fuzzy
+#| msgid ""
+#| "You should now be able to run the program. Click <guiseq><gui>Run</"
+#| "gui><gui>Execute</gui></guiseq> or just press <key>F3</key>. You should "
+#| "see an empty window appear."
 msgid ""
-"You should now be able to run the program. Click <guiseq><gui>Run</"
+"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 ""
@@ -9154,11 +24310,13 @@ msgstr ""
 "<guiseq><gui>Exécuter</gui><gui>Exécuter</gui></guiseq>, ou appuyez sur "
 "<key>F3</key>. Une fenêtre vide s'ouvre."
 
-#: C/message-board.c.page:91(title)
+#. (itstool) path: section/title
+#: C/message-board.c.page:96
 msgid "Lay out your window and web view"
 msgstr "Mise en forme de votre fenêtre et de votre affichage Web"
 
-#: C/message-board.c.page:93(p)
+#. (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 "
@@ -9170,7 +24328,47 @@ msgstr ""
 "champ texte ainsi qu'une vue Web et les placer dans une fenêtre. Trouvez la "
 "fonction <code>create_window</code> et remplacez-la par ce qui suit :"
 
-#: C/message-board.c.page:133(p)
+#. (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 "
@@ -9185,7 +24383,8 @@ msgstr ""
 "fonction <code>gtk_main_quit</code> fait partie de GTK et elle ferme "
 "l'application."
 
-#: C/message-board.c.page:139(p)
+#. (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 "
@@ -9199,7 +24398,8 @@ msgstr ""
 "code> définit la largeur des marges (en pixels) entre chaque enfant et la "
 "ligne suivante ajoute une bordure de six pixels autour du tout."
 
-#: C/message-board.c.page:145(p)
+#. (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 "
@@ -9216,7 +24416,8 @@ msgstr ""
 "largeur des marges à zéro, car vous autorisez la boîte à remplir tout "
 "l'espace libre."
 
-#: C/message-board.c.page:152(p)
+#. (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 "
@@ -9233,7 +24434,8 @@ msgstr ""
 "fenêtre de défilement (et donc la vue Web) à occuper tout l'espace "
 "supplémentaire disponible dans la boîte."
 
-#: C/message-board.c.page:159(p)
+#. (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 "
@@ -9244,12 +24446,15 @@ msgstr ""
 "appelant <code>webkit_web_view_load_string</code> avec les arguments "
 "suivants :"
 
-#: C/message-board.c.page:165(code)
-#, no-wrap
-msgid "WEBKIT_WEB_VIEW (view)"
+#. (itstool) path: item/title
+#: C/message-board.c.page:170
+#, fuzzy
+#| msgid "WEBKIT_WEB_VIEW (view)"
+msgid "<code>WEBKIT_WEB_VIEW (view)</code>"
 msgstr "WEBKIT_WEB_VIEW (view)"
 
-#: C/message-board.c.page:166(p)
+#. (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 "
@@ -9259,21 +24464,27 @@ msgstr ""
 "<code>GtkWidget*</code>, il vous faut utiliser <code>WEBKIT_WEB_VIEW</code> "
 "pour intégrer l'objet."
 
-#: C/message-board.c.page:171(code)
-#, no-wrap
-msgid "\"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;\""
+#. (itstool) path: item/title
+#: C/message-board.c.page:176
+#, fuzzy
+#| msgid "\"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;\""
+msgid "<code>\"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;\"</code>"
 msgstr "\"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;\""
 
-#: C/message-board.c.page:172(p)
+#. (itstool) path: item/p
+#: C/message-board.c.page:177
 msgid "The simplest HTML file you could possibly write."
 msgstr "Le plus simple fichier HTML que vous pourriez écrire."
 
-#: C/message-board.c.page:175(code)
-#, no-wrap
-msgid "\"text/html\""
+#. (itstool) path: item/title
+#: C/message-board.c.page:180
+#, fuzzy
+#| msgid "\"text/html\""
+msgid "<code>\"text/html\"</code>"
 msgstr "« text/html »"
 
-#: C/message-board.c.page:176(p)
+#. (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."
@@ -9281,12 +24492,13 @@ msgstr ""
 "Le type MIME du contenu que vous avez fourni. Dans ce cas vous utilisez du "
 "HTML simple."
 
-#: C/message-board.c.page:180(code)
-#, no-wrap
-msgid "\"UTF-8\""
-msgstr "« UTF-8 »"
+#. (itstool) path: item/title
+#: C/message-board.c.page:185
+msgid "<code>\"UTF-8\"</code>"
+msgstr ""
 
-#: C/message-board.c.page:181(p)
+#. (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 "
@@ -9297,12 +24509,13 @@ msgstr ""
 "pratique de spécifier UTF-8, car c'est le codage par défaut utilisé dans "
 "toute la plateforme GNOME."
 
-#: C/message-board.c.page:186(code)
-#, no-wrap
-msgid "NULL"
-msgstr "NULL"
+#. (itstool) path: item/title
+#: C/message-board.c.page:191
+msgid "<code>NULL</code>"
+msgstr ""
 
-#: C/message-board.c.page:187(p)
+#. (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 "
@@ -9313,7 +24526,8 @@ msgstr ""
 "choses pour lesquelles vous devrez utiliser les références d'URI "
 "correspondantes."
 
-#: C/message-board.c.page:194(p)
+#. (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 "
@@ -9331,7 +24545,8 @@ msgstr ""
 "apparaître ou disparaître dynamiquement des éléments graphiques en réponse à "
 "des événements."
 
-#: C/message-board.c.page:202(p)
+#. (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 "
@@ -9342,7 +24557,8 @@ msgstr ""
 "affichée dans la fonction <code>main</code> avec <code>gtk_widget_show</"
 "code>)."
 
-#: C/message-board.c.page:206(p)
+#. (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 "
@@ -9353,11 +24569,13 @@ msgstr ""
 "l'instant, il ne se passe encore rien, car le champ texte et la vue Web ne "
 "savent rien l'un sur l'autre."
 
-#: C/message-board.c.page:212(title)
+#. (itstool) path: section/title
+#: C/message-board.c.page:217
 msgid "Hook up signals"
 msgstr "Signaux de connexion"
 
-#: C/message-board.c.page:214(p)
+#. (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 "
@@ -9375,7 +24593,16 @@ msgstr ""
 "code>, n'importe où après la définition de <code>entry</code> et <code>view</"
 "code> :"
 
-#: C/message-board.c.page:225(p)
+#. (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>:"
@@ -9383,7 +24610,32 @@ msgstr ""
 "Vous devez ensuite définir <code>entry_activate_cb</code> de la façon "
 "suivante, n'importe où au-dessus de <code>create_window</code> :"
 
-#: C/message-board.c.page:248(p)
+#. (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 "
@@ -9397,7 +24649,8 @@ msgstr ""
 "manipuler le document HTML et fonctionnent d'une façon très similaire aux "
 "API DOM de JavaScript que vous connaissez peut-être déjà."
 
-#: C/message-board.c.page:254(p)
+#. (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 "
@@ -9411,19 +24664,8 @@ msgstr ""
 "trouver un élément dans le document en utilisant des sélecteurs CSS. Ceci "
 "vous évite de fastidieux aller-retour à travers le document."
 
-#: C/message-board.c.page:261(cite) C/message-board.c.page:273(cite)
-#: C/message-board.c.page:325(cite) C/message-board.c.page:382(cite)
-#: C/message-board.c.page:390(cite)
-msgid "shaunm"
-msgstr "shaunm"
-
-#: C/message-board.c.page:262(p)
-msgid "FIXME: Is this true? Does query_selector take CSS, CSSish, or what?"
-msgstr ""
-"FIXME : est-ce vrai ? est-ce que « query_selector » prend en charge le CSS, "
-"le CSSish, ou quoi ?"
-
-#: C/message-board.c.page:265(p)
+#. (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 "
@@ -9440,15 +24682,8 @@ msgstr ""
 "retourne un <code>const gchar*</code>, vous n'êtes pas obligé de libérer le "
 "résultat."
 
-#: C/message-board.c.page:274(p)
-msgid ""
-"Not passing the GError**, but we should give it a quick mention and link to "
-"somewhere that explains how GError-handling works."
-msgstr ""
-"Not passing the GError**, but we should give it a quick mention and link to "
-"somewhere that explains how GError-handling works."
-
-#: C/message-board.c.page:278(p)
+#. (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 "
@@ -9458,11 +24693,13 @@ msgstr ""
 "<code>body</code> et effacer le champ texte pour pouvoir y saisir quelque "
 "chose d'autre. Construisez et exécutez le programme à nouveau et testez-le."
 
-#: C/message-board.c.page:285(title)
+#. (itstool) path: section/title
+#: C/message-board.c.page:290
 msgid "Make it look better with CSS"
 msgstr "Le rendre plus joli avec du CSS"
 
-#: C/message-board.c.page:287(p)
+#. (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 "
@@ -9479,7 +24716,8 @@ msgstr ""
 "blocs <code>div</code>, ou encore le construire en le programmant à partir "
 "des API DOM."
 
-#: C/message-board.c.page:294(p)
+#. (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 "
@@ -9503,7 +24741,25 @@ msgstr ""
 "le CSS dans une chaîne de type « static » et placez-la près du début du "
 "fichier."
 
-#: C/message-board.c.page:316(p)
+#. (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 "
@@ -9516,7 +24772,8 @@ msgstr ""
 "l'aise avec le CSS, vous pouvez essayer de modifier cette partie pour en "
 "faire ce qu'il vous plaît."
 
-#: C/message-board.c.page:321(p)
+#. (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 "
@@ -9526,11 +24783,22 @@ msgstr ""
 "dans la fonction <code>create_window</code> après la définition de "
 "<code>view</code>."
 
-#: C/message-board.c.page:325(p)
-msgid "g_base64_encode has bad args"
-msgstr "g_base64_encode has bad args"
+#. (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 ""
 
-#: C/message-board.c.page:337(p)
+#. (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>."
@@ -9538,7 +24806,8 @@ msgstr ""
 "Assurez-vous aussi d'ajouter les déclarations pour les variables <code>tmp</"
 "code> et <code>css</code> en haut de <code>create_window</code>."
 
-#: C/message-board.c.page:340(code)
+#. (itstool) path: section/code
+#: C/message-board.c.page:345
 #, no-wrap
 msgid ""
 "\n"
@@ -9547,7 +24816,8 @@ msgstr ""
 "\n"
 "gchar *tmp, *css;\n"
 
-#: C/message-board.c.page:344(p)
+#. (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 "
@@ -9564,7 +24834,8 @@ msgstr ""
 "trouver le fichier à charger. Il fournit par contre le contenu complet du "
 "fichier."
 
-#: C/message-board.c.page:351(p)
+#. (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> "
@@ -9581,7 +24852,8 @@ msgstr ""
 "s'arrêter. N'oubliez pas de libérer ces chaînes temporaires après avoir "
 "défini la propriété de la feuille de style."
 
-#: C/message-board.c.page:358(p)
+#. (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 "
@@ -9592,11 +24864,13 @@ msgstr ""
 "sauf que cette fois, les messages sont joliment stylisés avec une bordure et "
 "un gradient discret en arrière-plan."
 
-#: C/message-board.c.page:364(title)
+#. (itstool) path: section/title
+#: C/message-board.c.page:369
 msgid "Learn more"
 msgstr "En savoir plus"
 
-#: C/message-board.c.page:366(p)
+#. (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 "
@@ -9609,7 +24883,8 @@ msgstr ""
 "probablement en faire un peu plus. Essayez d'ajouter vous-même d'autres "
 "fonctionnalités. Voici quelques idées :"
 
-#: C/message-board.c.page:372(p)
+#. (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. "
@@ -9621,7 +24896,8 @@ msgstr ""
 "un objet plus puissant. Vous allez trouver plein de tutoriels CSS sur "
 "internet, et tous sont adaptables à cette application."
 
-#: C/message-board.c.page:378(p)
+#. (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 "
@@ -9631,11 +24907,8 @@ msgstr ""
 "visionneur de messages. Essayez d'enregistrer le contenu HTML après chaque "
 "message et d'ouvrir le fichier enregistré (s'il existe) au démarrage."
 
-#: C/message-board.c.page:382(p)
-msgid "Link to method to get HTML from DOM and to GIO APIs."
-msgstr "Lien vers une méthode pour obtenir de l'HTML de DOM vers les API GIO."
-
-#: C/message-board.c.page:386(p)
+#. (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. "
@@ -9647,11 +24920,8 @@ msgstr ""
 "posté. Créez quelques blocs <code>div</code> enfants supplémentaires avec "
 "des classes différentes que vous pouvez styliser dans la feuille CSS."
 
-#: C/message-board.c.page:390(p)
-msgid "Link to strftime or something"
-msgstr "Lien vers « strftime » où autre"
-
-#: C/message-board.c.page:393(p)
+#. (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 "
@@ -9668,10375 +24938,22277 @@ msgstr ""
 "contextuel quand vous faites un clic-droit sur un message. Ces fonctions "
 "impliquent que vous exploriez davantage encore les API DOM de WebKit."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/menubutton.py.page:27(None) C/menubutton.vala.page:21(None)
-#: C/menubutton.js.page:21(None)
-msgid "@@image: 'media/menubutton.png'; md5=1feb7b836a522c3007079d4420621d9d"
-msgstr "@@image: 'media/menubutton.png'; md5=1feb7b836a522c3007079d4420621d9d"
-
-#: C/menubutton.py.page:23(desc) C/menubutton.vala.page:17(desc)
-#: C/menubutton.js.page:17(desc)
-msgid "A widget that shows a menu when clicked on"
-msgstr "Un élément graphique qui affiche un menu quand il est cliqué"
-
-#: C/menubutton.py.page:28(p) C/menubutton.vala.page:22(p)
-#: C/menubutton.js.page:22(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/messagedialog.png'; md5=1956288274018e2386d9cba96a2101de"
+msgctxt "_"
 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."
+"external ref='media/messagedialog.png' md5='1956288274018e2386d9cba96a2101de'"
 msgstr ""
-"L'élément graphique GtkMenuButton sert à afficher un menu quand il est "
-"cliqué. Le menu peut provenir soit d'un GtkMenu, soit d'un GMenuModel "
-"abstrait. L'élément graphique GtkMenuButton peut contenir n'importe quel "
-"élément graphique enfant valide. Ceci dit, il peut contenir pratiquement "
-"n'importe quel autre GtkWidget standard. L'enfant le plus souvent utilisé "
-"est la flèche GtkArrow fournie."
-
-#: C/menubutton.py.page:30(p) C/menubutton.vala.page:26(p)
-#: C/menubutton.js.page:26(p)
-msgid "You need to be running GNOME 3.6 for the MenuButton to work."
-msgstr ""
-"Pour que le MenuButton fonctionne, il vous faut avoir installé GNOME 3.6"
+"@@image: 'media/messagedialog.png'; md5=1956288274018e2386d9cba96a2101de"
 
-#: C/menubutton.py.page:40(title)
+#. (itstool) path: info/title
+#: C/messagedialog.c.page:8
 #, fuzzy
-#| msgid "Useful methods for a Button widget"
-msgid "Useful methods for a MenuButton widget"
-msgstr "Méthode utiles pour un élément graphique Bouton"
+#| msgid "MessageDialog"
+msgctxt "text"
+msgid "MessageDialog (C)"
+msgstr "Boîte de dialogue de message"
 
-#: C/menubutton.py.page:41(p)
+#. (itstool) path: info/desc
+#: C/messagedialog.c.page:19 C/messagedialog.py.page:19
+#: C/messagedialog.vala.page:18
+msgid "A message window"
+msgstr "Une fenêtre de message"
+
+#. (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 "Boîte de dialogue de message"
+
+#. (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 ""
+"Une boîte de dialogue de message modal qui peut faire exploser le monde."
+
+#. (itstool) path: note/p
+#: C/messagedialog.c.page:26
 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'."
+"To test out the application once it has started running, you can click on "
+"the \"Message Dialog\" tab that appears in the top menubar of the screen."
 msgstr ""
 
-#: C/menubutton.py.page:43(p)
+#. (itstool) path: page/code
+#: C/messagedialog.c.page:30
+#, no-wrap
 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>."
+"\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 ""
 
-#: C/menubutton.py.page:45(p)
+#. (itstool) path: item/p
+#: C/messagedialog.c.page:37
 #, fuzzy
 #| msgid ""
-#| "<code>get_text()</code> and <code>set_text(\"some text\")</code> can be "
-#| "used to get and set the content for the entry."
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"<code>set_align_widget(alignment)</code> and <code>set_direction(direction)</"
-"code> can be used to set these properties."
+"<link href=\"http://developer.gnome.org/gio/stable/GApplication.html";
+"\">GApplication</link>"
 msgstr ""
-"Les fonctions <code>get_text()</code> et <code>set_text(\"some text\")</"
-"code> peuvent être utilisées pour obtenir et définir le contenu de l'entrée."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/menubutton.vala.page:7(title)
+#. (itstool) path: item/p
+#: C/messagedialog.c.page:39
 #, fuzzy
-#| msgid "MenuButton"
-msgid "MenuButton (Vala)"
-msgstr "MenuButton"
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkMessageDialog.html";
+"\">GtkMessageDialog</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/menubutton.js.page:7(title)
+#. (itstool) path: item/p
+#: C/messagedialog.c.page:40
 #, fuzzy
-#| msgid "MenuButton"
-msgid "MenuButton (JavaScript)"
-msgstr "MenuButton"
-
-#: C/menubutton.js.page:12(name)
-msgid "Anna Zacchi"
-msgstr "Anna Zacchi"
-
-#: C/menubutton.js.page:13(email)
-msgid "azzurroverde gmail com"
-msgstr "azzurroverde gmail com"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/menubar.vala.page:23(None) C/menubar.py.page:28(None)
-msgid "@@image: 'media/menubar.png'; md5=7b642aaa1628d5e43ab85ac230ac1c78"
-msgstr "@@image: 'media/menubar.png'; md5=7b642aaa1628d5e43ab85ac230ac1c78"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/menubar.vala.page:133(None) C/menubar.py.page:129(None)
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"@@image: 'media/menubar_choices.png'; md5=47cdfa12caf85ba20dd3e835bd7f893f"
+"<link href=\"http://developer.gnome.org/gio/stable/GSimpleAction.html#g-";
+"simple-action-new\">GSimpleAction</link>"
 msgstr ""
-"@@image: 'media/menubar_choices.png'; md5=47cdfa12caf85ba20dd3e835bd7f893f"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/menubar.vala.page:7(title)
+#. (itstool) path: info/title
+#: C/messagedialog.js.page:8
 #, fuzzy
-#| msgid "MenuBar"
-msgid "MenuBar (Vala)"
-msgstr "BarreDeMenu"
-
-#: C/menubar.vala.page:19(desc) C/menubar.py.page:24(desc)
-msgid "A widget which holds GtkMenuItem widgets"
-msgstr "Un élément graphique qui contient des éléments graphiques GtkMenuItem"
-
-#: C/menubar.vala.page:22(title) C/menubar.py.page:27(title)
-msgid "MenuBar"
-msgstr "BarreDeMenu"
-
-#: C/menubar.vala.page:24(p) C/menubar.py.page:29(p)
-msgid "A MenuBar created using XML and GtkBuilder."
-msgstr "Une BarreDeMenu créée avec XML et GtkBuilder."
-
-#: C/menubar.vala.page:28(title) C/menubar.py.page:33(title)
-msgid "Create a MenuBar using XML"
-msgstr "Création d'une BarreDeMenu avec XML"
+#| msgid "MessageDialog"
+msgctxt "text"
+msgid "MessageDialog (JavaScript)"
+msgstr "Boîte de dialogue de message"
 
-#: C/menubar.vala.page:29(p) C/menubar.py.page:34(p)
-msgid "To create the menubar using XML:"
-msgstr "Pour créer une BarreDeMenu avec XML :"
+#. (itstool) path: info/desc
+#: C/messagedialog.js.page:21
+msgid "A popup message attached to a window"
+msgstr "Un message surgissant lié à une fenêtre"
 
-#: C/menubar.vala.page:31(p) C/menubar.py.page:36(p)
-msgid "Create <file>menubar.ui</file> using your favorite text editor."
+#. (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 ""
-"créez le fichier <file>barredemenu.ui</file> avec votre éditeur de texte "
-"favorit."
-
-#: C/menubar.vala.page:32(p) C/menubar.py.page:37(p)
-msgid "Enter the following line at the top of the file:"
-msgstr "Saisissez la ligne suivante en haut du fichier :"
+"Une BoiteDeDialogueDemessage contient un message modale surgissant auquel "
+"vous devez d'abord répondre avant de pouvoir retourner travailler dans la "
+"fenêtre à laquelle elle est liée. Elle peut faire exploser le monde (ou au "
+"moins elle le prétend). Pour faire apparaître le message surgissant quand "
+"vous exécutez cet exemple, cliquez sur « Message » dans le menu de son "
+"application : c'est le menu qui s'affiche quand vous cliquez sur le nom de "
+"l'application dans le coin supérieur gauche de l'écran, à côté de "
+"« Activités »."
 
-#: C/menubar.vala.page:36(p) C/menubar.py.page:41(p)
+#. (itstool) path: note/p
+#: C/messagedialog.js.page:27
 msgid ""
-"We want to create the interface which will contain our menubar and it's "
-"submenus. Our menubar will contain <gui>File</gui>, <gui>Edit</gui>, "
-"<gui>Choices</gui> and <gui>Help</gui> submenus. We add the following XML "
-"code to the file:"
+"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 ""
-"Nous souhaitons créer une interface contenant notre BarreDeMenu et ses "
-"SousMenus. Notre BarreDeMenu contient les SousMenus <gui>Fichier</gui>, "
-"<gui>Édition</gui>, <gui>Choix</gui> et <gui>Aide</gui>. Ajoutons le code "
-"XML suivant au fichier :"
+"La différence entre une BoiteDeDialogueDemessage et une <link xref=\"dialog."
+"js\">Boîte de dialogue</link> est que la boîte de dialogue peut contenir "
+"n'importe quel élément graphique ou contenu que vous souhaitez y mettre, "
+"alors que la BoiteDeDialogueDemessage est juste un moyen pratique de faire "
+"s'afficher un message basique surgissant avec des boutons."
 
-#: C/menubar.vala.page:39(p)
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:44
+#, no-wrap
 msgid ""
-"Now we will create the .vala file and use GtkBuilder to import the "
-"<file>menubar.ui</file> we just created."
+"\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 ""
-"Créons maintenant le fichier .vala et utilisons GtkBuilder pour importer le "
-"fichier <file>barredemenu.ui</file> que nous venons de faire."
 
-#: C/menubar.vala.page:42(title) C/menubar.py.page:48(title)
-msgid "Add the MenuBar to the window using GtkBuilder"
-msgstr "Ajout de la BarreDeMenu à la fenêtre avec GtkBuilder"
+#. (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 ""
+"Avant d'appeler _buildUI pour créer la fenêtre et les éléments graphiques "
+"qu'elle contient, il nous faut appeler _initMenus, qui indique à GNOME de "
+"générer le menu. Nous pouvons mettre le code actuel pour _initMenus après le "
+"code pour _buildUI, car l'ordre n'a pas d'importance du moment que "
+"_initMenus est appelé en premier dans _onStartup."
 
-#: C/menubar.vala.page:44(p)
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:72
+#, no-wrap
 msgid ""
-"Now, compile the vala file, and run it. The application should look like the "
-"picture at the top of this page."
+"\n"
+"    // 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 ""
-"Maintenant, compilez le fichier vala et lancez-le. L'application devrait "
-"ressembler à l'image en haut de cette page."
 
-#: C/menubar.vala.page:50(title) C/menubar.py.page:54(title)
-msgid "Add items to the menus"
-msgstr "Ajout d'éléments aux menus"
+#. (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 ""
 
-#: C/menubar.vala.page:51(p) C/menubar.py.page:55(p)
+#. (itstool) path: section/p
+#: C/messagedialog.js.page:92
+#, fuzzy
+#| 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>"
 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):"
+"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 ""
-"Commençons par ajouter 2 éléments au menu <gui>Fichier</gui> : <gui>Nouveau</"
-"gui> et <gui>Quitter</gui>. Pour ce faire, ajoutons une <code>section</code> "
-"contenant ces éléments au SouMenu <code>Fichier</code>. Le fichier "
-"<file>barredemenu.ui</file> devrait ressembler à ceci (les lignes 6 à 13 "
-"comportent la section nouvellement ajoutée) :"
+"Dans cet exemple, nous avons dans la BoiteDeDialogueDemessage une <link xref="
+"\"label.js\">Étiquette</link> contenant un stupide message d'avertissement."
 
-#: C/menubar.vala.page:79(p)
+#. (itstool) path: section/title
+#: C/messagedialog.js.page:96
+msgid "Creating the application's menu"
+msgstr "Création du menu de l'application"
+
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:97
+#, no-wrap
 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."
+"\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 ""
-"En suivant ce modèle, ajoutez les éléments <code>Copier</code> et "
-"<code>Coller</code> au SousMenu <code>Édition</code> et un élément <code>À "
-"propos</code> au SousMenu <code>Aide</code>. Nous allons attendre pour "
-"ajouter des éléments au SousMenu <link xref=\"menubar.vala#choices\">Choix</"
-"link> d'être un peu plus loin dans ce guide."
 
-#: C/menubar.vala.page:81(p)
+#. (itstool) path: section/p
+#: C/messagedialog.js.page:122
 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."
+"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 ""
-"Il es inutile de recompiler le programme vala si vous n'avez apporté des "
-"modifications qu'au fichier barredemenu.ui. Éxecutez seulement votre "
-"application compilée précédemment et les modifications dans l'interface "
-"utilisateur vont être prises en compte."
+"Ici, nous construisons le <link xref=\"gmenu.js\">GMenu</link> où nous "
+"mettons le bouton « Message » qui active la BoiteDeDialogueDemessage. le "
+"GMenu est le menu qui s'affiche quand vous cliquez sur le nom de "
+"l'application dans le coin supérieur gauche de l'écran, à côté de "
+"« Activités ». Notre menu ne contient que deux options : Message et Quit."
 
-#: C/menubar.vala.page:86(title) C/menubar.py.page:92(title)
-msgid "Setup actions"
-msgstr "Définition des actions"
+#. (itstool) path: section/title
+#: C/messagedialog.js.page:126
+msgid "Creating the MessageDialog"
+msgstr "Création de la BoiteDeDialogueDemessage"
 
-#: C/menubar.vala.page:87(p)
-msgid "This is a three step process."
-msgstr "Ceci est un processus en trois étapes."
+#. (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 ""
 
-#: C/menubar.vala.page:89(p)
+#. (itstool) path: section/p
+#: C/messagedialog.js.page:142
 msgid ""
-"First we create the ActionEntry array in the MyApplication class. An "
-"ActionEntry consists of:"
+"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 ""
-"Premièrement, créons la matrice ActionEntry dans la classe MyApplication. "
-"Une ActionEntry se compose :"
+"Pour que notre BoiteDeDialogueDemessage soit liée à la fenêtre principale, "
+"nous définissons sa propriété modale à vrai et la configurons comme une "
+"\"transient_for\" _window. Ensuite, nous définissons quel type de bouton et "
+"quel genre de message nous voulons y mettre (celui-ci va déterminer le type "
+"d'icône qui accompagnera le message). Enfin nous y saisissons le texte du "
+"message et connectons son signal « response » à la fonction de rappel qui le "
+"prend en charge."
 
-#: C/menubar.vala.page:92(p)
-msgid "the \"action name\" (mandatory)"
-msgstr "du nom « action name » (obligatoire)"
+#. (itstool) path: note/p
+#: C/messagedialog.js.page:143
+msgid "Here are some resources for making your own MessageDialogs:"
+msgstr ""
+"Voici quelques ressources pour bâtir vos propres BoiteDeDialogueDemessage"
 
-#: C/menubar.vala.page:93(p)
+#. (itstool) path: item/p
+#: C/messagedialog.js.page:145
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"the callback function to connect to the \"activate\" signal of the action "
-"(if applicable)"
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkMessageDialog.";
+"html#GtkButtonsType\">List of button types</link>"
 msgstr ""
-"de la fonction de rappel pour connecter le signal « activate » à l'action "
-"(si applicable)"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/menubar.vala.page:94(p)
+#. (itstool) path: item/p
+#: C/messagedialog.js.page:146
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"the type of the parameter that must be passed to the activate function for "
-"the action (if applicable)"
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkMessageDialog.";
+"html#GtkMessageType\">List of message types</link>"
 msgstr ""
-"du type de paramètre qui doit être transmis à la fonction activate pour "
-"l'action (si applicable)"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/menubar.vala.page:95(p)
-msgid "the initial state for this action (if applicable)"
-msgstr "de l'état initial de cette action (si applicable)"
+#. (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 ""
 
-#: C/menubar.vala.page:96(p)
-msgid "the callback to connect to \"change-state\" signal (if applicable)"
-msgstr "du rappel à connecter au signal « change-state » (si applicable)"
+#. (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 ""
+"Cette fonction prend deux paramètres : la BoiteDeDialogueDemessage et son "
+"identifiant response_id. Les deux sont fournis automatiquement (il n'y a pas "
+"besoins d'intervention manuelle pour que cela fonctionne). Ici, nous "
+"utilisons un interrupteur simple pour modifier le texte « warning label » en "
+"fonction de l'option sélectionnée. Le DELETE_EVENT se produit en appuyant "
+"sur la touche Échap pour annuler la BoiteDeDialogueDemessage au lieu de "
+"cliquer sur OK ou Cancel. Quel que soit votre choix, le message surgissant "
+"est détruit ensuite."
 
-#: C/menubar.vala.page:98(code)
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:175
 #, no-wrap
 msgid ""
 "\n"
-"const ActionEntry[] actions = {\n"
-"    { \"new\", new_cb }, // {\"action name\", callback_function}\n"
-"    { \"quit\", quit_cb }\n"
-"};"
+"// Run the application\n"
+"let app = new MessageDialogExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"\n"
-"const ActionEntry[] actions = {\n"
-"    { \"new\", new_cb }, // {\"action name\", callback_function}\n"
-"    { \"quit\", quit_cb }\n"
-"};"
 
-#: C/menubar.vala.page:105(p)
-msgid "Second, we create the callback functions the actions are connected to."
+#. (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 ""
-"Deuxièmement, nous créons les fonctions de rappel qui sont connectées aux "
-"actions."
+"Pour finir, nous créons un nouvel exemple de la classe MessageDialogExample "
+"terminée et nous démarrons l'application."
 
-#: C/menubar.vala.page:106(code)
+#. (itstool) path: section/code
+#: C/messagedialog.js.page:185
 #, no-wrap
 msgid ""
+"#!/usr/bin/gjs\n"
 "\n"
-"void new_cb (SimpleAction action, Variant? parameter) {\n"
-"    print (\"You clicked \\\"New\\\"\\n\");\n"
-"    //new MyWindow (this).show ();\n"
-"}\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
 "\n"
-"void quit_cb (SimpleAction action, Variant? parameter) {\n"
-"    print (\"You clicked \\\"Quit\\\"\\n\");\n"
-"    //this.quit ();  **Bug #674090**\n"
-"}"
-msgstr ""
+"const MessageDialogExample = new Lang.Class ({\n"
+"    Name: 'MessageDialog Example',\n"
 "\n"
-"void new_cb (SimpleAction action, Variant? parameter) {\n"
-"    print (\"You clicked \\\"New\\\"\\n\");\n"
-"    //new MyWindow (this).show ();\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"
-"void quit_cb (SimpleAction action, Variant? parameter) {\n"
-"    print (\"You clicked \\\"Quit\\\"\\n\");\n"
-"    //this.quit ();  **Bug #674090**\n"
-"}"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal initializes menus and builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._initMenus();\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Gtk.MessageDialog Example\",\n"
+"            default_height: 200,\n"
+"            default_width: 400 });\n"
+"\n"
+"        // Create a silly warning message and add it to the window\n"
+"        this.warningLabel = new Gtk.Label ({\n"
+"            label: \"This application goes boom! (Not really.)\"});\n"
+"        this._window.add (this.warningLabel);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application menu, including the button that calls the dialog\n"
+"    _initMenus: function() {\n"
+"        let menu = new Gio.Menu();\n"
+"        menu.append(\"Message\",'app.message');\n"
+"        menu.append(\"Quit\",'app.quit');\n"
+"        this.application.set_app_menu(menu);\n"
+"\n"
+"        // This pops up a MessageDialog when \"Message\" is clicked in the menu\n"
+"        let messageAction = new Gio.SimpleAction ({ name: 'message' });\n"
+"        messageAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showMessageDialog();\n"
+"            }));\n"
+"        this.application.add_action(messageAction);\n"
+"\n"
+"        // This closes the window when \"Quit\" is clicked in the menu\n"
+"        let quitAction = new Gio.SimpleAction ({ name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"        this.application.add_action(quitAction);\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _showMessageDialog: function () {\n"
+"\n"
+"        // Create a modal MessageDialog whose parent is the window\n"
+"        this._messageDialog = new Gtk.MessageDialog ({\n"
+"            transient_for: this._window,\n"
+"            modal: true,\n"
+"            buttons: Gtk.ButtonsType.OK_CANCEL,\n"
+"            message_type: Gtk.MessageType.WARNING,\n"
+"            text: \"This action will cause the universe to stop existing.\" });\n"
+"\n"
+"        this._messageDialog.connect ('response', Lang.bind(this, this._response_cb));\n"
+"        this._messageDialog.show();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Callback function (aka signal handler) for the response signal\n"
+"    _response_cb: function (messagedialog, response_id) {\n"
+"\n"
+"        // A simple switch that changes the main window's label\n"
+"        switch (response_id) {\n"
+"            case Gtk.ResponseType.OK:\n"
+"                this.warningLabel.set_label (\"*BOOM*\\n\");\n"
+"                break;\n"
+"            case Gtk.ResponseType.CANCEL:\n"
+"                this.warningLabel.set_label (\"Good choice!\\n\");\n"
+"                break;\n"
+"            case Gtk.ResponseType.DELETE_EVENT:\n"
+"                this.warningLabel.set_label (\"Dialog closed or cancelled.\\n\");\n"
+"                break;\n"
+"        }\n"
+"\n"
+"        this._messageDialog.destroy();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new MessageDialogExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
 
-#: C/menubar.vala.page:117(p)
+#. (itstool) path: info/title
+#: C/messagedialog.py.page:8
+#, fuzzy
+#| msgid "MessageDialog"
+msgctxt "text"
+msgid "MessageDialog (Python)"
+msgstr "Boîte de dialogue de message"
+
+#. (itstool) path: page/p
+#: C/messagedialog.py.page:24
 msgid ""
-"And lastly, we connect the menu items to the actions in the XML file by "
-"adding the \"action\" attribute:"
+"A message dialog which prints messages on the terminal, depending on your "
+"choices."
 msgstr ""
-"Et troisièmement, nous connectons les éléments du menu aux actions dans le "
-"fichier XML en y ajoutant l'attribut « action » :"
-
-#: C/menubar.vala.page:132(title) C/menubar.py.page:128(title)
-msgid "Choices submenu and items with state"
-msgstr "Le SousMenu Choix et les éléments avec leur état"
+"Une boîte de dialogue qui affiche les messages sur le terminal en fonction "
+"de vos choix."
 
-#: C/menubar.vala.page:134(p)
+#. (itstool) path: section/code
+#: C/messagedialog.py.page:31
+#, no-wrap
 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."
+"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 ""
-"Les lignes 30 à 80 inclues de <link xref=\"menubar.vala#xml-code\"/> "
-"décrivent le code XML utilisé pour créer le menu <gui>Choix</gui> de "
-"l'interface utilisateur."
 
-#: C/menubar.vala.page:138(title) C/menubar.py.page:119(title)
-msgid "Actions: Application or Window?"
-msgstr "Actions : application ou fenêtre ?"
+#. (itstool) path: section/title
+#: C/messagedialog.py.page:36
+msgid "Useful methods for a MessageDialog widget"
+msgstr "Méthodes utiles pour un élément graphique BoiteDeDialogueDemessage"
 
-#: C/menubar.vala.page:139(p) C/menubar.py.page:120(p)
+#. (itstool) path: section/p
+#: C/messagedialog.py.page:37
 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."
+"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 ""
-"Ci-dessus, nous créons les actions « new » et « open » comme faisant partie "
-"de la classe MyApplication. Les actions qui gèrent l'application elle-même "
-"(comme « quit »), doivent être créées de la même façon."
 
-#: C/menubar.vala.page:142(p) C/menubar.py.page:122(p)
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:39
 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."
+"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 ""
-"Quelques actions, comme « copy » et « paste » gèrent la fenêtre, pas "
-"l'application. Les actions gérant la fenêtre doivent être créées dans la "
-"classe window."
+"Dans le constructeur de BoiteDeDialogueDemessage, nous pouvons définir les "
+"drapeaux à <code>Gtk.DialogFlags.DESTROY_WITH_PARENT</code> (pour la "
+"détruire si sa fenêtre parente est détruite), ou à <code>Gtk.DialogFlags."
+"MODAL</code> (aucune interaction avec les autres fenêtres de l'application)."
 
-#: C/menubar.vala.page:145(p)
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:40
 msgid ""
-"The complete example files contain both application actions and window "
-"applications. The window actions are the ones usually included in the <link "
-"xref=\"gmenu.vala\">application menu</link> also. It is not good practice to "
-"include window actions in the applcation menu. For demonstration purposes, "
-"the complete example files which follow include XML in the UI file which "
-"creates the application menu which includes a \"New\" and \"Open\" item, and "
-"these are hooked up to the same actions as the menubar items of the same "
-"name."
+"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 ""
-"Les fichiers complets de l'exemple contiennent à la fois les actions qui "
-"gèrent l'application et celles qui gèrent la fenêtre. Les actions gérant la "
-"fenêtre sont aussi celles habituellement inclues dans <link xref=\"gmenu.vala"
-"\">application menu</link>. Ce n'est pas une bonne façon de faire que "
-"d'inclure les actions gérant la fenêtre dans le menu de l'application. "
-"Néanmoins, pour les besoins de cette démonstration, les fichiers exemple "
-"complets suivants incluent le code XML dans le fichier de l'interface "
-"utilisateur. Celui-ci crée le menu de l'application en y incluant les "
-"éléments « new » et « open » et les lie aux mêmes actions que celles "
-"attribuées aux éléments de la BarreDeMenu ayant le même nom."
-
-#: C/menubar.vala.page:153(title) C/menubar.py.page:147(title)
-msgid "Complete XML UI file for this example"
-msgstr "Fichier XML complet de l'interface utilisateur de cet exemple"
-
-#: C/menubar.vala.page:156(title)
-msgid "Complete Vala file for this example"
-msgstr "Fichier vala complet de cet exemple"
-
-#: C/menubar.vala.page:160(title)
-msgid "Mnemonics"
-msgstr "Mnémoniques"
+"Dans le constructeur de BoiteDeDialogueDemessage, nous pouvons définir le "
+"type à <code>Gtk.MessageType.INFO, Gtk.MessageType.WARNING, Gtk.MessageType."
+"QUESTION, Gtk.MessageType.ERROR, Gtk.MessageType.OTHER</code> en fonction du "
+"type de message voulu."
 
-#: C/menubar.vala.page:161(p) C/menubar.py.page:157(p)
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:41
 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."
+"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 ""
-"Les étiquettes peuvent contenir des mnémoniques. Les mnémoniques sont les "
-"caractères soulignés dans l'étiquette et sont utilisés pour se déplacer à "
-"l'aide des touches du clavier. Par exemple, « _Fichier » au lieu de "
-"seulement « Fichier » dans l'attribut barredemenu.ui de l'étiquette."
+"Dans le constructeur de BoiteDeDialogueDemessage, nous pouvons définir les "
+"boutons à <code>Gtk.ButtonsType.NONE, Gtk.ButtonsType.OK, Gtk.ButtonsType."
+"CLOSE, Gtk.ButtonsType.CANCEL, Gtk.ButtonsType.YES_NO, Gtk.ButtonsType."
+"OK_CANCEL</code>, ou n'importe quel bouton utilisant <code>add_button()</"
+"code> comme dans Gtk.Dialog."
 
-#: C/menubar.vala.page:162(p) C/menubar.py.page:158(p)
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:42
 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."
+"We could substitute the default image of the MessageDialog with another "
+"image using"
 msgstr ""
-"Vous pouvez voir les mnémoniques en appuyant sur la touche <key>Alt</key>. "
-"Pour ouvrir le menu <gui>Fichier</gui>, appuyez sur la combinaison de "
-"touches <keyseq><key>Alt</key><key>F</key></keyseq>."
-
-#: C/menubar.vala.page:166(title)
-msgid "Accelerators"
-msgstr "Raccourcis clavier"
+"Nous pouvons substituer l'image par défaut de la BoiteDeDialogueDemessage "
+"par une autre avec"
 
-#: C/menubar.vala.page:167(p) C/menubar.py.page:160(p)
+#. (itstool) path: item/code
+#: C/messagedialog.py.page:43
+#, no-wrap
 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."
+"\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 ""
-"Des raccourcis clavier peuvent être explicitement ajoutés aux définitions de "
-"l'interface utilisateur. Il est par exemple usuel de pouvoir quitter une "
-"application en appuyant sur la combinaison <keyseq><key>Ctrl</key><key>Q</"
-"key></keyseq> ou enregistrer un fichier avec <keyseq><key>Ctrl</key><key>S</"
-"key></keyseq>. Pour ajouter un raccourci clavier à la définition de "
-"l'interface, ajoutez simplement un attribut « accel » à l'élément."
+"\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)"
 
-#: C/menubar.vala.page:168(p) C/menubar.py.page:161(p)
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:48
 #, fuzzy
 #| msgid ""
-#| "<code mime=\"text\"><![CDATA[<attribute name=\"accel\">&lt;Primary&gt;q</"
-#| "attribute>]]></code> will create the <keyseq><key>Ctrl</key><key>Q</key></"
-#| "keyseq> sequence when added to the <code>Quit</code> label item. Here, "
-#| "\"Primary\" refers to the <key>Ctrl</key> key on a PC or the <key>⌘</key> "
-#| "key on a Mac."
+#| "where <code>Gtk.STOCK_CAPS_LOCK_WARNING</code> is any image from <link "
+#| "href=\"http://developer.gnome.org/gtk3/3.4/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>."
 msgid ""
-"<code mime=\"application/xml\"><![CDATA[<attribute name=\"accel\">&lt;"
-"Primary&gt;q</attribute>]]></code> will create the <keyseq><key>Ctrl</"
-"key><key>Q</key></keyseq> sequence when added to the <code>Quit</code> label "
-"item. Here, \"Primary\" refers to the <key>Ctrl</key> key on a PC or the "
-"<key>⌘</key> key on a Mac."
+"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 ""
-"Le code <code mime=\"text\"><![CDATA[<attribute name=\"accel\">&lt;"
-"Primary&gt;q</attribute>]]></code> va créer la combinaison "
-"<keyseq><key>Ctrl</key><key>Q</key></keyseq> quand il est ajouté à l'élément "
-"de l'étiquette <code>Quit</code>. Ici, \"Primary\" représente la touche "
-"<key>Ctrl</key> sur un PC ou la touche <key>⌘</key> sur un Mac."
-
-#: C/menubar.vala.page:178(title) C/menubar.py.page:171(title)
-msgid "Translatable strings"
-msgstr "Chaînes de caractères traduisibles"
+"où <code>Gtk.STOCK_CAPS_LOCK_WARNING</code> est n'importe quelle image des "
+"<link href=\"http://developer.gnome.org/gtk3/3.4/gtk3-Stock-Items.html";
+"\">Éléments de la collection</link>. Nous pouvons aussi définir n'importe "
+"quelle image comme dans l'élément graphique Image, avec la fonction "
+"<code>image.set_from_file(« nomdufichier.png »)</code>."
 
-#: C/menubar.vala.page:179(p) C/menubar.py.page:172(p)
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:49
 msgid ""
-"Since GNOME applications are being translated into <link href=\"http://l10n.";
-"gnome.org/languages/\">many languages</link>, it is important that the "
-"strings in your application are translable. To make a label translatable, "
-"simple set <code>translatable=\"yes\"</code>:"
+"<code>format_secondary_text(\"some secondary message\")</code> sets a "
+"secondary message. The primary text becomes bold."
 msgstr ""
-"Étant donné que les applications GNOME sont traduites dans <link href="
-"\"http://l10n.gnome.org/languages/\";>beaucoup de langues</link>, il est "
-"important que les chaînes de votre application soient traduisibles. Pour "
-"qu'une étiquette soit traduisible, définissez <code>translatable=\"yes\"</"
-"code> :"
-
-#: C/menubar.vala.page:186(title) C/filechooserdialog.vala.page:34(title)
-msgid "Relevant API documentation"
-msgstr "Documentation API associée"
+"La méthode <code>format_secondary_text(« messagesecondaire »)</code> définit "
+"un message secondaire. Le texte principal se met en gras."
 
-#: C/menubar.vala.page:191(link)
-msgid "Glib.ActionEntry"
-msgstr "Glib.ActionEntry"
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:59
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkMessageDialog.html";
+"\">GtkMessageDialog</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/menubar.vala.page:192(link) C/filechooserdialog.vala.page:41(link)
-msgid "Gtk.Builder"
-msgstr "Gtk.Builder"
+#. (itstool) path: item/p
+#: C/messagedialog.py.page:63
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gio/unstable/GActionMap.html";
+"\">GActionMap</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/menubar.py.page:7(title)
+#. (itstool) path: info/title
+#: C/messagedialog.vala.page:8
 #, fuzzy
-#| msgid "MenuButton"
-msgid "MenuBar (Python)"
-msgstr "MenuButton"
+#| msgid "MessageDialog"
+msgctxt "text"
+msgid "MessageDialog (Vala)"
+msgstr "Boîte de dialogue de message"
 
-#: C/menubar.py.page:44(p)
+#. (itstool) path: page/code
+#: C/messagedialog.vala.page:25
+#, no-wrap
 msgid ""
-"Now we will create the .py file and use GtkBuilder to import the "
-"<file>menubar.ui</file> we just created."
+"\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 ""
-"Maintenant, créons le fichier .py et utilisons GtkBuilder pour importer le "
-"fichier <file>barredemenu.ui</file> que nous venons de faire."
 
-#: C/menubar.py.page:50(p)
+#. (itstool) path: item/p
+#: C/messagedialog.vala.page:31
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Now run the python application. It should look like the picture at the top "
-"of this page."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ResponseType.html\";>Gtk."
+"ResponseType</link>"
 msgstr ""
-"Démarrez maintenant l'application python. Vous devriez voir quelque chose "
-"qui ressemble à l'image en haut de cette page."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/menubar.py.page:58(title)
-msgid "menubar.ui"
+#. (itstool) path: item/p
+#: C/messagedialog.vala.page:32
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.MessageDialog.html\";>Gtk."
+"MessageDialog</link>"
 msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/menubar.py.page:87(p)
+#. (itstool) path: item/p
+#: C/messagedialog.vala.page:33
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.DialogFlags.html\";>Gtk."
+"DialogFlags</link>"
 msgstr ""
-"En suivant ce modèle, ajoutez maintenant les éléments <code>Copier</code> et "
-"<code>Coller</code> au SousMenu <code>Édition</code> et un élément <code>À "
-"propos</code> au SousMenu <code>Aide</code>."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/menubar.py.page:94(p)
+#. (itstool) path: item/p
+#: C/messagedialog.vala.page:34
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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:"
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.MessageType.html\";>Gtk."
+"MessageType</link>"
 msgstr ""
-"Dans le fichier Python, créons les actions « Nouveau » et « Quitter » et "
-"connectons-les à une fonction de rappel ; par exemple, créons « new » de "
-"cette façon :"
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/menubar.py.page:95(code)
-#, no-wrap
+#. (itstool) path: item/p
+#: C/messagedialog.vala.page:35
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"\n"
-"new_action = Gio.SimpleAction.new(\"new\", None)\n"
-"new_action.connect(\"activate\", self.new_callback)"
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ButtonsType.html\";>Gtk."
+"ButtonsType</link>"
 msgstr ""
-"\n"
-"new_action = Gio.SimpleAction.new(\"new\", None)\n"
-"new_action.connect(\"activate\", self.new_callback)"
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/menubar.py.page:99(p)
-msgid "And we create the callback function of \"new\" as"
-msgstr "et la fonction de rappel de « new » de cette façon :"
+#. (itstool) path: info/title
+#: C/model-view-controller.py.page:9
+#, fuzzy
+#| msgid "The Model/View/Controller design"
+msgctxt "text"
+msgid "The Model/View/Controller design (Python)"
+msgstr "Le concept Modèle/Vue/Contrôleur"
 
-#: C/menubar.py.page:100(code)
-#, no-wrap
+#. (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 "Le concept Modèle/Vue/Contrôleur"
+
+#. (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 "Présentation"
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:34
 msgid ""
-"\n"
-"def new_callback(self, action, parameter):\n"
-"    print \"You clicked \\\"New\\\"\""
+"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 ""
-"\n"
-"def new_callback(self, action, parameter):\n"
-"    print \"You clicked \\\"New\\\"\""
+"Les deux éléments graphiques <link xref=\"treeview_simple_liststore.py"
+"\">TreeView</link> et <link xref=\"combobox.py\">BoiteCombinee</link> sont "
+"construits sur le concept <em>Modèle/Vue/Contrôleur</em>. Le <em>Modèle</em> "
+"(une implémentation de <code>Gtk.TreeModel</code>, habituellemnt soit "
+"<code>Gtk.TreeStore</code>, soit <code>Gtk.ListStore</code>) stocke les "
+"données ; la<em>Vue</em> (par ex. <code>Gtk.TreeView</code>, <code>Gtk."
+"ComboBox</code>, ou <code>Gtk.ComboBoxText</code>) obtient les notifications "
+"de modifications et affiche le contenu du modèle. Enfin, le <em>Contrôleur</"
+"em> modifie l'état du modèle (à l'aide de méthodes dans l'implémentation du "
+"modèle, comme <code>append()</code>, ou <code>remove()</code>) et indique à "
+"la Vue ces modifications (à l'aide de signaux comme <code>\"changed\"</"
+"code>)."
+
+#. (itstool) path: section/title
+#: C/model-view-controller.py.page:39
+msgid "The Model"
+msgstr "Le Modèle"
 
-#: C/menubar.py.page:104(p)
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:41
 msgid ""
-"Now, in the XML file, we we connect the menu items to the actions in the XML "
-"file by adding the \"action\" attribute:"
+"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 ""
-"Maintenant, dans le fichier XML, connectons les éléments du menu aux actions "
-"en y ajoutant l'attibut « action » :"
+"La principale différence entre les deux implémentations principales de "
+"<code>Gtk.TreeModel</code> est que <code>Gtk.ListStore</code> ne contient "
+"que des lignes de données sans enfant, alors que <code>Gtk.TreeStore</code> "
+"contient aussi des lignes de données mais que chacune d'elle peut contenir "
+"des lignes enfants (qui à leur tour peuvent aussi contenir des lignes "
+"enfants et ainsi de suite)."
 
-#: C/menubar.py.page:111(p)
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:43
 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>."
+"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 ""
-"Notez que pour une action relative à l'application, nous utilisons le "
-"préfixe <code>app.</code>, et que pour une action relative à la fenêtre, "
-"nous utilisons le préfixe <code>win.</code>."
+"Les données du modèle peuvent être supprimées ou modifiées avec l'itérateur "
+"arborescent et l'indexe de la colonne, ou avec <code>Gtk.TreeIter</code>, ou "
+"<code>Gtk.TreePath</code>."
 
-#: C/menubar.py.page:113(p)
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:45
 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"
+"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 ""
-"Finalement, nous ajoutons l'action à l'application ou à la fenêtre dans le "
-"fichier python - ainsi, par exemple, <code>app.new</code> est ajouté à "
-"l'application dans la méthode <code>do_startup(self)</code> de cette façon :"
+"Comme avec l'objet liste intégré dans Python, vous pouvez obtenir le nombre "
+"de lignes avec <code>len()</code> et utiliser des segments pour récupérer ou "
+"définir des valeurs. D'une autre façon, la méthode <code>append()</code> "
+"renvoie un exemple de <code>Gtk.TreeIter</code> qui pointe vers "
+"l'emplacement de la ligne qui vient d'être insérée. L'appel à la fonction "
+"<code>get_iter()</code> récupère aussi un <code>Gtk.TreeIter</code>."
 
-#: C/menubar.py.page:114(code)
-#, no-wrap
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:47
 msgid ""
-"\n"
-"self.add_action(new_action)"
+"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 ""
-"\n"
-"self.add_action(new_action)"
+"Comme <code>Gtk.ListStore</code> n'a qu'un seul niveau, c-à-d. les nœuds "
+"n'ont aucun nœud enfant, un chemin est essentiellement représenté par "
+"l'index de la ligne à laquelle vous souhaitez accéder. En ce qui concerne "
+"<code>Gtk.TreeStore</code>, un chemin est représenté par une liste d'indexes "
+"ou une chaîne de caractères. La chaîne se présente sous la forme d'une liste "
+"de nombres séparés par une colonne. Chaque nombre se réfère au décalage à ce "
+"niveau. Donc, le chemin <code>\"0\"</code> se réfère au nœud racine et le "
+"chemin <code>\"2:4\"</code> se réfère au cinquième enfant du troisième nœud."
 
-#: C/menubar.py.page:124(p)
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:49
+msgid "Useful methods for a <code>Gtk.TreeModel</code>:"
+msgstr "Méthodes utiles pour un <code>Gtk.TreeModel</code> :"
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:51
 msgid ""
-"The complete example files contain both application actions and window "
-"applications. The window actions are the ones usually included in the <link "
-"xref=\"gmenu.py\">application menu</link> also. It is not good practice to "
-"include window actions in the applcation menu. For demonstration purposes, "
-"the complete example files which follow include XML in the UI file which "
-"creates the application menu which includes a \"New\" and \"Open\" item, and "
-"these are hooked up to the same actions as the menubar items of the same "
-"name."
+"<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 ""
-"Les fichiers complets de l'exemple contiennent à la fois les actions qui "
-"gèrent l'application et celles qui gèrent la fenêtre. Les actions gérant la "
-"fenêtre sont aussi celles habituellement inclues dans <link xref=\"gmenu.py"
-"\">application menu</link>. Ce n'est pas une bonne façon de faire que "
-"d'inclure les actions gérant la fenêtre dans le menu de l'application. "
-"Néanmoins, pour les besoins de cette démonstration, les fichiers exemple "
-"complets suivants incluent le code XML dans le fichier de l'interface "
-"utilisateur. Celui-ci crée le menu de l'application en y incluant les "
-"éléments « new » et « open » et les lie aux mêmes actions que celles "
-"attribuées aux éléments de la BarreDeMenu ayant le même nom."
+"La méthode <code>get_iter(chemin)</code> renvoie un exemple de <code>Gtk."
+"TreeIter</code> qui pointe vers le <code>chemin</code>. Ce chemin est soit "
+"une liste de nombres séparés par une colonne, soit un tuple. Par exemple, la "
+"chaîne de caractères <code>\"10:4:0\"</code> est équivalente au tuple "
+"<code>(10, 4, 0)</code>, car tous deux créent un chemin de niveau 3 pointant "
+"vers le 11ème enfant du nœud racine, le 5ème enfant de cet 11ème enfant et "
+"le 1er enfant de ce 5ème enfant."
 
-#: C/menubar.py.page:130(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:52
 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."
+"<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 ""
-"Les lignes 30 à 80 inclue de <link xref=\"menubar.py#xml-code\"/> décrivent "
-"le code XML utilisé pour créer le menu <gui>Choix</gui> de l'interface "
-"utilisateur."
+"La méthode <code>iter_next(TreeIter)</code> renvoie un exemple de <code>Gtk."
+"TreeIter</code> qui pointe vers le nœud TreeIter suivant situé au même "
+"niveau, ou vers <code>None</code> s'il n'y a rien derrière."
 
-#: C/menubar.py.page:132(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:53
 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:"
+"<code>iter_has_child(treeiter)</code> returns <code>True</code> if "
+"<code>treeiter</code> has children, <code>False</code> otherwise."
 msgstr ""
-"les actions créées jusqu'à présent sont <em>sans état (stateless)</em>, c-à-"
-"d. qu'elles ne prennent pas ni ne dépendent pas d'un état définit par "
-"l'action elle-même. Par contre, les actions que nous avons besoin de créer "
-"pour le SousMenu Choix sont <em>avec état (stateful)</em>. Voici un exemple "
-"de création d'une action stateful :"
+"La méthode <code>iter_has_child(TreeIter)</code> renvoie la valeur "
+"<code>vrai</code> si <code>TreeIter</code> a des enfants, ou <code>faux</"
+"code> dans le cas contraire."
 
-#: C/menubar.py.page:133(code)
-#, no-wrap
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:54
 msgid ""
-"\n"
-"shape_action = Gio.SimpleAction.new_stateful(\"shape\", GLib.VariantType.new('s'), 
GLib.Variant.new_string('line'))"
+"<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 ""
-"\n"
-"shape_action = Gio.SimpleAction.new_stateful(\"shape\", GLib.VariantType.new('s'), 
GLib.Variant.new_string('line'))"
+"La méthode <code>iter_children(TreeIter)</code> renvoie un exemple de "
+"<code>Gtk.TreeIter</code> qui pointe vers le premier enfant de "
+"<code>TreeIter</code>, ou sur <code>None</code> si <code>TreeIter</code> n'a "
+"pas d'enfant."
 
-#: C/menubar.py.page:136(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:55
 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)"
+"<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 ""
-"où les variables de la méthode sont : le nom, le type de paramètre (dans ce "
-"cas, une chaîne - voyez <link href=\"http://developer.gnome.org/glib/";
-"unstable/glib-GVariantType.html\">ici</link> pour une liste complète des "
-"significations des caractères), l'état initial (dans ce cas, « line » - dans "
-"le cas d'une valeur boléenne <code>True</code>, il devrait être <code>Glib."
-"Variant.new_boolean(True)</code> et ainsi de suite. Voyez <link href="
-"\"http://developer.gnome.org/glib/unstable/glib-GVariant.html\";>ici</link> "
-"pour consulter une liste complète)"
+"La fonction <code>get_iter_first()</code> renvoie un exemple de <code>Gtk."
+"TreeIter</code> qui pointe vers le premier itérateur arborescent (celui du "
+"chemin <code>\"0\"</code>) ou sur <code>None</code> si l'arborescence est "
+"vide."
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:58
+msgid "Useful methods for a <code>Gtk.ListStore</code>:"
+msgstr "Méthodes utiles pour un <code>Gtk.ListStore</code> :"
 
-#: C/menubar.py.page:138(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:60
 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:"
+"<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 ""
-"Après avoir créé l'ActionSimple stateful, nous la connectons à la fonction "
-"de rappel et nous l'ajoutons à la fenêtre (ou à l'application selon le cas) "
-"comme auparavant :"
+"La méthode <code>append(ligne)</code> ajoute une nouvelle ligne à ce magasin "
+"liste, où <code>ligne</code> peut être une liste de valeurs pour chaque "
+"colonne ; <code>ligne</code> peut aussi être omis ou avoir la valeur "
+"<code>None</code> et dans ces cas une colonne vide est ajoutée. La méthode "
+"renvoie un <code>Gtk.TreeIter</code> qui pointe vers la ligne ajoutée."
 
-#: C/menubar.py.page:140(code)
-#, no-wrap
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:61 C/model-view-controller.py.page:67
 msgid ""
-"\n"
-"shape_action.connect(\"activate\", self.shape_callback)\n"
-"self.add_action(shape_action)"
+"<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 ""
-"\n"
-"shape_action.connect(\"activate\", self.shape_callback)\n"
-"self.add_action(shape_action)"
-
-#: C/menubar.py.page:152(title)
-msgid "Complete Python file for this example"
-msgstr "Fichier Python complet de cet exemple"
+"La méthode <code>remove(iter)</code> supprime l'<code>iter</code> du magasin "
+"<code>Gtk.ListStore</code> et renvoie la valeur <code>vrai</code> si "
+"l'itérateur est valide ou <code>faux</code> dans le cas contraire. Après sa "
+"suppression, l'<code>iter</code> est configuré pour devenir la prochaine "
+"ligne valide."
 
-#: C/menubar.py.page:156(title)
-msgid "Mnemonics and Accelerators"
-msgstr "Mnémoniques et raccourcis clavier"
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:64
+msgid "Useful methods for a <code>Gtk.TreeStore</code>:"
+msgstr "Méthodes utiles pour un <code>Gtk.TreeStore</code> :"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/magic-mirror.vala.page:41(None)
-msgid "@@image: 'media/magic-mirror.png'; md5=8171faea6ed3b6ddac0da084c29e4e22"
+#. (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 ""
-"@@image: 'media/magic-mirror.png'; md5=8171faea6ed3b6ddac0da084c29e4e22"
-
-#: C/magic-mirror.vala.page:7(title)
-#, fuzzy
-#| msgid "4 Magic Mirror"
-msgid "Magic Mirror (Vala)"
-msgstr "4 Miroir magique"
+"La méthode <code>append(parent, ligne)</code> ajoute une nouvelle ligne à ce "
+"magasin arborescent ; <code>parent</code> doit être un Gtk.TreeIter valide. "
+"Si la valeur du parent est différente de <code>None</code>, alors elle "
+"ajoute la nouvelle ligne après le dernier enfant du parent, sinon elle "
+"ajoute une ligne au premier niveau ; <code>ligne</code> peut être une liste "
+"de valeurs pour chaque colonne, ou alors peut être omis ou avoir la valeur "
+"<code>None</code> ; dans ce dernier cas, une colonne vide est ajoutée. La "
+"méthode renvoie un <code>Gtk.TreeIter</code> qui pointe vers la ligne "
+"ajoutée."
 
-#: C/magic-mirror.vala.page:10(desc)
-msgid "Use your webcam as a mirror using the GStreamer framework and Gtk+"
-msgstr "Utilisation de votre webcam comme miroir avec GStreamer et Gtk+"
+#. (itstool) path: section/title
+#: C/model-view-controller.py.page:73
+msgid "The View: the TreeView case"
+msgstr "La Vue : le cas de la TreeView"
 
-#: C/magic-mirror.vala.page:14(name)
-msgid "Daniel G. Siegel"
-msgstr "Daniel G. Siegel"
+#. (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 ""
+"Une TreeView affiche la structure des éléments enfants et parents sous la "
+"forme des branches d'un arbre. Regardez cet <link xref=\"treeview_treestore."
+"py\">exemple</link>."
 
-#: C/magic-mirror.vala.page:15(email)
-msgid "dgsiegel gnome org"
-msgstr "dgsiegel gnome org"
+#. (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 ""
+"La <code>Gtk.TreeViewColumn</code> est utilisée pour organiser les colonnes "
+"verticales."
 
-#: C/magic-mirror.vala.page:23(title)
-msgid "4 Magic Mirror"
-msgstr "4 Miroir magique"
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:79
+msgid "Useful methods for a <code>Gtk.TreeView</code>:"
+msgstr "Méthodes utiles pour une vue <code>Gtk.TreeView</code> :"
 
-#: C/magic-mirror.vala.page:26(em)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:81
 msgid ""
-"Your mirror just fell off the wall and broke into a thousand pieces — but "
-"you need a mirror to shave your beard off or add some makeup! You only have "
-"15 minutes left before catching the bus to work. So what can you do?"
+"<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 ""
-"Votre miroir vient juste de tomber du mur et s'est cassé en mille morceaux. "
-"Mais il vous faut un miroir pour vous raser ou pour vous maquiller ! Il ne "
-"vous reste que 15 minutes avant d'attraper le bus pour aller au travail. "
-"Comment faire ?"
+"La méthode <code>set_model(modele)</code> définit le modèle de cette vue "
+"arborescente. Si elle a déjà un modèle défini, la fonction le supprime avant "
+"de lui définir le nouveau. Si la valeur du modèle est <code>None</code>, la "
+"fonction supprime l'ancien modèle."
 
-#: C/magic-mirror.vala.page:27(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:82
 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:"
+"<code>get_model()</code> returns the model this tree view is based on, "
+"<code>None</code> if the model is unset."
 msgstr ""
-"Dans ce tutoriel, nous allons faire un programme qui va vous permettre "
-"d'utiliser votre webcam comme miroir. Vous apprendrez comment :"
-
-#: C/magic-mirror.vala.page:29(p)
-msgid "Create a GTK+ application"
-msgstr "créer une application GTK+,"
+"La méthode <code>get_model()</code> renvoie le modèle sur lequel est "
+"construite cette vue arborescente, ou <code>None</code> si le modèle n'est "
+"pas défini."
 
-#: C/magic-mirror.vala.page:30(p)
-msgid "Access your webcam using GStreamer and embed the result into a window"
+#. (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 ""
-"accéder à votre webcam en utilisant GStreamer et intégrer le résultat dans "
-"une fenêtre,"
+"La méthode <code>append_column(colonne)</code> ajoute <code>colonne</code> à "
+"la liste de colonnes."
 
-#: C/magic-mirror.vala.page:31(p)
-msgid "Grab photos off your webcam"
-msgstr "récupérer des photos de votre webcam,"
+#. (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 ""
+"La méthode <code>get_selection()</code> récupère la sélection <code>Gtk."
+"TreeSelection</code> associée à cette vue arborescente."
 
-#: C/magic-mirror.vala.page:33(p) C/image-viewer.vala.page:40(p)
-#: C/image-viewer.py.page:34(p) C/image-viewer.js.page:34(p)
-#: C/guitar-tuner.vala.page:35(p) C/guitar-tuner.py.page:32(p)
-#: C/guitar-tuner.cpp.page:30(p) C/guitar-tuner.c.page:32(p)
-msgid "You'll need the following to be able to follow this tutorial:"
-msgstr "Vous avez besoin de ce qui suit pour pouvoir suivre ce tutoriel :"
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:87
+msgid "Useful methods for a <code>Gtk.TreeViewColumn</code>:"
+msgstr "Méthodes utiles pour une <code>Gtk.TreeViewColumn</code> :"
 
-#: C/magic-mirror.vala.page:35(p) C/image-viewer.py.page:36(p)
-#: C/image-viewer.js.page:36(p) C/guitar-tuner.py.page:34(p)
-#: C/guitar-tuner.cpp.page:32(p) C/guitar-tuner.c.page:34(p)
-msgid "An installed copy of the <link xref=\"getting-ready\">Anjuta IDE</link>"
+#. (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 ""
-"l'installation du paquet <link xref=\"getting-ready\">Anjuta IDE</link>,"
-
-#: C/magic-mirror.vala.page:36(p)
-msgid "Installed copies of GTK, GStreamer, and a Vala compiler"
-msgstr "l'installation des paquets GTK, GStreamer et d'un compilateur Vala,"
+"La méthode <code>add_attribute(renderer, attribut, valeur)</code> ajoute un "
+"mappage d'attribut à cette colonne. <code>attribut</code> est le paramètre "
+"du <code>renderer</code> à définir à partir de la valeur <code>valeur</code>"
 
-#: C/magic-mirror.vala.page:37(p)
-msgid "Basic knowledge of an object-oriented programming language"
-msgstr "des connaissances de base d'un langage de programmation d'objets."
+#. (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 ""
+"La méthode <code>pack_start(renderer, expand)</code> compresse le "
+"<code>renderer</code> au début de cette colonne. Si la valeur "
+"d'<code>expand</code> est <code>False</code>, alors il est alloué au "
+"<code>renderer</code> juste l'espace qui lui est nécessaire. Tout espace "
+"inutilisé est divisé à parts égales entre les cellules pour lesquelles la "
+"valeur est <code>True</code>."
 
-# BUG : "magic_mirror" au lieu de "guitar-tuner"
-#: C/magic-mirror.vala.page:51(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:91
 msgid ""
-"Choose <gui>Gtk+ (simple)</gui> from the <gui>Vala</gui> tab, click "
-"<gui>Forward</gui>, and fill out your details on the next few pages. Use "
-"<file>guitar-tuner</file> as project name and directory."
+"<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 ""
-"Sélectionnez <gui>Gtk+ (simple)</gui> dans l'onglet <gui>Vala</gui>, cliquez "
-"sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
-"suivantes. Utilisez <file>miroir_magique</file> comme nom de projet et de "
-"répertoire."
+"La méthode <code>pack_end(renderer, expand)</code> compresse le "
+"<code>renderer</code> à la fin de cette colonne. Si la valeur "
+"d'<code>expand</code> est <code>False</code>, alors il est alloué au "
+"<code>renderer</code> juste l'espace qui lui est nécessaire. Tout espace "
+"inutilisé est divisé à parts égales entre les cellules pour lesquelles la "
+"valeur est <code>True</code>."
 
-#: C/magic-mirror.vala.page:54(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:92
+#, fuzzy
+#| msgid ""
+#| "<code>set_sort_column_id(sort_column_id)</code> sets the column of the "
+#| "model by which this column (of the view) should be sorted. This also "
+#| "makes the columnd header clickable."
 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."
+"<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 ""
-"Désactivez <gui>Utiliser GtkBuilder pour l'interface utilisateur</gui> car "
-"nous allons créer l'interface utilisateur manuellement. Consultez le "
-"tutoriel <link xref=\"guitar-tuner.vala\">Accordeur de guitare</link> à "
-"propos de l'utilisation du constructeur d'interface GtkBuilder."
+"La méthode <code>set_sort_column_id(sort_column_id)</code> définit par quel "
+"argument la colonne (de cette vue) doit être triée. Elle rend aussi "
+"cliquable l'en-tête de la colonne."
 
-#: C/magic-mirror.vala.page:59(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:93
 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."
+"<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 ""
-"Assurez-vous que <gui>Configuration des paquets externes</gui> est activé. "
-"Sur la page suivante, sélectionnez <em>gstreamer-0.10</em> dans la liste "
-"pour inclure la bibliothèque <app>GStreamer</app> à votre projet."
+"La méthode <code>set_sort_indicator(setting)</code> définit s'il faut "
+"afficher une petite flèche dans l'en-tête de la colonne ; le <code>setting</"
+"code> possible peut être soit <code>True</code> (la flèche est visible), "
+"soit <code>False</code>."
 
-#: C/magic-mirror.vala.page:63(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:94
 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:"
+"<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 ""
-"Cliquez sur <gui>Appliquer</gui> et votre projet est créé. Ouvrez <file>src/"
-"miroir_magique.vala</file> depuis l'onglet <gui>Projet</gui> ou l'onglet "
-"<gui>Fichiers</gui>. Vous devez voir apparaître du code commençant par les "
-"lignes :"
+"La méthode <code>set_sort_order(ordre)</code> modifie l'ordre de tri de la "
+"colonne ; l'<code>ordre</code> peut être soit <code>Gtk.SortType.ASCENDING</"
+"code>, soit <code>Gtk.SortType.DESCENDING</code>."
 
-#: C/magic-mirror.vala.page:72(title) C/image-viewer.vala.page:107(title)
-#: C/image-viewer.cpp.page:60(title) C/image-viewer.c.page:60(title)
-#: C/guitar-tuner.vala.page:68(title) C/guitar-tuner.cpp.page:63(title)
-#: C/guitar-tuner.c.page:65(title)
-msgid "Build the code for the first time"
-msgstr "Première construction du programme"
+#. (itstool) path: section/title
+#: C/model-view-controller.py.page:100
+msgid "The View: the ComboBox case"
+msgstr "La Vue : cas de l'élément graphique BoiteCombinee"
 
-#: C/magic-mirror.vala.page:73(p)
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:102
 msgid ""
-"The code loads an (empty) window and shows it. More details are given below; "
-"skip this list if you understand the basics:"
+"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 ""
-"Le programme charge et affiche une fenêtre (vide). Vous trouverez plus de "
-"détails ci-dessous ; passez cette liste si vous comprenez les bases :"
+"Une <code>Gtk.ComboBox</code> permet de sélectionner un élément à partir "
+"d'un menu déroulant, regardez <link xref=\"combobox.py\">cet exemple</link>. "
+"Pour une liste de choix textuels, on peut aussi utiliser plus simplement un "
+"<code>Gtk.ComboBoxText</code>. Les deux peuvent contenir une entrée."
 
-#: C/magic-mirror.vala.page:76(p) C/guitar-tuner.vala.page:73(p)
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:104
+msgid "Useful methods for a <code>Gtk.ComboBox</code>:"
+msgstr "Méthodes utiles pour un élément graphique <code>Gtk.ComboBox</code> :"
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:106
 msgid ""
-"The two <code>using</code> lines import namespaces so we don't have to name "
-"them explicitly."
+"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 ""
-"Les deux lignes <code>using</code> importent des espaces de noms que nous "
-"n'aurons plus à nommer explicitement."
+"La méthode statique <code>new_with_entry()</code> crée une nouvelle "
+"BoiteCombinee <code>Gtk.ComboBox</code> avec une entrée ; la méthode "
+"statique <code>new_with_model(model)</code> en crée une nouvelle à partir du "
+"modèle initialisé à <code>model</code> ; et la méthode statique "
+"<code>new_with_model_and_entry(model)</code> est une combinaison des deux "
+"autres."
 
-#: C/magic-mirror.vala.page:79(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:107
 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."
+"<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 ""
-"Le constructeur de la classe principale <code>Main</code> crée une nouvelle "
-"fenêtre et définit son titre. Ensuite, la fenêtre est affichée et un signal "
-"permettant de quitter l'application est connecté à la fermeture de la "
-"fenêtre. Plus d'informations sur les signaux sont données plus tard."
+"La méthode <code>get_active_iter()</code> renvoie un <code>Gtk.TreeIter</"
+"code> qui pointe vers l'élément actif actuel. S'il n'y en a pas, elle "
+"renvoie <code>None</code>."
 
-#: C/magic-mirror.vala.page:83(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:108
 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)."
+"<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 ""
-"La fonction statique <code>main</code> est exécutée par défaut quand vous "
-"lancez une application Vala. Elle appelle d'autres fonctions qui créent la "
-"classe « Main », initialise et ensuite exécute l'application. La fonction "
-"<code>Gtk.Main</code> démarre la boucle principale GTK, qui lance "
-"l'interface utilisateur et commence à écouter les événements (comme des "
-"clics de souris ou des appuis sur des touches)."
+"La méthode <code>set_model(model)</code> définit le modèle utilisé par la "
+"boîte combinée à <code>model</code> et annule le modèle précédent s'il "
+"existait déjà. Si la valeur <code>model</code> est <code>None</code>, alors "
+"la fonction annule le paramétrage du modèle. Notez que cette fonction ne "
+"supprime pas les générateurs de rendu de cellules."
 
-#: C/magic-mirror.vala.page:87(p) C/image-viewer.vala.page:127(p)
-#: C/image-viewer.cpp.page:76(p) C/image-viewer.c.page:79(p)
-#: C/guitar-tuner.cpp.page:78(p) C/guitar-tuner.c.page:84(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:109
 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>)."
+"<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 ""
-"Le programme est prêt à être utilisé, donc vous pouvez le compiler en "
-"cliquant sur <guiseq><gui>Construire</gui><gui>Construire le projet</gui></"
-"guiseq> ou en appuyant sur <keyseq><key>Maj</key><key>F7</key></keyseq>."
+"La méthode <code>set_entry_text_column(text_column)</code> définit la "
+"colonne du modèle que cette boîte combinée doit utiliser pour que ses "
+"chaînes de caractères soient du type <code>text_column</code>. La colonne "
+"<code>text_column</code> dans ce modèle de boîte combinée doit être du type "
+"<code>str</code> (ceci n'est pertinent que si cette boîte combinée a été "
+"créée avec la propriété « has-entry » définie à True)."
 
-#: C/magic-mirror.vala.page:88(p) C/image-viewer.vala.page:128(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:110
 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."
+"<code>set_wrap_width(width)</code> sets the wrap width of this combo box to "
+"be <code>width</code>. The wrap width is basically the preferred number of "
+"columns when you want the popup to be layed out in a grid."
 msgstr ""
-"Pour configurer le répertoire de compilation, modifiez la "
-"<gui>Configuration</gui> à <gui>Par défaut</gui> et cliquez sur "
-"<gui>Exécuter</gui>. Il ne faut le faire qu'une seule fois, à la première "
-"compilation."
+"La méthode <code>set_wrap_width(largeur)</code> définit la largeur du texte "
+"de cette boîte combinée à <code>largeur</code>. Basiquement, la largeur du "
+"texte est votre nombre préféré de colonnes quand vous voulez que le message "
+"surgissant soit placé dans une grille."
 
-#: C/magic-mirror.vala.page:92(title)
-msgid "Access the webcam video stream with GStreamer"
-msgstr "Accès au flux vidéo de votre webcam avec GStreamer"
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:113
+msgid "Useful methods for a <code>Gtk.ComboBoxText</code>:"
+msgstr "Méthodes utiles pour une boîte <code>Gtk.ComboBoxText</code> :"
 
-#: C/magic-mirror.vala.page:93(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:115
 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."
+"The static method <code>new_with_entry()</code> creates a new empty "
+"<code>Gtk.ComboBoxText</code> with an entry."
 msgstr ""
-"L'architecture multimédia de GStreamer sait gérer les vidéos en provenance "
-"de webcams. Ajoutons GStreamer à notre application et nous pouvons ainsi "
-"accéder au flux vidéo."
+"La méthode statique <code>new_with_entry()</code> crée une nouvelle "
+"<code>Gtk.ComboBoxText</code> vide avec une entrée."
 
-#: C/magic-mirror.vala.page:120(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:116
 msgid ""
-"First we remove the window we created before because GStreamer will take "
-"care of showing the picture on screen."
+"<code>append_text(text)</code> appends <code>text</code> to the list of "
+"strings stored in this combo box."
 msgstr ""
-"Enlevons d'abord la fenêtre créée précédemment, car GStreamer va gérer "
-"l'affichage de l'image à l'écran."
+"La méthode <code>append_text(texte)</code> ajoute le <code>texte</code> à la "
+"liste des chaînes stockées dans cette boîte combinée."
 
-#: C/magic-mirror.vala.page:124(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:117
 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?"
+"<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 ""
-"Créons maintenant un élément GStreamer qui va accéder à notre webcam. Nous "
-"utilisons l'élément « Camerabin », qui est un élément caméra tout-en-un et "
-"qui sait faire des photos, des vidéos, appliquer des effets et beaucoup plus "
-"encore. Parfait dans notre cas ! Avec <code>this.camerabin.set_state (Gst."
-"State.PLAYING)</code> nous disons au pipeline GStreamer, que nous venons de "
-"créer, de commencer la lecture. Facile, non ?"
+"La méthode <code>get_active_text()</code> renvoie la chaîne active actuelle "
+"de cette boîte combinée, ou <code>None</code> si aucune chaîne n'est "
+"sélectionnée. Si la boîte combinée contient une entrée, la méthode renvoie "
+"son contenu (qui n'est pas nécessairement un élément de la liste)."
+
+#. (itstool) path: section/title
+#: C/model-view-controller.py.page:123
+msgid "The View: the Cellrenderers"
+msgstr "La Vue : les Cellrenderers"
 
-#: C/magic-mirror.vala.page:131(p)
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:125
 msgid ""
-"Of course it is also possible to integrate the video more tighly into other "
-"windows but that is an advanced topic that includes some details of the X "
-"Window System we will omit here."
+"The View makes use of <code>Gtk.CellRenderer</code>s of various types to "
+"draw the data."
 msgstr ""
-"Bien sûr, il est aussi possible d'ajuster plus précisément la vidéo dans "
-"d'autres fenêtres, mais c'est un sujet avancé, qui inclut des détails sur le "
-"système X Window et que nous ne traiterons pas ici."
+"La Vue se sert de <code>Gtk.CellRenderer</code> de différents types pour "
+"dessiner les données."
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:127
+msgid "Implementations of <code>Gtk.CellRenderer</code> and useful methods:"
+msgstr "Implémentations de <code>Gtk.CellRenderer</code> et méthodes utiles :"
+
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:129
+msgid "<code>Gtk.CellRendererText</code> - renders text in a cell"
+msgstr "<code>Gtk.CellRendererText</code> - génère du texte dans une cellule"
 
-#: C/magic-mirror.vala.page:135(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:130
 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."
+"<code>Gtk.CellRendererToggle</code> - renders a toggle or radio button in a "
+"cell. Useful methods:"
 msgstr ""
-"Compilez et exécutez le programme à nouveau. Vous obtenez finalement deux "
-"fenêtres. À l'étape suivante, nous allons intégrer la vidéo dans la fenêtre "
-"GTK+."
+"<code>Gtk.CellRendererToggle</code> - génère un bouton de basculement ou de "
+"radio dans une cellule. Méthodes utiles :"
 
-#: C/magic-mirror.vala.page:145(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:132
 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."
+"<code>set_active(setting)</code> - activates or deactivates a cell renderer"
 msgstr ""
-"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"magic-mirror/magic-mirror.vala\">programme de "
-"référence</link>. Il existe aussi une <link href=\"magic-mirror/magic-mirror-"
-"advanced.vala\">implémentation plus complète</link> qui intègre la fenêtre à "
-"une fenêtre standard Gtk, mais qui nécessite des techniques avancées ainsi "
-"que l'ajout de boutons pour lire/arrêter l'image."
+"<code>set_active(setting)</code> - active ou désactive un générateur de rendu"
 
-#: C/magic-mirror.vala.page:151(title) C/guitar-tuner.vala.page:258(title)
-msgid "Further reading"
-msgstr "Documentation complémentaire"
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:133
+msgid "<code>get_active()</code> - returns whether the cell renderer is active"
+msgstr ""
+"<code>get_active()</code> - indique si le générateur de rendu est actif"
 
-#: C/magic-mirror.vala.page:152(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:134
 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>."
+"<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 ""
-"Pour en savoir plus à propos de la programmation en langage Vala, consultez "
-"le <link href=\"http://live.gnome.org/Vala/Tutorial\";>manuel Vala</link>."
-
-#: C/magic-mirror.vala.page:157(title)
-msgid "Conclusion"
-msgstr "Conclusion"
+"<code>set_radio(radio)</code> - si la valeur radio est <code>True</code>, le "
+"générateur crée un bouton de radio inverseur (par ex. un inverseur d'un "
+"groupe mutuellement exclusif) ; si la valeur est <code>False</code>, il "
+"génère un inverseur de vérification (une option boléenne autonome)"
 
-#: C/magic-mirror.vala.page:158(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:135
 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."
+"<code>get_radio()</code> - returns whether we are rendering radio toggles "
+"rather than checkboxes."
 msgstr ""
-"Ça y est ; vous avez réussi à créer une application fonctionnelle pour "
-"webcam en 15 minutes. Maintenant, vous pouvez vous raser ou maquiller votre "
-"joli visage avant de passer une belle journée sur votre lieu de travail, où "
-"vous allez pouvoir épater vos amis et collègues avec une application géniale "
-"faite en 15 minutes."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/linkbutton.vala.page:21(None) C/linkbutton.py.page:23(None)
-#: C/linkbutton.js.page:21(None) C/linkbutton.c.page:22(None)
-msgid "@@image: 'media/linkbutton.png'; md5=3712eae8953e87c65a6aa74503b8e32b"
-msgstr "@@image: 'media/linkbutton.png'; md5=3712eae8953e87c65a6aa74503b8e32b"
-
-#: C/linkbutton.vala.page:7(title)
-#, fuzzy
-#| msgid "LinkButton"
-msgid "LinkButton (Vala)"
-msgstr "LinkButton"
-
-#: C/linkbutton.vala.page:17(desc) C/linkbutton.c.page:17(desc)
-msgid "Create buttons bound to a URL"
-msgstr "Créer des boutons reliés à un URL"
+"<code>get_radio()</code> - indique si nous générons des boutons de "
+"basculement au lieu de cases à cocher."
 
-#: C/linkbutton.vala.page:20(title) C/linkbutton.py.page:21(title)
-#: C/linkbutton.js.page:20(title) C/linkbutton.c.page:20(title)
-msgid "LinkButton"
-msgstr "LinkButton"
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:138
+msgid "<code>Gtk.CellRendererPixbuf</code> - renders an image in a cell"
+msgstr ""
+"<code>Gtk.CellRendererPixbuf</code> - génère un rendu image dans une cellule"
 
-#: C/linkbutton.vala.page:22(p)
-msgid "This button links to GNOME live."
-msgstr "Ce bouton se connecte à la page Web de GNOME live."
+#. (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 ""
+"<code>Gtk.CellRendererCombo</code> - génère un rendu texte dans une "
+"cellule ; mais, alors que <code>Gtk.CellRendererText</code> n'offre qu'une "
+"simple entrée pour modifier le texte, <code>Gtk.CellRendererCombo</code> "
+"offre un élément graphique <code>Gtk.ComboBox</code> pour la même action. Il "
+"peut être utilisé avec ou sans un élément graphique Gtk.Entry associé, en "
+"fonction de la propriété de la valeur « has-entry »."
 
-#: C/linkbutton.vala.page:29(link) C/linkbutton.js.page:31(link)
-msgid "Gtk.LinkButton"
-msgstr "Gtk.LinkButton"
+#. (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 ""
+"<code>Gtk.CellRendererProgress</code> - génère une valeur numérique sous "
+"forme de barre de progression dans une cellule ; il peut afficher du texte "
+"au-dessus de la barre de progression"
 
-#: C/linkbutton.py.page:7(title)
-#, fuzzy
-#| msgid "LinkButton"
-msgid "LinkButton (Python)"
-msgstr "LinkButton"
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:141
+msgid ""
+"<code>Gtk.CellRendererSpinner</code> - renders a spinning animation in a cell"
+msgstr ""
+"<code>Gtk.CellRendererSpinner</code> - génère l'animation d'un indicateur "
+"dans une cellule"
 
-#: C/linkbutton.py.page:18(desc)
-msgid "A button bound to an URL"
-msgstr "Un bouton relié à un URL"
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:142
+msgid "<code>Gtk.CellRendererSpin</code> - renders a spin button in a cell"
+msgstr ""
+"<code>Gtk.CellRendererSpin</code> - génère un bouton d'activité dans une "
+"cellule"
 
-#: C/linkbutton.py.page:24(p)
-msgid "A button that links to a web page."
-msgstr "Un bouton qui crée un lien vers une page Web."
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:143
+msgid ""
+"<code>Gtk.CellRendererAccel</code> - renders a keyboard accelerator in a cell"
+msgstr ""
+"<code>Gtk.CellRendererAccel</code> - génère un accélérateur de clavier dans "
+"une cellule"
 
-#: C/linkbutton.py.page:35(title)
-msgid "Useful methods for a LinkButton widget"
-msgstr "Méthodes utiles pour un élément graphique LinkButton"
+#. (itstool) path: section/title
+#: C/model-view-controller.py.page:149
+msgid "The Controller: the Selection"
+msgstr "Le contrôleur : la sélection"
 
-#: C/linkbutton.py.page:37(p)
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:151
 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."
+"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 ""
-"La méthode <code>get_visited()</code> renvoie l'état "
-"« visited » (<code>True</code> ou <code>False</code>) de l'URI vers lequel "
-"pointe le LinkButton. Le bouton se change en visited quand il est cliqué."
+"La plupart des applications doivent non seulement afficher des données, mais "
+"aussi réceptionner les événements émis par les utilisateurs. Pour faire "
+"cela, il faut tout simplement obtenir une référence pour un objet "
+"sélectionné et la connecter au signal « changed »."
 
-#: C/linkbutton.py.page:38(p)
+#. (itstool) path: section/code
+#: C/model-view-controller.py.page:153
+#, no-wrap
 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>)."
+"\n"
+"select = tree.get_selection()\n"
+"select.connect(\"changed\", on_tree_selection_changed)\n"
 msgstr ""
-"La méthode <code>set_visited(vrai)</code> définit l'état « visited » de "
-"l'URI vers lequel pointe le LinkButton à <code>vrai</code> (même chose pour "
-"<code>faux</code>)."
+"\n"
+"select = tree.get_selection()\n"
+"select.connect(\"changed\", on_tree_selection_changed)\n"
+
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:158
+msgid "Then to retrieve data for the row selected:"
+msgstr "Ensuite, pour récupérer les données pour la colonne sélectionnée :"
 
-#: C/linkbutton.py.page:39(p)
+#. (itstool) path: section/code
+#: C/model-view-controller.py.page:160
+#, no-wrap
 msgid ""
-"Each time the button is clicked, the signal <code>\"activate-link\"</code> "
-"is emitted. For an explanation of signals and callback functions, see <link "
-"xref=\"signals-callbacks.py\">this page</link>."
+"\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 ""
-"À chaque fois que le bouton es cliqué, le signal <code>\"activate-link\"</"
-"code> est émis. Pour de plus amples informations sur les signaux et les "
-"fonctions de rappel, consultez <link xref=\"signals-callbacks.py\">cette "
-"page</link>."
-
-#: C/linkbutton.py.page:47(link) C/linkbutton.c.page:33(link)
-msgid "GtkLinkButton"
-msgstr "GtkLinkButton"
+"\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"
 
-#: C/linkbutton.js.page:7(title)
+#. (itstool) path: section/p
+#: C/model-view-controller.py.page:167
 #, fuzzy
-#| msgid "LinkButton widget"
-msgid "LinkButton (JavaScript)"
-msgstr "Élément graphique LinkButton"
-
-#: C/linkbutton.js.page:17(desc)
-msgid "A button that links to a web page"
-msgstr "Un bouton qui crée un lien vers une page Web"
-
-#: C/linkbutton.js.page:22(p)
-msgid "A button that links to live.gnome.org."
-msgstr "Un bouton qui crée un lien vers live.gnome.org."
+#| msgid "Useful method for a <code>Gtk.TreeSelection</code>:"
+msgid "Useful methods for a <code>Gtk.TreeSelection</code>:"
+msgstr "Méthodes utiles pour une <code>Gtk.TreeSelection</code> :"
 
-#: C/linkbutton.c.page:7(title)
-#, fuzzy
-#| msgid "LinkButton"
-msgid "LinkButton (C)"
-msgstr "LinkButton"
+#. (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 ""
+"La méthode <code>set_mode(type)</code> définit le type de sélection, où type "
+"est l'un des"
 
-#: C/linkbutton.c.page:23(p)
-msgid "This button links to the GNOME live webpage."
-msgstr "Ce bouton se connecte à la page Web de GNOME live."
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:172
+msgid "<code>Gtk.SelectionMode.NONE</code> - no selection is possible"
+msgstr "<code>Gtk.SelectionMode.NONE</code> - pas de sélection possible"
 
-#: C/license.page:8(desc)
-msgid "Legal information."
+#. (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 ""
+"<code>Gtk.SelectionMode.SINGLE</code> - zéro ou un élément peut être "
+"sélectionné"
 
-#: C/license.page:11(title)
-msgid "License"
+#. (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 ""
+"<code>Gtk.SelectionMode.BROWSE</code> - exactement un élément est "
+"sélectionné. Dans certaines circonstances, comme au début ou pendant une "
+"opération de recherche, il est possible qu'il n'y ait aucun élément pouvant "
+"être sélectionné. Ce qui est réellement imposé, c'est l'impossibilité pour "
+"l'utilisateur de désélectionner un élément actuellement sélectionné sauf "
+"s'il en sélectionne un autre."
 
-#: C/license.page:12(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:175
+#, fuzzy
+#| msgid ""
+#| "<code>Gtk.SelectionMode.MULTIPLE</code> -any number of elements may be "
+#| "selected. Clicks toggle the state of an item. Any number of elements may "
+#| "be selected. The Ctrl key may be used to enlarge the selection, and Shift "
+#| "key to select between the focus and the child pointed to. Some widgets "
+#| "may also allow Click-drag to select a range of elements."
 msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
+"<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 ""
+"<code>Gtk.SelectionMode.MULTIPLE</code> - n'importe quel nombre d'éléments "
+"peuvent être sélectionnés. Un clic sur un élément modifie son état. La "
+"touche Ctrl permet d'élargir la sélection et la touche Maj d'y ajouter les "
+"enfants pointés. Quelques éléments graphiques peuvent aussi permettre le "
+"cliqué-glissé pour sélectionner un ensemble d'éléments."
 
-#: C/license.page:20(p)
-msgid "You are free:"
+#. (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 ""
+"La méthode <code>get_selected()</code> renvoie un tuple <code>(modele, "
+"TreeIter)</code>, où <code>modele</code> est le modèle actuel et "
+"<code>TreeIter</code> un <code>Gtk.TreeIter</code> qui pointe soit vers la "
+"ligne actuellement sélectionnée, soit vers None si aucune ligne n'est "
+"sélectionnée. La méthode ne marche pas si le type de sélection est défini à "
+"<code>Gtk.SelectionMode.MULTIPLE</code> ; dans ce cas, utilisez à la place "
+"la fonction <code>get_selected_rows()</code>, qui renvoie une liste "
+"d'exemples <code>Gtk.TreePath</code> de toutes les lignes sélectionnées."
 
-#: C/license.page:25(em)
-msgid "To share"
-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 "Références"
 
-#: C/license.page:26(p)
-msgid "To copy, distribute and transmit the work."
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeModel.html";
+"\">GtkTreeModel</link>"
 msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/license.page:29(em)
-msgid "To remix"
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeView.html";
+"\">GtkTreeView</link>"
 msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/license.page:30(p)
-msgid "To adapt the work."
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeViewColumn.html";
+"\">GtkTreeViewColumn</link>"
 msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/license.page:33(p)
+#. (itstool) path: item/p
+#: C/model-view-controller.py.page:191
 #, fuzzy
-#| msgid "The code has the following purpose:"
-msgid "Under the following conditions:"
-msgstr "L'objectif du programme est le suivant :"
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRenderer.html";
+"\">GtkCellRenderer</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: 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 ""
 
-#: C/license.page:38(em)
+#. (itstool) path: info/title
+#: C/paned.c.page:8
 #, fuzzy
-#| msgid "Introduction"
-msgid "Attribution"
-msgstr "Introduction"
+#| msgid "Gtk.Paned"
+msgctxt "text"
+msgid "Paned (C)"
+msgstr "Gtk.Paned"
 
-#: C/license.page:39(p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
+#. (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 ""
 
-#: C/license.page:46(em)
-msgid "Share Alike"
+#. (itstool) path: page/title
+#: C/paned.c.page:21 C/paned.js.page:21 C/paned.py.page:22 C/paned.vala.page:21
+#, fuzzy
+#| msgid "Gtk.Paned"
+msgid "Paned"
+msgstr "Gtk.Paned"
+
+#. (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 ""
 
-#: C/license.page:47(p)
+#. (itstool) path: section/code
+#: C/paned.c.page:29
+#, no-wrap
 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."
+"#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 ""
 
-#: C/license.page:53(p)
+#. (itstool) path: item/p
+#: C/paned.c.page:36 C/paned.py.page:42
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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>."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkPaned.html";
+"\">GtkPaned</link>"
 msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/license.page:60(p)
+#. (itstool) path: item/p
+#: C/paned.c.page:37 C/paned.js.page:37 C/paned.py.page:43 C/paned.vala.page:37
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"As a special exception, the copyright holders give you permission to copy, "
-"modify, and distribute the example code contained in this documentation "
-"under the terms of your choosing, without restriction."
+"<link href=\"http://developer.gnome.org/gtk3/stable/gtk3-Standard-";
+"Enumerations.html#GtkOrientation\">Standard Enumerations</link>"
 msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/label.vala.page:21(None) C/label.py.page:27(None)
-#: C/label.js.page:21(None) C/label.c.page:25(None)
-msgid "@@image: 'media/label.png'; md5=734975c18653d88379f983e4501c3fc0"
-msgstr "@@image: 'media/label.png'; md5=734975c18653d88379f983e4501c3fc0"
+#. (itstool) path: info/title
+#: C/paned.js.page:8
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Paned (JavaScript)"
+msgstr "JavaScript"
 
-#: C/label.vala.page:7(title)
-msgid "Label (Vala)"
+#. (itstool) path: section/code
+#: C/paned.js.page:29
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const PanedExample = new Lang.Class ({\n"
+"    Name: 'Paned Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\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', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this.window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"        // 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 ""
 
-#: C/label.vala.page:17(desc) C/label.c.page:18(desc)
-msgid "A widget which displays text"
-msgstr "Un élément graphique qui affiche du texte"
-
-#: C/label.vala.page:22(p) C/label.py.page:28(p) C/label.c.page:26(p)
-msgid "A simple label"
-msgstr "Une étiquette simple"
-
-#: C/label.py.page:7(title)
+#. (itstool) path: item/p
+#: C/paned.js.page:36
 #, fuzzy
-#| msgid "Python"
-msgid "Label (Python)"
-msgstr "Python"
-
-#: C/label.py.page:23(desc)
-msgid "A widget that displays a small to medium amount of text"
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Paned.html";
+"\">GtkPaned</link>"
 msgstr ""
-"Un élément graphique qui affiche une petite à moyenne quantité de texte"
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/label.py.page:37(p)
+#. (itstool) path: item/p
+#: C/paned.js.page:38 C/scrolledwindow.js.page:38
+#, fuzzy
+#| 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."
 msgid ""
-"Another way to obtain what we have in the example is to create the label as "
-"an instance of another class and add it to the instance of <code>MyWindow</"
-"code> in the <code>do_activate(self)</code> method:"
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html";
+"\">GtkImage</link>"
 msgstr ""
-"Une autre manière d'obtenir ce que contient cet exemple est de créer "
-"l'étiquette comme étant un exemple d'une autre classe et de l'ajouter à "
-"<code>MyWindow</code> dans la méthode <code>do_activate(self)</code> :"
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
+
+#. (itstool) path: info/title
+#: C/paned.py.page:8
+#, fuzzy
+#| msgid "Python"
+msgctxt "text"
+msgid "Paned (Python)"
+msgstr "Python"
 
-#: C/label.py.page:38(code)
+#. (itstool) path: section/code
+#: C/paned.py.page:30
 #, no-wrap
 msgid ""
+"from gi.repository import Gtk\n"
+"import sys\n"
+"\n"
 "\n"
-"# a class to define a window\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, 100)\n"
+"        Gtk.Window.__init__(self, title=\"Paned Example\", application=app)\n"
+"        self.set_default_size(450, 350)\n"
 "\n"
-"# a class to define a label\n"
-"class MyLabel(Gtk.Label):\n"
-"    def __init__(self):\n"
-"        Gtk.Label.__init__(self)\n"
-"        self.set_text(\"Hello GNOME!\")\n"
+"        # a 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"
-"class MyApplication(Gtk.Application):\n"
-"    def __init__(self):\n"
-"        Gtk.Application.__init__(self)\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"
-"    def do_activate(self):\n"
-"        # create an instance of MyWindow\n"
-"        win = MyWindow(self)\n"
-"        # create an instance of MyLabel\n"
-"        label = MyLabel()\n"
-"        # and add it to the window\n"
-"        win.add(label)\n"
-"        # show the window and everything on it\n"
-"        win.show_all()"
-msgstr ""
+"        # 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"
-"# 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"
+"        # add the panes to the window\n"
+"        self.add(paned)\n"
 "\n"
-"# a class to define a label\n"
-"class MyLabel(Gtk.Label):\n"
-"    def __init__(self):\n"
-"        Gtk.Label.__init__(self)\n"
-"        self.set_text(\"Hello GNOME!\")\n"
 "\n"
 "class MyApplication(Gtk.Application):\n"
+"\n"
 "    def __init__(self):\n"
 "        Gtk.Application.__init__(self)\n"
 "\n"
 "    def do_activate(self):\n"
-"        # create an instance of MyWindow\n"
 "        win = MyWindow(self)\n"
-"        # create an instance of MyLabel\n"
-"        label = MyLabel()\n"
-"        # and add it to the window\n"
-"        win.add(label)\n"
-"        # show the window and everything on it\n"
-"        win.show_all()"
+"        win.show_all()\n"
+"\n"
+"    def do_startup(self):\n"
+"        Gtk.Application.do_startup(self)\n"
+"\n"
+"app = MyApplication()\n"
+"exit_status = app.run(sys.argv)\n"
+"sys.exit(exit_status)\n"
+msgstr ""
 
-#: C/label.py.page:68(title)
-msgid "Useful methods for a Label widget"
-msgstr "Méthodes utiles pour un élément graphique étiquette"
+#. (itstool) path: section/title
+#: C/paned.py.page:34
+#, fuzzy
+#| msgid "Useful methods for a Scale widget"
+msgid "Useful methods for a Paned widget"
+msgstr "Méthodes utiles pour un élément graphique échelle"
 
-#: C/label.py.page:70(p)
+#. (itstool) path: section/p
+#: C/paned.py.page:35
 msgid ""
-"<code>label = Gtk.Label(label=\"Hello GNOME!\")</code> could also be used "
-"create a label and set the text directly. For a general discussion of this, "
-"see <link xref=\"properties.py\">here</link>."
+"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 ""
-"La fonction <code>label = Gtk.Label(label=\"Hello GNOME!\")</code> pourrait "
-"aussi être utilisée pour créer une étiquette et y définir le texte "
-"directement. Pour de plus amples informations sur cela, voyez <link xref="
-"\"properties.py\">ici</link>."
 
-#: C/label.py.page:72(p)
+#. (itstool) path: info/title
+#: C/paned.vala.page:8
+#, fuzzy
+#| msgid "Sample Vala code"
+msgctxt "text"
+msgid "Paned (Vala)"
+msgstr "Exemple de code Vala"
+
+#. (itstool) path: section/code
+#: C/paned.vala.page:29
+#, no-wrap
 msgid ""
-"<code>set_line_wrap(True)</code> breaks lines if the text of the label "
-"exceeds the size of the widget."
+"/* 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 ""
-"La fonction <code>set_line_wrap(True)</code> renvoie le texte de l'étiquette "
-"à la ligne s'il excède la largeur de l'élément graphique."
 
-#: C/label.py.page:73(p)
+#. (itstool) path: item/p
+#: C/paned.vala.page:36
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"<code>set_justify(Gtk.Justification.LEFT)</code> (or <code>Gtk.Justification."
-"RIGHT, Gtk.Justification.CENTER, Gtk.Justification.FILL</code>) sets the "
-"alignment of the lines in the text of the label relative to each other. The "
-"method has no effect on a single-line label."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Paned.html\";>GtkPaned</link>"
 msgstr ""
-"La fonction <code>set_justify(Gtk.Justification.LEFT)</code> (ou <code>Gtk."
-"Justification.RIGHT, Gtk.Justification.CENTER, Gtk.Justification.FILL</"
-"code>) définit l'alignement des lignes du texte de l'étiquette à une "
-"position relative les unes par rapport aux autres. La méthode n'a aucun "
-"effet sur une étiquette comportant une seule ligne."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/label.py.page:74(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/photo-wall.png'; md5=f19590d97e8ec029cda3c44b769c11cd"
+msgctxt "_"
 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:"
+"external ref='media/photo-wall.png' md5='f19590d97e8ec029cda3c44b769c11cd'"
+msgstr "@@image: 'media/photo-wall.png'; md5=f19590d97e8ec029cda3c44b769c11cd"
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/photo-wall-focused.png'; "
+#| "md5=9f1ceecf3a28c1e468597b093a10cbae"
+msgctxt "_"
+msgid ""
+"external ref='media/photo-wall-focused.png' "
+"md5='9f1ceecf3a28c1e468597b093a10cbae'"
 msgstr ""
-"Pour décorer le texte, nous pouvons utiliser <code>set_markup(\"text\")</"
-"code>, où <code>\"text\"</code> est mis en <link href=\"http://developer.";
-"gnome.org/pango/stable/PangoMarkupFormat.html\">langage Markup pango</link>. "
-"Voici un exemple :"
+"@@image: 'media/photo-wall-focused.png'; md5=9f1ceecf3a28c1e468597b093a10cbae"
 
-#: C/label.js.page:7(title)
+#. (itstool) path: info/title
+#: C/photo-wall.c.page:7
 #, fuzzy
-#| msgid "JavaScript"
-msgid "Label (JavaScript)"
-msgstr "JavaScript"
+#| msgid "Photo Wall"
+msgctxt "text"
+msgid "Photo wall (C)"
+msgstr "Mur de photos"
 
-#: C/label.js.page:17(desc)
-msgid "A label which can contain text"
-msgstr "Une étiquette qui peut contenir du texte"
+#. (itstool) path: info/desc
+#: C/photo-wall.c.page:10
+msgid "A Clutter image viewer"
+msgstr "Un visionneur d'images avec Clutter"
 
-#: C/label.js.page:22(p)
-msgid "A label displaying a friendly message."
-msgstr "Une étiquette qui affiche un message sympathique."
+#. (itstool) path: credit/name
+#: C/photo-wall.c.page:14
+msgid "Chris Kühl"
+msgstr "Chris Kühl"
 
-#: C/label.c.page:7(title)
+#. (itstool) path: page/title
+#: C/photo-wall.c.page:28
 #, fuzzy
-#| msgid "Label"
-msgid "Label (C)"
-msgstr "Étiquette"
-
-#: C/js.page:7(title)
-msgid "JavaScript"
-msgstr "JavaScript"
+#| msgid "Photo Wall"
+msgid "Photo wall"
+msgstr "Mur de photos"
 
-#: C/js.page:16(title)
-msgid "Tutorials, code samples and platform demos in JavaScript"
+#. (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 ""
-"Tutoriels, exemples de code et plateformes de démonstration en JavaScript"
+"Dans cet exemple, nous allons fabriquer un visionneur d'images simple avec "
+"Clutter. Vous apprendrez :"
 
-#: C/index.page:7(name)
-msgid "GNOME Documentation Team"
-msgstr "Équipe de documentation GNOME"
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:33
+msgid "How to size and position <code>ClutterActor</code>s"
+msgstr "comment dimensionner et positionner les <code>ClutterActor</code>,"
 
-#: C/index.page:9(years)
-msgid "2010, 2011"
-msgstr "2010, 2011"
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:34
+msgid "How to place an image in a <code>ClutterActor</code>"
+msgstr "comment placer une image dans un <code>ClutterActor</code>,"
 
-#: C/index.page:27(title)
-msgid "GNOME Developer Platform Demos"
-msgstr "Exemples de la plateforme de développement GNOME"
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:35
+msgid "How to do simple transitions using Clutter's animation framework"
+msgstr ""
+"comment faire des transitions simples avec la structure d'animation de "
+"Clutter,"
 
-#: C/index.page:30(title)
-msgid "How to set up your development environment"
-msgstr "Pour définir votre environnement de développement"
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:36
+msgid "How to make <code>ClutterActor</code>s respond to mouse events"
+msgstr ""
+"comment faire réagir les <code>ClutterActor</code> aux événements de la "
+"souris,"
 
-#: C/index.page:34(title)
-msgid "Tutorials, code samples, platform demos and more"
-msgstr "Tutoriels, exemples de code, plateformes de démonstration et davantage"
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:37
+msgid "How to get file names from a directory"
+msgstr "et comment récupérer des noms de fichier depuis un répertoire."
 
-#: C/index.page:38(title)
-msgid "Get Involved"
-msgstr "Contribution"
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:42 C/record-collection.js.page:40
+msgid "Introduction"
+msgstr "Introduction"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/image-viewer.vala.page:48(None) C/image-viewer.py.page:41(None)
-#: C/image-viewer.js.page:42(None) C/image-viewer.cpp.page:31(None)
-#: C/image-viewer.c.page:33(None)
-msgid "@@image: 'media/image-viewer.png'; md5=7720360611243b14283b83527be968c2"
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:43
+#, fuzzy
+#| msgid ""
+#| "Clutter is a library for creating dynamic user interfaces using OpenGL "
+#| "for hardware acceleration. This example demonstates a small, but central, "
+#| "part of the Clutter library to create a simple but attractive image "
+#| "viewing program."
+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 ""
-"@@image: 'media/image-viewer.png'; md5=7720360611243b14283b83527be968c2"
+"Clutter est une bibliothèque pour créer des interfaces utilisateur "
+"dynamiques utilisant OpenGL pour l'accélération matérielle. Cet exemple "
+"montre une petite partie, mais néanmoins centrale, de la bibliothèque "
+"Clutter pour écrire un programme simple, mais sympathique, de visionneur "
+"d'images."
 
-#: C/image-viewer.vala.page:7(title)
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:46
 #, fuzzy
-#| msgid "Image Viewer"
-msgid "Image Viewer (Vala)"
-msgstr "Visionneur d'images"
+#| msgid ""
+#| "To help us reach our goal we will be utilising a few other common pieces "
+#| "of GLib as well. Most importantly, we'll use one <code>GSList</code>, a "
+#| "singly-linked list, to hold our <code>ClutterActor</code>s and another "
+#| "one for file path names. We will also use <code>GDir</code>, a utility "
+#| "for working with directories, to access our image directory and gather "
+#| "file paths."
+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 ""
+"Pour nous aider dans cette tâche, nous utilisons également quelques autres "
+"éléments classiques de GLib. Parmi les plus importants, nous utiliserons "
+"<code>GSList</code>, une liste simplement chaînée, pour contenir nos "
+"<code>ClutterActor</code> et une autre pour les noms de chemin des fichiers. "
+"Nous utiliserons également <code>GDir</code>, un utilitaire pour travailler "
+"avec des répertoires, afin d'accéder au répertoire de nos images et de "
+"récupérer les chemins de fichier."
 
-#: C/image-viewer.vala.page:10(desc) C/image-viewer.c.page:10(desc)
-msgid "A little bit more than a simple \"Hello world\" Gtk application."
-msgstr "Un peu plus qu'une simple application Gtk « Hello world »."
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:59
+#, fuzzy
+#| 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."
+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 ""
+"Cliquez sur l'onglet <gui>C</gui>, choisissez <gui>Gtk+ (simple)</gui>, "
+"cliquez sur <gui>Continuer</gui> et renseignez les champs requis des pages "
+"suivantes avec vos informations. Saisissez <file>murdephotos</file> (sans "
+"accent) comme nom de projet et de répertoire."
 
-#: C/image-viewer.vala.page:22(name)
-msgid "Philip Chimento"
-msgstr "Philip Chimento"
+#. (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 ""
+"Assurez-vous d'avoir désactivé <gui>Utiliser GtkBuilder pour l'interface "
+"utilisateur</gui> car nous allons créer l'interface utilisateur manuellement "
+"dans cet exemple. Consultez le tutoriel <link xref=\"guitar-tuner.c"
+"\">Accordeur de guitare</link> si vous souhaitez savoir comment utiliser le "
+"constructeur d'interface GtkBuilder."
 
-#: C/image-viewer.vala.page:23(email)
-msgid "philip chimento gmail com"
-msgstr "philip chimento gmail com"
+#. (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 ""
+"Activez <gui>Configuration des paquets externes</gui>. Sur la page suivante, "
+"sélectionnez <em>clutter-1.0</em> dans la liste pour inclure la bibliothèque "
+"Clutter à votre projet."
 
-#: C/image-viewer.vala.page:31(title) C/image-viewer.py.page:24(title)
-#: C/image-viewer.js.page:24(title)
-msgid "1 Image Viewer"
-msgstr "1 Visionneur d'images"
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:80
+msgid "A look at Photo Wall"
+msgstr "Un aperçu du mur de photos"
 
-#: C/image-viewer.vala.page:33(p)
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:81
+msgid "Our image viewer presents the user with a wall of images."
+msgstr "Notre visionneur d'images vous montre un mur de photos."
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:85
 msgid ""
-"In this tutorial you will create an application which opens and displays an "
-"image file. You will learn:"
+"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 ""
-"Dans ce tutoriel, nous allons écrire une application qui charge et affiche "
-"un fichier image. Vous allez apprendre :"
+"Quand une image est cliquée, elle est animée pour remplir la zone "
+"d'affichage. Lorsque la photo qui possède le focus est cliquée, elle "
+"retourne à sa position d'origine en utilisant une animation qui dure "
+"également 500 millisecondes."
 
-#: C/image-viewer.vala.page:35(p)
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:91
+msgid "Initial setup"
+msgstr "Configuration initiale"
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:92
 msgid ""
-"How to set up a basic project using the <link xref=\"getting-ready\">Anjuta "
-"IDE</link>."
+"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 ""
-"comment paramétrer un projet de base en utilisant <link xref=\"getting-ready"
-"\">Anjuta IDE</link>,"
+"La partie de code suivante contient beaucoup de définitions et de variables "
+"qui sont utilisées dans les sections suivantes. Servez-vous en comme "
+"référence. Copiez ce code au début du fichier <file>src/main.c</file> :"
 
-#: C/image-viewer.vala.page:36(p)
+#. (itstool) path: section/code
+#: C/photo-wall.c.page:95
+#, no-wrap
 msgid ""
-"How to write a <link href=\"http://developer.gnome.org/platform-overview/";
-"stable/gtk\">Gtk application</link> in Vala"
+"\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 ""
-"comment écrire une <link href=\"http://developer.gnome.org/platform-overview/";
-"stable/gtk\">application Gtk</link> en Vala,"
 
-#: C/image-viewer.vala.page:37(p)
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:119
+msgid "Jumping into the code"
+msgstr "Immersion dans le code"
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:120
 msgid ""
-"Some basic concepts of <link href=\"http://developer.gnome.org/gobject/";
-"stable/\">GObject</link> programming"
+"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 ""
-"quelques concepts de base sur la programmation <link href=\"http://developer.";
-"gnome.org/gobject/stable/\">GObject</link>,"
+"Nous commencerons par analyser la fonction <code>main()</code> dans son "
+"ensemble. Ensuite nous discuterons des autres parties du programme en "
+"détail. Modifiez le fichier <file>src/main.c</file> pour qu'il contienne la "
+"fonction <code>main()</code>. Vous pouvez aussi supprimer la fonction "
+"<code>create_window()</code> car on n'en a plus besoin dans cet exemple."
 
-#: C/image-viewer.vala.page:42(p) C/guitar-tuner.vala.page:37(p)
+#. (itstool) path: section/code
+#: C/photo-wall.c.page:123
+#, no-wrap
 msgid ""
-"Basic knowledge of the <link href=\"https://live.gnome.org/Vala/Tutorial";
-"\">Vala</link> programming language."
+"\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 ""
-"les connaissances de base du langage de programmation <link href=\"https://";
-"live.gnome.org/Vala/Tutorial\">Vala</link>."
 
-#: C/image-viewer.vala.page:43(p) C/guitar-tuner.vala.page:38(p)
-msgid "An installed copy of <app>Anjuta</app>."
-msgstr "une copie installée de <em>Anjuta</em>."
-
-#: C/image-viewer.vala.page:44(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:185
 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."
+"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 ""
-"Vous pourriez trouver la référence API de <link href=\"http://valadoc.org/gtk";
-"+-3.0/\">gtk+-3.0</link> utile, bien qu'il ne soit pas nécessaire de suivre "
-"le tutoriel."
+"Ligne 4 : configuration de <code>ClutterColor</code> en paramétrant les "
+"valeurs rouge, vert, bleu et celle de transparence (alpha). Les valeurs sont "
+"comprises entre 0 et 255. Pour la transparence, une valeur de 255 représente "
+"l'opacité."
 
-#: C/image-viewer.vala.page:57(p) C/guitar-tuner.vala.page:49(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:186
 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."
+"Line 7: You must initialize Clutter. If you forget to do this, you will get "
+"very strange errors. Be warned."
 msgstr ""
-"Lancez <app>Anjuta</app> et cliquez sur <gui>Créer un nouveau projet</gui> "
-"ou <guiseq><gui>Fichier</gui><gui>Nouveau</gui><gui>Projet</gui></guiseq> "
-"pour ouvrir l'assistant de création de projet."
+"Ligne 7 : vous devez initialiser Clutter. Attention, si vous oubliez de le "
+"faire, vous aurez de très étranges messages d'erreur. Vous êtes prévenu."
 
-#: C/image-viewer.vala.page:60(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:187
+#, fuzzy
+#| msgid ""
+#| "Lines 9‒11: Here we get the default <code>ClutterStage</code> that was "
+#| "provided by <code>clutter_init</code>. We then set the size using the "
+#| "defines from the previous section and the address of the "
+#| "<code>ClutterColor</code> we just defined."
 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."
+"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 ""
-"Sélectionnez <gui>Gtk+ (Simple)</gui> dans l'onglet <gui>Vala</gui>, cliquez "
-"sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
-"suivantes. Utilisez <file>image-viewer</file> comme nom de projet et de "
-"répertoire."
+"Lignes 9‒11 : ici nous obtenons le <code>ClutterStage</code> par défaut qui "
+"a été fourni par <code>clutter_init</code> puis nous définissons sa taille "
+"en utilisant les variables définies à la section précédente et l'adresse du "
+"<code>ClutterColor</code> que nous venons de définir."
 
-#: C/image-viewer.vala.page:64(p)
+#. (itstool) path: note/p
+#: C/photo-wall.c.page:188
 msgid ""
-"Make sure that <gui>Use GtkBuilder for user interface</gui> is unchecked as "
-"we will create the UI manually in this tutorial."
+"A <code>ClutterStage</code> is the top-level <code>ClutterActor</code> onto "
+"which other <code>ClutterActor</code>s are placed."
 msgstr ""
-"Assurez-vous d'avoir désactivé <gui>Utiliser GtkBuilder pour l'interface "
-"utilisateur</gui> car nous allons créer l'interface utilisateur manuellement "
-"dans cet exemple."
+"Un <code>ClutterStage</code> est le <code>ClutterActor</code> de premier "
+"niveau sur lequel les autres <code>ClutterActor</code> sont disposés."
 
-#: C/image-viewer.vala.page:65(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:190
+#, fuzzy
+#| msgid ""
+#| "Line 12: Here we call our function for getting the image file paths. "
+#| "We'll look at this in a bit."
 msgid ""
-"You will learn how to use the interface builder in the <link xref=\"guitar-"
-"tuner.vala\">Guitar-Tuner</link> tutorial."
+"Line 16: Here we call our function for getting the image file paths. We'll "
+"look at this in a bit."
 msgstr ""
-"Consultez le tutoriel <link xref=\"guitar-tuner.c\">Accordeur de guitare</"
-"link> si vous souhaitez savoir comment utiliser le constructeur d'interface "
-"GtkBuilder."
+"Ligne 13 : ici nous appelons notre fonction pour obtenir les chemins des "
+"fichiers image. Nous l'examinerons dans un instant."
 
-#: C/image-viewer.vala.page:69(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:191
+#, fuzzy
+#| msgid ""
+#| "Lines 14‒26: This is where we set up the <code>ClutterActor</code>s, load "
+#| "the images and place them into their spot in the image wall. We will look "
+#| "at this in detail in the next section."
 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:"
+"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 ""
-"Cliquez sur <gui>Continuer</gui> et le projet est créé. Ouvrez <file>src/"
-"image_viewer.vala</file> depuis l'onglet <gui>Projet</gui> ou l'onglet "
-"<gui>Fichiers</gui>. Vous verrez apparaître ce code :"
+"Ligne 15-27 : c'est l'endroit où nous paramétrons les <code>ClutterActor</"
+"code>, chargeons les images et les disposons au bon endroit dans le mur "
+"d'images. Nous regarderons cela en détail dans la section suivante."
 
-#: C/image-viewer.vala.page:108(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:192
+#, fuzzy
+#| msgid ""
+#| "Line 29: Show the stage and <em>all its children</em>, meaning our images."
 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:"
+"Line 52: Show the stage and <em>all its children</em>, meaning our images."
 msgstr ""
-"Ce programme charge une fenêtre (vide) à partir du fichier de description de "
-"l'interface et l'affiche. Vous trouverez plus de détails ci-dessous ; passez "
-"cette liste si vous comprenez les bases :"
+"Ligne 29 : affichage de « stage » et de <em>tous ses enfants</em>, c'est-à-"
+"dire nos images."
+
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:193
+#, fuzzy
+#| msgid "Line 32: Start the Clutter main loop."
+msgid "Line 55: Start the Clutter main loop."
+msgstr "Ligne 32 : démarrage de la boucle principale de Clutter."
 
-#: C/image-viewer.vala.page:113(p)
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:198
+msgid "Setting up our image actors"
+msgstr "Mise en place de nos acteurs image"
+
+#. (itstool) path: note/p
+#: C/photo-wall.c.page:199
 msgid ""
-"The two <code>using</code> lines at the top import namespaces so we don't "
-"have to name them explicitly."
+"In Clutter, an actor is the most basic visual element. Basically, everything "
+"you see is an actor."
 msgstr ""
-"Les deux lignes <code>using</code> du début importent des espaces de noms "
-"que nous n'aurons plus à nommer explicitement."
+"Dans Clutter, un acteur est l'élément visuel le plus élémentaire. En gros, "
+"tout ce que vous voyez est un acteur."
 
-#: C/image-viewer.vala.page:116(p)
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:200
 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."
+"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 ""
-"Le constructeur de la classe principale <code>Main</code> crée une nouvelle "
-"fenêtre (vide) et connecte un <link href=\"https://live.gnome.org/Vala/";
-"SignalsAndCallbacks\">signal</link> pour quitter l'application quand cette "
-"fenêtre est fermée."
+"Dans cette section, nous allons regarder plus en détail la boucle utilisée "
+"pour paramétrer les <code>ClutterActor</code> qui affichent nos images."
 
-#: C/image-viewer.vala.page:117(p) C/image-viewer.c.page:69(p)
-#: C/guitar-tuner.c.page:74(p)
+#. (itstool) path: section/code
+#: C/photo-wall.c.page:203
+#, no-wrap
 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."
+"\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 ""
-"Connecter des signaux, c'est décider de ce qui doit se passer quand on "
-"appuie sur un bouton ou quand quelque chose d'autre se produit. Ici, la "
-"fonction <code>destroy</code> est appelée (et quitte l'application) quand la "
-"fenêtre est fermée."
 
-#: C/image-viewer.vala.page:121(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:239
+#, fuzzy
+#| msgid ""
+#| "Line 5: Here we want to get the path at the <var>n</var>th location in "
+#| "the <code>GSList</code> that is holding our image path names. The <var>n</"
+#| "var>th position is calculated based on <code>row</code> and <code>col</"
+#| "code>. The return value is a pointer to a <code>GSList</code> which is "
+#| "just a node in the list. We will use this to get the actual path in the "
+#| "next line. The first parameter is a pointer to the head of the list."
 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)."
+"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 ""
-"La fonction <code>statique main</code> est exécutée par défaut quand vous "
-"lancez une application Vala. Elle appelle d'autres fonctions qui créent la "
-"classe <code>Main</code>, configurent puis exécutent l'application. La "
-"fonction <link href=\"http://valadoc.org/gtk+-3.0/Gtk.main.html\";><code>Gtk."
-"main</code></link> démarre la <link href=\"http://en.wikipedia.org/wiki/";
-"Event_loop\">boucle principale</link> de GTK, qui lance l'interface "
-"utilisateur et commence à écouter les événements (comme des clics de souris "
-"ou des appuis sur des touches)."
-
-#: C/image-viewer.vala.page:133(title) C/image-viewer.cpp.page:81(title)
-#: C/image-viewer.c.page:84(title)
-msgid "Creating the user interface"
-msgstr "Création de l'interface utilisateur"
+"Ligne 5 : ici nous voulons obtenir le chemin à la <var>n</var>ième position "
+"de la <code>GSList</code> qui contient les noms de chemin de nos images. La "
+"<var>n</var>ième position est calculée à partir de <code>row</code> et "
+"<code>col</code>. La valeur retournée est un pointeur vers une <code>GSList</"
+"code> qui est juste un nœud dans la liste. Nous l'utiliserons dans la ligne "
+"suivante pour obtenir le chemin réel. Le premier argument est un pointeur "
+"vers le début de la liste."
 
-#: C/image-viewer.vala.page:134(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:241
+#, fuzzy
+#| msgid ""
+#| "Line 6: This is where we actually create the <code>ClutterActor</code> "
+#| "and place the image into the actor. The first argument is the path which "
+#| "we access through our <code>GSList</code> node. The second argument is "
+#| "for error reporting but we are ignoring that to keep things short."
 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>."
+"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 ""
-"Nous allons maintenant donner vie à la fenêtre vide. GTK organise "
-"l'interface utilisateur avec des <link href=\"http://www.valadoc.org/gtk";
-"+-2.0/Gtk.Container.html\"><code>Gtk.Container</code></link> qui peuvent "
-"contenir d'autres éléments graphiques et même d'autres conteneurs. Ici, nous "
-"allons utiliser le plus simple conteneur disponible, une boîte <link href="
-"\"http://unstable.valadoc.org/gtk+-2.0/Gtk.Box.html\";><code>Gtk.Box</code></"
-"link> :"
+"Ligne 6 : c'est ici que nous créons réellement le <code>ClutterActor</code> "
+"et disposons l'image dans l'acteur. Le premier argument est le chemin qui "
+"permet d'accéder au nœud de notre <code>GSList</code>. Le deuxième sert à "
+"rapporter une erreur mais nous allons ignorer cela pour faire court."
 
-#: C/image-viewer.vala.page:138(p)
-msgid "Add the following lines to the top of the <code>Main</code> class:"
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:243
+#, fuzzy
+#| msgid ""
+#| "Line 8: This adds the <code>ClutterActor</code> to the stage, which is a "
+#| "container. It also assumes ownership of the <code>ClutterActor</code> "
+#| "which is something you'll want to look into as you get deeper into GNOME "
+#| "development. See the <link href=\"http://library.gnome.org/devel/gobject/";
+#| "stable/gobject-memory.html\"><code>GObject</code> documentation</link> "
+#| "for the gory details."
+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 ""
-"Ajoutez les lignes suivantes au dessus de la classe <code>Main</code> :"
+"Ligne 8 : cela ajoute le <code>ClutterActor</code> au « stage », qui est un "
+"conteneur. Cela suppose une notion d'appartenance du <code>ClutterActor</"
+"code> qui est quelque chose que vous devrez comprendre lorsque vous irez un "
+"peu plus loin dans le développement de GNOME. Consultez la <link href="
+"\"http://library.gnome.org/devel/gobject/stable/gobject-memory.html";
+"\">documentation de <code>GObject</code></link> pour des détails pointus."
 
-#: C/image-viewer.vala.page:144(p)
-msgid "Now replace the current constructor with the one below:"
-msgstr "Remplacez maintenant le constructeur actuel par celui ci-dessous :"
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:249
+msgid "Loading the images"
+msgstr "Chargement des images"
 
-#: C/image-viewer.vala.page:170(p)
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:250
 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."
+"Let's take a short break from Clutter to see how we can get the file names "
+"from our image directory."
 msgstr ""
-"Les deux premières lignes sont les parties de l'interface graphique "
-"auxquelles nous aurons besoin d'accéder depuis plus d'une méthode. Nous les "
-"déclarons avant afin qu'elles soient accessibles depuis la classe plutôt que "
-"seulement dans la méthode où elles sont crées."
+"Oublions un court instant Clutter pour regarder comment nous pouvons obtenir "
+"les noms des fichiers contenus dans notre répertoire d'images."
 
-#: C/image-viewer.vala.page:174(p)
+#. (itstool) path: section/code
+#: C/photo-wall.c.page:251
+#, no-wrap
 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."
+"\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 ""
-"Les premières lignes du constructeur créent la fenêtre vide. Les lignes "
-"suivantes créent les éléments graphiques dont nous avons besoin : un bouton "
-"pour ouvrir une image, l'élément graphique image lui-même et la boîte que "
-"nous utilisons comme conteneur."
 
-#: C/image-viewer.vala.page:178(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:279
+#, fuzzy
+#| msgid ""
+#| "Lines 5 and 12: This opens our directory or, if an error occured, returns "
+#| "after printing an error message."
 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."
+"Lines 5 and 12: This opens our directory or, if an error occurred, returns "
+"after printing an error message."
 msgstr ""
-"Les appels à <link href=\"http://unstable.valadoc.org/gtk+-2.0/Gtk.Box.";
-"pack_start.html\"><code>pack_start</code></link> ajoutent les deux éléments "
-"graphiques à la boîte et définissent leur comportement. L'image va s'étendre "
-"pour occuper tout l'espace disponible alors que le bouton va prendre juste "
-"la taille nécessaire. Notez que nous ne définissons pas explicitement les "
-"dimensions des éléments graphiques. Avec GTK, ce n'est habituellement pas "
-"nécessaire car cela facilite grandement l'obtention d'une bonne disposition "
-"pour différentes tailles de fenêtre. La boîte est ensuite ajoutée dans la "
-"fenêtre."
+"Lignes 5 et 12 : cela ouvre notre répertoire ou, en cas d'erreur, quitte la "
+"fonction après affichage d'un message d'erreur."
 
-#: C/image-viewer.vala.page:185(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:280
+#, fuzzy
+#| msgid ""
+#| "Lines 14‒23: The first line gets another file name from the <code>GDir</"
+#| "code> we opened earlier. If there was an image file (which we check by "
+#| "looking at its extension, \".png\" or \".jpg\") in the directory we "
+#| "proceed to prepend the image directory path to the filename and prepend "
+#| "that to the list we set up earlier. Lastly we attempt to get the next "
+#| "path name and reenter the loop if another file was found."
+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 ""
+"Ligne 14-23 : la première ligne récupère un nouveau nom de fichier à partir "
+"du <code>GDir</code> que nous avons ouvert précédemment. S'il existe des "
+"fichiers images (ce que nous vérifions en examinant son extension, « .png » "
+"ou « .jpg ») dans le répertoire, nous continuons en ajoutant le chemin du "
+"répertoire de l'image devant le nom de fichier puis en l'ajoutant en tête de "
+"la liste définie auparavant. Enfin, nous essayons d'obtenir le prochain nom "
+"de fichier et nous recommençons la boucle si un autre fichier a été trouvé."
+
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:285
+msgid "Set up the actors"
+msgstr "Mise en place des acteurs"
+
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:286
 msgid ""
-"We need to define what happens when the user clicks on the button. GTK uses "
-"the concept of <em>signals</em>."
+"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 ""
-"Nous devons définir ce qui se produit lorsque l'utilisateur clique sur le "
-"bouton. GTK utilise le concept de <em>signaux</em>."
+"Examinons maintenant le choix de la taille et du positionnement des "
+"<code>ClutterActor</code> et également la préparation du <code>ClutterActor</"
+"code> pour une interaction de l'utilisateur."
 
-#: C/image-viewer.vala.page:186(p)
+#. (itstool) path: section/code
+#: C/photo-wall.c.page:289
+#, no-wrap
 msgid ""
-"When the <link href=\"http://valadoc.org/gtk+-3.0/Gtk.Button.html\";>button</"
-"link> is clicked, it fires the <link href=\"http://valadoc.org/gtk+-3.0/Gtk.";
-"Button.clicked.html\"><code>clicked</code></link> signal, which we can "
-"connect to some action (defined in a <link href=\"https://live.gnome.org/";
-"Vala/SignalsAndCallbacks\">callback</link> method)."
+"\n"
+"/* 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 ""
-"Lorsque le <link href=\"http://valadoc.org/gtk+-3.0/Gtk.Button.html";
-"\">bouton</link> est cliqué, il émet le signal <link href=\"http://valadoc.";
-"org/gtk+-3.0/Gtk.Button.clicked.html\"><code>clicked</code></link> que nous "
-"pouvons connecter à des actions (définies dans une <link href=\"https://live.";
-"gnome.org/Vala/SignalsAndCallbacks\">fonction de rappel</link>)."
 
-#: C/image-viewer.vala.page:189(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:305
 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."
+"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 ""
-"On le fait en utilisant la méthode <code>connect</code> du signal "
-"<code>clicked</code> du bouton qui dans ce cas indique à GTK d'appeler la "
-"fonction de rappel (pas encore définie) <code>on_image_open</code> lorsque "
-"le bouton est cliqué. Nous définirons la <em>fonction de rappel</em> dans la "
-"prochaine section."
+"Ligne 7 : le fait de définir un acteur comme « reactive » signifie qu'il "
+"réagit aux événements, au <code>button-press-event</code> dans notre cas. "
+"Pour le mur de photos, tous les <code>ClutterActor</code> du mur doivent "
+"être initialisés comme « reactive »."
 
-#: C/image-viewer.vala.page:193(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:308
 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."
+"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 ""
-"Dans la fonction de rappel, nous avons besoin d'accéder aux éléments "
-"graphiques <code>window</code> (fenêtre) et <code>image</code>, c'est "
-"pourquoi nous les définissons comme membres privés (private) au début de "
-"notre classe."
+"Ligne 9-12 : nous connectons maintenant l'événement <code>button-press-"
+"event</code> à la fonction de rappel <code>actor_clicked_cb</code> que nous "
+"examinons ci-dessous."
+
+#. (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 ""
+"À cet instant, nous obtenons un mur d'images qui sont prêtes à être "
+"regardées."
 
-#: C/image-viewer.vala.page:197(p)
+#. (itstool) path: section/title
+#: C/photo-wall.c.page:315
+msgid "Reacting to the clicks"
+msgstr "Réaction aux clics"
+
+#. (itstool) path: section/code
+#: C/photo-wall.c.page:319
+#, no-wrap
 msgid ""
-"The last <code>connect</code> call makes sure that the application exits "
-"when the window is closed. The code generated by Anjuta called an "
-"<code>on_destroy</code> callback method which called <link href=\"http://www.";
-"valadoc.org/gtk+-2.0/Gtk.main_quit.html\"><code>Gtk.main_quit</code></link>, "
-"but just connecting our signal to <code>main_quit</code> directly is easier. "
-"You can delete the <code>on_destroy</code> method."
+"\n"
+"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 ""
-"Le dernier appel <code>connect</code> permet d'être sûr que l'application "
-"quitte lorsque la fenêtre est fermée. Le code généré par Anjuta appelle une "
-"fonction de rappel <code>on_destroy</code> qui appelle <link href=\"http://";
-"www.valadoc.org/gtk+-2.0/Gtk.main_quit.html\"><code>Gtk.main_quit</code></"
-"link> bien qu'il soit plus facile de connecter directement notre signal à "
-"<code>main_quit</code>. Vous pouvez supprimer la méthode <code>on_destroy</"
-"code>."
 
-#: C/image-viewer.vala.page:204(title) C/image-viewer.cpp.page:136(title)
-#: C/image-viewer.c.page:149(title)
-msgid "Showing the image"
-msgstr "Affichage de l'image"
+#. (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 ""
+"Ligne 1-4 : nous devons être sûr que notre fonction de rappel correspond à "
+"la signature requise par notre signal <code>button_clicked_event</code>. "
+"Dans notre exemple, nous n'utilisons que le premier argument, le "
+"<code>ClutterActor</code> qui est réellement cliqué."
 
-#: C/image-viewer.vala.page:205(p)
+#. (itstool) path: note/p
+#: C/photo-wall.c.page:368
 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:"
+"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 ""
-"Nous allons maintenant définir le gestionnaire de signal pour le signal "
-"<code>clicked</code> du bouton ci-dessus. Ajoutez ce code après le "
-"constructeur :"
+"Quelques mots sur les arguments que nous n'utilisons pas dans cet exemple. "
+"L'événement <code>ClutterEvent</code> est différent en fonction de "
+"l'événement géré. Par exemple, un événement appui sur une touche du clavier "
+"produit un <code>ClutterKeyEvent</code> à partir duquel vous pouvez obtenir "
+"comme information, entre autres, la touche qui a été enfoncée. Pour un "
+"événement clic de souris, vous obtenez un <code>ClutterButtonEvent</code> à "
+"partir duquel vous pouvez connaître les valeurs <code>x</code> et <code>y</"
+"code>. Consultez la documentation de Clutter pour les autres types "
+"d'événement <code>ClutterEvent</code>."
 
-#: C/image-viewer.vala.page:231(p)
-msgid "This is a bit complicated, so let's break it down:"
+#. (itstool) path: note/p
+#: C/photo-wall.c.page:369
+#, fuzzy
+#| msgid ""
+#| "The <code>user_data</code> is what one uses to pass data into the the "
+#| "function. A pointer to any data type can be passed in. If you need "
+#| "multiple data to be passed into the callback, you can place the data into "
+#| "a struct and pass its address in."
+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 ""
-"C'est un peu compliqué, donc décortiquons cette partie étape par étape :"
+"<code>user_data</code> est ce qui sert à transmettre des données dans la "
+"fonction. Un pointeur vers n'importe quel type de données peut être "
+"transmis. Si vous avez besoin de transmettre plusieurs données à la fonction "
+"de rappel, vous pouvez mettre les données dans une structure et transmettre "
+"son adresse."
 
-#: C/image-viewer.vala.page:232(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:373
 msgid ""
-"A signal handler is a type of callback method that is called when a signal "
-"is emitted. Here the terms are used interchangeably."
+"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 ""
-"Un gestionnaire de signal est un type de fonction de rappel qui est appelé "
-"lorsqu'un signal est émis. Ici les termes sont utilisés indifféremment."
+"Ligne 7 : nous définissons un drapeau de type « static » pour enregistrer "
+"l'état dans lequel nous sommes : en mode mur ou en mode focus. Nous "
+"commençons en mode mur donc aucune image ne possède le focus, par "
+"conséquent, nous paramétrons le drapeau à <code>FALSE</code> (FAUX) au "
+"départ."
 
-#: C/image-viewer.vala.page:235(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:374
 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."
+"Line 12‒14: These set the image actors to receive events if they are focused."
 msgstr ""
-"Le premier argument de la fonction de rappel est toujours l'élément "
-"graphique qui a envoyé le signal. Parfois d'autres arguments apparaissent "
-"derrière reliés au signal, mais <em>clicked</em> n'en a aucun."
 
-#: C/image-viewer.vala.page:237(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:375
+#, fuzzy
+#| msgid ""
+#| "Line 37: Here we toggle the <code>is_focused</code> flag to the current "
+#| "state."
 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:"
+"Line 16‒17: Here we set the animation duration and save the current state."
 msgstr ""
-"Dans ce cas, le <code>bouton</code> envoie le signal <code>clicked</code> "
-"qui est connecté à la fonction de rappel <code>on_open_image</code> :"
+"Ligne 37 : ici nous basculons le drapeau <code>is_focused</code> vers l'état "
+"actuel."
 
-#: C/image-viewer.vala.page:242(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:376
+#, fuzzy
+#| msgid ""
+#| "Lines 13‒19: Reaching this code means that one image currently has focus "
+#| "and we want to return to wall mode. The <code>clutter_actor_animate</"
+#| "code> function is used to animate a <code>ClutterActor</code>'s property "
+#| "or properties from the current state(s) to the specified state(s). The "
+#| "arguments are as follows:"
 msgid ""
-"The <code>on_open_image</code> method takes the button that emitted the "
-"signal as an argument:"
+"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 ""
-"Le méthode <code>on_open_image</code> prend comme paramètre le bouton qui a "
-"émis le signal :"
+"Ligne 13-19 : ces lignes sont atteintes lorsqu'une image possède "
+"actuellement le focus et que nous voulons retourner en mode mur. La fonction "
+"<code>clutter_actor_animate</code> est utilisée pour animer une ou des "
+"propriétés d'un <code>ClutterActor</code> à partir du ou des états actuels "
+"vers les états spécifiés. Les arguments sont les suivants :"
 
-#: C/image-viewer.vala.page:248(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:378
 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."
+"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 ""
-"La prochaine ligne intéressante est celle où est créée la boîte de dialogue "
-"pour choisir le fichier. Le constructeur de <link href=\"http://www.valadoc.";
-"org/gtk+-3.0/Gtk.FileChooserDialog.html\"><code>FileChooserDialog</code></"
-"link> prend comme argument le titre, la fenêtre parente de la boîte de "
-"dialogue et plusieurs options telles que l'étiquette des boutons et les "
-"actions correspondantes."
+"Ligne 24 : ces lignes sont atteintes lorsque nous sommes actuellement dans "
+"l'état mur et que nous allons donner le focus à un <code>ClutterActor</"
+"code>. Ici nous enregistrons la position de départ afin de pouvoir le "
+"repositionner plus tard."
 
-#: C/image-viewer.vala.page:250(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:379
 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."
+"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 ""
-"Notez que nous utilisons les noms de bouton de la <link href=\"http://";
-"unstable.valadoc.org/gtk+-3.0/Gtk.Stock.html\"><em>collection</em></link> "
-"(stock) Gtk au lieu de saisir manuellement « Cancel » ou « Open ». "
-"L'avantage d'utiliser les noms de la collection est que les étiquettes des "
-"boutons sont déjà traduites dans la langue de l'utilisateur."
+"Ligne 25 : le fait de paramétrer la propriété <code>reactive</code> du "
+"<code>ClutterActor</code> à <code>TRUE</code> rend ce <code>ClutterActor</"
+"code> réactif aux événements. Dans cet état de focus, le seul "
+"<code>ClutterActor</code> qui doit recevoir des événements est le "
+"<code>ClutterActor</code> qui est actuellement affiché. Un clic sur ce "
+"<code>ClutterActor</code> le repositionne à sa position de départ."
 
-#: C/image-viewer.vala.page:254(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:380
 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."
+"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 ""
-"Les deux lignes suivantes limitent la boîte de dialogue <gui>Open</gui> à "
-"l'affichage des seuls fichiers pouvant être ouverts par <em>GtkImage</em> "
-"qui est un élément graphique qui affiche une image. Un objet filtre est "
-"d'abord créé ; ensuite nous ajoutons tous les types de fichiers pris en "
-"charge par <link href=\"http://www.valadoc.org/gdk-pixbuf-2.0/Gdk.Pixbuf.html";
-"\"><code>Gdk.Pixbuf</code></link> (ce qui inclut la plupart des formats "
-"d'image comme PNG ou JPEG) au filtre. Enfin, nous appliquons ce filtre à la "
-"boîte de dialogue <gui>Open</gui>."
 
-#: C/image-viewer.vala.page:259(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:381
 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."
+"Line 39: Here we restore the easing state to what was set before we changed "
+"it in line 16."
 msgstr ""
-"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Dialog.run.html";
-"\"><code>dialog.run</code></link> affiche la boîte de dialogue <gui>Open</"
-"gui>. La boîte de dialogue attend que l'utilisateur choisisse une image ; "
-"quand c'est fait, <code>dialog.run</code> retourne la valeur <link href="
-"\"http://www.valadoc.org/gtk+-3.0/Gtk.ResponseType.html\";>ResponseType</"
-"link> <code>ResponseType.ACCEPT</code> (il retourne la valeur "
-"<code>ResponseType.CANCEL</code> si l'utilisateur clique sur <gui>Cancel</"
-"gui>). L'instruction <code>switch</code> teste cette réponse."
 
-#: C/image-viewer.vala.page:264(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:382
+#, fuzzy
+#| msgid ""
+#| "Line 37: Here we toggle the <code>is_focused</code> flag to the current "
+#| "state."
 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."
+"Line 42: Here we toggle the <code>is_focused</code> flag to the current "
+"state."
 msgstr ""
-"Supposons que l'utilisateur a cliqué sur le bouton <gui>Ouvrir</gui>, la "
-"ligne suivante récupère le nom de fichier de l'image sélectionnée par "
-"l'utilisateur et indique à l'élément graphique <code>GtkImage</code> de "
-"charger et d'afficher l'image choisie."
+"Ligne 37 : ici nous basculons le drapeau <code>is_focused</code> vers l'état "
+"actuel."
 
-#: C/image-viewer.vala.page:267(p) C/image-viewer.py.page:213(p)
-#: C/image-viewer.js.page:299(p)
+#. (itstool) path: item/p
+#: C/photo-wall.c.page:383
 msgid ""
-"In the final line of this method, we destroy the <gui>Open</gui> dialog "
-"because we don't need it any more."
+"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 ""
-"La dernière ligne de cette méthode détruit la boîte de dialogue <gui>Open</"
-"gui> car nous n'en avons plus besoin."
+"Comme mentionné ci-dessus, les <code>ClutterActor</code> qui possèdent des "
+"valeurs <code>depth</code> plus grandes reçoivent les événements mais "
+"peuvent autoriser les <code>ClutterActor</code> en dessous d'eux à recevoir "
+"les événements également. En renvoyant <code>TRUE</code>, l'acteur empêche "
+"la transmission des événements alors qu'en renvoyant <code>FALSE</code> la "
+"transmission se fait."
 
-#: C/image-viewer.vala.page:268(p)
-msgid "Destroying automatically hides the dialog."
-msgstr "La destruction masque automatiquement la boîte de dialogue."
+#. (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 ""
+"Rappelez-vous cependant que pour recevoir des événements les "
+"<code>ClutterActor</code> doivent être définis à <code>reactive</code>."
 
-#: C/image-viewer.vala.page:275(p) C/image-viewer.cpp.page:205(p)
-#: C/image-viewer.c.page:217(p) C/guitar-tuner.vala.page:248(p)
-#: C/guitar-tuner.c.page:252(p)
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:393
 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."
+"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 ""
-"À ce stade, tout le programme est fonctionnel. Cliquez sur "
-"<guiseq><gui>Construire</gui><gui>Construire le projet</gui></guiseq> pour "
-"tout reconstruire et faites <guiseq><gui>Exécuter</gui><gui>Exécuter</gui></"
-"guiseq> pour lancer l'application."
+"Le programme complet devrait maintenant être prêt à fonctionner. Tout ce "
+"dont vous avez besoin est de quelques images à charger. Par défaut, les "
+"images sont chargées à partir d'un répertoire <file>berlin_images</file>. "
+"Vous pouvez, si vous voulez, modifier la ligne <code>#define IMAGE_DIR_PATH</"
+"code> qui se trouve au début du fichier pour faire référence à votre "
+"répertoire de photos ou créer un répertoire <file>berlin_images</file> en "
+"cliquant sur <guiseq><gui>Projet</gui><gui>Nouveau répertoire...</gui></"
+"guiseq> et en créant un sous-répertoire <file>berlin_images</file> dans le "
+"répertoire <file>murdephotos</file>. Assurez-vous de mettre au moins 12 "
+"images dans le répertoire !"
 
-#: C/image-viewer.vala.page:277(p)
+#. (itstool) path: section/p
+#: C/photo-wall.c.page:395
 msgid ""
-"If you haven't already done so, choose the <file>src/image-viewer</file> "
+"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 ""
+"Après avoir fait cela, cliquez sur <guiseq><gui>Construire</"
+"gui><gui>Construire le projet</gui></guiseq> pour tout reconstruire, puis "
+"sur <guiseq><gui>Exécuter</gui><gui>Exécuter</gui></guiseq> pour lancer "
+"l'application."
+
+#. (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 ""
-"Si ce n'est pas encore fait, sélectionnez l'application <file>src/image-"
-"viewer</file> dans la boîte de dialogue qui s'affiche et cliquez sur "
-"<gui>Exécuter</gui>. Amusez-vous bien !"
+"Si vous ne l'avez pas déjà fait, choisissez l'application <file>Debug/src/"
+"murdephotos</file> dans la boîte de dialogue qui apparaît. Enfin, cliquez "
+"sur <gui>Lancer</gui> et amusez-vous !"
 
-#: C/image-viewer.vala.page:283(p)
+#. (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=\"image-viewer/image-viewer.vala\">reference code</link>."
+"<link href=\"photo-wall/photo-wall.c\">reference code</link>."
 msgstr ""
 "Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"image-viewer/image-viewer.vala\">programme de "
+"programme à ce <link href=\"photo-wall/photo-wall.c\">programme de "
 "référence</link>."
 
-#: C/image-viewer.vala.page:287(title) C/image-viewer.py.page:230(title)
-#: C/image-viewer.js.page:316(title) C/image-viewer.cpp.page:215(title)
-#: C/image-viewer.c.page:227(title) C/guitar-tuner.vala.page:264(title)
-#: C/guitar-tuner.py.page:234(title) C/guitar-tuner.cpp.page:268(title)
-#: C/guitar-tuner.c.page:262(title)
-msgid "Next steps"
-msgstr "Les étapes suivantes"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/progressbar_fill.ogv'; "
+#| "md5=287763d1d3f4a328212ea2243910f5e4"
+msgctxt "_"
+msgid ""
+"external ref='media/progressbar_fill.ogv' "
+"md5='287763d1d3f4a328212ea2243910f5e4'"
+msgstr ""
+"@@image: 'media/progressbar_fill.ogv'; md5=287763d1d3f4a328212ea2243910f5e4"
 
-#: C/image-viewer.vala.page:288(p) C/image-viewer.py.page:231(p)
-#: C/image-viewer.js.page:317(p) C/image-viewer.cpp.page:216(p)
-#: C/image-viewer.c.page:228(p) C/guitar-tuner.vala.page:265(p)
-#: C/guitar-tuner.py.page:235(p) C/guitar-tuner.cpp.page:269(p)
-#: C/guitar-tuner.c.page:263(p)
-msgid "Here are some ideas for how you can extend this simple demonstration:"
-msgstr "Voici quelques idées sur la manière d'étendre ce simple exemple :"
+#. (itstool) path: info/title
+#: C/progressbar.c.page:8
+#, fuzzy
+#| msgid "ProgressBar"
+msgctxt "text"
+msgid "ProgressBar (C)"
+msgstr "Barre de progression"
+
+#. (itstool) path: info/desc
+#: C/progressbar.c.page:19 C/progressbar.vala.page:18
+msgid "A widget which indicates progress visually"
+msgstr "Un élément graphique qui matérialise visuellement la progression"
+
+#. (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 "Barre de progression"
 
-#: C/image-viewer.vala.page:290(p)
+#. (itstool) path: page/p
+#: C/progressbar.c.page:25 C/progressbar.vala.page:23
 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."
+"This ProgressBar \"fills in\" by a fraction of the bar until it is full."
 msgstr ""
-"Paramètre en sorte que lorsque la fenêtre s'ouvre, elle fasse une taille de "
-"départ spécifiée, par exemple 200 X 200 pixels."
+"Cette barre de progression se « rempli » par fractions jusqu'à ce qu'elle "
+"soit pleine."
 
-#: C/image-viewer.vala.page:292(p) C/image-viewer.py.page:234(p)
-#: C/image-viewer.js.page:320(p) C/image-viewer.cpp.page:219(p)
-#: C/image-viewer.c.page:231(p)
+#. (itstool) path: page/code
+#: C/progressbar.c.page:27
+#, no-wrap
 msgid ""
-"Have the user select a directory rather than a file, and provide controls to "
-"cycle through all of the images in a directory."
+"\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 ""
-"Faire que l'utilisateur puisse sélectionner un dossier plutôt qu'un fichier "
-"et fournir les contrôles pour naviguer parmi toutes les images d'un dossier."
 
-#: C/image-viewer.vala.page:295(p) C/image-viewer.py.page:237(p)
-#: C/image-viewer.js.page:323(p) C/image-viewer.cpp.page:222(p)
-#: C/image-viewer.c.page:234(p)
+#. (itstool) path: item/p
+#: C/progressbar.c.page:36
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"Apply random filters and effects to the image when it is loaded and allow "
-"the user to save the modified image."
+"<link href=\"http://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.";
+"html#g-timeout-add\">G_Timeout</link>"
 msgstr ""
-"Appliquer au hasard des filtres et des effets à l'image quand elle est "
-"chargée et permettre à l'utilisateur d'enregistrer l'image modifiée."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/image-viewer.vala.page:296(p) C/image-viewer.py.page:238(p)
-#: C/image-viewer.js.page:324(p) C/image-viewer.cpp.page:223(p)
-#: C/image-viewer.c.page:235(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/progressbar.ogv'; md5=36deab3dd4b5be968828fa2ef416d612"
+msgctxt "_"
 msgid ""
-"<link href=\"http://www.gegl.org/api.html\";>GEGL</link> provides powerful "
-"image manipulation capabilities."
+"external ref='media/progressbar.ogv' md5='36deab3dd4b5be968828fa2ef416d612'"
+msgstr "@@image: 'media/progressbar.ogv'; md5=36deab3dd4b5be968828fa2ef416d612"
+
+#. (itstool) path: info/title
+#: C/progressbar.js.page:7
+#, fuzzy
+#| msgid "ProgressBar"
+msgctxt "text"
+msgid "ProgressBar (JavaScript)"
+msgstr "Barre de progression"
+
+#. (itstool) path: info/desc
+#: C/progressbar.js.page:17
+msgid "A bar which animates to indicate progress"
+msgstr "Une barre qui s'anime pour indiquer la progression"
+
+#. (itstool) path: div/p
+#: C/progressbar.js.page:25 C/progressbar.py.page:27
+msgid "Pressing any key stops and starts this ProgressBar."
 msgstr ""
-"<link href=\"http://www.gegl.org/api.html\";>GEGL</link> fournit de "
-"puissantes possibilités de manipulation d'image."
+"L'appui sur n'importe quelle touche démarre et arrête la barre de "
+"progression (ProgressBar)."
 
-#: C/image-viewer.vala.page:299(p) C/image-viewer.py.page:241(p)
-#: C/image-viewer.js.page:327(p) C/image-viewer.cpp.page:226(p)
-#: C/image-viewer.c.page:238(p)
+#. (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 ""
+"Pour démarrer ou arrêter cette barre de progression, appuyez sur n'importe "
+"quelle touche."
+
+#. (itstool) path: page/code
+#: C/progressbar.js.page:34
+#, no-wrap
 msgid ""
-"Allow the user to load images from network shares, scanners, and other more "
-"complicated sources."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ProgressBarExample = new Lang.Class({\n"
+"    Name: 'ProgressBar Example',\n"
+"\n"
+"    // Create the application itself\n"
+"        _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsprogressbar',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"            this._window = new Gtk.ApplicationWindow({ application: this.application,\n"
+"                                                       window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                       default_height: 20,\n"
+"                                                       default_width: 220,\n"
+"                                                       title: \"ProgressBar Example\"});\n"
+"\n"
+"        // Create the progress bar\n"
+"        this.progressBar = new Gtk.ProgressBar ();\n"
+"        this._window.add(this.progressBar);\n"
+"\n"
+"        // Start the function that pulses the bar every 100 milliseconds\n"
+"        this.sourceID = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, Lang.bind(this, this._barPulse));\n"
+"\n"
+"        // Connect a keypress event to the function that toggles the bar to start or stop pulsing\n"
+"        this._window.connect(\"key-press-event\", Lang.bind(this, this._onKeyPress));\n"
+"\n"
+"            // Show the window and all child widgets\n"
+"            this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Pulse the progressbar (unless it has been disabled by a keypress)\n"
+"    _barPulse: function() {\n"
+"        this.progressBar.pulse();\n"
+"        return true;\n"
+"    },\n"
+"\n"
+"    // Start or stop the progressbar when a key is pressed\n"
+"    _onKeyPress: function() {\n"
+"        if (this.sourceID == 0)\n"
+"            this.sourceID = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, Lang.bind(this, 
this._barPulse));\n"
+"        else {\n"
+"            GLib.source_remove(this.sourceID);\n"
+"            this.sourceID = 0;\n"
+"        }\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ProgressBarExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Permettre à l'utilisateur de charger des images depuis des sites de partage, "
-"des scanners ou d'autres sources plus sophistiquées."
 
-#: C/image-viewer.vala.page:300(p) C/image-viewer.py.page:242(p)
-#: C/image-viewer.js.page:328(p) C/image-viewer.cpp.page:227(p)
-#: C/image-viewer.c.page:239(p)
+#. (itstool) path: item/p
+#: C/progressbar.js.page:39
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"You can use <link href=\"http://library.gnome.org/devel/gio/unstable/\";>GIO</"
-"link> to handle network file tranfers and the like, and <link href=\"http://";
-"library.gnome.org/devel/gnome-scan/unstable/\">GNOME Scan</link> to handle "
-"scanning."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/GLib.html\";>GLib</"
+"link>"
 msgstr ""
-"Vous pouvez utiliser <link href=\"http://library.gnome.org/devel/gio/";
-"unstable/\">GIO</link> pour gérer des transferts de fichiers en ligne et des "
-"choses du même type et <link href=\"http://library.gnome.org/devel/gnome-";
-"scan/unstable/\">GNOME Scan</link> pour gérer les documents scannés."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/image-viewer.py.page:7(title)
+#. (itstool) path: info/title
+#: C/progressbar.py.page:8
 #, fuzzy
-#| msgid "Image Viewer"
-msgid "Image Viewer (Python)"
-msgstr "Visionneur d'images"
+#| msgid "ProgressBar"
+msgctxt "text"
+msgid "ProgressBar (Python)"
+msgstr "Barre de progression"
 
-#: C/image-viewer.py.page:10(desc)
+#. (itstool) path: info/desc
+#: C/progressbar.py.page:19
+msgid "A widget which indicates progress visually."
+msgstr "Un élément graphique qui matérialise visuellement la progression."
+
+#. (itstool) path: section/code
+#: C/progressbar.py.page:41
+#, no-wrap
 msgid ""
-"A little bit more than a simple \"Hello world\" application - write an image "
-"viewer in GTK."
+"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 ""
-"Un peu plus qu'une simple application « Hello world » - écrire un visionneur "
-"d'images en GTK."
 
-#: C/image-viewer.py.page:14(name) C/image-viewer.js.page:14(name)
-msgid "Jonh Wendell"
-msgstr "Jonh Wendell"
-
-#: C/image-viewer.py.page:15(email) C/image-viewer.js.page:15(email)
-msgid "jwendell gnome org"
-msgstr "jwendell gnome org"
+#. (itstool) path: section/title
+#: C/progressbar.py.page:46
+msgid "Useful methods for a ProgressBar widget"
+msgstr "Méthodes utiles pour un élément graphique barre de progression"
 
-#: C/image-viewer.py.page:27(p) C/image-viewer.js.page:27(p)
+#. (itstool) path: item/p
+#: C/progressbar.py.page:48
 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:"
+"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 ""
-"Dans ce tutoriel, nous allons écrire une application GTK très simple qui "
-"charge et affiche un fichier image. Vous allez apprendre comment :"
+"Contrairement à <code>pulse()</code>, qui fait avancer ou reculer la barre, "
+"si nous voulons que notre barre de progression se remplisse par fractions "
+"(un nombre flottant <code>float</code> compris entre <code>0.0</code> et "
+"<code>1.0</code> inclus) toujours dans le même sens, nous utilisons la "
+"méthode <code>set_fraction(fraction)</code>."
 
-#: C/image-viewer.py.page:29(p)
-msgid "Write a basic GTK user interface in Python"
-msgstr "écrire une interface graphique GTK en Python,"
+#. (itstool) path: item/p
+#: C/progressbar.py.page:49
+#, fuzzy
+#| msgid ""
+#| "To set a text and show it (superimposed over the bar) use "
+#| "<code>set_text(\"some text\")</code> and <code>set_show_text(True)</"
+#| "code>. If a text is not set and <code>set_show_text(True)</code> the text "
+#| "will be the percentage of the work that has been completed."
+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 ""
+"Pour définir un texte et l'afficher en superposition sur la barre, utilisez "
+"<code>set_text(« texte »)</code> et <code>set_show_text(vrai)</code>. Si "
+"vous ne définissez pas un texte et si vous appliquez "
+"<code>set_show_text(vrai)</code>, le texte remplira la barre en fonction du "
+"pourcentage de l'avancement de la tâche."
 
-#: C/image-viewer.py.page:30(p) C/image-viewer.js.page:30(p)
-msgid "Deal with events by connecting signals to signal handlers"
+#. (itstool) path: item/p
+#: C/progressbar.py.page:57
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkProgressBar.html";
+"\">GtkProgressBar</link>"
 msgstr ""
-"travailler avec des événements en connectant des signaux à des gestionnaires "
-"de signaux,"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/image-viewer.py.page:31(p) C/image-viewer.js.page:31(p)
-msgid "Lay out GTK user interfaces using containers"
-msgstr "mettre en forme des interfaces utilisateur GTK avec des conteneurs,"
+#. (itstool) path: item/p
+#: C/progressbar.py.page:58
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.";
+"html\">GLib - The Main Event Loop</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/image-viewer.py.page:32(p) C/image-viewer.js.page:32(p)
-msgid "Load and display image files"
-msgstr "charger et afficher des fichiers image."
+#. (itstool) path: item/p
+#: C/progressbar.py.page:59
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gdk/stable/gdk-Keyboard-Handling";
+"\">Gdk - Key Values</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/image-viewer.py.page:37(p)
-msgid "Basic knowledge of the python programming language"
-msgstr "des connaissances de base du langage de programmation python."
+#. (itstool) path: info/title
+#: C/progressbar.vala.page:8
+#, fuzzy
+#| msgid "ProgressBar"
+msgctxt "text"
+msgid "ProgressBar (Vala)"
+msgstr "Barre de progression"
 
-#: C/image-viewer.py.page:51(p)
+#. (itstool) path: page/code
+#: C/progressbar.vala.page:25
+#, no-wrap
 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."
+"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 ""
-"Sélectionnez <gui>PyGTK (automake)</gui> dans l'onglet <gui>Python</gui>, "
-"cliquez sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
-"suivantes. Mettez <file>image-viewer</file> comme nom de projet et de "
-"répertoire."
 
-#: C/image-viewer.py.page:54(p)
+#. (itstool) path: item/p
+#: C/progressbar.vala.page:30
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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>."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ProgressBar.html\";>Gtk."
+"ProgressBar</link>"
 msgstr ""
-"Assurez-vous d'avoir désactivé <gui>Utiliser GtkBuilder pour l'interface "
-"utilisateur</gui> car nous allons créer l'interface utilisateur manuellement "
-"dans cet exemple. Consultez <link xref=\"guitar-tuner.py\">l'exemple Guitar-"
-"Tuner</link> pour un exemple d'utilisation du constructeur d'interfaces."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/image-viewer.py.page:59(p)
+#. (itstool) path: item/p
+#: C/progressbar.vala.page:31
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.valadoc.org/glib-2.0/GLib.Timeout.html\";>GLib."
+"Timeout</link>"
 msgstr ""
-"Cliquez sur <gui>Appliquer</gui> et le projet est créé. Ouvrez <file>src/"
-"image_viewer.py</file> depuis l'onglet <gui>Projet</gui> ou l'onglet "
-"<gui>Fichiers</gui>. Il contient quelques lignes de code très basique."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/image-viewer.py.page:65(title) C/image-viewer.js.page:126(title)
-msgid "A first Gtk application"
-msgstr "Une première application Gtk"
+#. (itstool) path: info/title
+#: C/properties.py.page:9
+#, fuzzy
+#| msgid "Properties"
+msgctxt "text"
+msgid "Properties (Python)"
+msgstr "Propriétés"
 
-#: C/image-viewer.py.page:66(p)
-msgid "Let's see what a very basic Gtk application looks like in Python:"
-msgstr "Voyons à quoi ressemble une application Gtk basique écrite en Python :"
+#. (itstool) path: info/desc
+#: C/properties.py.page:14
+msgid "An explanation of properties, getters and setters."
+msgstr ""
+"Une explication des propriétés, des mécanismes d'obtention et de définition."
 
-#: C/image-viewer.py.page:90(p) C/image-viewer.js.page:137(p)
-msgid "Let's take a look at what's happening:"
-msgstr "Regardons ce qui se passe :"
+#. (itstool) path: page/title
+#: C/properties.py.page:27
+msgid "Properties"
+msgstr "Propriétés"
 
-#: C/image-viewer.py.page:93(p) C/image-viewer.js.page:140(p)
-msgid ""
-"The first line imports the Gtk namespace (that is, it includes the Gtk "
-"library). The libraries are provided by GObject Introspection (gi), which "
-"provides language bindings for many GNOME libraries."
+#. (itstool) path: section/p
+#: C/properties.py.page:34
+#, fuzzy
+#| msgid ""
+#| "<em>Properties</em> describe the configuration and state of widgets, and "
+#| "each widget has its own particular set of properties. For example, a "
+#| "widget such as a button or a label has the property \"label\" which "
+#| "contains the text of the widget. You can specify the name and value of "
+#| "any number of properties as keyword arguments when creating an instance "
+#| "of a widget: for example, to create a label aligned to the right with the "
+#| "text “Hello World” and an angle of 25 degrees, you can use:"
+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 ""
-"La première ligne importe l'espace de nom Gtk (c.-à-d. cela inclut la "
-"bibliothèque Gtk). Les bibliothèques sont fournies par « GObject "
-"Introspection (gi) » qui fournit les liens de langage à beaucoup de "
-"bibliothèques GNOME."
+"Les <em>Propriétés</em> décrivent la configuration et l'état des éléments "
+"graphiques, chacun d'eux ayant son propre paquet de propriétés spécifiques. "
+"Par exemple, un bouton ou une étiquette possède la propriété « label » qui "
+"contient le texte de l'élément graphique. Lorsque vous créez un exemple "
+"d'élément graphique, vous pouvez spécifier le nom et la valeur de n'importe "
+"quel nombre de propriétés en tant qu'arguments. Par exemple, pour créer une "
+"étiquette alignée à droite, contenant le texte « Hello World » et ayant un "
+"angle de 25 degrés, utilisez le code suivant :"
 
-#: C/image-viewer.py.page:96(p)
+#. (itstool) path: section/code
+#: C/properties.py.page:41
+#, no-wrap
 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."
+"\n"
+"label = Gtk.Label(label=\"Hello World\", angle=25, halign=Gtk.Align.END)"
 msgstr ""
-"La méthode <code>__init__</code> de la classe <code>GUI</code> crée une "
-"fenêtre <code>Gtk.Window</code> (vide), définit son titre, puis connecte un "
-"signal pour quitter l'application quand la fenêtre est fermée. C'est "
-"globalement très simple. Nous en verrons un peu plus sur les signaux plus "
-"tard."
+"\n"
+"label = Gtk.Label(label=\"Hello World\", angle=25, halign=Gtk.Align.END)"
 
-#: C/image-viewer.py.page:101(p)
+#. (itstool) path: section/p
+#: C/properties.py.page:44
 msgid ""
-"Next, <code>destroy</code> is defined which just quits the application. It "
-"is called by the <code>destroy</code> signal connected above."
+"Alternatively, you can define these properties separately by using the "
+"method associated with it."
 msgstr ""
-"Ensuite est définie la méthode <code>destroy</code> qui quitte juste "
-"l'application. Elle est appelée par le signal connecté ci-dessus."
 
-#: C/image-viewer.py.page:105(p)
-msgid "The rest of the file does initialisation for Gtk and displays the GUI."
+#. (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 ""
-"Le reste du fichier effectue l'initialisation pour Gtk et affiche "
-"l'interface graphique."
+"\n"
+"label = Gtk.Label()\n"
+"label.set_label(\"Hello World\")\n"
+"label.set_angle(25)\n"
+"label.set_halign(Gtk.Align.END)"
 
-#: C/image-viewer.py.page:109(p)
+#. (itstool) path: section/p
+#: C/properties.py.page:51
+#, fuzzy
+#| msgid ""
+#| "Once you have created such a label, you can get the text with the getter "
+#| "<code>label.get_label()</code>."
 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."
+"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 ""
-"Ce programme est prêt à être utilisé, donc essayez-le en utilisant le menu "
-"<guiseq><gui>Exécuter</gui><gui>Exécuter</gui></guiseq>. Cela devrait vous "
-"afficher une fenêtre vide."
+"Une fois cette étiquette créée, utilisez la méthode d'obtention <code>label."
+"get_label()</code> pour récupérer le texte."
 
-#: C/image-viewer.py.page:114(title) C/image-viewer.js.page:181(title)
-msgid "Signals"
-msgstr "Les signaux"
+#. (itstool) path: section/p
+#: C/properties.py.page:53
+#, fuzzy
+#| msgid ""
+#| "Instead of using getters and setters you can also get and set the "
+#| "properties with <code>get_property(\"prop-name\")</code> and "
+#| "<code>set_property(\"prop-name\", value)</code>, respectively."
+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 ""
+"Au lieu d'utiliser les mécanismes d'obtention et de définition, vous pouvez "
+"aussi obtenir et définir respectivement les propriétés avec les fonctions "
+"<code>get_property(\"prop-name\")</code> et <code>set_property(\"prop-name"
+"\", value)</code>."
 
-#: C/image-viewer.py.page:115(p) C/image-viewer.js.page:182(p)
+#. (itstool) path: section/p
+#: C/properties.py.page:59
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/";
+#| "basics.html\">Basics - Properties</link> in Python Gtk+ 3 Tutorial"
 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:"
+"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.";
+"html\">Basics - Properties</link> in Python GTK+ 3 Tutorial"
+msgstr ""
+"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.";
+"html\">Propriétés de base</link> dans le tutoriel Python Gtk+ 3"
+
+#. (itstool) path: info/title
+#: C/py.page:7
+#, fuzzy
+#| msgid "Python"
+msgctxt "link"
+msgid "Python"
+msgstr "Python"
+
+#. (itstool) path: page/title
+#: C/py.page:21
+msgid "Tutorials, code samples and platform demos in Python"
+msgstr "Tutoriels, exemples de code et plateformes de démonstration en Python"
+
+#. (itstool) path: section/title
+#. (itstool) path: page/title
+#: C/py.page:26 C/tutorial.py.page:31
+msgid "Tutorial for beginners"
 msgstr ""
-"Les signaux sont un des concepts clé de la programmation Gtk. Chaque fois "
-"que quelque chose arrive à un objet, il émet un signal ; par exemple, quand "
-"un bouton est cliqué, il renvoie le signal <code>clicked</code>. Si vous "
-"voulez que votre programme réagisse en conséquence, il faut connecter une "
-"fonction (un « gestionnaire de signal ») à ce signal. Voici un exemple :"
 
-#: C/image-viewer.py.page:122(p) C/image-viewer.js.page:189(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/radiobutton.png'; md5=d115460280d8e41493dd98054b5822a5"
+msgctxt "_"
 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."
+"external ref='media/radiobutton.png' md5='d115460280d8e41493dd98054b5822a5'"
+msgstr "@@image: 'media/radiobutton.png'; md5=d115460280d8e41493dd98054b5822a5"
+
+#. (itstool) path: info/title
+#: C/radiobutton.c.page:8
+#, fuzzy
+#| msgid "RadioButton"
+msgctxt "text"
+msgid "RadioButton (C)"
+msgstr "RadioButton"
+
+#. (itstool) path: info/desc
+#: C/radiobutton.c.page:20
+msgid "A choice from multiple checkbuttons"
+msgstr "Un choix entre plusieurs boutons de vérification."
+
+#. (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 "RadioButton"
+
+#. (itstool) path: page/p
+#: C/radiobutton.c.page:26
+msgid "These radiobuttons report their activity in the terminal."
+msgstr "Ces boutons de radio signalent leur activité dans le terminal."
+
+#. (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 ""
-"Les deux dernières lignes créent un bouton <code>Gtk.Button</code> appelé "
-"<code>b</code> et connectent son signal <code>clicked</code> à la fonction "
-"<code>button_clicked</code> définie au-dessus. Chaque fois que ce bouton est "
-"cliqué, le code de la fonction <code>button_clicked</code> est exécuté. Il "
-"affiche juste un message dans cet exemple."
 
-#: C/image-viewer.py.page:126(title) C/image-viewer.js.page:212(title)
-msgid "Containers: Laying-out the user interface"
-msgstr "Les conteneurs : agencement de l'interface utilisateur"
+#. (itstool) path: item/p
+#: C/radiobutton.c.page:38 C/switch.c.page:36
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkSwitch.html";
+"\">GtkSwitch</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/image-viewer.py.page:127(p) C/image-viewer.js.page:213(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/radiobuttontravel.png'; "
+#| "md5=0c5f01ee160bb42716ccf5dccbd080c0"
+msgctxt "_"
 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."
+"external ref='media/radiobuttontravel.png' "
+"md5='0c5f01ee160bb42716ccf5dccbd080c0'"
 msgstr ""
-"Les éléments graphiques (les contrôles, comme les boutons ou les étiquettes) "
-"peuvent être disposés dans la fenêtre à l'aide de <em>conteneurs</em>. Vous "
-"pouvez organiser l'agencement en mélangeant différents types de conteneurs, "
-"comme des boîtes ou des grilles."
+"@@image: 'media/radiobuttontravel.png'; md5=0c5f01ee160bb42716ccf5dccbd080c0"
+
+#. (itstool) path: info/title
+#: C/radiobutton.js.page:8
+#, fuzzy
+#| msgid "RadioButton"
+msgctxt "text"
+msgid "RadioButton (JavaScript)"
+msgstr "RadioButton"
 
-#: C/image-viewer.py.page:128(p) C/image-viewer.js.page:214(p)
+#. (itstool) path: info/desc
+#: C/radiobutton.js.page:18
+msgid "Only one can be selected at a time"
+msgstr "Un seul peut être sélectionné à la fois"
+
+#. (itstool) path: page/p
+#: C/radiobutton.js.page:23
 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."
+"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 ""
-"Une fenêtre <code>Gtk.Window</code> est elle-même un type de conteneur, mais "
-"vous ne pouvez y insérer directement qu'un seul élément graphique. Nous "
-"aimerions avoir deux éléments graphiques, une image et un bouton, donc nous "
-"devons placer un conteneur de « plus haute capacité » dans la fenêtre pour "
-"tout contenir. Plusieurs <link href=\"http://library.gnome.org/devel/gtk/";
-"stable/GtkContainer.html\">types de conteneurs</link> sont disponibles, mais "
-"nous allons utiliser ici une boîte <code>Gtk.Box</code>. Une boîte <code>Gtk."
-"Box</code> peut contenir plusieurs éléments graphiques, disposés "
-"horizontalement ou verticalement. On pourrait créer des agencements plus "
-"complexes en mettant plusieurs boîtes dans une autre et ainsi de suite."
+"Le terme « bouton de radio » provient de l'analogie avec les anciennes "
+"radios de nos vieux véhicules. Ils avaient des boutons poussoirs programmés "
+"et un seul pouvait resté enfoncé à la fois, transmettant une seule station. "
+"Si vous en enfonciez un autre, cela faisait sortir automatiquement le "
+"précédent. Ici, nos RadioButtons fonctionnent exactement de la même façon."
 
-#: C/image-viewer.py.page:130(p) C/image-viewer.js.page:216(p)
+#. (itstool) path: page/p
+#: C/radiobutton.js.page:24
 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."
+"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 ""
-"Il existe un concepteur graphique d'interface utilisateur appelé <app>Glade</"
-"app> intégré à <app>Anjuta</app> ce qui rend la conception d'interface "
-"utilisateur vraiment facile. Dans cet exemple simple, cependant, nous allons "
-"tout programmer à la main."
+"Chaque bouton de radio nécessite une étiquette texte et un groupe. Un seul "
+"bouton d'un même groupe peut être sélectionné à la fois. Ne nommez pas "
+"chaque groupe ; définissez seulement les nouveaux boutons à l'intérieur d'un "
+"groupe qui existe déjà. Si vous créez un bouton en dehors d'un groupe "
+"existant, il générera automatiquement un nouveau groupe pour s'y loger."
 
-#: C/image-viewer.py.page:132(p)
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:41
+#, no-wrap
 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:"
+"\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 ""
-"Ajoutons la boîte et les éléments graphiques à la fenêtre. Insérez le code "
-"suivant dans la méthode <code>__init__</code>, juste après la ligne "
-"<code>window.connect_after</code> :"
 
-#: C/image-viewer.py.page:140(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:67 C/togglebutton.js.page:67
 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."
+"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 ""
-"La première ligne crée une <code>Gtk.Box</code> nommée <code>box</code> et "
-"les lignes suivantes définissent deux de ses propriétés : "
-"l'<code>orientation</code> est verticale (donc les éléments graphiques sont "
-"disposés en colonne) et l'espacement entre les éléments graphiques est fixé "
-"à 5 pixels. La ligne suivante ajoute ensuite cette nouvelle <code>Gtk.Box</"
-"code> à la fenêtre."
+"Tout le code de cet exemple est dans la classe RadioButtonExample. Le code "
+"ci-dessus crée un <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> pour y mettre nos éléments "
+"graphiques et la fenêtre qui les contient."
 
-#: C/image-viewer.py.page:141(p) C/image-viewer.js.page:223(p)
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:68
+#, no-wrap
 msgid ""
-"So far the window only contains an empty <code>Gtk.Box</code>, and if you "
-"run the program now you will see no changes at all (the <code>Gtk.Box</code> "
-"is a transparent container, so you can't see that it's there)."
+"\n"
+"    // 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 ""
-"Pour l'instant, la fenêtre ne contient qu'une boîte <code>Gtk.Box</code> "
-"vide et si vous exécutez le programme, vous ne verrez pas encore de "
-"changement (la boîte <code>Gtk.Box</code> est un conteneur transparent et "
-"vous ne le voyez donc pas)."
 
-#: C/image-viewer.py.page:145(title) C/image-viewer.js.page:227(title)
-msgid "Packing: Adding widgets to the container"
-msgstr "Placement : ajout d'éléments graphiques au conteneur"
+#. (itstool) path: section/title
+#: C/radiobutton.js.page:83
+msgid "Creating the radiobuttons"
+msgstr "Création des boutons de radio"
 
-#: C/image-viewer.py.page:146(p)
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:84
+#, no-wrap
 msgid ""
-"To add some widgets to the <code>Gtk.Box</code>, insert the following code "
-"directly below the <code>window.add (box)</code> line:"
+"\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 ""
-"Pour ajouter d'autres éléments graphiques à la fenêtre, insérez ce code "
-"juste dessous la ligne <code>window.add (box)</code> :"
 
-#: C/image-viewer.py.page:150(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:89
 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."
+"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 ""
-"La première ligne crée une nouvelle image <code>Gtk.Image</code> nommée "
-"<code>image</code> qui sera utilisée pour afficher un fichier image. Comme "
-"nous en avons besoin plus tard dans la fonction de gestion de signal, nous "
-"la définissons comme étant un attribut de classe. Vous devez ajouter "
-"<code>image = 0</code> au début de la classe <code>GUI</code>. Puis, "
-"l'élément graphique image est ajouté (<em>placé</em>) dans le conteneur "
-"<code>box</code> à l'aide de la méthode <link href=\"http://library.gnome.";
-"org/devel/gtk/stable/GtkBox.html#gtk-box-pack-start\"><code>pack_start</"
-"code></link> de GtkBox."
+"Utilisez une étiquette <link xref=\"label.js\">Gtk.Label</link> pour définir "
+"chaque groupe de boutons de radio séparément. Vous pouvez mettre les boutons "
+"de radio de tous les différents groupes où vous voulez, donc si vous voulez "
+"que l'on sache lesquels vont ensemble, vous devez organiser les choses en "
+"fonction."
 
-#: C/image-viewer.py.page:152(p)
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:91
+#, no-wrap
 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>)."
+"\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 ""
-"<code>pack_start</code> prend 4 arguments : l'élément graphique enfant "
-"(<code>child</code>) qui doit être ajouté à la boîte <code>Gtk.Box</code> ; "
-"si la boîte <code>Gtk.Box</code> doit s'agrandir (<code>expand</code>) quand "
-"le nouvel élément graphique est ajouté ; si le nouvel élément graphique doit "
-"prendre tout le nouvel espace créé quand la boîte <code>Gtk.Box</code> "
-"s'agrandit (<code>fill</code>) ; et enfin combien d'espace libre "
-"(<code>padding</code>), en pixels, il doit y avoir entre l'élément graphique "
-"et ses voisins à l'intérieur de la <code>Gtk.Box</code>."
 
-#: C/image-viewer.py.page:153(p) C/image-viewer.js.page:234(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:102
 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."
+"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 ""
-"Si vous les laissez faire, les conteneurs Gtk (et les éléments graphiques) "
-"s'agrandissent dynamiquement pour occuper tout l'espace disponible. Vous ne "
-"positionnez pas les éléments graphiques dans la fenêtre en leur spécifiant "
-"des coordonnées x,y précises mais vous les positionnez les uns par rapport "
-"aux autres. Ceci permet un redimensionnement plus aisé de la fenêtre et les "
-"éléments graphiques devraient automatiquement prendre une taille raisonnable "
-"dans la plupart des cas."
+"Voici trois méthodes différentes pour créer des boutons de radio. La "
+"première est la méthode habituelle, où nous créons un nouveau Gtk."
+"RadioButton et lui assignons ses propriétés en même temps. La seconde et la "
+"troisième utilisent des fonctions qui prennent en charge automatiquement "
+"quelques unes des propriétés ; new_from_widget ne prend qu'un argument : le "
+"nouveau bouton de radio que vous voulez mettre dans le même groupe, alors "
+"que new_with_label_from_widget prend ce même argument et l'étiquette qui va "
+"avec en même temps."
 
-#: C/image-viewer.py.page:154(p) C/image-viewer.js.page:235(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:103
 msgid ""
-"Also note how the widgets are organized in a hierarchy. Once packed in the "
-"<code>Gtk.Box</code>, the <code>Gtk.Image</code> is considered a <em>child</"
-"em> of the <code>Gtk.Box</code>. This allows you to treat all of the "
-"children of a widget as a group; for example, you could hide the <code>Gtk."
-"Box</code>, which would also hide all of its children at the same time."
+"The 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 ""
-"Notez aussi de quelle manière les éléments graphiques sont organisés "
-"hiérarchiquement. Une fois placée dans la <code>Gtk.Box</code>, l'image "
-"<code>Gtk.Image</code> est considérée comme un <em>enfant</em> de la boîte "
-"<code>Gtk.Box</code>. Ceci vous permet de traiter tous les enfants d'un "
-"élément graphique comme un groupe ; par exemple, vous pouvez masquer la "
-"boîte <code>Gtk.Box</code> qui du coup, masque tous ses enfants en même "
-"temps."
+"Le premier bouton de radio d'un groupe est celui sélectionné par défaut. "
+"Décommentez la dernière ligne de cet exemple de code pour apprendre comment "
+"en définir un autre pour qu'il devienne celui sélectionné par défaut."
 
-#: C/image-viewer.py.page:155(p) C/image-viewer.js.page:236(p)
-msgid "Now insert these two lines, below the two you just added:"
+#. (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 ""
-"Insérez maintenant ces deux lignes en dessous des deux que vous venez "
-"d'ajouter :"
 
-#: C/image-viewer.py.page:160(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:114
 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."
+"Here we create the label for the second group of buttons, and then create "
+"them all the same way."
 msgstr ""
-"Ces lignes ressemblent aux deux premières, mais cette fois elles créent un "
-"bouton <code>Gtk.Button</code> et l'ajoute à la <code>box</code>. Notez que "
-"nous paramétrons ici l'argument <code>expand</code> (le second) sur "
-"<code>False</code>, alors qu'il était sur <code>True</code> pour l'image "
-"<code>Gtk.Image</code>. Ceci va conduire à ce que l'image prenne tout "
-"l'espace disponible et le bouton seulement l'espace nécessaire. Lors d'un "
-"redimensionnement de la fenêtre, la taille du bouton reste identique, alors "
-"que la taille de l'image va augmenter pour occuper le reste de la fenêtre."
+"Ici, nous créons l'étiquette du second groupe de boutons et ensuite nous les "
+"générons tous de la même manière."
+
+#. (itstool) path: section/title
+#: C/radiobutton.js.page:118 C/textview.js.page:132
+msgid "Creating the rest of the user interface"
+msgstr "Création du reste de l'interface utilisateur"
 
-#: C/image-viewer.py.page:164(title) C/image-viewer.js.page:247(title)
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:120
+#, no-wrap
 msgid ""
-"Loading the image: Connecting to the button's <code>clicked</code> signal"
+"\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 ""
-"Chargement de l'image : connexion au signal <code>clicked</code> du bouton"
 
-#: C/image-viewer.py.page:165(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:130
 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."
+"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 ""
-"Quand l'utilisateur clique sur le bouton <gui>Open a picture...</gui>, une "
-"boîte de dialogue s'affiche pour lui permettre de choisir une image. Une "
-"fois ce choix effectué, la photo est chargée et affichée dans l'élément "
-"graphique image."
+"Ce code crée un bouton <link xref=\"button.js\">Gtk.Button</link> et le lie "
+"à une fonction qui affiche un message stupide si on clique sur OK, selon les "
+"boutons qui sont sélectionnés."
 
-#: C/image-viewer.py.page:166(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:131
+#, fuzzy
+#| msgid ""
+#| "To make sure the button's \"OK\" label shows up properly in every "
+#| "language that GNOME is translated into, remember to use one of Gtk's "
+#| "<link href=\"http://developer.gnome.org/gtk/2.24/gtk-Stock-Items.html";
+#| "\">stock button types.</link>"
 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:"
+"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 ""
-"Connectez d'abord le signal <code>clicked</code> du bouton à une fonction de "
-"gestion de signal que vous appelez <code>on_open_clicked</code>. Mettez ce "
-"code immédiatement après la ligne <code>button = Gtk.Button()</code> où le "
-"bouton a été créé :"
+"Assurez-vous d'utiliser un des <link href=\"http://developer.gnome.org/";
+"gtk/2.24/gtk-Stock-Items.html\">types de bouton de la collection Gtk</link> "
+"pour que votre bouton « OK » s'affiche dans toutes les langues traduites de "
+"GNOME."
 
-#: C/image-viewer.py.page:170(p)
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:133
+#, no-wrap
 msgid ""
-"This will connect the <code>clicked</code> signal to <code>on_open_clicked</"
-"code> method that we will define below."
+"\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 ""
-"Cela connecte le signal <code>clicked</code> à la méthode "
-"<code>on_open_clicked</code> que nous définirons ci-dessous."
 
-#: C/image-viewer.py.page:175(title) C/image-viewer.js.page:257(title)
-msgid "Loading the image: Writing the signal's callback"
-msgstr "Chargement de l'image : écriture de la fonction de rappel du signal"
+#. (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 ""
+"Organisons chaque groupe de boutons de radio dans une grille <link xref="
+"\"grid.js\">Gtk.Grid</link> séparée. Comme cela, nous pouvons modifier "
+"l'agencement plus aisément plus tard. Mettons une marge en haut de la "
+"deuxième grille pour séparer visuellemnt les deux ensembles de choix."
 
-#: C/image-viewer.py.page:176(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:168
 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:"
+"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 ""
-"On peut maintenant créer la méthode <code>on_open_clicked</code>. Insérez ce "
-"qui suit dans le bloc de code de la classe <code>GUI</code>, après la "
-"méthode <code>__init__</code> :"
+"Après les avoir organisé, nous les mettons dans une troisième grille "
+"principale, avec le bouton OK. Puis, nous lions le tout à la fenêtre."
 
-#: C/image-viewer.py.page:192(p) C/image-viewer.js.page:278(p)
-#: C/image-viewer.cpp.page:172(p) C/image-viewer.c.page:186(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:176
 msgid ""
-"This is a bit more complicated than anything we've attempted so far, so "
-"let's break it down:"
+"Finally, we tell the window and everything inside it to become visible when "
+"the application is run."
 msgstr ""
-"C'est un peu plus compliqué que tout ce que nous avons essayé jusqu'à "
-"présent, donc décortiquons cette partie étape par étape :"
+"Enfin, nous indiquons à la fenêtre de s'afficher avec son contenu au "
+"démarrage de l'application."
 
-#: C/image-viewer.py.page:195(p)
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:182
+#, no-wrap
 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."
+"\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 ""
-"La ligne commençant par <code>dialog</code> crée une boîte de dialogue "
-"<gui>Open</gui> qui permet à l'utilisateur de choisir des fichiers. Nous "
-"paramétrons trois propriétés : le titre de la boîte de dialogue ; la "
-"fonction (le type) de la boîte de dialogue (c'est une boîte de dialogue "
-"« OPEN », mais on aurait pu utiliser (<code>SAVE</code>) (enregistrer) si "
-"notre intention avait été d'enregistrer un fichier) et <code>transient_for</"
-"code>, qui définit la fenêtre parent de la boîte de dialogue."
 
-#: C/image-viewer.py.page:198(p) C/image-viewer.js.page:284(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:201
 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>."
+"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 ""
-"Les deux lignes suivantes ajoutent les boutons <gui>Cancel</gui> (Annuler) "
-"et <gui>Open</gui> (Ouvrir) à la boîte de dialogue. Le second argument de la "
-"méthode <code>add_button</code> est la valeur (de type entier) qui est "
-"retournée lorsque le bouton est cliqué : 0 pour <gui>Annuler</gui> et 1 pour "
-"<gui>Ouvrir</gui>."
+"Quand vous cliquez sur OK, une boîte de dialogue <link xref=\"messagedialog."
+"js\">Gtk.MessageDialog</link> s'affiche. Cette fonction crée et affiche le "
+"message surgissant et ensuite connecte son bouton OK à une fonction qui le "
+"ferme. Le contenu du message surgissant dépend de la fonction "
+"_messageText(), qui renvoie une valeur différente selon les options que vous "
+"avez choisies."
 
-#: C/image-viewer.py.page:199(p) C/image-viewer.js.page:285(p)
-#: C/image-viewer.cpp.page:180(p) C/image-viewer.c.page:198(p)
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:203
+#, no-wrap
 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."
+"\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 ""
-"Notez que nous utilisons les noms de bouton de la <em>collection</em> "
-"(stock) Gtk au lieu de saisir manuellement « Cancel » ou « Open ». "
-"L'avantage d'utiliser les noms de la collection est que les étiquettes des "
-"boutons seront déjà traduites dans la langue de l'utilisateur."
 
-#: C/image-viewer.py.page:202(p) C/image-viewer.js.page:288(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:247
 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)."
+"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 ""
-"<code>set_default_response</code> détermine le bouton qui est activé quand "
-"l'utilisateur fait un double-clic sur un fichier ou appuie sur la touche "
-"<key>Entrée</key>. Ici, nous utilisons le bouton <gui>Open</gui> (qui a la "
-"valeur 1)."
+"La méthode get_active() permet de savoir quel bouton de radio a été pressé. "
+"Cette fonction renvoie un message stupide différent selon le bouton qui a "
+"été pressé. Sa valeur de retour est utilisée comme propriété du texte de la "
+"boîte de dialogue de message."
 
-#: C/image-viewer.py.page:205(p) C/image-viewer.js.page:291(p)
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:249
+#, no-wrap
 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."
+"\n"
+"    _clearTravelPopUp: function () {\n"
+"\n"
+"        this._travel.destroy();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
 msgstr ""
-"Les trois lignes suivantes limitent la boîte de dialogue <gui>Ouvrir</gui> à "
-"l'affichage des seuls fichiers pouvant être ouverts par <code>Gtk.Image</"
-"code>. Un objet filtre est d'abord créé ; ensuite nous ajoutons tous les "
-"types de fichier pris en charge par <code>Gdk.Pixbuf</code> (ce qui inclut "
-"la plupart des formats d'image comme PNG ou JPEG) au filtre. Enfin, nous "
-"appliquons ce filtre à la boîte de dialogue <gui>Open</gui>."
 
-#: C/image-viewer.py.page:208(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:258
 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."
+"This function is called when the MessageDialog's OK button is pressed. It "
+"simply makes the popup go away."
 msgstr ""
-"<code>dialog.run</code> affiche la boîte de dialogue <gui>Open</gui>. La "
-"boîte de dialogue attend que l'utilisateur choisisse une image ; quand c'est "
-"fait, <code>dialog.run</code> retourne la valeur <output>1</output> (il "
-"retourne la valeur <output>0</output> si l'utilisateur clique sur "
-"<gui>Annuler</gui>). L'instruction <code>if</code> teste cette réponse."
+"Cette fonction est appelée quand le bouton OK du texte de la boîte de "
+"dialogue de message est pressé. Elle fait seulement disparaître le message "
+"surgissant."
 
-#: C/image-viewer.py.page:210(p) C/image-viewer.js.page:296(p)
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:260
+#, no-wrap
 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."
+"\n"
+"// Run the application\n"
+"let app = new RadioButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Supposons que l'utilisateur a cliqué sur le bouton <gui>Ouvrir</gui>, la "
-"ligne suivante définit la propriété <code>file</code> du <code>Gtk.Image</"
-"code> au nom de fichier image sélectionné. <code>Gtk.Image</code> charge "
-"alors l'image choisie et l'affiche."
 
-#: C/image-viewer.py.page:221(p)
+#. (itstool) path: section/p
+#: C/radiobutton.js.page:265 C/togglebutton.js.page:144
 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!"
+"Finally, we create a new instance of the finished RadioButtonExample class, "
+"and set the application running."
 msgstr ""
-"Tout le programme nécessaire est maintenant en place, donc essayez de "
-"l'exécuter. Cela devrait fonctionner ; un visionneur d'images totalement "
-"fonctionnel (et une visite éclair de Python et de Gtk) en très peu de temps !"
+"Enfin, nous créons une nouvelle instance de la classe RadioButtonExample et "
+"lançons l'application."
 
-#: C/image-viewer.py.page:226(p)
+#. (itstool) path: section/code
+#: C/radiobutton.js.page:270
+#, no-wrap
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"image-viewer/image-viewer.py\">reference code</link>."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const RadioButtonExample = new Lang.Class({\n"
+"    Name: 'RadioButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsradiobutton',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 20,\n"
+"            title: \"Travel Planning\"});\n"
+"\n"
+"        // Create a label for the first group of buttons\n"
+"        this._placeLabel = new Gtk.Label ({label: \"Where would you like to travel to?\"});\n"
+"\n"
+"        // Create three radio buttons three different ways\n"
+"        this._place1 = new Gtk.RadioButton ({label: \"The Beach\"});\n"
+"\n"
+"        this._place2 = Gtk.RadioButton.new_from_widget (this._place1);\n"
+"        this._place2.set_label (\"The Moon\");\n"
+"\n"
+"        this._place3 = Gtk.RadioButton.new_with_label_from_widget (this._place1, \"Antarctica\");\n"
+"        // this._place3.set_active (true);\n"
+"\n"
+"        // Create a label for the second group of buttons\n"
+"        this._thingLabel = new Gtk.Label ({label: \"And what would you like to bring?\" });\n"
+"\n"
+"        // Create three more radio buttons\n"
+"        this._thing1 = new Gtk.RadioButton ({label: \"Penguins\" });\n"
+"        this._thing2 = new Gtk.RadioButton ({label: \"Sunscreen\", group: this._thing1 });\n"
+"        this._thing3 = new Gtk.RadioButton ({label: \"A spacesuit\", group: this._thing1 });\n"
+"\n"
+"        // Create a stock OK button\n"
+"        this._okButton = new Gtk.Button ({\n"
+"            label: 'gtk-ok',\n"
+"            use_stock: 'true',\n"
+"            halign: Gtk.Align.END });\n"
+"\n"
+"        // Connect the button to the function which handles clicking it\n"
+"        this._okButton.connect ('clicked', Lang.bind (this, this._okClicked));\n"
+"\n"
+"        // Create a grid to put the \"place\" items in\n"
+"        this._places = new Gtk.Grid ();\n"
+"\n"
+"        // Attach the \"place\" items to the grid\n"
+"        this._places.attach (this._placeLabel, 0, 0, 1, 1);\n"
+"        this._places.attach (this._place1, 0, 1, 1, 1);\n"
+"        this._places.attach (this._place2, 0, 2, 1, 1);\n"
+"        this._places.attach (this._place3, 0, 3, 1, 1);\n"
+"\n"
+"        // Create a grid to put the \"thing\" items in\n"
+"        this._things = new Gtk.Grid ({ margin_top: 50 });\n"
+"\n"
+"        // Attach the \"thing\" items to the grid\n"
+"        this._things.attach (this._thingLabel, 0, 0, 1, 1);\n"
+"        this._things.attach (this._thing1, 0, 1, 1, 1);\n"
+"        this._things.attach (this._thing2, 0, 2, 1, 1);\n"
+"        this._things.attach (this._thing3, 0, 3, 1, 1);\n"
+"\n"
+"        // Create a grid to put everything in\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            margin_left: 40,\n"
+"            margin_right: 50 });\n"
+"\n"
+"        // Attach everything to the grid\n"
+"        this._grid.attach (this._places, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._things, 0, 1, 1, 1);\n"
+"        this._grid.attach (this._okButton, 0, 2, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _okClicked: function () {\n"
+"\n"
+"        // Create a popup that shows a silly message\n"
+"        this._travel = new Gtk.MessageDialog ({\n"
+"            transient_for: this._window,\n"
+"            modal: true,\n"
+"            message_type: Gtk.MessageType.OTHER,\n"
+"            buttons: Gtk.ButtonsType.OK,\n"
+"            text: this._messageText() });\n"
+"\n"
+"        // Show the popup\n"
+"        this._travel.show();\n"
+"\n"
+"        // Bind the OK button to the function that closes the popup\n"
+"        this._travel.connect (\"response\", Lang.bind (this, this._clearTravelPopUp));\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _messageText: function() {\n"
+"\n"
+"        // Create a silly message for the popup depending on what you selected\n"
+"        var stringMessage = \"\";\n"
+"\n"
+"        if (this._place1.get_active()) {\n"
+"\n"
+"            if (this._thing1.get_active())\n"
+"                stringMessage = \"Penguins love the beach, too!\";\n"
+"\n"
+"            else if (this._thing2.get_active())\n"
+"                stringMessage = \"Make sure to put on that sunscreen!\";\n"
+"\n"
+"            else stringMessage = \"Are you going to the beach in space?\";\n"
+"\n"
+"        }\n"
+"\n"
+"        else if (this._place2.get_active()) {\n"
+"\n"
+"            if (this._thing1.get_active())\n"
+"                stringMessage = \"The penguins will take over the moon!\";\n"
+"\n"
+"            else if (this._thing2.get_active())\n"
+"                stringMessage = \"A lack of sunscreen will be the least of your problems!\";\n"
+"\n"
+"            else stringMessage = \"You'll probably want a spaceship, too!\";\n"
+"        }\n"
+"\n"
+"        else if (this._place3.get_active()) {\n"
+"\n"
+"            if (this._thing1.get_active())\n"
+"                stringMessage = \"The penguins will be happy to be back home!\";\n"
+"\n"
+"            else if (this._thing2.get_active())\n"
+"                stringMessage = \"Antarctic sunbathing may be hazardous to your health!\";\n"
+"\n"
+"            else stringMessage = \"Try bringing a parka instead!\";\n"
+"        }\n"
+"\n"
+"        return stringMessage;\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"    _clearTravelPopUp: function () {\n"
+"\n"
+"        this._travel.destroy();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new RadioButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"image-viewer/image-viewer.py\">programme de "
-"référence</link>."
 
-#: C/image-viewer.js.page:7(title)
+#. (itstool) path: item/p
+#: C/radiobutton.js.page:278 C/statusbar.js.page:225 C/textview.js.page:252
 #, fuzzy
-#| msgid "Classes in JavaScript"
-msgid "Image Viewer (JavaScript)"
-msgstr "Les classes en JavaScript"
-
-#: C/image-viewer.js.page:10(desc)
+#| msgid ""
+#| "In this sample we used the following: <link href=\"http://www.valadoc.org/";
+#| "gtk+-3.0/Gtk.Button.html\">Gtk.Button</link>"
 msgid ""
-"A little bit more than a simple \"Hello world\" application - write an image "
-"viewer in GTK. Includes an introduction to the JavaScript language."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Button.html";
+"\">Gtk.Button</link>"
 msgstr ""
-"Un peu plus qu'une simple application « Hello world » - programmer un "
-"visionneur d'images avec GTK. Inclut une introduction au langage JavaScript."
-
-#: C/image-viewer.js.page:29(p)
-msgid "Write a basic GTK user interface in JavaScript"
-msgstr "écrire une interface utilisateur GTK de base en JavaScript,"
-
-#: C/image-viewer.js.page:37(p)
-msgid "An installed copy of the <em>gjs</em> interpreter"
-msgstr "une copie installée de l'interpréteur <em>gjs</em>,"
+"Dans cet exemple, nous avons utilisé le <link href=\"http://www.valadoc.org/";
+"gtk+-3.0/Gtk.Button.html\">Gtk.Button</link>"
 
-#: C/image-viewer.js.page:38(p)
-msgid "Basic knowledge of any object-orientated programming language"
-msgstr "des connaissances de base d'un langage de programmation objet."
+#. (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
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Grid.html";
+"\">Gtk.Grid</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/image-viewer.js.page:52(p)
+#. (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
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Label.html";
+"\">Gtk.Label</link>"
 msgstr ""
-"Sélectionnez <gui>JavaScript générique</gui> dans l'onglet <gui>JS</gui>, "
-"cliquez sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
-"suivantes. Mettez <file>visionneur_image</file> comme nom de projet et de "
-"répertoire."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/image-viewer.js.page:55(p)
+#. (itstool) path: item/p
+#: C/radiobutton.js.page:281 C/textview.js.page:255
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 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."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.RadioButton.";
+"html\">Gtk.RadioButton</link>"
 msgstr ""
-"Cliquez sur <gui>Appliquer</gui> et le projet est créé. Ouvrez <file>src/"
-"main.js</file> depuis l'onglet <gui>Projet</gui> ou l'onglet <gui>Fichiers</"
-"gui>. Il contient un exemple de programme très basique."
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/image-viewer.js.page:62(title)
-msgid "JavaScript basics: Hello World"
-msgstr "Les bases JavaScript : Hello World"
+#. (itstool) path: info/title
+#: C/radiobutton.py.page:8
+#, fuzzy
+#| msgid "RadioButton"
+msgctxt "text"
+msgid "RadioButton (Python)"
+msgstr "RadioButton"
 
-#: C/image-viewer.js.page:63(p)
+#. (itstool) path: info/desc
+#: C/radiobutton.py.page:20
+msgid "Mutually exclusive buttons."
+msgstr "Boutons exclusifs."
+
+#. (itstool) path: page/p
+#: C/radiobutton.py.page:25
 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>:"
+"Three RadioButtons. You can see in the terminal if they are turned off or on."
 msgstr ""
-"Avant de commencer à programmer le visionneur d'images, regardons de plus "
-"près la façon dont JavaScript est utilisé dans GNOME. Bien sûr, votre tout "
-"premier contact avec n'importe quel langage de programmation devrait être le "
-"« Hello World » du fichier <file>main.js</file> :"
+"Trois boutons radio. Vous pouvez voir dans le terminal s'ils sont activés ou "
+"non."
 
-# Bruno : with no space between print and (
-#: C/image-viewer.js.page:64(code)
+#. (itstool) path: section/code
+#: C/radiobutton.py.page:31
 #, no-wrap
-msgid "print (\"Hello world!\");"
-msgstr "print(\"Hello world!\");"
-
-#: C/image-viewer.js.page:65(p)
 msgid ""
-"This should look quite natural if you're familiar with almost any other "
-"programming language. The function <code>print</code> is called with the "
-"argument <code>\"Hello world!\"</code>, which will be printed on the screen. "
-"Note that each line of code ends with a semicolon."
+"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 ""
-"Ceci doit vous sembler très normal si vous êtes familier avec la plupart des "
-"langages de programmation. La fonction <code>print</code> est appelée avec "
-"l'argument <code>\"Hello world!\"</code> qui est imprimé à l'écran. Notez "
-"que chaque ligne du programme se termine par un point-virgule."
 
-#: C/image-viewer.js.page:69(title)
-msgid "Classes in JavaScript"
-msgstr "Les classes en JavaScript"
+#. (itstool) path: section/title
+#: C/radiobutton.py.page:35
+msgid "Useful methods for a RadioButton widget"
+msgstr "Méthodes utiles pour un élément graphique RadioButton"
 
-#: C/image-viewer.js.page:70(p)
-msgid "This is the standard way to define a class in JavaScript:"
-msgstr "Voici la méthode standard pour définir une classe en JavaScript :"
+#. (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 ""
 
-#: C/image-viewer.js.page:93(p)
+#. (itstool) path: section/p
+#: C/radiobutton.py.page:38
+#, fuzzy
+#| msgid ""
+#| "Instead of <code>button1 = Gtk.RadioButton(label=\"Button 1\")</code> we "
+#| "could create the button and label it with"
 msgid ""
-"This defines a class called <code>MyClass</code>. Let's go through each part "
-"of the class definition:"
+"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 ""
-"Ceci définit une classe appelée <code>MyClass</code>. Passons en revue "
-"chaque partie de la définition d'une classe :"
+"Au lieu de <code>button1 = Gtk.RadioButton(label=« bouton 1 »)</code>, nous "
+"pourrions créer le bouton et l'étiquette qui va avec"
 
-#: C/image-viewer.js.page:96(p)
+#. (itstool) path: section/code
+#: C/radiobutton.py.page:39
+#, no-wrap
 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."
+"\n"
+"button1 = Gtk.RadioButton()\n"
+"button1.set_label(\"Button 1\")."
 msgstr ""
-"<code>function MyClass</code> est le constructeur de la classe — son nom "
-"doit correspondre au nom de la classe. Vous avez accès à n'importe quel "
-"membre de la classe avec l'objet <code>this</code> ; ici, le générateur "
-"appelle la méthode <code>_init</code> de la classe."
+"\n"
+"button1 = Gtk.RadioButton()\n"
+"button1.set_label(« bouton 1 »)."
 
-#: C/image-viewer.js.page:99(p)
+#. (itstool) path: section/p
+#: C/radiobutton.py.page:42
+#, fuzzy
+#| msgid ""
+#| "Yet another way to create a new RadioButton with a label is <code>button1 "
+#| "= Gtk.RadioButton.new_with_label(None, \"Button 1\")</code> (the first "
+#| "arguement is the group of the radiobuttons, which we can get with "
+#| "<code>get_group()</code>, the second argument is the label)."
 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."
+"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 ""
-"Le bloc <code>MyClass.prototype</code> est l'endroit où vous définissez la "
-"<em>structure</em> de la classe. Chaque classe est constituée de méthodes "
-"(les fonctions) et de champs (les variables) ; il y a trois méthodes et deux "
-"champs dans cet exemple."
+"Il y a encore une autre manière de créer un nouveau bouton de radio : "
+"<code>button1 = Gtk.RadioButton.new_with_label(None, « bouton 1 »)</code> où "
+"le premier argument est le groupe de boutons de radio que nous pouvons "
+"obtenir avec <code>get_group()</code> et le second argument est l'étiquette."
 
-#: C/image-viewer.js.page:102(p)
+#. (itstool) path: item/p
+#: C/radiobutton.py.page:51
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"The first method defined here is called <code>_init</code>, and we specify "
-"that it is a function with no arguments:"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkRadioButton.html";
+"\">GtkRadioButton</link>"
 msgstr ""
-"La première méthode définie ici est appelée <code>_init</code> et nous "
-"spécifions que c'est une fonction sans argument :"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/image-viewer.js.page:103(code)
-#, no-wrap
-msgid "_init: function ()"
-msgstr "_init: function ()"
+#. (itstool) path: info/title
+#: C/radiobutton.vala.page:8
+#, fuzzy
+#| msgid "RadioButton"
+msgctxt "text"
+msgid "RadioButton (Vala)"
+msgstr "RadioButton"
+
+#. (itstool) path: info/desc
+#: C/radiobutton.vala.page:21
+msgid "A choice from multiple CheckButtons."
+msgstr "Un choix entre plusieurs CheckButtons."
 
-#: C/image-viewer.js.page:104(p)
+#. (itstool) path: page/p
+#: C/radiobutton.vala.page:26
+msgid "These RadioButtons report their activity in the terminal."
+msgstr "Ces boutons radio signalent leur activité dans le terminal."
+
+#. (itstool) path: page/code
+#: C/radiobutton.vala.page:28
+#, no-wrap
 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."
+"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 ""
-"Nous écrivons la fonction à l'intérieur d'accolades. Deux champs sont "
-"définis ici, <code>propertyA</code> et <code>propertyB</code>. Le premier "
-"est défini comme une chaîne et le second comme un nombre entier (10). La "
-"fonction ne retourne aucune valeur."
 
-#: C/image-viewer.js.page:107(p)
+#. (itstool) path: item/p
+#: C/radiobutton.vala.page:33
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 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>."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.RadioButton.html\";>Gtk."
+"RadioButton</link>"
 msgstr ""
-"La méthode suivante est appelée <code>aMethod</code> et possède deux "
-"arguments qu'elle affiche quand vous l'appelez. La dernière méthode est "
-"<code>dumpProperties</code> et elle affiche les champs <code>propertyA</"
-"code> et <code>propertyB</code>."
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/image-viewer.js.page:110(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/record-collection.png'; "
+#| "md5=2d645997687ed5aacd36aafafc16e072"
+msgctxt "_"
 msgid ""
-"Note how the class definition (prototype) is arranged; each function "
-"definition is separated by a comma."
+"external ref='media/record-collection.png' "
+"md5='2d645997687ed5aacd36aafafc16e072'"
 msgstr ""
-"Notez comment la définition de la classe (prototype) est structurée ; chaque "
-"définition de fonction est séparée par une virgule."
+"@@image: 'media/record-collection.png'; md5=2d645997687ed5aacd36aafafc16e072"
 
-#: C/image-viewer.js.page:114(p)
-msgid "Now that MyClass has been defined, we can play with it:"
-msgstr "Maintenant que MyClass a été défini, nous pouvons jouer avec :"
+#. (itstool) path: info/title
+#: C/record-collection.js.page:8
+#, fuzzy
+#| msgid "3 Record Collection"
+msgctxt "text"
+msgid "Record collection (JavaScript)"
+msgstr "3 Discothèque"
 
-#: C/image-viewer.js.page:120(p)
-msgid ""
-"This code creates a new instance of the class called <code>o</code>, runs "
-"<code>aMethod</code>, changes <code>propertyA</code> to a different string, "
-"and then calls <code>dumpProperties</code> (which outputs the fields)."
+#. (itstool) path: info/desc
+#: C/record-collection.js.page:11
+msgid "Create a small database application for ordering your music collection"
+msgstr "Création d'une petite base de données pour trier votre discothèque"
+
+#. (itstool) path: page/title
+#: C/record-collection.js.page:29
+#, fuzzy
+#| msgid "3 Record Collection"
+msgid "Record collection"
+msgstr "3 Discothèque"
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:34
+msgid "How to connect to a database using libgda"
+msgstr "comment vous connecter à une base de données en utilisant « libgda »"
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:35
+msgid "How to insert and browse records in a database table"
 msgstr ""
-"Ce code crée une nouvelle version de la classe appelée <code>o</code>, "
-"appelle <code>aMethod</code>, modifie <code>propertyA</code> en une chaîne "
-"différente et ensuite appelle <code>dumpProperties</code> (qui affiche les "
-"champs)."
+"comment insérer et parcourir des enregistrements dans une table de base de "
+"données"
 
-#: C/image-viewer.js.page:121(p)
+#. (itstool) path: section/p
+#: C/record-collection.js.page:41
 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."
+"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 ""
-"Enregistrez le code dans le fichier <file>main.js</file> et ensuite lancez-"
-"le avec <guiseq><gui>Exécuter</gui><gui>Exécuter</gui></guiseq> à partir du "
-"menu ou de la barre d'outils."
+"Cet exemple utilise le langage Javascript. Nous allons vous montrer comment "
+"vous connecter à une base de données et l'utiliser à partir d'un programme "
+"GTK en utilisant la bibliothèque GDA (GNOME Data Access). Vous devez bien "
+"sûr avoir déjà installé cette dernière."
 
-#: C/image-viewer.js.page:127(p)
-msgid "Let's see what a very basic Gtk application looks like in JavaScript:"
+#. (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 ""
-"Voyons à quoi ressemble une application Gtk très basique écrite en "
-"JavaScript :"
+"La bibliothèque GDA (GNOME Data Access) vous permet d'accéder de manière "
+"universelle à différentes sortes et types de sources de données, depuis les "
+"plus traditionnels systèmes de bases de données relationnelles, jusqu'à des "
+"sources aussi diverses qu'un serveur de messagerie, un répertoire LDAP, etc. "
+"Pour de plus amples informations et pour une documentation et l'API "
+"complète, consultez le <link href=\"http://library.gnome.org/devel/libgda/";
+"stable/\">Site Web de GDA</link>."
 
-#: C/image-viewer.js.page:143(p)
+#. (itstool) path: section/p
+#: C/record-collection.js.page:47
 msgid ""
-"<code>Gtk.init</code> initializes the Gtk library; this statement is "
-"mandatory for all Gtk programs."
+"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 ""
-"<code>Gtk.init</code> initialise la bibliothèque Gtk ; cette instruction est "
-"obligatoire pour tous les programmes Gtk."
+"Bien que la plus grosse partie du programme se réfère à l'interface "
+"utilisateur (GUI), nous allons orienter notre tutoriel sur les fonctions "
+"bases de données (avec des explications sur certaines autres fonctions que "
+"nous jugeons pertinentes). Pour de plus amples informations sur les "
+"programmes GNOME en Javascript, consultez le tutoriel <link xref=\"image-"
+"viewer.js\">Programme visionneur d'images</link>."
 
-#: C/image-viewer.js.page:146(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:60
 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."
+"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 ""
-"La ligne suivante crée la fenêtre principale en créant un nouvel objet "
-"<code>Gtk.Window</code>. Vous pouvez transmettre plusieurs propriétés au "
-"constructeur de la fenêtre avec la syntaxe <code>{propriété: valeur, "
-"propriété: valeur, ...}</code>. Dans ce cas, le titre de la fenêtre est "
-"défini."
+"Cliquez sur l'onglet <gui>JS</gui>, choisissez <gui>JavaScript générique</"
+"gui>, cliquez sur <gui>Continuer</gui> et renseignez les champs requis avec "
+"vos informations. Mettez <file>discotheque</file> (sans accent) comme nom du "
+"projet et répertoire."
 
-#: C/image-viewer.js.page:147(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:63
 msgid ""
-"The next line explicitly shows the window. In Gtk, every widget is hidden by "
-"default."
+"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 ""
-"La ligne suivante affiche explicitement la fenêtre. Dans Gtk, chaque élément "
-"graphique est masqué par défaut."
+"Cliquez sur <gui>Appliquer</gui> et votre projet est créé. Ouvrez <file>src/"
+"main.js</file> depuis l'onglet <gui>Projet</gui> ou l'onglet <gui>Fichiers</"
+"gui>. Il contient un exemple de programme très basique."
 
-#: C/image-viewer.js.page:148(p)
+#. (itstool) path: section/title
+#: C/record-collection.js.page:69
+msgid "Program Structure"
+msgstr "Structure du programme"
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:71
 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."
+"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 ""
-"Enfin, <code>Gtk.main</code> lance la boucle principale — en d'autres "
-"termes, il exécute le programme. La boucle principale écoute les événements "
-"(signaux) en provenance de l'interface utilisateur et appelle un "
-"gestionnaire de signal qui fera quelque chose d'utile. Nous en apprendrons "
-"davantage sur les signaux bientôt."
+"Cet exemple est une application GTK simple (avec une seule fenêtre) pouvant "
+"insérer des enregistrements dans une table de base de données et également "
+"consulter tous les enregistrements de cette table. Cette table possède deux "
+"champs : <code>id</code>, un entier et <code>name</code>, une variable de "
+"type caractère. La première section de l'application (en haut) vous permet "
+"d'insérer un enregistrement dans la table. La dernière (en bas) vous permet "
+"d'afficher tous les enregistrements de cette table. Son contenu est mis à "
+"jour à chaque fois qu'un nouvel enregistrement est inséré et au démarrage de "
+"l'application."
+
+#. (itstool) path: section/title
+#: C/record-collection.js.page:76
+msgid "Starting the fun"
+msgstr "Début du plaisir"
 
-#: C/image-viewer.js.page:151(p)
+#. (itstool) path: section/p
+#: C/record-collection.js.page:77
+msgid "Let's start by examining the skeleton of the program:"
+msgstr "Commençons par examiner le squelette du programme :"
+
+#. (itstool) path: section/code
+#: C/record-collection.js.page:78
+#, no-wrap
 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."
+"\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 ""
-"Enregistrez le code dans le fichier <file>main.js</file> et exécutez-le. "
-"Notez que l'application ne quitte pas quand vous fermez la fenêtre. C'est "
-"parce que nous n'avons pas encore défini de gestionnaire de signal qui prend "
-"en charge le signal <code>destroy</code> de fermeture. Nous le ferons "
-"prochainement, mais en attendant, pressez seulement <keyseq><key>Ctrl</"
-"key><key>C</key></keyseq> dans la fenêtre du terminal pour quitter le "
-"programme."
 
-#: C/image-viewer.js.page:156(title)
-msgid "Adding classes"
-msgstr "Ajout de classes"
-
-#: C/image-viewer.js.page:157(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:103
 msgid ""
-"The proper way of doing Gtk programming is by using classes. Let's rewrite "
-"the simple code you just wrote using classes:"
+"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 ""
-"La bonne méthode de programmation avec Gtk est l'utilisation de classes. "
-"Récrivons le bout de programme que l'on vient d'écrire en utilisant des "
-"classes :"
+"Lignes 1‒4 : importations initiales. Faites surtout attention à la ligne 3, "
+"qui commande à Javascript l'importation de la bibliothèque GDA, la cible de "
+"ce tutoriel."
 
-#. FIXME: Throws an error, "JS ERROR: !!!   Unhandled type int32 releasing GArgument" on Ubuntu 10.10
-#: C/image-viewer.js.page:176(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:104
 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>)."
+"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 ""
-"Notez que le programme reste le même ; on a juste déplacé le code de "
-"création de la fenêtre dans notre propre classe <code>ImageViewer</code>. Le "
-"constructeur de la classe appelle la méthode <code>_init</code> qui crée et "
-"affiche la fenêtre. Ensuite, on crée une instance de la classe avant de "
-"lancer la boucle principale (<code>Gtk.main</code>)."
+"Lignes 6‒17 : définition de la classe <code>Demo</code>. Faites surtout "
+"attention aux lignes 13‒15, où nous appelons 3 méthodes qui font tout le "
+"travail. Elles sont détaillées plus bas."
+
+#. (itstool) path: item/p
+#: C/record-collection.js.page:105
+msgid "Lines 19‒23: Start the application."
+msgstr "Lignes 19‒23 : lancement de l'application."
+
+#. (itstool) path: section/title
+#: C/record-collection.js.page:110
+msgid "Designing the application"
+msgstr "Conception de l'application"
 
-#: C/image-viewer.js.page:177(p)
+#. (itstool) path: section/p
+#: C/record-collection.js.page:111
 msgid ""
-"This code is modular and can be split into multiple files easily. This makes "
-"it cleaner and easier to read."
+"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 ""
-"Ce programme est modulaire et peut être divisé facilement en plusieurs "
-"fichiers ce qui le rend plus propre et plus facile à lire."
+"Examinons la méthode <code>setupWindow</code>. C'est elle qui crée "
+"l'interface utilisateur. Comme l'interface utilisateur n'est pas notre "
+"sujet, nous en expliquons seulement les parties pertinentes."
 
-#: C/image-viewer.js.page:190(p)
-msgid "The syntax for connecting any signal to a function is:"
-msgstr "Voici la syntaxe pour connecter n'importe quel signal à une fonction :"
+#. (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 ""
 
-#: C/image-viewer.js.page:193(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:162
 msgid ""
-"You can find signal definitions for any object in the <link href=\"http://";
-"library.gnome.org/devel/gtk/stable/ch01.html\">GTK class reference</link>."
+"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 ""
-"Vous pouvez consulter les définitions de signal pour n'importe quel objet "
-"dans la <link href=\"http://library.gnome.org/devel/gtk/stable/ch01.html";
-"\">Référence des classes GTK</link>."
+"Lignes 22 et 27 : création des 2 entrées (pour les 2 champs) dans lesquelles "
+"l'utilisateur saisit les choses à insérer dans la base de données."
 
-#: C/image-viewer.js.page:196(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:163
 msgid ""
-"You can simplify the code by making use of an inline function definition:"
+"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 ""
-"Vous pouvez simplifier le code avec une définition de fonction en ligne :"
+"Lignes 31‒34 : création du bouton « Insert ». Le signal <code>clicked</code> "
+"de ce bouton est connecté à la méthode privée <code>_insertClicked</code> de "
+"la classe. Cette méthode est décrite ci-dessous."
 
-#: C/image-viewer.js.page:204(title)
-msgid "Closing the window"
-msgstr "Fermeture de la fenêtre"
+#. (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 ""
+"Ligne 39 : création de l'élément graphique (<code>TextView</code>) où nous "
+"affichons le contenu de la table."
 
-#: C/image-viewer.js.page:205(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:165
 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)."
+"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 ""
-"Quand vous fermez une fenêtre Gtk, elle n'est pas vraiment fermée, mais "
-"masquée. Cela permet de la garder accessible (utile si on veut poser la "
-"question à l'utilisateur s'il veut oui ou non fermer la fenêtre, par "
-"exemple)."
+"Ligne 44 : création de l'étiquette où nous affichons le nombre "
+"d'enregistrements dans la table. Au début, elle est vide et est mise à jour "
+"ultérieurement."
+
+#. (itstool) path: section/title
+#: C/record-collection.js.page:170
+msgid "Connecting to and initializing the database"
+msgstr "Connexion à la base de données et initialisation"
 
-#: C/image-viewer.js.page:206(p)
+#. (itstool) path: section/p
+#: C/record-collection.js.page:171
 msgid ""
-"In our case, we really do just want to close the window. The simplest way of "
-"doing this is by connecting the <code>hide</code> signal of the GtkWindow "
-"object to a function that closes the application. Go back to the <file>image-"
-"viewer.js</file> file and add the following code to the <code>_init</code> "
-"method, on the line above <code>this.window.show</code>:"
+"The code which makes the connection to the database is in the "
+"<code>setupDatabase</code> method below:"
 msgstr ""
-"Dans notre cas, on veut réellement fermer la fenêtre. La façon la plus "
-"simple de le faire est de connecter le signal <code>hide</code> de l'objet "
-"fenêtre « GtkWindow » à une fonction qui ferme l'application. Retournez au "
-"fichier <file>image-viewer.js</file> et ajoutez le code suivant à la méthode "
-"<code>_init</code> dans la ligne au-dessus de <code>this.window.show</code> :"
+"Le code permettant de se connecter à la base de données est dans la méthode "
+"<code>setupDatabase</code> ci-dessous :"
 
-#: C/image-viewer.js.page:207(code)
+#. (itstool) path: section/code
+#: C/record-collection.js.page:174
 #, no-wrap
-msgid "this.window.connect (\"hide\", Gtk.main_quit);"
-msgstr "this.window.connect (\"hide\", Gtk.main_quit);"
+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 ""
 
-#: C/image-viewer.js.page:208(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:188
 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."
+"Lines 2‒3: Create the GDA's <code>Connection</code> object. We must supply "
+"to its constructor some properties:"
 msgstr ""
-"Ceci connecte le signal <code>hide</code> de la fenêtre à la fonction "
-"<code>main_quit</code> de Gtk, qui met fin à l'exécution de la boucle "
-"principale de Gtk. Lorsque cette boucle s'arrête, la fonction <code>Gtk."
-"main</code> est quittée. Notre programme aurait continué d'exécuter "
-"n'importe quel code écrit après la ligne <code>Gtk.main ();</code>, mais "
-"comme nous n'avons plus de code après cela, le programme s'arrête."
+"Lignes 2‒3 : création de l'objet <code>Connection</code> de GDA. Il faut "
+"transmettre quelques propriétés à son constructeur :"
 
-#: C/image-viewer.js.page:218(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:191
 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:"
+"<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 ""
-"Ajoutons la boîte et les éléments graphiques à la fenêtre. Insérez le code "
-"suivant dans la méthode <code>_init</code> immédiatement au-dessus de la "
-"ligne <code>this.window.show</code> :"
+"<code>provider</code> : l'un des fournisseurs reconnus par GDA. GDA prend en "
+"charge SQLite, MySQL, PostgreSQL, Oracle et beaucoup d'autres. Pour les "
+"besoins de l'exemple, nous utilisons une base de données SQLite car elle est "
+"déjà incluse par défaut dans la plupart des distributions et elle est facile "
+"à utiliser (elle n'a besoin que d'un fichier comme base de données)."
 
-#: C/image-viewer.js.page:222(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:194
 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."
+"<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 ""
-"La première ligne crée une boîte <code>Gtk.Box</code> appelée "
-"<code>main_box</code> et définit deux de ses propriétés : "
-"l'<code>orientation</code> est fixée à verticale (donc les éléments "
-"graphiques sont disposés en colonne) et l'espacement <code>spacing</code> "
-"entre les éléments graphiques est fixé à 0 pixel. La ligne suivante ajoute "
-"cette nouvelle boîte <code>Gtk.Box</code> à la fenêtre."
+"<code>cnc_string</code> : la chaîne de connexion. Elle peut être différente "
+"en fonction du fournisseur. La syntaxe pour SQLite est : "
+"<code>DB_DIR=<var>CHEMIN</var>;DB_NAME=<var>NOM2FICHIER</var></code>. Dans "
+"cet exemple, nous accédons à une base de données nommée gnome_demo dans le "
+"dossier personnel de l'utilisateur (notez l'appel à la fonction "
+"<code>get_home_dir</code> de GLib)."
 
-#: C/image-viewer.js.page:228(p)
+#. (itstool) path: note/p
+#: C/record-collection.js.page:198
 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:"
+"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 ""
-"Pour ajouter des éléments graphiques à la boîte <code>Gtk.Box</code>, "
-"insérez le code suivant juste en dessous de la ligne <code>this.window.add "
-"(main_box)</code> :"
+"Si le fournisseur n'est pas reconnu par GDA, ou si la chaîne de connexion "
+"n'est pas complète, la ligne 2 provoque une exception. Donc, en pratique, il "
+"faut gérer cette exception grâce à l'instruction JavaScript <code>try</"
+"code>...<code>catch</code>."
 
-#: C/image-viewer.js.page:232(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:202
 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."
+"Line 4: Open the connection. In the SQLite provider, if the database does "
+"not exist, it will be created in this step."
 msgstr ""
-"La première ligne crée une nouvelle <code>Gtk.Image</code> appelée "
-"<code>image</code> qui servira à afficher un fichier image. Puis, l'élément "
-"graphique image est ajouté (<em>placé</em>) dans le conteneur "
-"<code>main_box</code> par la méthode <link href=\"http://library.gnome.org/";
-"devel/gtk/stable/GtkBox.html#gtk-box-pack-start\"><code>pack_start</code></"
-"link> de <code>Gtk.Box</code> ."
+"Ligne 4 : ouverture de la connexion. Pour le fournisseur SQLite, si la base "
+"de donnée n'existe pas, elle est créée à cette étape."
 
-#: C/image-viewer.js.page:233(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:204
 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>)."
+"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 ""
-"<code>pack_start</code> prend 4 arguments : l'élément graphique enfant "
-"(<code>child</code>) qui doit être ajouté à la boîte <code>Gtk.Box</code> ; "
-"si la boîte <code>Gtk.Box</code> doit s'agrandir (<code>expand</code>) quand "
-"le nouvel élément graphique est ajouté ; si le nouvel élément graphique doit "
-"prendre tout le nouvel espace créé quand la boîte <code>Gtk.Box</code> "
-"s'agrandit (<code>fill</code>) ; et enfin combien d'espace libre "
-"(<code>padding</code>), en pixels, il doit y avoir entre l'élément graphique "
-"et ses voisins à l'intérieur de la <code>Gtk.Box</code>."
+"Lignes 6‒10 : tentative de faire une simple instruction « select » pour "
+"vérifier que la table existe (ligne 7). Si elle n'existe pas (parce que la "
+"base de données vient juste d'être créée), cette instruction provoque une "
+"exception qu'il faut gérer grâce au bloc <code>try</code>...<code>catch</"
+"code>. Dans ce cas, il faut exécuter l'instruction « create table » pour "
+"créer la table (ligne 9)."
 
-#: C/image-viewer.js.page:240(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:205
+#, fuzzy
+#| msgid ""
+#| "In order to run the SQL commands above we are using global GDA functions, "
+#| "<code>execute_select_command</code> and <code>execute_non_select_command</"
+#| "code>. They are simple to use, and just require two arguments: The "
+#| "<code>Connection</code> object and the SQL command to be parsed."
 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."
+"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 ""
-"Ces lignes ressemblent aux deux premières, mais cette fois elles créent un "
-"bouton <code>Gtk.Button</code> et l'ajoute à la <code>main_box</code>. Notez "
-"que nous paramétrons ici l'argument <code>expand</code> (le second) sur "
-"<code>false</code>, alors qu'il était sur <code>true</code> pour l'image "
-"<code>Gtk.Image</code>. Ceci va conduire à ce que l'image prenne tout "
-"l'espace disponible et le bouton seulement l'espace nécessaire. Lors d'un "
-"redimensionnement de la fenêtre, la taille du bouton reste identique, alors "
-"que la taille de l'image va augmenter pour occuper le reste de la fenêtre."
+"Pour exécuter les commandes SQL ci-dessus, nous utilisons les fonctions "
+"globales de GDA, <code>execute_select_command</code> et "
+"<code>execute_non_select_command</code>. Elles sont simples d'utilisation et "
+"ne requièrent que deux arguments : l'objet <code>Connection</code> et la "
+"commande SQL à analyser."
+
+#. (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 ""
+"À ce niveau, nous avons configuré la base de données et cette dernière est "
+"fonctionnelle."
 
-#: C/image-viewer.js.page:241(p)
+#. (itstool) path: section/title
+#: C/record-collection.js.page:213
+msgid "Selecting"
+msgstr "Sélection"
+
+#. (itstool) path: section/p
+#: C/record-collection.js.page:214
 msgid ""
-"Finally, we must change the <code>this.window.show ();</code> line to read:"
+"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 ""
-"Finalement, nous devons modifier la ligne <code>this.window.show ();</code> "
-"pour devenir :"
+"Après connexion à la base de données, le constructeur de notre exemple "
+"appelle la méthode <code>selectData</code>. C'est elle qui récupère tous les "
+"enregistrements de la table et qui les affiche dans l'élément graphique "
+"<code>TextView</code>. Regardons à quoi elle ressemble :"
 
-#: C/image-viewer.js.page:242(code)
+#. (itstool) path: section/code
+#: C/record-collection.js.page:217
 #, no-wrap
-msgid "this.window.show_all ();"
-msgstr "this.window.show_all ();"
-
-#: C/image-viewer.js.page:243(p)
 msgid ""
-"This will show the child of the Gtk window, and all of its children, and its "
-"children's children, and so on. (Remember that Gtk widgets are all hidden by "
-"default.)"
+"\n"
+"  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 ""
-"Ceci affiche l'enfant de la fenêtre Gtk et tous ses enfants, enfants de ses "
-"enfants et ainsi de suite (souvenez-vous que les éléments graphiques Gtk "
-"sont tous masqués par défaut)."
 
-#: C/image-viewer.js.page:248(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:235
+#, fuzzy
+#| msgid ""
+#| "Line 2: The <code>SELECT</code> command. We are using the global GDA's "
+#| "function <code>execute_select_command</code> for that. It returns a "
+#| "<code>DataModel</code> object, which is later used to retrieve the rows."
 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."
+"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 ""
-"Quand l'utilisateur clique sur le bouton <gui>Open a picture</gui>, une "
-"boîte de dialogue devrait apparaître pour permettre le choix d'une image. "
-"Une fois ce choix effectué, la photo est chargée et affichée dans l'élément "
-"graphique image."
+"Ligne 2 : la commande <code>SELECT</code>. Nous utilisons la fonction "
+"globale <code>execute_select_command</code> de GDA pour cela. Elle retourne "
+"un objet <code>DataModel</code> qui servira plus tard à récupérer les lignes."
 
-#: C/image-viewer.js.page:249(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:236
 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:"
+"Line 3: Create an <code>Iter</code> object, which is used to iterate over "
+"the <code>DataModel</code>'s records."
 msgstr ""
-"Connectez d'abord le signal <code>clicked</code> du bouton à une fonction de "
-"gestion de signal que vous appelez <code>_openClicked</code>. Mettez ce code "
-"immédiatement après la ligne <code>var open_button = new Gtk.Button</code> "
-"où le bouton a été créé :"
+"Ligne 3 : création d'un objet <code>Iter</code> qui sert à itérer sur les "
+"enregistrements de <code>DataModel</code>."
 
-#: C/image-viewer.js.page:252(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:237
 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:"
+"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 ""
-"Ici, nous utilisons l'assistant JavaScript <em>Lang</em>. Il nous permet de "
-"connecter une <em>class method</em> au signal plutôt qu'à une simple "
-"fonction (sans classe) que nous avions utilisée avant pour le signal de "
-"masquage <code>hide</code>. Ne vous préoccupez pas de cela pour le moment, "
-"ce n'est qu'un détail technique. Pour que cela fonctionne, vous devez aussi "
-"ajouter cette ligne en haut du fichier :"
+"Ligne 7 : Itération sur tous les enregistrements en les récupérant à l'aide "
+"de l'objet <code>Iter</code>. À cet endroit, la variable <code>Iter</code> "
+"contient les informations trouvées. La méthode <code>move_next</code> "
+"retourne le message <code>false</code> quand elle atteint le dernier "
+"enregistrement."
 
-#: C/image-viewer.js.page:253(code)
-#, no-wrap
-msgid "const Lang = imports.lang;"
-msgstr "const Lang = imports.lang;"
+#. (itstool) path: item/p
+#: C/record-collection.js.page:239
+msgid "Lines 8‒9: We do two things in each line:"
+msgstr "Lignes 8‒9 : nous faisons deux choses dans chaque ligne :"
 
-#: C/image-viewer.js.page:258(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:241
 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):"
+"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 ""
-"Nous pouvons maintenant créer la méthode <code>_openClicked()</code>. "
-"Insérez ce qui suit dans le bloc de code <code>ImageViewer.prototype</code>, "
-"après la méthode <code>_init</code> (et sans oublier la virgule) :"
+"Utilisez la méthode <code>get_value_at</code> d'<code>Iter</code> qui n'a "
+"besoin que d'un argument : le numéro de colonne à récupérer, en commençant "
+"par 0. Comme notre commande <code>SELECT</code> ne retourne que deux "
+"colonnes, nous récupérons donc les colonnes 0 et 1."
 
-#: C/image-viewer.js.page:281(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:242
 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."
+"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 ""
-"La ligne commençant par <code>var chooser</code> crée une boîte de dialogue "
-"<gui>Ouvrir</gui> qui permet à l'utilisateur de choisir des fichiers. Nous "
-"paramétrons quatre propriétés : le titre de la boîte de dialogue ; la "
-"fonction (le type) de la boîte de dialogue (c'est une boîte de dialogue "
-"« OPEN », mais on aurait pu utiliser (<code>SAVE</code>) (enregistrer) si "
-"notre intention avait été d'enregistrer un fichier) ; <code>transient_for</"
-"code>, qui définit la fenêtre parent de la boîte de dialogue ; et "
-"<code>modal</code> qui, s'il est fixé à <code>true</code> empêche "
-"l'utilisateur de cliquer sur un autre emplacement de l'application jusqu'à "
-"ce que la boîte de dialogue soit fermée."
+"La méthode <code>get_value_at</code> retourne l'information sur les champs "
+"au format <code>GValue</code> de GLib. Pour convertir ce format en chaîne de "
+"caractères, utilisez simplement la fonction globale <code>value_stringify</"
+"code> de GDA. C'est ce que nous faisons ici puis nous enregistrons les "
+"résultats dans les variables <code>id_field</code> et <code>name_field</"
+"code>."
 
-#: C/image-viewer.js.page:294(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:245
 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."
+"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 ""
-"<code>chooser.run</code> affiche la boîte de dialogue <gui>Open</gui>. La "
-"boîte de dialogue attend que l'utilisateur choisisse une image ; quand c'est "
-"fait, <code>chooser.run</code> retourne la valeur <output>1</output> (il "
-"retourne la valeur <output>0</output> si l'utilisateur clique sur "
-"<gui>Annuler</gui>). L'instruction <code>if</code> teste cette réponse."
+"Ligne 11 : concaténation des deux chaînes pour former une seule ligne de "
+"texte en les séparant par <code>\"=&gt;\"</code> et enregistrement dans la "
+"variable <code>text</code>."
 
-#: C/image-viewer.js.page:307(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:246
 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!"
+"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 ""
-"Tout le programme nécessaire est maintenant en place, donc essayez de "
-"l'exécuter. Cela devrait fonctionner ; un visionneur d'images totalement "
-"fonctionnel (et une visite éclair de JavaScript et de Gtk) en très peu de "
-"temps !"
+"Ligne 14 : à la fin de la boucle, tous les enregistrements sont formatés "
+"dans la variable <code>text</code>. À cette ligne, nous attribuons le "
+"contenu de cette variable au <code>TextView</code>."
 
-#: C/image-viewer.js.page:312(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:247
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"image-viewer/image-viewer.js\">reference code</link>."
+"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 ""
-"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"image-viewer/image-viewer.js\">programme de "
-"référence</link>."
-
-#: C/image-viewer.cpp.page:8(desc)
-msgid "A little bit more than a simple \"Hello world\" GTKmm application."
-msgstr "Un peu plus qu'une simple application GTKmm « Hello world »."
-
-#: C/image-viewer.cpp.page:21(title) C/image-viewer.c.page:23(title)
-msgid "Image Viewer"
-msgstr "Visionneur d'images"
-
-#: C/image-viewer.cpp.page:26(p)
-msgid "Some basic concepts of C++/GObject programming"
-msgstr "quelques concepts de base de la programmation en C++/GObject,"
+"Ligne 15 : affichage du nombre d'enregistrements dans la table avec la "
+"fonction <code>get_n_rows</code> de <code>DataModel</code>."
 
-#: C/image-viewer.cpp.page:27(p)
-msgid "How to write a Gtk application in C++"
-msgstr "comment écrire une application Gtk en C++."
+#. (itstool) path: section/title
+#: C/record-collection.js.page:252
+msgid "Inserting"
+msgstr "Insertion"
 
-#: C/image-viewer.cpp.page:41(p)
+#. (itstool) path: section/p
+#: C/record-collection.js.page:253
 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."
+"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 ""
-"Sélectionnez <gui>GTKmm (Simple)</gui> dans l'onglet <gui>C++</gui>, cliquez "
-"sur <gui>Continuer</gui> et saisissez vos informations sur les quelques "
-"pages suivantes. Mettez <file>image-viewer</file> comme nom de projet et de "
-"répertoire."
+"Bien, nous savons comment nous connecter à une base de données et comment "
+"sélectionner des lignes dans une table. Il est temps maintenant d'apprendre "
+"à faire une insertion à l'aide de la commande <code>INSERT</code> dans la "
+"table. Souvenez-vous, dans la méthode <code>setupWindow</code>, nous avions "
+"relié le signal <code>clicked</code> du bouton <gui>Insert</gui> à la "
+"méthode <code>_insertClicked</code>. Voyons la mise en place de cette "
+"méthode."
 
-#: C/image-viewer.cpp.page:44(p)
+#. (itstool) path: section/code
+#: C/record-collection.js.page:256
+#, no-wrap
 msgid ""
-"Make sure that <gui>Use GtkBuilder for user interface</gui> is disabled as "
-"we will create the UI manually in this tutorial. Check the <link xref="
-"\"guitar-tuner.cpp\">Guitar-Tuner</link> tutorial if you want to learn how "
-"to use the interface builder."
+"\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 ""
-"Assurez-vous d'avoir désactivé <gui>Utiliser GtkBuilder pour l'interface "
-"utilisateur</gui> car nous allons créer l'interface utilisateur manuellement "
-"dans cet exemple. Consultez le tutoriel <link xref=\"guitar-tuner.cpp"
-"\">Guitar-Tuner</link> pour un exemple d'utilisation du constructeur "
-"d'interfaces."
 
-#: C/image-viewer.cpp.page:49(p)
-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:"
+#. (itstool) path: section/p
+#: C/record-collection.js.page:274
+#, fuzzy
+#| msgid ""
+#| "We have learned how to use GDA's convenience functions "
+#| "<code>execute_select_command</code> and <code>execute_non_select_command</"
+#| "code> to quickly execute SQL commands on the database. GDA allows one to "
+#| "build a SQL statement indirectly, by using its <code>SqlBuilder</code> "
+#| "object. What are the benefits of this? GDA will generate the SQL "
+#| "statement dynamically, and it will be valid for the connection provider "
+#| "used (it will use the same SQL dialect the provider uses). Let's study "
+#| "the code:"
+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 ""
-"Cliquez sur <gui>Appliquer</gui> et le projet est créé. Ouvrez <file>src/"
-"main.cc</file> depuis l'onglet <gui>Projet</gui> ou l'onglet <gui>Fichiers</"
-"gui>. Vous devez voir apparaître du code commençant par les lignes :"
+"Nous avons appris comment utiliser les fonctions bien pratiques "
+"<code>execute_select_command</code> et <code>execute_non_select_command</"
+"code> de GDA pour appliquer rapidement des commandes SQL sur la base de "
+"données. GDA nous permet aussi de construire une instruction SQL "
+"indirectement en utilisant son objet <code>SqlBuilder</code>. Quels en sont "
+"les avantages ? GDA crée l'instruction SQL dynamiquement et celle-ci est "
+"compatible avec le fournisseur de connexion utilisé (elle utilise le même "
+"langage SQL que celui du fournisseur). Voyons en détail le programme :"
 
-#: C/image-viewer.cpp.page:61(p) C/guitar-tuner.cpp.page:64(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:278
 msgid ""
-"This is a very basic C++ code setting up GTKmm. More details are given "
-"below; skip this list if you understand the basics:"
+"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 ""
-"C'est un programme C++ très basique pour configurer GTKmm. Vous trouverez "
-"plus de détails ci-dessous ; passez cette liste si vous comprenez les bases :"
+"Lignes 2‒3 : vérification du bon renseignement par l'utilisateur de tous les "
+"champs. Le code de la méthode privée <code>_validateFields</code> est "
+"vraiment simple et vous pouvez le consulter dans le programme source complet "
+"de l'exemple."
 
-#: C/image-viewer.cpp.page:64(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:279
 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."
+"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 ""
-"Les trois lignes <code>#include</code> du haut incorporent les bibliothèques "
-"<code>config</code> (définitions utiles pour la construction autoconf), "
-"<code>gtkmm</code> (interface utilisateur) et <code>iostream</code> (C++-"
-"STL). Les fonctions de ces bibliothèques seront utilisées dans le reste du "
-"programme."
+"Ligne 5 : la façon la plus rapide pour faire l'insertion à l'aide de la "
+"commande <code>INSERT</code>. Celle-ci est mise en commentaire car nous "
+"voulons vous montrer comment utiliser l'objet <code>SqlBuilder</code> pour "
+"construire une instruction SQL qui soit indépendante de la base de données."
 
-#: C/image-viewer.cpp.page:67(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:280
 msgid ""
-"The <code>main</code> function creates a new (empty) window and sets the "
-"window title."
+"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 ""
-"La fonction <code>main</code> crée une nouvelle fenêtre (vide) et configure "
-"le titre de la fenêtre."
+" Ligne 7 : création de l'objet <code>SqlBuilder</code>. Nous devons "
+"transmettre le type d'instruction que nous voulons construire. Cela peut "
+"être <code>SELECT</code>, <code>UPDATE</code>, <code>INSERT</code> ou "
+"<code>DELETE</code>."
 
-#: C/image-viewer.cpp.page:70(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:281
 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."
+"Line 8: Set the name of the table on which the built statement will operate "
+"(it will generate <code>INSERT INTO demo</code>)"
 msgstr ""
-"L'appel <code>kit::run()</code> démarre la boucle principale de GTKmm qui "
-"exécute l'interface utilisateur et commence à écouter les événements (comme "
-"des clics ou des appuis sur des touches). Comme la fenêtre est fournie comme "
-"argument de la fonction, l'application quitte automatiquement quand la "
-"fenêtre est fermée."
+"Ligne 8 : détermination du nom de la table sur laquelle l'instruction "
+"construite va agir (le code <code>INSERT INTO demo</code> est généré)"
 
-#: C/image-viewer.cpp.page:77(p) C/image-viewer.c.page:80(p)
-#: C/guitar-tuner.cpp.page:79(p) C/guitar-tuner.c.page:85(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:282
 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."
+"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 ""
-"Cliquez sur <gui>Exécuter</gui> dans la fenêtre suivante pour configurer une "
-"construction avec débogage. Vous ne devez le faire qu'une seule fois, lors "
-"de la première exécution."
+"Lignes 9‒10 : détermination des champs et de leurs valeurs qui font partie "
+"de l'instruction. Le premier argument est le nom du champ (comme dans la "
+"table). Le second est la valeur pour ce champ."
 
-#: C/image-viewer.cpp.page:82(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:283
 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>:"
+"Line 11: Get the dynamically generated <code>Statement</code> object, which "
+"represents a SQL statement."
 msgstr ""
-"Nous allons maintenant donner vie à la fenêtre vide. La disposition de "
-"l'interface utilisateur est faite par GTKmm avec les conteneurs <code>Gtk::"
-"Container</code> qui peuvent contenir d'autres éléments graphiques et même "
-"d'autres conteneurs. Ici, on utilise le plus simple des conteneurs "
-"disponibles, une boîte <code>Gtk::Box</code> :"
+"Ligne 11 : fabrication de l'objet <code>Statement</code> généré "
+"dynamiquement et qui représente une instruction SQL."
 
-#: C/image-viewer.cpp.page:115(p)
-msgid ""
-"The first lines create the widgets we want to use: a button for opening up "
-"an image, the image view widget itself and the box we will use as a "
-"container."
+#. (itstool) path: item/p
+#: C/record-collection.js.page:284
+msgid "Line 12: Finally, execute the SQL statement (<code>INSERT</code>)."
 msgstr ""
-"Les premières lignes créent les éléments graphiques dont nous avons besoin : "
-"un bouton pour ouvrir une image, l'élément graphique image lui-même et la "
-"boîte que nous utilisons comme conteneur."
+"Ligne 12 : enfin, exécution de l'instruction SQL (<code>INSERT</code>)."
 
-#: C/image-viewer.cpp.page:118(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:285
 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."
+"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 ""
-"Les appels à <code>pack_start</code> ajoutent les deux éléments graphiques à "
-"la boîte et définissent leur comportement. L'image va s'étendre pour occuper "
-"tout l'espace disponible alors que le bouton va prendre juste la taille "
-"nécessaire. Notez que nous ne définissons pas explicitement les dimensions "
-"des éléments graphiques. Avec GTKmm, ce n'est habituellement pas nécessaire "
-"car cela facilite grandement l'obtention d'une bonne disposition pour "
-"différentes tailles de fenêtre. La boîte est ensuite ajoutée dans la fenêtre."
+"Ligne 14 : effacement des champs « id » et « name » à l'écran. Le code de la "
+"méthode privée <code>_clearFields</code> est vraiment simple et vous pouvez "
+"le consulter dans le programme source complet de l'exemple."
 
-#: C/image-viewer.cpp.page:124(p)
+#. (itstool) path: item/p
+#: C/record-collection.js.page:286
 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."
+"Line 15: Refresh the view on the screen by doing another <code>SELECT</code>."
 msgstr ""
-"Il nous faut définir ce qui se passe quand l'utilisateur clique sur le "
-"bouton. GTKmm utilise le concept de <em>signaux</em>. Quand le bouton est "
-"cliqué, il envoie le signal <em>clicked</em> qu'il est possible de relier à "
-"une action. Cela a été réalisé avec la méthode <code>signal_clicked()."
-"connect</code> qui commande à GTKmm d'appeler la fonction "
-"<code>on_open_image</code> quand le bouton est cliqué. Nous définirons la "
-"<em>fonction de rappel</em> à la section suivante."
+"Ligne 15 : mise à jour de l'affichage à l'écran en faisant un nouveau "
+"<code>SELECT</code>."
 
-#: C/image-viewer.cpp.page:128(p)
+#. (itstool) path: note/p
+#: C/record-collection.js.page:288
 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."
+"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 ""
-"La dernière étape consiste à afficher tous les éléments graphiques avec la "
-"commande <code>show_all_children()</code>. Ceci équivaut à appliquer la "
-"méthode <code>show()</code> séparément à chaque élément graphique enfant."
+"Vous pouvez aussi faire usage de paramètres pour construire l'instruction. "
+"En utilisant les objets <code>SqlBuilder</code> et des paramètres, vous êtes "
+"moins exposé à des attaques du type injection SQL. Consultez la <link href="
+"\"http://library.gnome.org/devel/libgda/stable/\";>documentation GDA</link> "
+"pour plus d'informations sur les paramètres."
 
-#: C/image-viewer.cpp.page:137(p)
+#. (itstool) path: section/p
+#: C/record-collection.js.page:293
 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."
+"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 ""
-"Nous allons maintenant définir le gestionnaire de signal pour le signal "
-"<em>clicked</em> du bouton ci-dessus. Ajoutez ce code avant la méthode "
-"<code>main</code>."
+"Tout le programme nécessaire doit maintenant être en place, donc essayez de "
+"l'exécuter. Vous disposez maintenant d'une base de donnée pour votre "
+"discothèque !"
 
-#: C/image-viewer.cpp.page:175(p)
+#. (itstool) path: section/p
+#: C/record-collection.js.page:298
 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."
+"If you run into problems with the tutorial, compare your code with this "
+"<link href=\"record-collection/record-collection.js\">reference code</link>."
 msgstr ""
-"La boîte de dialogue pour choisir le fichier en utilisant le constructeur "
-"<code>Gtk::FileChooserDialog</code>. Celui-ci prend comme argument le titre "
-"et le type de la boîte de dialogue. Ici, c'est un dialogue <em>OPEN</em> "
-"(ouvrir)."
+"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
+"programme à ce <link href=\"record-collection/record-collection.js"
+"\">programme de référence</link>."
+
+#. (itstool) path: page/title
+#: C/response-type.page:17
+#, fuzzy
+#| msgid "Gtk.ResponseType"
+msgid "enum ResponseType"
+msgstr "Gtk.ResponseType"
+
+#. (itstool) path: item/title
+#: C/response-type.page:21
+#, fuzzy
+#| msgid "Gtk.ResponseType"
+msgid "ResponseType.NONE = -1"
+msgstr "Gtk.ResponseType"
 
-#: C/image-viewer.cpp.page:179(p)
+#. (itstool) path: item/p
+#: C/response-type.page:22
 msgid ""
-"The next two lines add an <em>Open</em> and a <em>Close</em> button to the "
-"dialog."
+"Returned if an action widget has no response id, or if the dialog gets "
+"programmatically hidden or destroyed"
 msgstr ""
-"Les deux lignes suivantes ajoutent les boutons <em>Open</em> et <em>Close</"
-"em> à la boîte de dialogue."
 
-#: C/image-viewer.cpp.page:181(p)
-msgid ""
-"The second argument to the <code>add_button()</code> method is a value to "
-"identify the clicked button. We use predefined values provided by GTKmm "
-"here, too."
+#. (itstool) path: item/title
+#: C/response-type.page:25
+#, fuzzy
+#| msgid "Gtk.ResponseType"
+msgid "ResponseType.REJECT = -2"
+msgstr "Gtk.ResponseType"
+
+#. (itstool) path: item/p
+#: C/response-type.page:26 C/response-type.page:30
+msgid "Generic response id, not used by GTK+ dialogs"
 msgstr ""
-"Le second argument de la méthode <code>add_button()</code> est une valeur "
-"identifiant le bouton cliqué. Nous utilisons ici aussi les valeurs de GTKmm "
-"fournies par défaut."
 
-#: C/image-viewer.cpp.page:186(p)
-msgid ""
-"The next two lines restrict the <gui>Open</gui> dialog to only display files "
-"which can be opened by <code>Gtk::Image</code>. A filter object is created "
-"first; we then add all kinds of files supported by <code>Gdk::Pixbuf</code> "
-"(which includes most image formats like PNG and JPEG) to the filter. "
-"Finally, we set this filter to be the <gui>Open</gui> dialog's filter."
+#. (itstool) path: item/title
+#: C/response-type.page:29
+#, fuzzy
+#| msgid "Gtk.ResponseType"
+msgid "ResponseType.ACCEPT = -3"
+msgstr "Gtk.ResponseType"
+
+#. (itstool) path: item/title
+#: C/response-type.page:33
+msgid "ResponseType.DELETE_EVENT = -4"
 msgstr ""
-"Les deux lignes suivantes limitent la boîte de dialogue <gui>Open</gui> à "
-"l'affichage des seuls fichiers pouvant être ouverts par <code>Gtk::Image</"
-"code>. Un objet filtre est d'abord créé ; ensuite nous ajoutons tous les "
-"types de fichier pris en charge par <code>Gdk::Pixbuf</code> (ce qui inclut "
-"la plupart des formats d'image comme PNG ou JPEG) au filtre. Enfin, nous "
-"appliquons ce filtre à la boîte de dialogue <gui>Open</gui>."
 
-#: C/image-viewer.cpp.page:187(p)
-msgid ""
-"<code>Glib::RefPtr</code> is a smart pointer used here, that makes sure that "
-"the filter is destroyed when there is no reference to it anymore."
+#. (itstool) path: item/p
+#: C/response-type.page:34
+msgid "Returned if the dialog is deleted"
 msgstr ""
-"<code>Glib::RefPtr</code> utilisé ici, est un pointeur intelligent qui "
-"surveille que le filtre soit bien détruit quand il n'a plus de référence "
-"vers lui."
 
-#: C/image-viewer.cpp.page:191(p)
-msgid ""
-"<code>dialog.run</code> displays the <gui>Open</gui> dialog. The dialog will "
-"wait for the user to choose an image; when they do, <code>dialog.run</code> "
-"will return the value <code>Gtk::RESPONSE_ACCEPT</code> (it would return "
-"<code>Gtk::RESPONSE_CANCEL</code> if the user clicked <gui>Cancel</gui>). "
-"The <code>switch</code> statement tests for this."
+#. (itstool) path: item/title
+#: C/response-type.page:37
+#, fuzzy
+#| msgid "Gtk.ResponseType"
+msgid "ResponseType.OK = -5"
+msgstr "Gtk.ResponseType"
+
+#. (itstool) path: item/p
+#: C/response-type.page:38
+msgid "Returned by OK buttons in GTK+ dialogs"
 msgstr ""
-"<code>dialog.run</code> affiche la boîte de dialogue <gui>Open</gui>. La "
-"boîte de dialogue attend que l'utilisateur choisisse une image ; quand c'est "
-"fait, <code>dialog.run</code> retourne la valeur <code>Gtk::RESPONSE_ACCEPT</"
-"code> (il retourne la valeur <code>Gtk::RESPONSE_CANCEL</code> si "
-"l'utilisateur clique sur <gui>Cancel</gui>). L'instruction <code>switch</"
-"code> teste cette réponse."
 
-#: C/image-viewer.cpp.page:194(p)
-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."
+#. (itstool) path: item/title
+#: C/response-type.page:41
+#, fuzzy
+#| msgid "Gtk.ResponseType"
+msgid "ResponseType.CANCEL = -6"
+msgstr "Gtk.ResponseType"
+
+#. (itstool) path: item/p
+#: C/response-type.page:42
+msgid "Returned by Cancel buttons in GTK+ dialogs"
 msgstr ""
-"Nous masquons la boîte de dialogue <gui>Open</gui> car on n'en a plus "
-"besoin. Elle aurait de toute façon été masquée plus tard, car ce n'est "
-"qu'une variable locale qui est détruite (et donc disparaît) lorsqu'elle sort "
-"de la portée."
 
-#: C/image-viewer.cpp.page:197(p)
-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."
+#. (itstool) path: item/title
+#: C/response-type.page:45
+#, fuzzy
+#| msgid "Gtk.ResponseType"
+msgid "ResponseType.CLOSE = -7"
+msgstr "Gtk.ResponseType"
+
+#. (itstool) path: item/p
+#: C/response-type.page:46
+msgid "Returned by Close buttons in GTK+ dialogs"
 msgstr ""
-"Supposons que l'utilisateur a cliqué sur le bouton <gui>Ouvrir</gui>, la "
-"ligne suivante charge le fichier dans le<code>Gtk::Image</code> afin qu'elle "
-"s'affiche."
 
-#: C/image-viewer.cpp.page:206(p) C/image-viewer.c.page:218(p)
-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!"
+#. (itstool) path: item/title
+#: C/response-type.page:49
+#, fuzzy
+#| msgid "Gtk.ResponseType"
+msgid "ResponseType.YES = -8"
+msgstr "Gtk.ResponseType"
+
+#. (itstool) path: item/p
+#: C/response-type.page:50
+msgid "Returned by Yes buttons in GTK+ dialogs"
 msgstr ""
-"Si ce n'est pas encore fait, sélectionnez l'application <file>Debug/src/"
-"image-viewer</file> dans la boîte de dialogue qui s'affiche et cliquez sur "
-"<gui>Exécuter</gui>. Amusez-vous bien !"
 
-#: C/image-viewer.cpp.page:211(p)
-msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"image-viewer/image-viewer.cc\">reference code</link>."
+#. (itstool) path: item/title
+#: C/response-type.page:53
+#, fuzzy
+#| msgid "Gtk.ResponseType"
+msgid "ResponseType.NO = -9"
+msgstr "Gtk.ResponseType"
+
+#. (itstool) path: item/p
+#: C/response-type.page:54
+msgid "Returned by No buttons in GTK+ dialogs"
 msgstr ""
-"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"image-viewer/image-viewer.cc\">programme de "
-"référence</link>."
 
-#: C/image-viewer.c.page:7(title)
+#. (itstool) path: item/title
+#: C/response-type.page:57
 #, fuzzy
-#| msgid "Image Viewer"
-msgid "Image Viewer (C)"
-msgstr "Visionneur d'images"
+#| msgid "Gtk.ResponseType"
+msgid "ResponseType.APPLY = -10"
+msgstr "Gtk.ResponseType"
 
-#: C/image-viewer.c.page:28(p)
-msgid "Some basic concepts of C/GObject programming"
-msgstr "quelques concepts de base de la programmation en C/GObject,"
+#. (itstool) path: item/p
+#: C/response-type.page:58
+msgid "Returned by Apply buttons in GTK+ dialogs"
+msgstr ""
 
-#: C/image-viewer.c.page:29(p)
-msgid "How to write a Gtk application in C"
-msgstr "comment écrire une application GTK en C."
+#. (itstool) path: item/title
+#: C/response-type.page:61
+#, fuzzy
+#| msgid "Gtk.ResponseType"
+msgid "ResponseType.HELP = -11"
+msgstr "Gtk.ResponseType"
 
-#: C/image-viewer.c.page:43(p)
-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."
+#. (itstool) path: item/p
+#: C/response-type.page:62
+msgid "Returned by Help buttons in GTK+ dialogs"
 msgstr ""
-"Sélectionnez <gui>GTK+ (Simple)</gui> dans l'onglet <gui>C++</gui>, cliquez "
-"sur <gui>Continuer</gui> et saisissez vos informations sur les quelques "
-"pages suivantes. Mettez <file>image-viewer</file> comme nom de projet et de "
-"répertoire."
 
-#: C/image-viewer.c.page:46(p)
-msgid ""
-"Make sure that <gui>Use GtkBuilder for user interface</gui> is disabled as "
-"we will create the UI manually in this tutorial. Check the <link xref="
-"\"guitar-tuner.c\">Guitar-Tuner</link> tutorial if you want to learn how to "
-"use the interface builder."
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
+msgctxt "_"
+msgid "external ref='media/scale2.png' md5='ae2ba0a6675f3d9cdcd961cdf32f1a5c'"
+msgstr "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
+
+#. (itstool) path: info/title
+#: C/scale.c.page:8
+#, fuzzy
+#| msgid "Scale"
+msgctxt "text"
+msgid "Scale (C)"
+msgstr "Échelle"
+
+#. (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 ""
-"Assurez-vous d'avoir désactivé <gui>Utiliser GtkBuilder pour l'interface "
-"utilisateur</gui> car nous allons créer l'interface utilisateur manuellement "
-"dans cet exemple. Consultez le tutoriel <link xref=\"guitar-tuner.c\">Guitar-"
-"Tuner</link> pour un exemple d'utilisation du constructeur d'interfaces."
+"Un élément graphique glissière pour choisir une valeur dans un intervalle"
+
+#. (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 "Échelle"
+
+#. (itstool) path: page/p
+#: C/scale.c.page:26 C/scale.py.page:25 C/scale.vala.page:25
+msgid "Slide the scales!"
+msgstr "Faites glisser les échelles !"
 
-#: C/image-viewer.c.page:61(p)
+#. (itstool) path: page/code
+#: C/scale.c.page:28
+#, no-wrap
 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:"
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/* This is the callback function. \n"
+" * It is a handler function which reacts to the signal. \n"
+" * In this case, it will notify the user the value of their scale as a label.\n"
+" */\n"
+"static void\n"
+"hscale_moved (GtkRange *range,\n"
+"              gpointer  user_data)\n"
+"{\n"
+"   GtkWidget *label = user_data;\n"
+"\n"
+"   /* Get the value of the range, and convert it into a string which will be\n"
+"    * used as a new label for the horizontal scale.\n"
+"    * %.0f - stands for a double that will have 0 decimal places.\n"
+"    */\n"
+"   gdouble pos = gtk_range_get_value (range);\n"
+"   /* Note: Using g_strdup_printf returns a string that must be freed. \n"
+"    * (In which is done below)\n"
+"    */\n"
+"   gchar *str = g_strdup_printf (\"Horizontal scale is %.0f\", pos);\n"
+"   gtk_label_set_text (GTK_LABEL (label), str);\n"
+"\n"
+"   g_free(str);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"/* This is the second callback function. It is a handler function which \n"
+" * reacts to the signal. It does the same thing as the function above, except with\n"
+" * the vertical scale.\n"
+" */\n"
+"vscale_moved (GtkRange *range,\n"
+"              gpointer  user_data)\n"
+"{\n"
+"   GtkWidget *label = user_data;\n"
+"   \n"
+"   gdouble pos = gtk_range_get_value (range);\n"
+"   /* %.1f - stands for a double that will have 1 decimal place */\n"
+"   gchar *str = g_strdup_printf (\"Vertical scale is %.1f\", pos);\n"
+"   gtk_label_set_text (GTK_LABEL (label), str);\n"
+"\n"
+"   \n"
+"   g_free (str);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  /* Declare variables */\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *h_scale;\n"
+"  GtkWidget *v_scale;\n"
+"  GtkWidget *hlabel;\n"
+"  GtkWidget *vlabel;\n"
+"  GtkWidget *grid;\n"
+"\n"
+"  /* The Adjustment object represents a value \n"
+"   * which has an associated lower and upper bound.\n"
+"   */\n"
+"  GtkAdjustment *hadjustment;\n"
+"  GtkAdjustment *vadjustment;\n"
+"\n"
+"  /* Create a window with a title and a default size */\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"Scale Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);\n"
+"  gtk_container_set_border_width (GTK_CONTAINER (window), 5);\n"
+"\n"
+"  /* Two labels to be shown in the window */\n"
+"  hlabel = gtk_label_new (\"Move the scale handle...\");\n"
+"  vlabel = gtk_label_new (\"Move the scale handle...\");\n"
+"\n"
+"   \n"
+"  /* gtk_adjustment_new takes six parameters, three of which \n"
+"   * may be difficult to understand:\n"
+"   * step increment- move the handle with the arrow keys on your keyboard to see.\n"
+"   * page increment - move the handle by clicking away from it \n"
+"   * on the scale to see.\n"
+"   * page size - not used here.\n"
+"   */\n"
+"  hadjustment = gtk_adjustment_new (0, 0, 100, 5, 10, 0);\n"
+"  vadjustment = gtk_adjustment_new (50, 0, 100, 5, 10, 0); \n"
+"\n"
+"  /* Create the Horizontal scale, making sure the \n"
+"   * digits used have no decimals.\n"
+"   */\n"
+"  h_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, hadjustment);\n"
+"  gtk_scale_set_digits (GTK_SCALE (h_scale), 0); \n"
+"\n"
+"  /* Allow it to expand horizontally (if there's space), and \n"
+"   * set the vertical alignment\n"
+"   */\n"
+"  gtk_widget_set_hexpand (h_scale, TRUE);\n"
+"  gtk_widget_set_valign (h_scale, GTK_ALIGN_START);\n"
+"  \n"
+"  /* Connecting the \"value-changed\" signal for the horizontal scale \n"
+"   * to the appropriate callback function. \n"
+"   * take note that GtkRange is part of GtkScale's Object Hierarchy.\n"
+"   */\n"
+"  g_signal_connect (h_scale, \n"
+"                    \"value-changed\", \n"
+"                    G_CALLBACK (hscale_moved), \n"
+"                    hlabel);\n"
+"\n"
+"\n"
+"\n"
+"  /* Create the Vertical scale. This time, we will see what happens \n"
+"   * when the digits arent initially set.\n"
+"   */\n"
+"  v_scale = gtk_scale_new (GTK_ORIENTATION_VERTICAL, vadjustment);\n"
+"  gtk_widget_set_vexpand (v_scale, TRUE);\n"
+"\n"
+"  /* Connecting the \"value-changed\" signal for the vertical scale to \n"
+"   * the appropriate callback function.\n"
+"   */\n"
+"  g_signal_connect (v_scale, \n"
+"                    \"value-changed\", \n"
+"                    G_CALLBACK (vscale_moved), \n"
+"                    vlabel);\n"
+"\n"
+"  /* Create a grid and arrange everything accordingly */\n"
+"  grid = gtk_grid_new ();\n"
+"  gtk_grid_set_column_spacing (GTK_GRID (grid), 10);\n"
+"  gtk_grid_set_column_homogeneous (GTK_GRID (grid), TRUE);\n"
+"  gtk_grid_attach (GTK_GRID (grid), h_scale, 0, 0, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), v_scale, 1, 0, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), hlabel, 0, 1, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), vlabel, 1, 1, 1, 1);\n"
+"  \n"
+"\n"
+"  gtk_container_add (GTK_CONTAINER (window), grid);\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
 msgstr ""
-"« C » est un langage plutôt verbeux, donc ne soyez pas surpris par la "
-"quantité de code que contient le fichier. La plupart du code est générique. "
-"Il charge une fenêtre (vide) et l'affiche. Vous trouverez plus de détails ci-"
-"dessous ; passez cette liste si vous comprenez les bases :"
 
-#: C/image-viewer.c.page:65(p) C/guitar-tuner.c.page:70(p)
+#. (itstool) path: item/p
+#: C/scale.c.page:36
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkScale.html";
+"\">GtkScale</link>"
 msgstr ""
-"Les trois lignes <code>#include</code> du haut incorporent les bibliothèques "
-"<code>config</code> (définitions utiles pour la construction autoconf), "
-"<code>gtk</code> (interface utilisateur) et <code>gi18n</code> (pour "
-"internationalisation). Les fonctions de ces bibliothèques seront utilisées "
-"dans le reste du programme."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/image-viewer.c.page:68(p)
+#. (itstool) path: item/p
+#: C/scale.c.page:37
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkRange.html";
+"\">GtkRange</link>"
 msgstr ""
-"La fonction <code>create_window</code> crée une nouvelle fenêtre (vide) et "
-"connecte un signal pour quitter l'application quand la fenêtre est fermée."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/image-viewer.c.page:72(p) C/guitar-tuner.c.page:77(p)
+#. (itstool) path: item/p
+#: C/scale.c.page:38 C/spinbutton.c.page:39
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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)."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkAdjustment.html";
+"\">GtkAdjustment</link>"
 msgstr ""
-"La fonction <code>main</code> est exécutée par défaut quand vous lancez une "
-"application C. Elle appelle d'autres fonctions qui configurent puis lancent "
-"l'application. La fonction <code>gtk_main</code> démarre la boucle "
-"principale de GTK, qui lance l'interface utilisateur et commence à écouter "
-"les événements (comme des clics de souris ou des appuis sur des touches)."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/image-viewer.c.page:75(p) C/guitar-tuner.c.page:80(p)
+#. (itstool) path: item/p
+#: C/scale.c.page:39
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/glib/stable/glib-String-Utility-";
+"Functions.html#g-strdup-printf\">String Utility Functions</link>"
 msgstr ""
-"La définition conditionnelle <code>ENABLE_NLS</code> configure "
-"<code>gettext</code> qui est un environnement pour la traduction des "
-"applications. Ces fonctions définissent la façon dont les objets de "
-"traduction doivent prendre en charge votre application quand vous l'exécutez."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/image-viewer.c.page:85(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/scalepenguins.png'; md5=2dbe6a833fec86fde71a5ddb421e2cd5"
+msgctxt "_"
 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>:"
+"external ref='media/scalepenguins.png' md5='2dbe6a833fec86fde71a5ddb421e2cd5'"
 msgstr ""
-"Nous allons maintenant donner vie à la fenêtre vide. GTK organise "
-"l'interface utilisateur avec des <code>GtkContainer</code> qui peuvent "
-"contenir d'autres éléments graphiques et même d'autres conteneurs. Ici, nous "
-"allons utiliser le plus simple conteneur disponible, une boîte <code>GtkBox</"
-"code> :"
+"@@image: 'media/scalepenguins.png'; md5=2dbe6a833fec86fde71a5ddb421e2cd5"
+
+#. (itstool) path: info/title
+#: C/scale.js.page:8
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Scale (JavaScript)"
+msgstr "JavaScript"
 
-#: C/image-viewer.c.page:123(p)
+#. (itstool) path: info/desc
+#: C/scale.js.page:18
+msgid "A slider which corresponds to a numerical value"
+msgstr "Une glissière qui correspond à une valeur numérique"
+
+#. (itstool) path: page/p
+#: C/scale.js.page:23
 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."
+"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 ""
-"Les premières lignes créent les éléments graphiques que nous voulons "
-"utiliser : un bouton pour pouvoir ouvrir une image, l'élément graphique "
-"image lui-même et la boîte qui nous sert de conteneur. Nous utilisons des "
-"macros comme <code>GTK_BOX</code> pour contrôler et convertir de manière "
-"dynamique les types d'objet ce qui est nécessaire car le C n'est pas prévu "
-"nativement pour prendre en charge la programmation orientée objets."
+"Une échelle est une glissière horizontale ou verticale représentant une "
+"valeur comprise dans une fourchette numérique. Pour créer une échelle, vous "
+"devez définir sa position par défaut, son étendue numérique et le pas auquel "
+"elle avance ou recule. Au lieu d'être obligé de tout recommencer à chaque "
+"fois que vous créez une nouvelle échelle, vous pouvez inclure toutes ces "
+"données dans un objet nommé Adjustment et qui garde en mémoire tous les "
+"paramètres. Ensuite, à chaque création d'une nouvelle échelle, il suffit de "
+"lui indiquer de prendre ces réglages."
 
-#: C/image-viewer.c.page:128(p)
+#. (itstool) path: page/p
+#: C/scale.js.page:24
 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."
+"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 ""
-"Les appels à <code>gtk_box_pack_start</code> ajoutent les deux éléments "
-"graphiques à la boîte et définissent leur comportement. L'image va s'étendre "
-"pour occuper tout l'espace disponible alors que le bouton va prendre juste "
-"la taille nécessaire. Notez que nous ne définissons pas explicitement les "
-"dimensions des éléments graphiques. Avec GTK, ce n'est habituellement pas "
-"nécessaire car cela facilite grandement l'obtention d'une bonne disposition "
-"pour différentes tailles de fenêtre. La boîte est ensuite ajoutée dans la "
-"fenêtre."
+"Cette échelle est un simple élément graphique permettant d'ajuster la taille "
+"d'un iceberg sur lequel vivent des pingouins. Le nombre de pingouins sur "
+"l'iceberg est le produit des valeurs des deux glissières. Faites des essais "
+"en modifiant les valeurs et observez le résultat."
 
-#: C/image-viewer.c.page:134(p)
+#. (itstool) path: section/code
+#: C/scale.js.page:41
+#, no-wrap
 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."
+"\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 ""
-"Il nous faut définir ce qui se passe quand l'utilisateur clique sur le "
-"bouton. GTK utilise le concept de <em>signaux</em>. Quand le bouton est "
-"cliqué, il envoie le signal <em>clicked</em> qu'il est possible de relier à "
-"une action. Cela a été réalisé avec la méthode <code>g_signal_connect</code> "
-"qui commande à GTK d'appeler la fonction <code>on_open_image</code> quand le "
-"bouton est cliqué et de transmettre l'image à cette fonction comme argument "
-"additionnel. Nous définirons la <em>fonction de rappel</em> à la section "
-"suivante."
 
-#: C/image-viewer.c.page:139(p)
+#. (itstool) path: section/p
+#: C/scale.js.page:66
 msgid ""
-"The last <code>g_signal_connect()</code> makes sure that the application "
-"exits when the window is closed."
+"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 ""
-"Le dernier signal <code>g_signal_connect()</code> assure que l'application "
-"quitte quand la fenêtre est fermée."
+"Tout le code de cet exemple va dans la classe ScaleExemple. Le code ci-"
+"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
+"et la fenêtre qui les contient."
 
-#: C/image-viewer.c.page:142(p)
+#. (itstool) path: section/code
+#: C/scale.js.page:67
+#, no-wrap
 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."
+"\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 ""
-"Pour finir, assurez-vous de remplacer l'appel <code>gtk_widget_show</code> "
-"de la fonction principale <code>main()</code> par <code>gtk_widget_show_all()"
-"</code> pour afficher la fenêtre et tous les éléments graphiques qu'elle "
-"contient."
 
-#: C/image-viewer.c.page:150(p)
+#. (itstool) path: section/title
+#: C/scale.js.page:82
+msgid "Creating the scales"
+msgstr "Création des échelles"
+
+#. (itstool) path: section/code
+#: C/scale.js.page:83
+#, no-wrap
 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."
+"\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 ""
-"Nous allons maintenant définir le gestionnaire de signal pour le signal "
-"<em>clicked</em> du bouton ci-dessus. Ajoutez ce code avant la méthode "
-"<code>create_window()</code>."
 
-#: C/image-viewer.c.page:188(p)
+#. (itstool) path: section/p
+#: C/scale.js.page:92
 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."
+"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 ""
-"Le premier argument du signal est toujours l'élément graphique qui envoie le "
-"signal. Il y a parfois d'autres arguments attachés au signal, mais "
-"<em>clicked</em> n'en a aucun. Ensuite vient l'argument <code>user_data</"
-"code> qui est un pointeur vers les données transmises en connectant le "
-"signal. Ici, c'est notre objet <code>GtkImage</code>."
+"La méthode new_with_range est l'un des moyens pour créer un nouvel élément "
+"graphique échelle. Les paramètres qu'elle utilise sont <link href=\"http://";
+"www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Orientation.html\">Gtk."
+"Orientation</link>, la valeur minimum et l'incrément pour une seule "
+"graduation. Ensuite, nous utilisons les méthodes de l'échelle pour définir "
+"sa valeur de départ et en combien de fractions décimales la diviser. Dans ce "
+"cas, il nous faut aussi définir son alignement vertical pour la placer dans "
+"la fenêtre."
 
-#: C/image-viewer.c.page:194(p)
+#. (itstool) path: section/p
+#: C/scale.js.page:93
 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."
+"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 ""
-"La prochaine ligne intéressante est celle où est créée la boîte de dialogue "
-"pour choisir le fichier avec <code>gtk_file_chooser_dialog_new</code>. La "
-"fonction prend comme argument le titre et la fenêtre parente de la boîte de "
-"dialogue et plusieurs options telles que le numéro des boutons et leurs "
-"valeurs correspondantes."
+"Nous pouvons aussi lui indiquer s'il faut afficher ou non le nombre à côté "
+"de la glissière avec la méthode set_draw_value. Les explications se trouvent "
+"dans cet exemple."
 
-#: C/image-viewer.c.page:201(p)
+#. (itstool) path: section/code
+#: C/scale.js.page:95
+#, no-wrap
 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."
+"\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 ""
-"Les deux lignes suivantes limitent la boîte de dialogue <gui>Open</gui> à "
-"l'affichage des seuls fichiers pouvant être ouverts par <code>GtkImage</"
-"code>. Un objet filtre est d'abord créé ; ensuite nous ajoutons tous les "
-"types de fichier pris en charge par <code>GdkPixbuf</code> (ce qui inclut la "
-"plupart des formats d'image comme PNG ou JPEG) au filtre. Enfin, nous "
-"appliquons ce filtre à la boîte de dialogue <gui>Open</gui>."
 
-#: C/image-viewer.c.page:204(p)
+#. (itstool) path: section/p
+#: C/scale.js.page:105
 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."
+"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 ""
-"<code>gtk_dialog_run</code> affiche la boîte de dialogue <gui>Open</gui>. La "
-"boîte de dialogue attend que l'utilisateur choisisse une image ; quand c'est "
-"fait, <code>gtk_dialog_run</code> retourne la valeur "
-"<code>GTK_RESPONSE_ACCEPT</code> (il retourne la valeur "
-"<code>GTK_RESPONSE_CANCEL</code> si l'utilisateur clique sur <gui>Cancel</"
-"gui>). L'instruction <code>switch</code> teste cette réponse."
+"Un Adjustment est un objet permettant de simplifier la procédure de création "
+"d'une nouvelle échelle. La propriété « valeur » de l'Adjustment est la "
+"valeur par défaut de l'échelle alors que les valeurs « superieure » et "
+"« inferieure » en représentent le début et la fin. Entre les deux, les "
+"valeurs de l'incrément définissent le pas auquel l'échelle se déplace "
+"lorsque vous cliquez dessus."
 
-#: C/image-viewer.c.page:206(p)
+#. (itstool) path: section/code
+#: C/scale.js.page:107
+#, no-wrap
 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."
+"\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 ""
-"Supposons que l'utilisateur a cliqué sur le bouton <gui>Ouvrir</gui>, la "
-"ligne suivante attribue le nom du fichier image choisi par l'utilisateur aux "
-"propriétés <code>file</code> du GtkImage. Ensuite, GtkImage charge et "
-"affiche l'image choisie."
 
-#: C/image-viewer.c.page:209(p)
+#. (itstool) path: section/p
+#: C/scale.js.page:117
 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."
+"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 ""
-"Dans la dernière ligne de cette méthode, nous détruisons la boîte de "
-"dialogue <gui>Open</gui> car on n'en a plus besoin. La destruction masque "
-"automatiquement la boîte de dialogue."
+"Ici, nous créons un nouvel objet échelle en utilisant _adjustment comme "
+"étant sa propriété d'« ajustement ». Cela est un raccourci important. "
+"Cependant, il nous faut encore lui indiquer comment arrondir les décimales. "
+"Notez que nous y expliquons aussi la propriété draw_value : comment lui "
+"indiquer de ne pas afficher le nombre à côté de l'échelle lorsque vous "
+"décidez cette façon de faire."
 
-#: C/image-viewer.c.page:223(p)
+#. (itstool) path: section/code
+#: C/scale.js.page:119
+#, no-wrap
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"image-viewer/image-viewer.c\">reference code</link>."
+"\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 ""
-"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"image-viewer/image-viewer.c\">programme de "
-"référence</link>."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/image.vala.page:21(None) C/image.py.page:21(None)
-#: C/image.js.page:20(None) C/image.c.page:21(None)
-msgid "@@image: 'media/image.png'; md5=9416aa74d9d6a857783f7a36338e7a02"
-msgstr "@@image: 'media/image.png'; md5=9416aa74d9d6a857783f7a36338e7a02"
-
-#: C/image.vala.page:7(title)
-#, fuzzy
-#| msgid "Images and labels"
-msgid "Image (Vala)"
-msgstr "Images et étiquettes"
 
-#: C/image.vala.page:17(desc) C/image.py.page:17(desc)
-#: C/image.js.page:16(desc) C/image.c.page:17(desc)
-msgid "A widget displaying an image"
-msgstr "Un élément graphique qui affiche une image"
-
-#: C/image.vala.page:20(title) C/image.py.page:20(title)
-#: C/image.js.page:19(title) C/image.c.page:20(title)
-msgid "Image"
-msgstr "Image"
-
-#: C/image.vala.page:22(p) C/image.py.page:22(p) C/image.js.page:21(p)
-#: C/image.c.page:22(p)
-msgid "This GtkApplication displays an image file from the current directory."
+#. (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 ""
-"Cette application Gtk affiche un fichier image issu du dossier en cours."
+"La méthode get_value permet de trouver la valeur numérique à laquelle une "
+"échelle est définie. Ensuite, nous pouvons en faire ce que nous voulons, y "
+"compris multiplier les valeurs des deux échelles et obtenir une <link xref="
+"\"label.js\">étiquette</link> affichant le produit. Paramétrons le texte "
+"avec retour à la ligne, car nous avons aussi un message stupide à afficher."
 
-#: C/image.vala.page:23(p) C/image.js.page:22(p) C/image.c.page:23(p)
+#. (itstool) path: section/p
+#: C/scale.js.page:134
 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!"
+"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 ""
-"Si le fichier image n'est pas chargé correctement, l'image contient une "
-"icône en forme d'« image brisée ». Le <file>nomdufichier.png</file> doit "
-"être dans le dossier actuel pour que ce code fonctionne. Faites bon usage de "
-"votre photo favorite !"
+"Ensuite, connectons les deux signaux « value-changed » à la fonction "
+"_recalc, qui recalcule le nombre de pingouins sur l'iceberg et affiche un "
+"nouveau message."
 
-#: C/image.vala.page:32(link) C/GtkApplicationWindow.py.page:53(link)
-#: C/GtkApplicationWindow.c.page:30(link) C/grid.py.page:56(link)
-#: C/checkbutton.py.page:47(link) C/aboutdialog.py.page:46(link)
-msgid "GtkApplicationWindow"
-msgstr "GtkApplicationWindow"
+#. (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 ""
 
-#: C/image.py.page:7(title)
-#, fuzzy
-#| msgid "Python"
-msgid "Image (Python)"
-msgstr "Python"
+#. (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 ""
+"Ici, nous créons une <link xref=\"grid.js\">grille</link> pour tout y mettre "
+"et nous lui lions tous nos éléments graphiques. Notez que cette fois (et "
+"pour quelques éléments graphiques) nous utilisons des marges pour espacer "
+"proprement les éléments."
 
-#: C/image.py.page:24(p)
+#. (itstool) path: section/code
+#: C/scale.js.page:150
+#, no-wrap
 msgid ""
-"If the image file is not loaded successfully, the image will contain a "
-"\"broken image\" icon. The <file>filename.png</file> needs to be in the "
-"current directory for this code to work."
+"\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 ""
-"Si le fichier image n'est pas chargé correctement, l'image contient une "
-"icône en forme d'« image brisée ». Le <file>nomdufichier.png</file> doit "
-"être dans le dossier actuel pour que ce code fonctionne."
 
-#: C/image.py.page:35(p)
+#. (itstool) path: section/p
+#: C/scale.js.page:158
 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:"
+"Finally, we add the Grid to the window, then tell the window to show itself "
+"and all the widgets inside of it."
 msgstr ""
-"Une autre manière d'obtenir ce qu'il y a dans cet exemple est de créer "
-"l'image en tant qu'exemple d'une autre classe et de l'ajouter à "
-"<code>MyWindow</code> dans la méthode <code>do_activate(self)</code> :"
+"Enfin, nous ajoutons la grille à la fenêtre et indiquons à celle-ci de "
+"s'afficher toute seule avec tout son contenu."
+
+#. (itstool) path: section/title
+#: C/scale.js.page:162
+msgid "Function which handles the scales' values changing"
+msgstr "Fonction prenant en charge les modifications de valeurs de l'échelle"
 
-#: C/image.py.page:36(code)
+#. (itstool) path: section/code
+#: C/scale.js.page:164
 #, 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"
+"    _recalc: function() {\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"
+"        // Figure out what the product of the two scales' values is\n"
+"        var product = (this._hScale.get_value() * this._vScale.get_value());\n"
 "\n"
-"class MyApplication(Gtk.Application):\n"
-"    def __init__(self):\n"
-"        Gtk.Application.__init__(self)\n"
+"        // Create a blank comment line in case there isn't a silly comment to make\n"
+"        var comment = \"\";\n"
 "\n"
-"    def do_activate(self):\n"
-"        # create an instance of MyWindow\n"
-"        win = MyWindow(self)\n"
-"        # create an instance of MyImage and add it to the window\n"
-"        win.add(MyImage())\n"
-"        # show the window and everything on it\n"
-"        win.show_all()"
-msgstr ""
-"\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"
+"        // 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"
-"# 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"
+"        // Set ._label's new text\n"
+"        this._label.set_label (String (product) + \" penguins on the iceberg. \" + comment);\n"
 "\n"
-"class MyApplication(Gtk.Application):\n"
-"    def __init__(self):\n"
-"        Gtk.Application.__init__(self)\n"
+"    }\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 ""
 
-#: C/image.py.page:63(title)
-msgid "Useful methods for an Image widget"
-msgstr "Méthodes utiles pour un élément graphique Image"
+#. (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 ""
+"Souvenez-vous, nous pouvons obtenir la valeur d'une échelle avec la méthode "
+"get_value. Ici, nous ne faisons que recalculer le produit des deux valeurs "
+"après qu'une des deux échelles a bougé, ajouter un message stupide en "
+"fonction du nombre de pingouins restant et modifier le texte de l'étiquette "
+"avec le nouveau nombre et le message."
 
-#: C/image.py.page:66(p)
-#, fuzzy
-#| msgid ""
-#| "To set a stock icon as image, you can use <code>set_from_stock(stock_id, "
-#| "size)</code> where <code>stock_id</code> is a stock icon such as "
-#| "<code>Gtk.STOCK_ABOUT</code> (more can be found at <link href=\"http://";
-#| "developer.gnome.org/gtk3/3.4/gtk3-Stock-Items\">Stock Items</link>, with "
-#| "the caveat that they should be modified as above) and <code>size</code> "
-#| "is a stock icon size to be chosen from <code>Gtk.IconSize.INVALID, Gtk."
-#| "IconSize.MENU, Gtk.IconSize.SMALL_TOOLBAR, Gtk.IconSize.LARGE_TOOLBAR, "
-#| "Gtk.IconSize.BUTTON, Gtk.IconSize.DND, Gtk.IconSize.DIALOG</code>."
-msgid ""
-"To set a stock icon as image, you can use <code>set_from_stock(stock_id, "
-"size)</code> where <code>stock_id</code> is a stock icon such as <code>Gtk."
-"STOCK_ABOUT</code> (more can be found at <link href=\"http://developer.gnome.";
-"org/gtk3/unstable/gtk3-Stock-Items\">Stock Items</link>, with the caveat "
-"that they should be modified as above) and <code>size</code> is a stock icon "
-"size to be chosen from <code>Gtk.IconSize.INVALID, Gtk.IconSize.MENU, Gtk."
-"IconSize.SMALL_TOOLBAR, Gtk.IconSize.LARGE_TOOLBAR, Gtk.IconSize.BUTTON, Gtk."
-"IconSize.DND, Gtk.IconSize.DIALOG</code>."
-msgstr ""
-"Pour définir une icône de la collection comme image, utilisez "
-"<code>set_from_stock(stock_id, taille)</code>, où <code>stock_id</code> est "
-"une icône de la collection <code>Gtk.STOCK_ABOUT</code> (vous en trouverez "
-"d'autres dans <link href=\"http://developer.gnome.org/gtk3/3.4/gtk3-Stock-";
-"Items\">Éléments de la collection</link>, à ceci près qu'elles doivent être "
-"modifiées comme ci-dessus) et où <code>taille</code> est une taille d'icône "
-"de la collection à choisir parmi <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>."
-
-#: C/image.py.page:67(p)
-msgid ""
-"You can also use <code>set_from_icon_name(icon_name, size)</code>, where "
-"<code>icon_name</code> is a stock icon name such as <code>\"gtk-about\"</"
-"code> (more can be found as above) and <code>size</code> is as above."
-msgstr ""
-"Vous pouvez aussi utiliser la méthode <code>set_from_icon_name(icon_name, "
-"taille)</code>, où <code>icon_name</code> est une icône de la collection "
-"<code>\"gtk-about\"</code> (il y en a d'autres à l'emplacement ci-dessus) et "
-"<code>taille</code> comme ci-dessus."
-
-#: C/image.py.page:68(p)
+#. (itstool) path: section/code
+#: C/scale.js.page:194
+#, no-wrap
 msgid ""
-"To load an image over a network use <code>set_from_pixbuf(pixbuf)</code>, "
-"where <code>pixbuf</code> is a <link href=\"http://developer.gnome.org/gdk-";
-"pixbuf/unstable//index.html\">GdkPixbuf</link>."
+"\n"
+"// Run the application\n"
+"let app = new ScaleExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Pour charger une image en provenance d'un réseau, utilisez la fonction "
-"<code>set_from_pixbuf(pixbuf)</code>, où <code>pixbuf</code> est un <link "
-"href=\"http://developer.gnome.org/gdk-pixbuf/unstable//index.html";
-"\">GdkPixbuf</link>."
 
-#: C/image.py.page:69(code)
+#. (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 ""
+"Enfin, nous créons un nouvel exemple de la classe ScaleExemple et démarrons "
+"l'application."
+
+#. (itstool) path: section/code
+#: C/scale.js.page:204
 #, no-wrap
 msgid ""
+"#!/usr/bin/gjs\n"
 "\n"
-"from gi.repository import Gtk\n"
-"from gi.repository import GdkPixbuf\n"
-"import sys\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\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"
+"const ScaleExample = new Lang.Class({\n"
+"    Name: 'Scale Example',\n"
 "\n"
-"        # create a pixbuf from file filename=\"gnome-image.png\", with width=32\n"
-"        # and height=64 amd boolean preserve_aspect_ratio=False.\n"
-"        pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(\"gnome-image.png\", 64, 128, False)\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsscale'\n"
+"        });\n"
 "\n"
-"        # create an image\n"
-"        image = Gtk.Image()\n"
-"        # set the content of the image as the pixbuf\n"
-"        image.set_from_pixbuf(pixbuf)\n"
-"        # add the image to the window\n"
-"        self.add(image)"
-msgstr ""
+"    // 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"
-"from gi.repository import Gtk\n"
-"from gi.repository import GdkPixbuf\n"
-"import sys\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\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"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\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"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 20,\n"
+"            title: \"Birds on a Floe\"});\n"
+"\n"
+"        // Create the horizontal scale\n"
+"        this._hScale = Gtk.Scale.new_with_range (Gtk.Orientation.HORIZONTAL, 0.0, 100.0, 5.0);\n"
+"        this._hScale.set_valign (Gtk.Align.START);\n"
+"        this._hScale.set_value (50);\n"
+"        this._hScale.set_digits (0);\n"
+"        // this._hScale.set_draw_value (false);\n"
+"\n"
+"        // Create a master adjustment to use for the vertical (or any other) scale\n"
+"        this._adjustment = new Gtk.Adjustment ({\n"
+"            value: 95,\n"
+"            lower: 0,\n"
+"            upper: 100,\n"
+"            step_increment: 5,\n"
+"            page_increment: 10 });\n"
+"\n"
+"        // Create a vertical scale using the adjustment we just made\n"
+"        this._vScale = new Gtk.Scale ({\n"
+"            orientation: Gtk.Orientation.VERTICAL,\n"
+"            adjustment: this._adjustment,\n"
+"            digits: 0,\n"
+"            // draw_value: false,\n"
+"            margin_left: 10 });\n"
+"\n"
+"        // Create the label that shows the product of the two values\n"
+"        this._product = (this._hScale.get_value() * this._vScale.get_value());\n"
+"        this._label = new Gtk.Label ({\n"
+"            label: (String(this._product) + \" penguins on the iceberg.\"),\n"
+"            height_request: 200,\n"
+"            width_request: 200,\n"
+"            wrap: true});\n"
+"\n"
+"        // Connect the two scales to functions which recalculate the label\n"
+"        this._hScale.connect (\"value-changed\", Lang.bind (this, this._recalc));\n"
+"        this._vScale.connect (\"value-changed\", Lang.bind (this, this._recalc));\n"
+"\n"
+"        // Create a grid to arrange things in\n"
+"        this._UIGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            margin_top: 20,\n"
+"            margin_left: 20});\n"
+"\n"
+"        // Attach everything to the grid\n"
+"        this._UIGrid.attach (this._label, 0, 0, 1, 1);\n"
+"        this._UIGrid.attach (this._hScale, 0, 1, 1, 1);\n"
+"        this._UIGrid.attach (this._vScale, 1, 0, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._UIGrid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _recalc: function() {\n"
+"\n"
+"        // Figure out what the product of the two scales' values is\n"
+"        var product = (this._hScale.get_value() * this._vScale.get_value());\n"
+"\n"
+"        // Create a blank comment line in case there isn't a silly comment to make\n"
+"        var comment = \"\";\n"
+"\n"
+"        // Make a silly comment based on the number of penguins\n"
+"        if (product &gt; 9000) {\n"
+"            comment = \"It's over 9000!\";\n"
+"        }\n"
+"        else if (product &lt; 1000 &amp;&amp; product &gt; 0) {\n"
+"            comment = \"They're getting lonely.\";\n"
+"        }\n"
+"        else if (product == 0) {\n"
+"            comment = \"They're all gone ...\";\n"
+"        }\n"
+"        else comment = \"\";\n"
+"\n"
+"        // Set ._label's new text\n"
+"        this._label.set_label (String (product) + \" penguins on the iceberg. \" + comment);\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ScaleExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
 
-#: C/image.py.page:90(p)
+#. (itstool) path: item/p
+#: C/scale.js.page:210 C/spinbutton.js.page:201
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 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."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Adjustment.";
+"html\">Gtk.Adjustment</link>"
 msgstr ""
-"Si <code>preserve_aspect_ratio=True</code> est vrai, utilisez "
-"<code>new_from_file_at_size(nomdufichier, largeur, hauteur)</code>. Si "
-"<code>largeur</code> ou <code>hauteur</code> est <code>-1</code>, il n'y a "
-"pas de contrainte."
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/image.py.page:91(p)
+#. (itstool) path: item/p
+#: C/scale.js.page:215
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"For loading from an input stream, see <code>new_from_stream()</code> and "
-"<code>new_from_stream_at_scale()</code> in the documentation"
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Scale.html";
+"\">Gtk.Scale</link>"
 msgstr ""
-"Pour charger à partir d'un flux entrant, consultez <code>new_from_stream()</"
-"code> et <code>new_from_stream_at_scale()</code> dans la documentation"
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/image.js.page:6(title)
+#. (itstool) path: 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
 #, fuzzy
-#| msgid "JavaScript"
-msgid "Image (JavaScript)"
-msgstr "JavaScript"
+#| msgid "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
+msgctxt "_"
+msgid "external ref='media/scale.png' md5='462c52a53b773cb9e8c62c646bf88452'"
+msgstr "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
 
-#: C/image.c.page:7(title)
+#. (itstool) path: info/title
+#: C/scale.py.page:8
 #, fuzzy
-#| msgid "Image"
-msgid "Image (C)"
-msgstr "Image"
+#| msgid "Python"
+msgctxt "text"
+msgid "Scale (Python)"
+msgstr "Python"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/helloWorld.js.page:27(None)
-#, fuzzy
-#| msgid ""
-#| "@@image: 'media/helloWorldJs.png'; md5=4c88a27211dfd1b33e504c9f78602f2d"
-msgid "@@image: 'media/helloWorld.png'; md5=4c88a27211dfd1b33e504c9f78602f2d"
+#. (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 ""
-"@@image: 'media/helloWorldJs.png'; md5=4c88a27211dfd1b33e504c9f78602f2d"
 
-#: C/helloWorld.js.page:8(title)
-#, fuzzy
-#| msgid "Hello World"
-msgid "Hello World (JavaScript)"
-msgstr "Hello World"
-
-#: C/helloWorld.js.page:23(desc)
-msgid "A basic \"hello, world\" application"
-msgstr "Une application basique « hello, world »"
-
-#: C/helloWorld.js.page:26(title)
-msgid "Hello World"
-msgstr "Hello World"
+#. (itstool) path: section/title
+#: C/scale.py.page:35
+msgid "Useful methods for a Scale widget"
+msgstr "Méthodes utiles pour un élément graphique échelle"
 
-#: C/helloWorld.js.page:29(p)
-msgid "This tutorial will demonstrate how to:"
+#. (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 ""
+"Pour construire une échelle Gtk.Scale, il faut un Gtk.Adjustment. C'est la "
+"représentation d'une valeur avec une limite inférieure et supérieure, des "
+"incréments d'étape et de page, d'une taille de page et est construite sous "
+"la forme <code>Gtk.Adjustment(valeur, inferieure, superieure, "
+"step_increment, page_increment, page_size)</code>, où les champs sont du "
+"type flottant <code>float</code> ; <code>step_increment</code> est "
+"l'incrément ou décrément obtenu par l'utilisation des touches fléchées et "
+"<code>page_increment</code> est celui obtenu en cliquant sur l'échelle elle-"
+"même. Notez que la taille <code>page_size</code> n'est pas utilisée dans "
+"notre exemple et que sa valeur doit être définie à <code>0</code>."
 
-#: C/helloWorld.js.page:31(p)
-#, fuzzy
-#| msgid ""
-#| "A little bit more than a simple \"Hello world\" application - write an "
-#| "image viewer in GTK."
-msgid "create a small \"Hello, World\" application using JavaScript and GTK+"
+#. (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 ""
-"Un peu plus qu'une simple application « Hello world » - écrire un visionneur "
-"d'images en GTK."
 
-#: C/helloWorld.js.page:32(p)
-msgid "make the <file>.desktop</file> file"
+#. (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 ""
+"La méthode <code>get_value()</code> récupère la valeur actuelle de "
+"l'échelle ; <code>set_value(valeur)</code> la définit (si la <code>valeur</"
+"code>, du type <code>float</code>, est en dehors des limites inférieure ou "
+"supérieure, elle sera rétrécie pour tenir à l'intérieur). Ce sont les "
+"méthodes de la classe Gtk.Range."
 
-#: C/helloWorld.js.page:33(p)
-msgid "how to set up the build system"
+#. (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 ""
+"Utilisez <code>set_draw_value(faux)</code> pour éviter d'afficher la valeur "
+"actuelle sous forme d'une chaîne à côté de la glissière."
 
-#: C/helloWorld.js.page:41(title)
-msgid "Create the HelloWorld program"
+#. (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 ""
+"Pour surligner la partie d'échelle située entre l'origine et la valeur "
+"actuelle :"
 
-#: C/helloWorld.js.page:46(p)
-msgid "This needs to be the first line of your script:"
+#. (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 ""
+"\n"
+"self.h_scale.set_restrict_to_fill_level(faux)\n"
+"self.h_scale.set_fill_level(self.h_scale.get_value())\n"
+"self.h_scale.set_show_fill_level(vrai)"
 
-#: C/helloWorld.js.page:48(p)
+#. (itstool) path: item/p
+#: C/scale.py.page:46
 msgid ""
-"It tells the script to use <link href=\"https://live.gnome.org/Gjs/\";>Gjs</"
-"link>. Gjs is a JavaScript binding for GNOME."
+"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 ""
+"dans la fonction de rappel du signal « value-changed », pour avoir le "
+"nouveau remplissage chaque fois que la valeur est modifiée. Ce sont les "
+"méthodes de la classe Gtk.Range."
 
-#: C/helloWorld.js.page:55(p)
-#, fuzzy
-#| msgid ""
-#| "In order for our script to work with GNOME, we need to import GNOME "
-#| "libraries via GObject Introspection. In this case, we're importing GTK+, "
-#| "the most basic library that contains the graphical widgets used to make "
-#| "GNOME apps."
+#. (itstool) path: item/p
+#: C/scale.py.page:48
 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."
+"<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 ""
-"Afin que notre script fonctionne avec GNOME, nous devons importer les "
-"bibliothèques GNOME via l'introspection GObject. Dans ce cas, nous importons "
-"GTK+, la bibliothèque la plus basique qui contient les éléments graphiques "
-"utilisé pour faire les applications GNOME."
+"La méthode <code>add_mark(valeur, position, marqueur)</code> ajoute un "
+"marqueur à la <code>valeur</code> (<code>float</code> ou <code>int</code> "
+"selon la précision de l'échelle) dans <code>position</code> (<code>Gtk."
+"PositionType.LEFT, Gtk.PositionType.RIGHT, Gtk.PositionType.TOP, Gtk."
+"PositionType.BOTTOM</code>) avec le texte <code>Null</code> ou "
+"<code>marqueur</code> en langage Pango Markup. La fonction "
+"<code>clear_marks()</code> supprime les marqueurs."
 
-#: C/helloWorld.js.page:91(p)
+#. (itstool) path: item/p
+#: C/scale.py.page:49
 msgid ""
-"GtkApplication initializes Gtk+. It also connects the <gui>x</gui> button "
-"that's automatically generated along with the window to the \"destroy\" "
-"signal."
+"<code>set_digits(digits)</code> sets the precision of the scale at "
+"<code>digits</code> digits."
 msgstr ""
+"La méthode <code>set_digits(digits)</code> définit la précision de l'échelle "
+"aux caractères <code>digits</code>."
 
-#: C/helloWorld.js.page:92(p)
+#. (itstool) path: item/p
+#: C/scale.py.page:57
 #, fuzzy
 #| msgid ""
-#| "After importing Gtk, we need to initialize it. After that, we can start "
-#| "building our first window. We do this by creating a variable called "
-#| "mywindow and assigning it a new Gtk.Window of type TOPLEVEL."
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkScale.html";
+"\">GtkScale</link>"
 msgstr ""
-"Après l'importation de Gtk, nous devons l'initialiser. Après cela, nous "
-"pouvons démarrer la construction de notre première fenêtre. Nous faisons "
-"cela en créant une variable appelée mywindow et en lui attribuant une "
-"nouvelle Gtk.Window de type TOPLEVEL."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/helloWorld.js.page:93(p)
+#. (itstool) path: item/p
+#: C/scale.py.page:58 C/spinbutton.py.page:50
 #, fuzzy
 #| msgid ""
-#| "After setting up our first window we'll give the window a property called "
-#| "title. 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."
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkAdjustment.html";
+"\">GtkAdjustment</link>"
 msgstr ""
-"Après la définition de notre première fenêtre, nous donnons à la fenêtre une "
-"propriété appelée « title ». Le titre peut être n'importe quelle chaîne de "
-"caractères. Pour être certain que cela fonctionne, il est préférable de se "
-"tenir à un codage UTF-8."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/helloWorld.js.page:94(p)
+#. (itstool) path: item/p
+#: C/scale.py.page:59 C/scrolledwindow.js.page:37 C/scrolledwindow.py.page:46
+#: C/textview.py.page:100
 #, fuzzy
 #| msgid ""
-#| "Now we have a window that has a title and a working \"close\" button. "
-#| "Let's add the actual \"Hello, world\" text."
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"Now we have a window which has a title and a working \"close\" button. Let's "
-"add the actual \"Hello World\" text."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/gtk3-Standard-";
+"Enumerations.html\">Standard Enumerations</link>"
 msgstr ""
-"Maintenant, nous avons une fenêtre qui possède un titre et un bouton de "
-"fermeture fonctionnel. Ajoutons le vrai texte « Hello, world »."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/helloWorld.js.page:97(title)
-msgid "Label for the window"
-msgstr "Étiquette de la fenêtre"
+#. (itstool) path: info/title
+#: C/scale.vala.page:8
+#, fuzzy
+#| msgid "Sample Vala code"
+msgctxt "text"
+msgid "Scale (Vala)"
+msgstr "Exemple de code Vala"
+
+#. (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 ""
 
-#: C/helloWorld.js.page:103(p)
+#. (itstool) path: item/p
+#: C/scale.vala.page:32
 #, fuzzy
 #| 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 tell GNOME to show the label and the window "
-#| "containing it to the user, and call Gtk.main() to get the app itself "
-#| "started."
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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:"
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Scale.html\";>Gtk.Scale</"
+"link>"
 msgstr ""
-"Nous pouvons utiliser une étiquette de texte comme éléments graphiques GTK+ "
-"à condition d'avoir importer la bibliothèque GTK+. Pour l'utiliser, nous "
-"créons une nouvelle variable appelée « label » et lui attribuons un nouveau "
-"Gtk.Label. Ensuite nous lui donnons une propriété à l'intérieur des "
-"accolades {}. Dans ce cas, nous définissons le texte que l'étiquette "
-"contient. Enfin, nous disons à GNOME d'afficher l'étiquette et la fenêtre la "
-"contenant à l'écran et appelons Gtk.main() afin que l'application démarre "
-"elle-même."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/helloWorld.js.page:109(p)
+#. (itstool) path: item/p
+#: C/scale.vala.page:33
 #, fuzzy
 #| msgid ""
-#| "For the future, keep in mind that Gtk.Window can only hold one widget at "
-#| "a time. To construct more elaborate programs you need to create a holder "
-#| "widget (Gtk.Box, Gtk.Grid, Gtk.Application, and so on) of some kind "
-#| "inside the window, and then add all the other widgets to it."
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 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."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Adjustment.html\";>Gtk."
+"Adjustment</link>"
 msgstr ""
-"À l'avenir, gardez à l'esprit que le Gtk.Window ne peut contenir qu'un seul "
-"élément graphique à la fois. Pour construire des programmes plus élaborés, "
-"vous devez créer un élément graphique conteneur (Gtk.Box, Gtk.Grid, Gtk."
-"Application, etc.) d'un certain type à l'intérieur de la fenêtre puis "
-"ajouter tous les autres éléments graphiques à l'intérieur."
-
-#: C/helloWorld.js.page:113(title)
-msgid "helloWorld.js"
-msgstr "helloWorld.js"
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/helloWorld.js.page:114(p)
-msgid "The complete file:"
+#. (itstool) path: item/p
+#: C/scale.vala.page:34
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.PositionType.html\";>Gtk."
+"PositionType</link>"
 msgstr ""
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/helloWorld.js.page:118(title)
+#. (itstool) path: item/p
+#: C/scale.vala.page:35
 #, fuzzy
-#| msgid "Running the application from Terminal"
-msgid "Running the application from terminal"
-msgstr "Exécution de l'application à partir de Terminal"
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Orientation.html\";>Gtk."
+"Orientation</link>"
+msgstr ""
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/helloWorld.js.page:119(p)
+#. (itstool) path: 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
 #, fuzzy
 #| msgid ""
-#| "To run this application, first save it as helloWorld.js. Then open "
-#| "Terminal, go to the folder where your application is stored and run"
+#| "@@image: 'media/scrolledwindow.png'; md5=697bb3205d5c4fb0b4ea8db435843157"
+msgctxt "_"
 msgid ""
-"To run this application, first save it as helloWorld.js. Then open Terminal, "
-"go to the folder where your application is stored and run:"
+"external ref='media/scrolledwindow.png' "
+"md5='697bb3205d5c4fb0b4ea8db435843157'"
 msgstr ""
-"Pour lancer cette application, enregistrez-la d'abord sous le nom helloWorld."
-"js, puis ouvrez Terminal, allez dans le dossier où l'application est "
-"enregistrée et lancez"
+"@@image: 'media/scrolledwindow.png'; md5=697bb3205d5c4fb0b4ea8db435843157"
 
-#: C/helloWorld.js.page:120(input)
+#. (itstool) path: info/title
+#: C/scrolledwindow.c.page:8
 #, fuzzy
-#| msgid "helloWorld.js"
-msgid "gjs helloWorld.js"
-msgstr "helloWorld.js"
+#| msgid "ScrolledWindow"
+msgctxt "text"
+msgid "ScrolledWindow (C)"
+msgstr "ScrolledWindow"
 
-#: C/helloWorld.js.page:126(title)
-msgid "The <file>.desktop.in</file> file"
+#. (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 "Ajoute des barres de défilement à son élément graphique enfant"
+
+#. (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 "ScrolledWindow"
+
+#. (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 "Une image dans une fenêtre avec barres de défilement."
+
+#. (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_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (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 ""
 
-#: C/helloWorld.js.page:127(p)
+#. (itstool) path: item/p
+#: C/scrolledwindow.c.page:37
 #, fuzzy
 #| msgid ""
-#| "Running applications from the Terminal is useful at the beginning of the "
-#| "application making process. To have a fully working <link href=\"http://";
-#| "library.gnome.org/admin/system-admin-guide/stable/mimetypes-9.html.en"
-#| "\">application integration</link> in GNOME 3 requires a desktop launcher. "
-#| "For this you need to create a <file>.desktop</file> file. The .desktop "
-#| "file describes the application name, the used icon and various "
-#| "integration bits. A deeper insight to <file>.desktop</file> file can be "
-#| "found <link href=\"http://developer.gnome.org/desktop-entry-spec/\";>here</"
-#| "link>."
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"Running applications from the Terminal is useful at the beginning of the "
-"application making process. To have fully working <link href=\"http://";
-"library.gnome.org/admin/system-admin-guide/stable/mimetypes-9.html.en"
-"\">application integration</link> in GNOME 3 requires a desktop launcher. "
-"For this you need to create a <file>.desktop</file> file. The <file>."
-"desktop</file> file describes the application name, the used icon and "
-"various integration bits. A deeper insight into the <file>.desktop</file> "
-"file can be found <link href=\"http://developer.gnome.org/desktop-entry-spec/";
-"\">here</link>. The <file>.desktop.in</file> file will create the <file>."
-"desktop</file>."
+"<link href=\"http://developer.gnome.org/gtk/stable/gtk3-Standard-";
+"Enumerations.html#GtkPolicyType\">GtkPolicyType</link>"
 msgstr ""
-"Le lancement d'applications à partir de Terminal est utile au début du "
-"processus de création de l'application. Pour avoir une <link href=\"http://";
-"library.gnome.org/admin/system-admin-guide/stable/mimetypes-9.html.en"
-"\">intégration de l'application</link> fonctionnelle et complète dans GNOME "
-"3, il vous faut un lanceur de bureau. Pour cela vous devez créer un fichier "
-"<file>.desktop</file>. Le fichier .desktop fournit le nom de l'application, "
-"l'icône utilisée et les parties de l'intégration. Un aperçu complet des "
-"fichiers <file>.desktop</file> peut être trouvé <link href=\"http://";
-"developer.gnome.org/desktop-entry-spec/\">ici</link>."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: info/title
+#: C/scrolledwindow.js.page:8
+#, fuzzy
+#| msgid "Window (JavaScript)"
+msgctxt "text"
+msgid "ScrolledWindow (JavaScript)"
+msgstr "Fenêtre (JavaScript)"
 
-#: C/helloWorld.js.page:130(p)
+#. (itstool) path: section/code
+#: C/scrolledwindow.js.page:29
+#, no-wrap
 msgid ""
-"Before continuing, resave <file>helloWorld.js</file> as <file>helloWorld</"
-"file>. Then run this in the command line:"
+"#!/usr/bin/gjs\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ScrolledWindowExample = new Lang.Class ({\n"
+"    Name: 'ScrolledWindow Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application({ application_id: 'org.example.jscrolledwindow' });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this.window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"        // Create the application window\n"
+"        this.window = new Gtk.ApplicationWindow  ({ 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"
+"        // 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 ""
 
-#: C/helloWorld.js.page:131(input)
-#, fuzzy
-#| msgid "chmod +x helloWorld.js"
-msgid "chmod +x helloWorld"
-msgstr "chmod +x helloWorld.js"
-
-#: C/helloWorld.js.page:134(p)
+#. (itstool) path: item/p
+#: C/scrolledwindow.js.page:36
 #, fuzzy
 #| msgid ""
-#| "The example shows you the minimum requirements for a <code>.desktop</"
-#| "code> file."
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"The example shows you the minimum requirements for a <code>.desktop.in</"
-"code> file."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.";
+"ScrolledWindow.html\">GtkScrolledWindow</link>"
 msgstr ""
-"L'exemple vous montre le minimum nécessaire pour un fichier <code>.desktop</"
-"code>."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/helloWorld.js.page:137(p)
+#. (itstool) path: info/title
+#: C/scrolledwindow.py.page:8
 #, fuzzy
-#| msgid "Now let's go through some parts of the <code>.desktop</code> file."
-msgid "Now let's go through some parts of the <code>.desktop.in</code> file."
+#| msgid "ScrolledWindow"
+msgctxt "text"
+msgid "ScrolledWindow (Python)"
+msgstr "ScrolledWindow"
+
+#. (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 ""
-"Allons maintenant examiner quelques parties du fichier <code>.desktop</code>.­­"
 
-#: C/helloWorld.js.page:139(p)
-#, fuzzy
-#| msgid "Run the application"
-msgid "The application name."
-msgstr "Exécution de l'application"
+#. (itstool) path: section/title
+#: C/scrolledwindow.py.page:33
+msgid "Useful methods for a ScrolledWindow widget"
+msgstr "Méthodes utiles pour un élément graphique ScrolledWindow"
 
-#: C/helloWorld.js.page:140(title)
-msgid "Comment"
+#. (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 ""
+"La méthode <code>set_policy(hscrollbar_policy, vscrollbar_policy)</code>, où "
+"chaque argument est l'un des <code>Gtk.Policy.AUTOMATIC, Gtk.Policy.ALWAYS, "
+"Gtk.Policy.NEVER</code>, définit laquelle des barres de défilement verticale "
+"ou horizontale doit s'afficher. <code>AUTOMATIC</code> les affiche seulement "
+"si nécessaire, <code>ALWAYS</code> et <code>NEVER</code> les affichent "
+"respectivement toujours ou jamais."
 
-#: C/helloWorld.js.page:140(p)
-#, fuzzy
-#| msgid "Designing the application"
-msgid "A short description of the application."
-msgstr "Conception de l'application"
-
-#: C/helloWorld.js.page:141(title)
-msgid "Exec"
+#. (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 ""
+"La méthode <code>add_with_viewport(widget)</code> est utilisé pour ajouter "
+"l'élément graphique Gtk.Widget <code>widget</code>, sans possibilité de "
+"défilement à l'intérieur de la fenêtre."
 
-#: C/helloWorld.js.page:141(p)
-#, fuzzy
-#| msgid ""
-#| "Line 6: Specifies a command to execute when you choose the item from the "
-#| "menu. In this example exec just tells where to find the <code>helloworld."
-#| "js</code> file and the file takes care of the rest."
+#. (itstool) path: item/p
+#: C/scrolledwindow.py.page:37
 msgid ""
-"Specifies a command to execute when you choose the application from the "
-"menu. In this example exec just tells where to find the <file>helloWorld</"
-"file> file and the file takes care of the rest."
+"<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 ""
-"Ligne 6 : spécifie une commande à exécuter lorsque vous choisissez l'élément "
-"de menu. Dans cet exemple, « exec » indique juste où trouver le fichier "
-"<code>helloworld.js</code> et le fichier prend en charge le reste."
+"La méthode <code>set_placement(window_placement)</code> organise le cadrage "
+"du contenu de la fenêtre en fonction de ses barres de défilement. Les "
+"options possibles des arguments sont : <code>Gtk.CornerType.TOP_LEFT</code> "
+"(par défaut, les barres de défilement sont en bas et à droite de la "
+"fenêtre), <code>Gtk.CornerType.TOP_RIGHT, Gtk.CornerType.BOTTOM_LEFT, Gtk."
+"CornerType.BOTTOM_RIGHT</code>."
 
-#: C/helloWorld.js.page:142(title)
-msgid "Terminal"
+#. (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 ""
+"Les méthodes <code>set_hadjustment(ajustement)</code> et "
+"<code>set_vadjustment(ajustement)</code> définissent l'<code>ajustement</"
+"code> Gtk.Adjustment. C'est la représentation d'une valeur avec une limite "
+"inférieure et supérieure, des incréments d'étape et de page, d'une taille de "
+"page et est construite sous la forme <code>Gtk.Adjustment(valeur, "
+"inferieure, superieure, step_increment, page_increment, page_size)</code> où "
+"les champs sont du type <code>float</code>. (Notez que <code>step_increment</"
+"code> n'est pas utilisé dans notre exemple et qu'il peut être défini à "
+"<code>0</code>)."
 
-#: C/helloWorld.js.page:142(p)
+#. (itstool) path: item/p
+#: C/scrolledwindow.py.page:45 C/textview.py.page:99
 #, fuzzy
 #| msgid ""
-#| "Line 8: Specifies whether the command in the Exec key runs in a terminal "
-#| "window."
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Specifies whether the command in the Exec key runs in a terminal window."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkScrolledWindow.html";
+"\">GtkScrolledWindow</link>"
 msgstr ""
-"Ligne 8 : indique si la commande de la clé Exec se lance dans une fenêtre de "
-"terminal."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/helloWorld.js.page:145(p)
+#. (itstool) path: info/title
+#: C/scrolledwindow.vala.page:8
 #, fuzzy
-#| msgid ""
-#| "To put your application to the right 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 spec</link>."
+#| msgid "ScrolledWindow"
+msgctxt "text"
+msgid "ScrolledWindow (Vala)"
+msgstr "ScrolledWindow"
+
+#. (itstool) path: page/code
+#: C/scrolledwindow.vala.page:26
+#, no-wrap
 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>."
+"/* 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 ""
-"Pour mettre votre application dans la bonne catégorie, vous devez ajouter "
-"les catégories nécessaires à la ligne « Categories ». Plus d'informations "
-"sur les différentes catégories peuvent être trouvées dans les <link href="
-"\"http://standards.freedesktop.org/menu-spec/latest/apa.html";
-"\">spécifications de menu</link>."
 
-#: C/helloWorld.js.page:146(p)
+#. (itstool) path: item/p
+#: C/scrolledwindow.vala.page:31 C/textview.vala.page:37
 #, fuzzy
 #| msgid ""
-#| "In this example I used an existing icon. For a custom icon you need to "
-#| "have a .svg file of your icon, store it to /usr/share/icons/hicolor/"
-#| "scalable/apps. Write the name of your icon file to the .desktop file, on "
-#| "line 7. More information on icons in: <link href=\"http://library.gnome.";
-#| "org/admin/system-admin-guide/stable/themes-11.html.en\"> Installing Icons "
-#| "for Themes </link>, <link href=\"https://live.gnome.org/GnomeGoals/AppIcon";
-#| "\">Installing Icons for Themes</link> and <link href=\"http://freedesktop.";
-#| "org/wiki/Specifications/icon-theme-spec\">on freedesktop.org: "
-#| "Specifications/icon-theme-spec</link>."
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"In this example we use an existing icon. For a custom icon you need to have "
-"a .svg file of your icon, stored in <file>/usr/share/icons/hicolor/scalable/"
-"apps</file>. Write the name of your icon file to the .desktop.in file, on "
-"line 7. More information on icons in: <link href=\"http://library.gnome.org/";
-"admin/system-admin-guide/stable/themes-11.html.en\"> Installing Icons for "
-"Themes </link>, <link href=\"https://live.gnome.org/GnomeGoals/AppIcon";
-"\">Installing Icons for Themes</link> and <link href=\"http://freedesktop.";
-"org/wiki/Specifications/icon-theme-spec\">on freedesktop.org: Specifications/"
-"icon-theme-spec</link>."
-msgstr ""
-"Dans cet exemple, nous utilisons une icône existante. Pour une icône "
-"personnalisée, vous devez posséder un fichier .svg de votre icône, "
-"l'enregistrer dans /usr/share/icons/hicolor/scalable/apps. Inscrivez le nom "
-"de votre fichier icône dans le fichier .desktop en ligne 7. Plus "
-"d'informations sur les icônes dans : <link href=\"http://library.gnome.org/";
-"admin/system-admin-guide/stable/themes-11.html.en\">Installation d'icônes "
-"pour les thèmes</link>, <link href=\"https://live.gnome.org/GnomeGoals/";
-"AppIcon\">Installation d'icônes pour les thèmes</link> et <link href="
-"\"http://freedesktop.org/wiki/Specifications/icon-theme-spec\";>sur "
-"freedesktop.org : spécifications/icônes-thème-spécifications</link>."
-
-#: C/helloWorld.js.page:149(title)
-msgid "The build system"
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ScrolledWindow.html\";>Gtk."
+"ScrolledWindow</link>"
 msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/helloWorld.js.page:150(p)
+#. (itstool) path: item/p
+#: C/scrolledwindow.vala.page:32 C/textview.vala.page:39
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"To make your application truly a part of the GNOME 3 system you need to "
-"install it with the help of autotools. The autotools build will install all "
-"the necessary files to all the right places."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.PolicyType.html\";>Gtk."
+"PolicyType</link>"
 msgstr ""
-"Pour que votre application fasse partie intégrante de GNOME 3, vous devez "
-"l'installer à l'aide d'autotools. Autotools construit et installe tous les "
-"fichiers nécessaires et les place à leurs emplacements corrects."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/helloWorld.js.page:151(p)
-msgid "For this you need to have the following files:"
-msgstr "Auparavant, vous devez posséder les fichiers suivants :"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/separator.png'; md5=8769b27662ce5c77f99e9ce33751a21a"
+msgctxt "_"
+msgid ""
+"external ref='media/separator.png' md5='8769b27662ce5c77f99e9ce33751a21a'"
+msgstr "@@image: 'media/separator.png'; md5=8769b27662ce5c77f99e9ce33751a21a"
 
-#: C/helloWorld.js.page:157(p)
+#. (itstool) path: info/title
+#: C/separator.c.page:8
 #, fuzzy
-#| msgid "After the autogen.sh file is ready and saved run"
-msgid "After the <file>autogen.sh</file> file is ready and saved, run:"
-msgstr "Quand le fichier autogen.sh est prêt et enregistré, exécutez"
+#| msgid "Separator"
+msgctxt "text"
+msgid "Separator (C)"
+msgstr "Séparateur"
 
-#: C/helloWorld.js.page:158(input)
-msgid "chmod +x autogen.sh"
-msgstr "chmod +x autogen.sh"
+#. (itstool) path: info/desc
+#: C/separator.c.page:19 C/separator.py.page:20 C/separator.vala.page:21
+msgid "A separator widget"
+msgstr "Un élément graphique séparateur"
 
-#: C/helloWorld.js.page:172(title)
-msgid "README"
-msgstr "README"
+#. (itstool) path: page/title
+#: C/separator.c.page:22 C/separator.py.page:23 C/separator.vala.page:24
+msgid "Separator"
+msgstr "Séparateur"
 
-#: C/helloWorld.js.page:173(p)
-#, fuzzy
-#| msgid "README: Information user should read first."
-msgid "Information users should read first. This file can be blank."
-msgstr "README : informations à lire en premier par l'utilisateur."
+#. (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 "Un séparateur horizontal et un vertical séparent quelques étiquettes."
 
-#: C/helloWorld.js.page:175(p)
+#. (itstool) path: section/code
+#: C/separator.c.page:31
+#, no-wrap
 msgid ""
-"When you have the <file>helloWorld</file>, <file>helloWorld.desktop.in</"
-"file>, <file>Makefile.am</file>, <file>configure.ac</file> and <file>autogen."
-"sh</file> files with correct information and rights, the <file>README</file> "
-"file can include the following instructions:"
+"#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 ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/hellognome.js.page:64(None)
+#. (itstool) path: section/title
+#: C/separator.c.page:35 C/separator.py.page:36 C/separator.vala.page:37
+msgid "API Reference"
+msgstr "Référence API"
+
+#. (itstool) path: item/p
+#: C/separator.c.page:39 C/separator.py.page:40
 #, fuzzy
 #| msgid ""
-#| "@@image: 'media/switchanimals.png'; md5=513ae15dcf68e15eef30b76420b8c714"
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"@@image: 'media/hellognomewebapp.png'; md5=948efb6148ede3bc6b47b4b0bbe4a74f"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSeparator.html";
+"\">GtkSeparator</link>"
 msgstr ""
-"@@image: 'media/switchanimals.png'; md5=513ae15dcf68e15eef30b76420b8c714"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/hellognome.js.page:16(desc)
+#. (itstool) path: info/title
+#: C/separator.py.page:8
 #, fuzzy
-#| msgid "A first Gtk application"
-msgid "Your first GNOME application!"
-msgstr "Une première application Gtk"
+#| msgid "Statusbar"
+msgctxt "text"
+msgid "Separator (Python)"
+msgstr "Barre de statut"
 
-#: C/hellognome.js.page:19(title)
-msgid "1. Hello, GNOME!"
+#. (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 ""
 
-#: C/hellognome.js.page:21(p)
+#. (itstool) path: info/title
+#: C/separator.vala.page:8
+#, fuzzy
+#| msgid "Separator"
+msgctxt "text"
+msgid "Separator (Vala)"
+msgstr "Séparateur"
+
+#. (itstool) path: section/code
+#: C/separator.vala.page:33
+#, no-wrap
 msgid ""
-"This tutorial will show you how to write your first GNOME application in "
-"JavaScript. You will use JavaScript to write for GNOME the same way you "
-"would for the web. Afterwards, you will learn how to use \"native\" widgets, "
-"to write applications that look and feel like other GNOME apps."
+"/* This 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 ""
 
-#: C/hellognome.js.page:22(p)
+#. (itstool) path: item/p
+#: C/separator.vala.page:41
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html\";>GtkWindow</"
+"link>"
 msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/hellognome.js.page:28(title)
+#. (itstool) path: item/p
+#: C/separator.vala.page:42
 #, fuzzy
-#| msgid "A button that links to a web page"
-msgid "Let's start with a web page"
-msgstr "Un bouton qui crée un lien vers une page Web"
-
-#: C/hellognome.js.page:30(p)
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Here's some basic HTML, CSS, and JavaScript code. Does this look familiar?"
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Separator.html";
+"\">GtkSeparator</link>"
 msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/hellognome.js.page:62(p)
+#. (itstool) path: item/p
+#: C/separator.vala.page:43
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Let's save this as <file>hellognome.html</file>, and see what it looks like "
-"when we run it!"
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Grid.html\";>GtkGrid</link>"
 msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/hellognome.js.page:66(p)
+#. (itstool) path: item/p
+#: C/separator.vala.page:44
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Label.html\";>GtkLabel</link>"
 msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/hellognome.js.page:67(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/geditview.png'; md5=f1438295662d95f56fcd1d8200efaaf2"
+msgctxt "_"
 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 ""
+"external ref='media/geditview.png' md5='f1438295662d95f56fcd1d8200efaaf2'"
+msgstr "@@image: 'media/geditview.png'; md5=f1438295662d95f56fcd1d8200efaaf2"
 
-#: C/hellognome.js.page:71(title)
+#. (itstool) path: 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
 #, fuzzy
-#| msgid "Creating the main window for the application"
-msgid "Creating a GNOME window to frame our web app"
-msgstr "Création de la fenêtre principale de l'application"
+#| msgid ""
+#| "@@image: 'media/gediteditor.png'; md5=50db1ee8f2c545744879ee9fba5b4b24"
+msgctxt "_"
+msgid ""
+"external ref='media/gediteditor.png' md5='50db1ee8f2c545744879ee9fba5b4b24'"
+msgstr "@@image: 'media/gediteditor.png'; md5=50db1ee8f2c545744879ee9fba5b4b24"
+
+#. (itstool) path: page/title
+#: C/set-up-gedit.js.page:19
+msgid "Set up gedit for JavaScript development"
+msgstr "Configuration de gedit pour le développement en JavaScript"
 
-#: C/hellognome.js.page:73(p)
+#. (itstool) path: page/p
+#: C/set-up-gedit.js.page:20
+#, fuzzy
+#| 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."
 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."
+"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 ""
+"Ce tutoriel va vous montrer comment configurer <link href=\"http://projects.";
+"gnome.org/gedit/\">gedit,</link> l'éditeur de texte de base dans GNOME, pour "
+"qu'il intègre les fonctions optionnelles nécessaires à la programmation en "
+"JavaScript."
 
-#: C/hellognome.js.page:77(p)
-msgid "After that, we need to tell GNOME which libraries we want to import."
-msgstr ""
+#. (itstool) path: section/title
+#: C/set-up-gedit.js.page:23
+msgid "Making code clearer"
+msgstr "Clarification du code"
 
-#: C/hellognome.js.page:84(p)
+#. (itstool) path: section/p
+#: C/set-up-gedit.js.page:24
+#, fuzzy
+#| msgid ""
+#| "Click on <gui>Edit</gui> in gedit's menu bar, then click on "
+#| "<gui>Preferences.</gui> You should see something like this:"
 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:"
+"Click on <gui>Edit</gui> in gedit's menu bar, then click on "
+"<gui>Preferences</gui>. You should see something like this:"
 msgstr ""
+"Dans l'onglet <gui>Édition</gui> de la barre de menu de gedit, cliquez sur "
+"<gui>Préférences</gui>. La boîte de dialogue suivante s'affiche :"
 
-#: C/hellognome.js.page:86(p)
+#. (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 "Voici les options à activer."
+
+#. (itstool) path: item/p
+#: C/set-up-gedit.js.page:28
 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."
+"<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 ""
+"<gui>Afficher les numéros de ligne</gui> va vous aider à comparer votre code "
+"avec l'original et trouver plus facilement la ligne qui provoque une erreur "
+"s'il y a un bogue."
 
-#: C/hellognome.js.page:87(p)
+#. (itstool) path: item/p
+#: C/set-up-gedit.js.page:29
 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."
+"<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 ""
+"<gui>Surligner la ligne actuelle</gui> vous permet de retrouver plus "
+"facilement votre ligne active quand vous vous déplacez souvent."
 
-#: C/hellognome.js.page:88(p)
+#. (itstool) path: item/p
+#: C/set-up-gedit.js.page:30
 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."
+"<gui>Highlight matching brackets</gui> helps you make sure you didn't leave "
+"out a bracket by accident."
 msgstr ""
+"<gui>Surligner les parenthèses correspondantes</gui> vous permet de penser à "
+"refermer la parenthèse."
 
-#: C/hellognome.js.page:91(p)
-#, fuzzy
-#| msgid "Creating the application window"
-msgid "Now we create the application itself:"
-msgstr "Création de la fenêtre de l'application"
+#. (itstool) path: section/title
+#: C/set-up-gedit.js.page:35
+msgid "Making editing easier"
+msgstr "Faciliter l'édition"
 
-#: C/hellognome.js.page:96(p)
+#. (itstool) path: section/p
+#: C/set-up-gedit.js.page:36
 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."
+"In gedit's <gui>Preferences</gui> dialog, click on the <gui>Editor</gui> "
+"tab. You should see something like this:"
 msgstr ""
+"Dans les <gui>Préférences</gui> de gedit, ouvrez l'onglet <gui>Éditeur</"
+"gui>. Cette boîte de dialogue s'affiche :"
 
-#: C/hellognome.js.page:118(p)
+#. (itstool) path: section/p
+#: C/set-up-gedit.js.page:38
 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."
+"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 ""
+"Cochez la case <gui>Activer l'indentation automatique</gui>. Cela oblige le "
+"curseur à rester sur le même indent qu'à la ligne précédente lorsque vous "
+"pressez sur la touche <key>Entrée</key>. Cela est très important en "
+"JavaScript car ce langage utilise l'indentation pour clarifier les fonctions "
+"de chaque partie du programme."
 
-#: C/hellognome.js.page:119(p)
+#. (itstool) path: note/p
+#: C/set-up-gedit.js.page:39
+#, fuzzy
+#| 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>"
 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."
+"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 ""
+"Pour pouvoir partager votre code avec d'autres personnes programmant des "
+"applications GNOME en JavaScript, réglez la <gui>Largeur des tabulations</"
+"gui> sur 4 et cochez la case <gui>Insérer des espaces au lieu de "
+"tabulations</gui>."
+
+#. (itstool) path: info/title
+#: C/signals-callbacks.py.page:9
+#, fuzzy
+#| msgid "Signals and callbacks"
+msgctxt "text"
+msgid "Signals and callbacks (Python)"
+msgstr "Signaux et rappels"
+
+#. (itstool) path: info/desc
+#: C/signals-callbacks.py.page:14
+msgid "An explanation of signals and callbacks in GTK+."
+msgstr "Une explication des signaux et rappels dans GTK+."
 
-#: C/hellognome.js.page:120(p)
+#. (itstool) path: page/title
+#: C/signals-callbacks.py.page:27
+msgid "Signals and callbacks"
+msgstr "Signaux et rappels"
+
+#. (itstool) path: section/p
+#: C/signals-callbacks.py.page:34
 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."
+"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 ""
+"Comme la plupart des boîtes à outils d'interfaces utilisateurs, GTK+ utilise "
+"un modèle de programmation événementiel. Lorsque l'utilisateur ne fait rien, "
+"GTK+ attend qu'une entrée se fasse dans la boucle principale. Dès que "
+"l'utilisateur fait quelque chose (disons un clic de souris), alors la boucle "
+"principale « se réveille » et fournit un événement à GTK+."
 
-#: C/hellognome.js.page:121(p)
+#. (itstool) path: section/p
+#: C/signals-callbacks.py.page:36
 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."
+"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 ""
+"Lorsque les éléments graphiques reçoivent un événement, il émettent la "
+"plupart du temps un ou plusieurs signaux. Ces signaux indiquent à votre "
+"programme que « quelque chose d'intéressant vient de se passer » en "
+"exécutant les fonctions que vous leur avez connecté. Lorsque vos rappels "
+"sont exécutés, vous agissez normalement en conséquence. Après la fin d'un "
+"rappel, GTK+ retourne dans la boucle principale et attend d'autres "
+"événements."
 
-#: C/hellognome.js.page:125(title)
-msgid "Designing our window's UI"
+#. (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 ""
+"Voici un exemple générique : <code>handler_id = widget.connect(evenement, "
+"rappel, donnees)</code>. <code>widget</code> est un exemple d'élément "
+"graphique que nous avons créé un peu plus tôt. Puis vient l'<code>evenement</"
+"code> qui nous intéresse. Chaque élément graphique possède ses propres "
+"événements pouvant arriver. Par exemple, si vous connectez un Gtk.Button à "
+"l'événement « cliqué » : chaque fois que ce bouton est cliqué, le signal est "
+"émis. Un autre exemple avec le signal <code>notify::property</code> : chaque "
+"fois qu'une <link xref=\"properties.py\">propriété</link> d'un GObject est "
+"modifiée, GObject associe comme détail à l'émission de ce signal, le nom de "
+"la propriété modifiée au lieu de seulement émettre le signal <code>notify</"
+"code>. Cela permet aux clients qui ne veulent être informés des "
+"modifications que d'une seule propriété de filtrer la plupart des événements "
+"avant de les recevoir. Troisièmement, l'argument de rappel est le nom de la "
+"fonction de rappel, qui contient le code en cours d'exécution quand les "
+"signaux de ce type spécifique sont émis. Enfin, l'argument optionnel de "
+"données inclut toute donnée devant être passée quand le signal est émis."
 
-#: C/hellognome.js.page:126(p)
+#. (itstool) path: section/p
+#: C/signals-callbacks.py.page:40
 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."
+"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 ""
+"La fonction renvoie un nombre (le <code>handler_id</code>) qui identifie "
+"cette paire particulière de signal-rappel. Ce nombre est nécessaire pour se "
+"déconnecter d'un signal de façon à ce que la fonction de rappel ne soit plus "
+"appelée, ni par la suite, ni pendant les émissions du signal à laquelle elle "
+"est actuellement connectée, comme dans <code>widget.disconnect(handler_id)</"
+"code>."
 
-#: C/hellognome.js.page:141(p)
+#. (itstool) path: section/p
+#: C/signals-callbacks.py.page:47
 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."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+"\">Signals</link> in GObject documentation"
 msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/hellognome.js.page:150(p)
+#. (itstool) path: section/p
+#: C/signals-callbacks.py.page:48
+#, fuzzy
+#| 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"
 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."
+"<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 ""
+"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.";
+"html\">Les bases - Boucle principale et signaux</link> dans le tutoriel "
+"Python Gtk+ 3"
 
-#: C/hellognome.js.page:151(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/spinbutton.png'; md5=993cbb7d9bd271a329727a926195712a"
+msgctxt "_"
 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.)"
+"external ref='media/spinbutton.png' md5='993cbb7d9bd271a329727a926195712a'"
+msgstr "@@image: 'media/spinbutton.png'; md5=993cbb7d9bd271a329727a926195712a"
+
+#. (itstool) path: info/title
+#: C/spinbutton.c.page:8
+#, fuzzy
+#| msgid "SpinButton"
+msgctxt "text"
+msgid "SpinButton (C)"
+msgstr "SpinButton"
+
+#. (itstool) path: info/desc
+#: C/spinbutton.c.page:21
+msgid "Retrieve an integer or floating point number"
+msgstr "Renvoie un entier ou un nombre à virgule flottante"
+
+#. (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 "SpinButton"
+
+#. (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 ""
+"Choisissez un nombre en le saisissant ou en cliquant sur les boutons -/+ !"
 
-#: C/hellognome.js.page:162(p)
+#. (itstool) path: page/code
+#: C/spinbutton.c.page:29
+#, no-wrap
 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."
+"\n"
+"#include &lt;gtk/gtk.h&gt;\n"
+"\n"
+"\n"
+"\n"
+"/* This is the callback function. \n"
+" * It is a handler function which reacts to the signal. \n"
+" * In this case, it will notify the user the value of their spinbutton \n"
+" * as a label.\n"
+" */\n"
+"static void\n"
+"spin_clicked (GtkSpinButton *spinbutton,\n"
+"              gpointer       user_data)\n"
+"{\n"
+"   GtkWidget *label = user_data;\n"
+"   gint value = gtk_spin_button_get_value_as_int (spinbutton);\n"
+"\n"
+"   /* %d - Is used when printing integers.\n"
+"    * Note: Using g_strdup_printf returns a string that must be freed. \n"
+"    * (In which is done below)\n"
+"    */\n"
+"   gchar *str = g_strdup_printf (\"The number you selected is %d.\", value);\n"
+"   gtk_label_set_text (GTK_LABEL (label), str);\n"
+"\n"
+"   g_free(str);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"static void\n"
+"activate (GtkApplication *app,\n"
+"          gpointer        user_data)\n"
+"{\n"
+"  /* Declare variables */\n"
+"  GtkWidget *window;\n"
+"  GtkWidget *label;\n"
+"  GtkWidget *grid;\n"
+"  GtkWidget *spin_button;\n"
+"  GtkAdjustment *adjustment;\n"
+"\n"
+"\n"
+"  /* Create a window with a title, a border width, and a default size */\n"
+"  window = gtk_application_window_new (app);\n"
+"  gtk_window_set_title (GTK_WINDOW (window), \"SpinButton Example\");\n"
+"  gtk_window_set_default_size (GTK_WINDOW (window), 210, 70);\n"
+"  gtk_container_set_border_width (GTK_CONTAINER (window), 5);\n"
+"\n"
+"  /* Create a label to be shown in the window */\n"
+"  label = gtk_label_new (\"Choose a number\");\n"
+"\n"
+"  /* Create an adjustment representing an adjustable bounded value */\n"
+"  adjustment = gtk_adjustment_new (0, 0, 100, 1, 0, 0);\n"
+"\n"
+"\n"
+"  /* Create a spin button that is to be as wide as possible */\n"
+"  spin_button = gtk_spin_button_new (adjustment, 1, 0);\n"
+"  gtk_widget_set_hexpand (spin_button, TRUE);\n"
+"  \n"
+"  /* Connecting the \"value-changed\" signal for the spinbutton \n"
+"   * to the appropriate callback function. \n"
+"   */\n"
+"  g_signal_connect (spin_button, \n"
+"                    \"value-changed\", \n"
+"                    G_CALLBACK (spin_clicked), \n"
+"                    label);\n"
+"\n"
+"\n"
+"  /* Create a grid and arrange everything accordingly */\n"
+"  grid = gtk_grid_new ();\n"
+"  gtk_grid_set_column_spacing (GTK_GRID (grid), 10);\n"
+"  gtk_grid_set_column_homogeneous (GTK_GRID (grid), TRUE);\n"
+"  gtk_grid_attach (GTK_GRID (grid), spin_button, 0, 0, 1, 1);\n"
+"  gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1);\n"
+"  \n"
+"\n"
+"  gtk_container_add (GTK_CONTAINER (window), grid);\n"
+"\n"
+"  gtk_widget_show_all (window);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"int\n"
+"main (int argc, char **argv)\n"
+"{\n"
+"  GtkApplication *app;\n"
+"  int status;\n"
+"\n"
+"  app = gtk_application_new (\"org.gtk.example\", G_APPLICATION_FLAGS_NONE);\n"
+"  g_signal_connect (app, \"activate\", G_CALLBACK (activate), NULL);\n"
+"  status = g_application_run (G_APPLICATION (app), argc, argv);\n"
+"  g_object_unref (app);\n"
+"\n"
+"  return status;\n"
+"}\n"
 msgstr ""
 
-#: C/hellognome.js.page:168(p)
+#. (itstool) path: item/p
+#: C/spinbutton.c.page:37
 #, fuzzy
 #| msgid ""
-#| "Finally, we create a new instance of the finished ScaleExample class, and "
-#| "set the application running."
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"Finally, we create a new instance of our HelloGNOME class, and tell GNOME to "
-"run it."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkSpinButton.html";
+"\">GtkSpinButton</link>"
 msgstr ""
-"Enfin, nous créons un nouvel exemple de la classe ScaleExemple et démarrons "
-"l'application."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/hellognome.js.page:172(title)
+#. (itstool) path: 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
 #, fuzzy
-#| msgid "Run the application"
-msgid "Running your GNOME application"
-msgstr "Exécution de l'application"
+#| msgid ""
+#| "@@image: 'media/spinbuttonkittens.png'; "
+#| "md5=577cce8a902140aacbab73fe8a76a010"
+msgctxt "_"
+msgid ""
+"external ref='media/spinbuttonkittens.png' "
+"md5='577cce8a902140aacbab73fe8a76a010'"
+msgstr ""
+"@@image: 'media/spinbuttonkittens.png'; md5=577cce8a902140aacbab73fe8a76a010"
 
-#: C/hellognome.js.page:174(p)
+#. (itstool) path: info/title
+#: C/spinbutton.js.page:8
+#, fuzzy
+#| msgid "SpinButton"
+msgctxt "text"
+msgid "SpinButton (JavaScript)"
+msgstr "SpinButton"
+
+#. (itstool) path: info/desc
+#: C/spinbutton.js.page:21
+msgid "A number entry field that has + and - buttons"
+msgstr "Un champ de saisie de nombres avec des boutons + et -"
+
+#. (itstool) path: page/p
+#: C/spinbutton.js.page:26
+#, fuzzy
+#| 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."
 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:"
+"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 ""
+"Un BoutonDactivité n'a rien à voir avec un <link xref=\"spinner.js"
+"\">indicateur d'activité</link>. C'est un champ de saisie de texte qui "
+"n'accepte que des nombres et qui possède des boutons plus et moins pour "
+"pouvoir en modifier la valeur sans rien saisir."
 
-#: C/hellognome.js.page:175(screen)
+#. (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 ""
+"Son utilisation est optimale quand il apparaît évident que seul un nombre "
+"peut y être saisi. Dans cet exemple, nous utilisons deux BoutonDactivités "
+"pour définir le nombre de chatons et le nombre de boîtes de thon à leur "
+"donner."
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:44
 #, no-wrap
-msgid " <output style=\"prompt\">$ </output>gjs hellognome.js "
+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 ""
 
-#: C/hellognome.js.page:176(p)
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:69
 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."
+"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 ""
+"Tout le code de cet exemple va dans la classe SpinButtonExample. Le code ci-"
+"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
+"et la fenêtre qui les contient."
 
-#: C/hellognome.js.page:179(p)
-msgid "You can use the terminal command"
+#. (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 ""
 
-#: C/hellognome.js.page:180(screen)
+#. (itstool) path: section/title
+#: C/spinbutton.js.page:85
+msgid "Creating the SpinButtons"
+msgstr "Création des BoutonDactivités"
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:86
 #, no-wrap
-msgid " <output style=\"prompt\">$ </output>cd <var>(directory name)</var> "
+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 ""
 
-#: C/hellognome.js.page:181(p)
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:92
 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."
+"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 ""
+"Utilisons la fonction new_with_range pour créer rapidement un nouveau "
+"BoutonDactivité. Son premier paramètre est la valeur de départ du "
+"BoutonDactivité, le second est la valeur maximale et le troisième est la "
+"valeur de l'incrément lorsque les boutons plus ou moins sont pressés."
 
-#: C/hellognome.js.page:186(title) C/03_getting_the_signal.js.page:339(title)
-#: C/02_welcome_to_the_grid.js.page:256(title)
-msgid "What's next?"
+#. (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 ""
+"Après avoir généré le premier BoutonDactivité, nous connectons son signal "
+"value-changed à une fonction qui gère ce qui se passe quand le nombre à "
+"l'intérieur d'un des deux BoutonDactivités change."
 
-#: C/hellognome.js.page:188(p)
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:95
+#, no-wrap
 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."
+"\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 ""
 
-#: C/hellognome.js.page:189(p)
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:112
+#, fuzzy
+#| 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."
 msgid ""
-"Finally, if you want to just build GNOME applications using JavaScript "
-"libraries designed for the web, you can basically stop here and go do that! "
-"Take a look at the <link xref=\"scrolledwindow.js\">ScrolledWindow</link> "
-"code sample if you'd like to see how to make a WebView widget that can "
-"scroll to show parts of a larger web page, and check out <link xref="
-"\"beginner.js#tutorials\">the later tutorials</link> if you'd like to see "
-"how to create a .desktop file for your application, which will let it appear "
-"in your desktop's Activities menu with all your other apps."
+"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 ""
+"Si vous souhaitez avoir un contrôle un peu plus fin sur un BoutonDactivité, "
+"ou si vous voulez créer beaucoup de BoutonDactivités qui utilisent tous les "
+"mêmes paramètres, vous pouvez créer un objet appelé <link href=\"http://www.";
+"roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Adjustment.html\">Adjustment.</link> "
+"Vous pouvez ensuite l'utiliser comme une propriété d'ajustement pour un "
+"nouveau BoutonDactivité qui paramètre d'un seul coup toutes les valeurs. "
+"Vous pouvez aussi modifier tous les BoutonDactivités utilisant ce réglage en "
+"modifiant les propriétés de l'objet Adjustment."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/guitar-tuner.vala.page:42(None) C/guitar-tuner.py.page:39(None)
-#: C/guitar-tuner.js.page:36(None) C/guitar-tuner.cpp.page:37(None)
-#: C/guitar-tuner.c.page:39(None)
-msgid "@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
+#. (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 ""
-"@@image: 'media/guitar-tuner.png'; md5=35e615e0f5e293671d00c5c414ac2f6b"
+"Ici, les lignes placées en commentaires vous montrent des moyens de "
+"personnaliser votre BoutonDactivité. Vous pouvez, par exemple, définir le "
+"nombre de décimales après la virgule, ou lui indiquer qu'il doit aller à la "
+"ligne s'il dépasse les limites supérieures ou inférieures que vous avez "
+"définies."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/guitar-tuner.vala.page:95(None) C/guitar-tuner.py.page:90(None)
-#: C/guitar-tuner.cpp.page:88(None) C/guitar-tuner.c.page:94(None)
+#. (itstool) path: note/p
+#: C/spinbutton.js.page:114
 msgid ""
-"@@image: 'media/guitar-tuner-glade.png'; md5=f6606525443ab2160f53a87a454364d0"
+"For the kitties' sake, please don't use set_digits to allow a decimal number "
+"of kittens."
 msgstr ""
-"@@image: 'media/guitar-tuner-glade.png'; md5=f6606525443ab2160f53a87a454364d0"
+"Dans l'intérêt des chatons, il est préférable de ne pas autoriser set_digits "
+"à paramétrer un nombre décimal de chatons."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/guitar-tuner.vala.page:129(None) C/guitar-tuner.py.page:133(None)
-#: C/guitar-tuner.js.page:42(None) C/guitar-tuner.cpp.page:117(None)
-#: C/guitar-tuner.c.page:139(None)
+#. (itstool) path: section/title
+#: C/spinbutton.js.page:118
+msgid "Creating the rest of the UI"
+msgstr "Création du reste de l'interface utilisateur"
+
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:120
+#, no-wrap
 msgid ""
-"@@image: 'media/guitar-tuner-pipeline.png'; "
-"md5=5adc952909d92af5dae6954781b4ad5f"
+"\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 ""
-"@@image: 'media/guitar-tuner-pipeline.png'; "
-"md5=5adc952909d92af5dae6954781b4ad5f"
 
-#: C/guitar-tuner.vala.page:9(desc)
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:129
 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."
+"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 ""
-"Utilisation de <link href=\"http://developer.gnome.org/platform-overview/";
-"stable/gtk\">Gtk+</link> et de <link href=\"http://developer.gnome.org/";
-"platform-overview/stable/gstreamer\">GStreamer</link> pour construire une "
-"application d'accordeur de guitare simple pour GNOME. Explications sur la "
-"manière d'utiliser le concepteur d'interface."
+"Créons chaque <link xref=\"label.js\">étiquette</link> individuellement et "
+"attachons-les ensemble avec les BoutonDactivités. La dernière étiquette doit "
+"afficher le nombre de boîtes de thon par chaton, elle comprend donc une "
+"variable au milieu qui correspond à une équation qui utilise les fonctions "
+"get_value des BoutonDactivités pour trouver à quelles valeurs ils sont "
+"définis. On utilise une méthode mathématique de base en JavaScript pour "
+"arrondir le nombre de boîtes de thon par chaton à l'entier le plus proche."
 
-#: C/guitar-tuner.vala.page:26(title) C/guitar-tuner.py.page:23(title)
-#: C/guitar-tuner.js.page:19(title)
-msgid "2 Guitar Tuner"
-msgstr "2 Accordeur de guitare"
+#. (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 ""
 
-#: C/guitar-tuner.vala.page:29(p)
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:155
 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:"
+"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 ""
-"Dans ce tutoriel, nous allons écrire un programme qui émet des sons servant "
-"à accorder une guitare. Nous allons apprendre comment :"
+"Ici, nous utilisons des éléments graphiques <link xref=\"grid.js\">grille</"
+"link> pour tout ranger. Une grille maintient les étiquettes et les "
+"BoutonDactivités dans l'ordre pendant que l'autre affiche la première grille "
+"en haut et la dernière étiquette en bas."
 
-#: C/guitar-tuner.vala.page:31(p)
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:156
 msgid ""
-"Set up a basic project using the <link xref=\"getting-ready\">Anjuta IDE</"
-"link>."
+"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 ""
-"paramétrer un projet de base en utilisant <link xref=\"getting-ready"
-"\">Anjuta IDE</link>,"
+"Il n'y a pas de mauvaise façon de ranger les éléments dans les grilles, à "
+"partir du moment où cela vous convient. Dans notre cas, la grille du haut "
+"comporte une marge en bas pour la séparer de l'étiquette qui se trouve au-"
+"dessous et qui est dans une grille indépendante centrée par rapport aux "
+"étiquettes et BoutonDactivités du haut."
 
-#: C/guitar-tuner.vala.page:32(p)
-msgid "Create a simple GUI with <app>Anjuta</app>'s UI designer."
+#. (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 ""
-"créer une interface graphique simple avec le concepteur d'interface "
-"utilisateur d'<app>Anjuta</app>,"
 
-#: C/guitar-tuner.vala.page:33(p)
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:166 C/switch.js.page:154
 msgid ""
-"Use the <link href=\"http://developer.gnome.org/platform-overview/stable/";
-"gstreamer\">GStreamer</link> library to play sounds."
+"Finally, we add the larger Grid to the window, then tell the window to show "
+"itself and all the widgets inside of it."
 msgstr ""
-"utiliser la bibliothèque <link href=\"http://developer.gnome.org/platform-";
-"overview/stable/gstreamer\">GStreamer</link> pour jouer des sons."
+"Enfin, ajoutons la grille la plus grande à la fenêtre et indiquons à la "
+"fenêtre de s'afficher avec tous les éléments graphiques à l'intérieur."
 
-#: C/guitar-tuner.vala.page:45(title)
-msgid "Create a project in <app>Anjuta</app>"
-msgstr "Création d'un projet dans <app>Anjuta</app>"
+#. (itstool) path: section/title
+#: C/spinbutton.js.page:170
+msgid "Function which handles the SpinButtons' numerical values being adjusted"
+msgstr ""
+"Fonction prenant en charge les valeurs numériques des BoutonDactivités en "
+"cours de réglage"
 
-#: C/guitar-tuner.vala.page:52(p)
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:172
+#, no-wrap
 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."
+"\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 ""
-"Sélectionnez <gui>Gtk+ (Simple)</gui> dans l'onglet <gui>Vala</gui>, cliquez "
-"sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
-"suivantes. Utilisez <file>guitar-tuner</file> comme nom de projet et de "
-"répertoire."
 
-#: C/guitar-tuner.vala.page:55(p)
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:183
 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>"
+"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 ""
-"Assurez-vous que <gui>Configuration des paquets externes</gui> est basculée "
-"sur <gui>I</gui>. Sur la page suivante, choisissez <link href=\"http://";
-"valadoc.org/gstreamer-0.10/index.htm\"><em>gstreamer-0.10</em></link> dans "
-"la liste pour inclure la bibliothèque GStreamer à votre projet. Cliquez sur "
-"<gui>Continuer</gui>."
+"Ici, nous mettons à jour la variable parchaton en fonction des nouvelles "
+"valeurs des BoutonDactivités et utilisons les propriétés de set_label pour "
+"actualiser ce qu'affiche _lastLabel. Comme les deux BoutonDactivités ont "
+"leur signal value-changed connecté à cette fonction, celle-ci met à jour "
+"l'étiquette à chaque fois qu'un des nombres change."
 
-#: C/guitar-tuner.vala.page:59(p)
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:185
+#, no-wrap
 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:"
+"\n"
+"// Run the application\n"
+"let app = new SpinButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Cliquez sur <gui>Appliquer</gui> et votre projet est créé. Ouvrez <file>src/"
-"guitar_tuner.vala</file> en faisant un double clic depuis l'onglet "
-"<gui>Projet</gui> ou l'onglet <gui>Fichiers</gui>. Vous devez voir "
-"apparaître du code commençant par les lignes :"
 
-#: C/guitar-tuner.vala.page:69(p)
+#. (itstool) path: section/p
+#: C/spinbutton.js.page:190
 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:"
+"Finally, we create a new instance of the finished SpinButtonExample class, "
+"and set the application running."
 msgstr ""
-"Ce programme charge une fenêtre (vide) à partir du fichier de description de "
-"l'interface et l'affiche. Vous trouverez plus de détails ci-dessous ; passez "
-"cette liste si vous comprenez les bases :"
+"Enfin, nous créons un nouvel exemple de la classe SpinButtonExample et "
+"démarrons l'application."
 
-#: C/guitar-tuner.vala.page:76(p)
+#. (itstool) path: section/code
+#: C/spinbutton.js.page:195
+#, no-wrap
 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."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const SpinButtonExample = new Lang.Class({\n"
+"    Name: 'SpinButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsspinbutton'\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 20,\n"
+"            title: \"Kitten Feeder\"});\n"
+"\n"
+"        // Create the first spinbutton using a function\n"
+"        this._kittens = Gtk.SpinButton.new_with_range (1, 9001, 1);\n"
+"        this._kittens.connect (\"value-changed\", Lang.bind (this, this._newValue));\n"
+"\n"
+"        // Create an adjustment to use for the second spinbutton\n"
+"        this._adjustment = new Gtk.Adjustment ({\n"
+"            value: 1,\n"
+"            lower: 0,\n"
+"            upper: 9001,\n"
+"            step_increment: 1,\n"
+"            page_increment: 10 });\n"
+"\n"
+"        // Create the second spinbutton\n"
+"        this._tuna = new Gtk.SpinButton ({ adjustment: this._adjustment });\n"
+"        this._tuna.connect (\"value-changed\", Lang.bind (this, this._newValue));\n"
+"\n"
+"        // this._tuna.set_digits (1);\n"
+"        // this._tuna.set_wrap (true);\n"
+"\n"
+"        // Create the text labels to go with the spinbuttons\n"
+"        this._startLabel = new Gtk.Label ({ label: \"There are \" });\n"
+"        this._kittenLabel = new Gtk.Label ({ label: \" kitten(s), and \"});\n"
+"        this._tunaLabel = new Gtk.Label ({ label: \" can(s) of tuna.\"});\n"
+"        this.perKitten = Math.floor((this._tuna.get_value() / this._kittens.get_value()));\n"
+"        this._lastLabel = new Gtk.Label ({\n"
+"            label: \"That's \" + this.perKitten + \" can(s) of tuna per kitten.\" });\n"
+"\n"
+"        // Create a grid to put the spinbuttons and their labels in\n"
+"        this._spinGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            margin_bottom: 20 });\n"
+"\n"
+"        // Attach everything to the grid\n"
+"        this._spinGrid.attach (this._startLabel, 0, 0, 1, 1);\n"
+"        this._spinGrid.attach (this._kittens, 1, 0, 1, 1);\n"
+"        this._spinGrid.attach (this._kittenLabel, 2, 0, 1, 1);\n"
+"        this._spinGrid.attach (this._tuna, 3, 0, 1, 1);\n"
+"        this._spinGrid.attach (this._tunaLabel, 4, 0, 1, 1);\n"
+"\n"
+"        // Create a main grid to hold it and the last label\n"
+"        this._mainGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Attach the smaller grid and the last label to the main grid\n"
+"        this._mainGrid.attach (this._spinGrid, 0, 0, 1, 1);\n"
+"        this._mainGrid.attach (this._lastLabel, 0, 1, 1, 1);\n"
+"\n"
+"        // Add the main grid to the window\n"
+"        this._window.add (this._mainGrid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _newValue: function () {\n"
+"\n"
+"        // Update the label which shows how many cans there are per kitten\n"
+"        this.perKitten = Math.floor((this._tuna.get_value() / this._kittens.get_value()))\n"
+"        this._lastLabel.set_label (\"That's \" + this.perKitten + \" can(s) of tuna per kitten.\");\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new SpinButtonExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Le constructeur de la classe <code>Main</code> crée une nouvelle fenêtre en "
-"ouvrant un fichier GtkBuilder (<file>src/guitar-tuner.ui</file>, défini "
-"quelques lignes plus haut), en connectant son signal puis en l'affichant "
-"dans une fenêtre. Ce fichier GtkBuilder contient la description d'une "
-"interface utilisateur et tous ses éléments. On peut utiliser l'éditeur "
-"d'Anjuta pour concevoir des interfaces utilisateur GtkBuilder."
 
-#: C/guitar-tuner.vala.page:78(p)
+#. (itstool) path: item/p
+#: C/spinbutton.js.page:206
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.SpinButton.";
+"html\">Gtk.SpinButton</link>"
 msgstr ""
-"Connecter des signaux, c'est décider de ce qui doit se passer quand on "
-"appuie sur un bouton ou quand quelque chose d'autre se produit. Ici, la "
-"fonction <code>on_destroy</code> est appelée (et quitte l'application) quand "
-"la fenêtre est fermée."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
+
+#. (itstool) path: info/title
+#: C/spinbutton.py.page:8
+#, fuzzy
+#| msgid "SpinButton"
+msgctxt "text"
+msgid "SpinButton (Python)"
+msgstr "SpinButton"
+
+#. (itstool) path: info/desc
+#: C/spinbutton.py.page:20
+msgid "Retrieve an integer or floating-point number from the user."
+msgstr "Renvoie un entier ou un nombre à virgule flottante de l'utilisateur."
 
-#: C/guitar-tuner.vala.page:82(p)
+#. (itstool) path: section/code
+#: C/spinbutton.py.page:31
+#, no-wrap
 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)."
+"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 ""
-"La fonction statique <code>main</code> est exécutée par défaut quand vous "
-"lancez une application Vala. Elle appelle d'autres fonctions qui créent la "
-"classe Main, configurent puis exécutent l'application. La fonction <code>Gtk."
-"Main</code> démarre la boucle principale de GTK, qui lance l'interface "
-"utilisateur et commence à écouter les événements (comme des clics de souris "
-"ou des appuis sur des touches)."
 
-#: C/guitar-tuner.vala.page:86(p)
+#. (itstool) path: section/title
+#: C/spinbutton.py.page:35
+msgid "Useful methods for a SpinButton widget"
+msgstr "Méthodes utiles pour un élément graphique BoutonDactivité"
+
+#. (itstool) path: section/p
+#: C/spinbutton.py.page:36
 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."
+"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 ""
-"Le programme est prêt à être utilisé, donc vous pouvez le compiler en "
-"cliquant sur <guiseq><gui>Construire</gui><gui>Construire le projet</gui></"
-"guiseq> ou en appuyant sur <keyseq><key>Maj</key><key>F7</key></keyseq>. "
-"Ceci fait apparaître une boîte de dialogue. Pour configurer le répertoire de "
-"compilation, modifiez la <gui>Configuration</gui> à <gui>Par défaut</gui> et "
-"cliquez sur <gui>Exécuter</gui>. Il ne faut le faire qu'une seule fois, à la "
-"première compilation."
-
-#: C/guitar-tuner.vala.page:90(title) C/guitar-tuner.py.page:85(title)
-#: C/guitar-tuner.cpp.page:83(title) C/guitar-tuner.c.page:89(title)
-msgid "Create the user interface"
-msgstr "Création de l'interface utilisateur"
+"Il faut une valeur Gtk.Adjustment pour construire le Gtk.SpinButton. C'est "
+"la représentation d'une valeur avec une limite supérieure et une limite "
+"inférieure, avec des incréments d'étape et de page, avec une taille de page "
+"et elle se présente sous la forme <code>Gtk.Adjustment(valeur, inferieure, "
+"superieure, step_increment, page_increment, page_size)</code> où les champs "
+"sont du type <code>float</code> ; <code>step_increment</code> est "
+"l'incrément ou le décrément obtenu en agissant sur les touches du curseur ou "
+"sur les boutons du BoutonDactivité. Notez que les valeurs "
+"<code>page_increment</code> et <code>page_size</code> ne sont pas utilisés "
+"dans ce cas et qu'ils doivent être définis à <code>0</code>."
 
-#: C/guitar-tuner.vala.page:91(p)
+#. (itstool) path: section/p
+#: C/spinbutton.py.page:37
 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."
+"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 ""
-"Une description de l'interface utilisateur est contenue dans le fichier "
-"GtkBuilder <file>src/guitar_tuner.ui</file> défini au début de la classe. "
-"Pour la modifier, ouvrez le fichier <file>src/guitar_tuner.ui</file> en "
-"faisant un double clic depuis les onglets <gui>Projet</gui> ou "
-"<gui>Fichiers</gui>. Ceci vous renvoie vers le concepteur d'interface. La "
-"fenêtre de conception se trouve au centre ; les <gui>éléments graphiques</"
-"gui> et leurs propriétés sont sur la droite et la <gui>palette</gui> des "
-"éléments graphiques disponibles est sur la gauche."
 
-#: C/guitar-tuner.vala.page:93(p)
+#. (itstool) path: item/p
+#: C/spinbutton.py.page:39
 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."
+"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 ""
-"La disposition de toute interface utilisateur dans GTK+ est organisée à "
-"l'aide de boîtes et de tableaux. Dans cet exemple, prenons une GtkButtonBox "
-"verticale pour y mettre six GtkButtons, un pour chacune des six cordes de la "
-"guitare."
+"Si vous voulez que la valeur du BoutonDactivité aille à la ligne quand elle "
+"dépasse les limites supérieure ou inférieure, définissez la fonction "
+"<code>set_wrap(True)</code> sur vrai. Le signal <code>\"wrapped\"</code> est "
+"alors émis quand cela se produit."
 
-#: C/guitar-tuner.vala.page:99(p)
+#. (itstool) path: item/p
+#: C/spinbutton.py.page:40
 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>."
+"<code>set_digits(digits)</code> sets the precision to be displayed by the "
+"spinbutton, up to 20 digits."
 msgstr ""
-"Dans l'onglet <gui>Palette</gui> de la section <gui>Conteneurs</gui>, "
-"choisissez une <gui>Boîte</gui> (GtkButtonBox) en cliquant sur l'icône. "
-"Cliquez ensuite sur la fenêtre de conception au centre pour la placer dans "
-"la fenêtre. Une boîte de dialogue apparaît dans laquelle vous pouvez définir "
-"le <gui>nombre d'éléments</gui> à <input>6</input>. Cliquez ensuite sur "
-"<gui>Créer</gui>."
+"La méthode <code>set_digits(caracteres)</code> définit la précision "
+"d'affichage du BoutonDactivité, jusqu'à 20 caractères."
 
-#: C/guitar-tuner.vala.page:100(p)
+#. (itstool) path: item/p
+#: C/spinbutton.py.page:41
 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."
+"To get the value of the spinbutton as an integer, use "
+"<code>get_value_as_int()</code>."
 msgstr ""
-"Vous pouvez aussi modifier le <gui>Nombre d'éléments</gui> et "
-"l'<gui>Orientation</gui> dans l'onglet <gui>Général</gui> sur la droite."
+"Pour avoir la valeur du BoutonDactivité sous forme d'un nombre entier, "
+"utilisez <code>get_value_as_int()</code>."
 
-#: C/guitar-tuner.vala.page:104(p)
+#. (itstool) path: item/p
+#: C/spinbutton.py.page:49
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSpinButton.html";
+"\">GtkSpinButton</link>"
 msgstr ""
-"Maintenant, à partir de la section <gui>Contrôle et affichage</gui> de la "
-"section <gui>Palette</gui>, sélectionnez un <gui>Bouton</gui> (GtkButton) en "
-"cliquant dessus et disposez-le dans la première case du GtkButtonBox en "
-"cliquant sur celle-ci."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
+
+#. (itstool) path: info/title
+#: C/spinbutton.vala.page:8
+#, fuzzy
+#| msgid "SpinButton"
+msgctxt "text"
+msgid "SpinButton (Vala)"
+msgstr "SpinButton"
 
-#: C/guitar-tuner.vala.page:107(p)
+#. (itstool) path: info/desc
+#: C/spinbutton.vala.page:20
+msgid "Retrieve an integer or floating point number."
+msgstr "Renvoie un entier ou un nombre à virgule flottante."
+
+#. (itstool) path: page/code
+#: C/spinbutton.vala.page:27
+#, no-wrap
 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."
+"/* 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 ""
-"Pendant que le bouton est encore sélectionné, déplacez-vous dans l'onglet "
-"<gui>Général</gui> à droite de la propriété <gui>Étiquette</gui> et modifiez-"
-"la en <gui>E</gui>. C'est la corde E en bas de la guitare."
 
-#: C/guitar-tuner.vala.page:108(p)
+#. (itstool) path: item/p
+#: C/spinbutton.vala.page:32
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"The <gui>General</gui> tab is located in the <gui>Widgets</gui> section on "
-"the right."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.SpinButton.html\";>Gtk."
+"SpinButton</link>"
 msgstr ""
-"L'onglet <gui>Général</gui> est situé dans la section <gui>Composants "
-"graphiques</gui> sur la droite."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/spinner.png'; md5=d04f2d81f1d72c6c2f97e8729947dfed"
+msgctxt "_"
+msgid "external ref='media/spinner.png' md5='d04f2d81f1d72c6c2f97e8729947dfed'"
+msgstr "@@image: 'media/spinner.png'; md5=d04f2d81f1d72c6c2f97e8729947dfed"
+
+#. (itstool) path: info/title
+#: C/spinner.c.page:8
+#, fuzzy
+#| msgid "Spinner"
+msgctxt "text"
+msgid "Spinner (C)"
+msgstr "Indicateur d'activité"
+
+#. (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 "L'animation d'un indicateur d'activité"
+
+#. (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 "Indicateur d'activité"
+
+#. (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 ""
+"Cet indicateur d'activité s'arrête et démarre en appuyant sur la barre "
+"d'espace."
 
-#: C/guitar-tuner.vala.page:113(p)
+#. (itstool) path: page/code
+#: C/spinner.c.page:27
+#, no-wrap
 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>."
+"\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 ""
-"Passez à l'onglet <gui>Signaux</gui> dans la section <gui>Composants "
-"graphiques</gui> et recherchez le signal <code>clicked</code> du bouton. "
-"Vous pouvez l'utiliser pour connecter un gestionnaire de signal qui sera "
-"appelé quand le bouton est cliqué. Pour cela, cliquez sur le signal et "
-"saisissez <code>main_on_button_clicked</code> dans la colonne "
-"<gui>Gestionnaire</gui> et appuyez sur <key>Entrée</key>."
 
-#: C/guitar-tuner.vala.page:116(p) C/guitar-tuner.py.page:107(p)
-#: C/guitar-tuner.c.page:111(p)
+#. (itstool) path: item/p
+#: C/spinner.c.page:35
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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>."
+"<link href=\"http://developer.gnome.org/gobject/stable/gobject-The-Base-";
+"Object-Type.html#g-object-get\">GObject</link>"
 msgstr ""
-"Répétez cette procédure pour les autres boutons, ce qui ajoute les 5 autres "
-"cordes nommées <em>A</em>, <em>D</em>, <em>G</em>, <em>B</em> et <em>e</em>."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/guitar-tuner.vala.page:119(p) C/guitar-tuner.py.page:110(p)
-#: C/guitar-tuner.c.page:114(p)
+#. (itstool) path: item/p
+#: C/spinner.c.page:36 C/togglebutton.c.page:38
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"Save the UI design (by clicking <guiseq><gui>File</gui><gui>Save</gui></"
-"guiseq>) and keep it open."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkSpinner.html";
+"\">GtkSpinner</link>"
 msgstr ""
-"Enregistrez le fichier de conception de l'interface utilisateur (en cliquant "
-"sur <guiseq><gui>Fichier</gui><gui>Enregistrer</gui></guiseq>) et laissez-le "
-"ouvert."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/guitar-tuner.vala.page:125(title) C/guitar-tuner.py.page:129(title)
-#: C/guitar-tuner.js.page:24(link) C/guitar-tuner.js.page:38(title)
-#: C/guitar-tuner.cpp.page:112(title) C/guitar-tuner.c.page:135(title)
-msgid "GStreamer pipelines"
-msgstr "Les pipelines GStreamer"
+#. (itstool) path: info/title
+#: C/spinner.js.page:8
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Spinner (JavaScript)"
+msgstr "JavaScript"
 
-#: C/guitar-tuner.vala.page:126(p)
+#. (itstool) path: page/code
+#: C/spinner.js.page:25
+#, no-wrap
 msgid ""
-"This section will show you how to create the code to produce sounds. <link "
-"href=\"http://developer.gnome.org/platform-overview/stable/gstreamer";
-"\">GStreamer</link> is GNOME's multimedia framework — you can use it for "
-"playing, recording, and processing video, audio, webcam streams and the "
-"like. Here, we'll be using it to produce single-frequency tones."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Gdk = imports.gi.Gdk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const SpinnerExample = new Lang.Class ({\n"
+"    Name: 'Spinner Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jsspinner',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Spinner Example\",\n"
+"            default_height: 200,\n"
+"            default_width: 200,\n"
+"            border_width: 30 });\n"
+"\n"
+"        // Create a spinner which starts spinning automatically\n"
+"        this._spinner = new Gtk.Spinner ({active: true});\n"
+"        this._window.add (this._spinner);\n"
+"\n"
+"        // Connect a keypress event to the function that makes it start or stop spinning\n"
+"        this._window.connect(\"key-press-event\", Lang.bind(this, this._onKeyPress));\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onKeyPress: function(widget, event) {\n"
+"\n"
+"        // Get the value of the key that was pressed\n"
+"        let keyval = event.get_keyval()[1];\n"
+"\n"
+"        // If it was the spacebar, toggle the spinner to start or stop\n"
+"        if (keyval == Gdk.KEY_space) {\n"
+"            if (this._spinner.active == true)\n"
+"                this._spinner.stop();\n"
+"            else\n"
+"                this._spinner.start();\n"
+"        }\n"
+"    }\n"
+"\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new SpinnerExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Cette section va vous montrer comment créer un programme qui produit des "
-"sons. <link href=\"http://developer.gnome.org/platform-overview/stable/";
-"gstreamer\">GStreamer</link> est l'architecture multimédia de GNOME — vous "
-"pouvez vous en servir pour des jeux, des enregistrements, pour traiter des "
-"flux vidéo, audio, de webcam entre autres. Ici, nous allons nous en servir "
-"pour émettre des tonalités à une seule fréquence."
 
-#: C/guitar-tuner.vala.page:127(p)
+#. (itstool) path: item/p
+#: C/spinner.js.page:30
+#, fuzzy
+#| 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."
 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."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gdk.html\";>Gdk - "
+"Key Values</link>"
 msgstr ""
-"Le concept de GStreamer est le suivant : il y a création d'un <link href="
-"\"http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/";
-"section-intro-basics-bins.html\"><em>pipeline</em></link> contenant "
-"plusieurs éléments de traitement en provenance d'une <em>source</em> à "
-"destination d'un <em>collecteur</em> (sortie). La source peut être un "
-"fichier image, une vidéo ou un fichier musical, par exemple, et la sortie un "
-"élément graphique ou une carte son."
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
 
-#: C/guitar-tuner.vala.page:128(p) C/guitar-tuner.py.page:132(p)
-#: C/guitar-tuner.js.page:41(p) C/guitar-tuner.cpp.page:116(p)
-#: C/guitar-tuner.c.page:138(p)
+#. (itstool) path: item/p
+#: C/spinner.js.page:33 C/togglebutton.js.page:158
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Spinner.html";
+"\">Gtk.Spinner</link>"
 msgstr ""
-"Entre la source et le collecteur, vous pouvez appliquer différents filtres "
-"et convertisseurs pour prendre en charge les effets, les conversions de "
-"format et ainsi de suite. Chaque élément du pipeline possède des propriétés "
-"pouvant être utilisées pour modifier son comportement."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/guitar-tuner.vala.page:130(p) C/guitar-tuner.py.page:134(p)
-#: C/guitar-tuner.js.page:43(p) C/guitar-tuner.cpp.page:118(p)
-#: C/guitar-tuner.c.page:140(p)
-msgid "An example GStreamer pipeline."
-msgstr "Un exemple de pipeline GStreamer."
+#. (itstool) path: info/title
+#: C/spinner.py.page:8
+#, fuzzy
+#| msgid "Strings in Python 2"
+msgctxt "text"
+msgid "Spinner (Python)"
+msgstr "Les chaînes dans Python 2"
 
-#: C/guitar-tuner.vala.page:135(title) C/guitar-tuner.py.page:139(title)
-#: C/guitar-tuner.c.page:145(title)
-msgid "Set up the pipeline"
-msgstr "Configuration du pipeline"
+#. (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 ""
 
-#: C/guitar-tuner.vala.page:136(p)
+#. (itstool) path: note/p
+#: C/spinner.py.page:33
 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>."
+"<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 ""
-"Dans cet exemple, nous utilisons une source génératrice de son de fréquence "
-"pure appelée <code>audiotestsrc</code> et envoyons sa sortie au périphérique "
-"son par défaut du système, <code>autoaudiosink</code>. Il nous faut "
-"seulement configurer la fréquence du générateur accessible depuis la "
-"propriété <code>freq</code> de <code>audiotestsrc</code>."
+"La fonction <code>Gdk.keyval_name(event.keyval)</code> donne à la touche "
+"<code>event.keyval</code> un nom symbolique. Les noms avec leurs valeurs "
+"correspondantes se trouvent <link href=\"http://git.gnome.org/browse/gtk+/";
+"tree/gdk/gdkkeysyms.h\">ici</link>, mais par exemple, "
+"<code>GDK_KEY_BackSpace</code> devient la chaîne <code>« Retour arrière »</"
+"code>."
 
-#: C/guitar-tuner.vala.page:138(p)
+#. (itstool) path: item/p
+#: C/spinner.py.page:42 C/togglebutton.py.page:46
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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:"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSpinner.html";
+"\">GtkSpinner</link>"
 msgstr ""
-"Il faut ajouter une ligne pour initialiser GStreamer ; écrivez le code "
-"suivant dans la ligne au-dessus de l'appel à <code>Gtk.init</code> dans la "
-"fonction <code>main</code> :"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/guitar-tuner.vala.page:140(p)
+#. (itstool) path: item/p
+#: C/spinner.py.page:43
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"Then, copy the following function into <file>guitar_tuner.vala</file> inside "
-"our <code>Main</code> class:"
+"<link href=\"http://developer.gnome.org/gdk/stable/gdk-Keyboard-Handling.html";
+"\">Key Values</link>"
 msgstr ""
-"Ensuite, copiez la fonction suivante dans le fichier <file>guitar_tuner."
-"vala</file> à l'intérieur de notre classe <code>Main</code> :"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/guitar-tuner.vala.page:175(p)
+#. (itstool) path: info/title
+#: C/spinner.vala.page:8
+#, fuzzy
+#| msgid "Spinner"
+msgctxt "text"
+msgid "Spinner (Vala)"
+msgstr "Indicateur d'activité"
+
+#. (itstool) path: page/code
+#: C/spinner.vala.page:25
+#, no-wrap
 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)."
+"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 ""
-"Les trois premières lignes créent les éléments GStreamer source et sink "
-"(collecteur) (<link href=\"http://valadoc.org/gstreamer-0.10/Gst.Element.html";
-"\"><code>Gst.Element</code></link>) et un élément <link href=\"http://";
-"valadoc.org/gstreamer-0.10/Gst.Pipeline.html\">pipeline element</link> (qui "
-"sera utilisé comme conteneur pour les deux autres). Ce sont des variables de "
-"classe et sont donc définies en dehors de la méthode. Le pipeline est nommé "
-"« note » ; la source est nommée « source » et le collecteur est nommé "
-"« output » et est défini comme étant le connecteur <code>autoaudiosink</"
-"code> (qui est la sortie par défaut de la carte son)."
 
-#: C/guitar-tuner.vala.page:178(p)
+#. (itstool) path: item/p
+#: C/spinner.vala.page:30
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Widget.html\";>Gtk.Widget</"
+"link>"
 msgstr ""
-"L'appel à <link href=\"http://valadoc.org/gobject-2.0/GLib.Object.set.html";
-"\"><code>source.set</code></link> définit la propriété <code>freq</code> de "
-"l'élément source à <code>frequency</code> qui est transmis comme argument de "
-"la fonction <code>play_sound</code>. Il s'agit simplement de la fréquence de "
-"la note de musique en Hertz ; certaines fréquences utiles seront définies "
-"plus tard."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/guitar-tuner.vala.page:181(p)
+#. (itstool) path: item/p
+#: C/spinner.vala.page:31
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"<link href=\"http://valadoc.org/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>."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Spinner.html\";>Gtk.Spinner</"
+"link>"
 msgstr ""
-"<link href=\"http://valadoc.org/gstreamer-0.10/Gst.Bin.add.html";
-"\"><code>pipeline.add</code></link> place la source et le collecteur dans le "
-"pipeline. Le pipeline est un <link href=\"http://valadoc.org/gstreamer-0.10/";
-"Gst.Bin.html\"><code>Gst.Bin</code></link>, c.-à-d. juste un élément qui "
-"peut contenir beaucoup d'autres éléments GStreamer. En général, vous pouvez "
-"ajouter autant d'éléments que vous voulez au pipeline en faisant autant "
-"d'appels supplémentaires à <code>pipeline.add</code>."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/guitar-tuner.vala.page:184(p)
+#. (itstool) path: item/p
+#: C/spinner.vala.page:32
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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>)."
+"<link href=\"http://www.valadoc.org/gdk-3.0/Gdk.keyval_name.html\";>Gdk."
+"keyval_name</link>"
 msgstr ""
-"Ensuite, <link href=\"http://valadoc.org/gstreamer-0.10/Gst.Element.link.html";
-"\"><code>sink.link</code></link> sert à lier les éléments ensemble, de sorte "
-"que la sortie de la source (une note) va à l'entrée du collecteur (et est "
-"ensuite envoyée à la carte son). <link href=\"http://www.valadoc.org/";
-"gstreamer-0.10/Gst.Element.set_state.html\"><code>pipeline.set_state</code></"
-"link> sert enfin à démarrer la lecture en basculant l'<link href=\"http://";
-"www.valadoc.org/gstreamer-0.10/Gst.State.html\">état du pipeline</link> à "
-"« playing » (lecture) (<code>Gst.State.PLAYING</code>)."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/guitar-tuner.vala.page:187(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/statusbar3.png'; md5=60c71604fb44656237ee66dfb39a8689"
+msgctxt "_"
 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."
+"external ref='media/statusbar3.png' md5='60c71604fb44656237ee66dfb39a8689'"
+msgstr "@@image: 'media/statusbar3.png'; md5=60c71604fb44656237ee66dfb39a8689"
+
+#. (itstool) path: info/title
+#: C/statusbar.c.page:8
+#, fuzzy
+#| msgid "Statusbar"
+msgctxt "text"
+msgid "Statusbar (C)"
+msgstr "Barre de statut"
+
+#. (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 ""
-"Comme nous ne voulons pas jouer indéfiniment une note ennuyeuse, la dernière "
-"chose que fait <code>play_sound</code> est d'ajouter un <link href=\"http://";
-"www.valadoc.org/glib-2.0/GLib.TimeoutSource.html\"><code>TimeoutSource</"
-"code></link> qui définit un délai avant la coupure du son ; cela attend 200 "
-"millisecondes avant d'appeler un gestionnaire de signal défini ici même, qui "
-"stoppe et détruit le pipeline. Il renvoie <code>false</code> pour se "
-"supprimer lui-même du délai d'attente, sinon il serait constamment appelé "
-"toutes les 200 ms."
+"Rapporte les messages d'information d'importance mineure pour l'utilisateur"
 
-#: C/guitar-tuner.vala.page:197(title) C/guitar-tuner.c.page:120(title)
-msgid "Creating the signal handler"
-msgstr "Création du gestionnaire de signal"
+#. (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 "Barre de statut"
 
-#: C/guitar-tuner.vala.page:198(p)
+#. (itstool) path: page/p
+#: C/statusbar.c.page:28
 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."
+"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 ""
-"Dans le concepteur d'interface utilisateur, il a été fait en sorte que tous "
-"les boutons appellent la même fonction, <gui>on_button_clicked</gui> quand "
-"ils sont cliqués. En réalité, nous saisissons <gui>main_on_button_clicked</"
-"gui> qui indique au concepteur d'interface utilisateur que cette méthode "
-"fait partie de notre fonction <code>Main</code>. Nous devons ajouter cette "
-"fonction dans notre fichier source."
+"Cette barre de statut sert à démontrer comment les messages sont empilés "
+"dans l'ordre « le dernier au-dessus ». Le message au sommet de la pile est "
+"toujours celui qui est affiché."
 
-#: C/guitar-tuner.vala.page:199(p)
+#. (itstool) path: page/code
+#: C/statusbar.c.page:30
+#, no-wrap
 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:"
+"\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 ""
-"Pour cela, dans le fichier interface utilisateur (guitar_tuner.ui), "
-"sélectionnez un des boutons en cliquant dessus, puis ouvrez "
-"<file>guitar_tuner.vala</file> (en cliquant sur l'onglet au milieu). Allez "
-"sur la droite, dans l'onglet <gui>Signaux</gui> que vous aviez déjà utilisé "
-"pour nommer le signal. Prenez maintenant la ligne où vous aviez défini le "
-"signal <gui>clicked</gui> et faites-la glisser dans le fichier source au "
-"début de la classe. Le code suivant s'ajoute à votre fichier source :"
 
-#: C/guitar-tuner.vala.page:206(p)
+#. (itstool) path: item/p
+#: C/statusbar.c.page:38
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"You can also just type the code at the beginning of the class instead of "
-"using the drag and drop."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkStatusbar.html";
+"\">GtkStatusBar</link>"
 msgstr ""
-"Vous pouvez aussi saisir seulement le code au début de la classe au lieu "
-"d'utiliser le glisser-déposer."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/guitar-tuner.vala.page:207(p)
+#. (itstool) path: item/p
+#: C/statusbar.c.page:39
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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>)."
+"<link href=\"http://developer.gnome.org/glib/stable/glib-String-Utility-";
+"Functions.html#g-snprintf\">String Utility Functions</link>"
 msgstr ""
-"Le récepteur du signal n'a qu'un seul argument : le <link href=\"http://";
-"valadoc.org/gtk+-3.0/Gtk.Widget.html\"><code>Gtk.Widget</code></link> qui a "
-"appelé la fonction (dans notre cas, toujours un <link href=\"http://valadoc.";
-"org/gtk+-3.0/Gtk.Button.html\"><code>Gtk.Button</code></link>)."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/guitar-tuner.vala.page:213(title)
-msgid "Define the signal handler"
-msgstr "Définition du gestionnaire de signal"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/statusbar2.png'; md5=ff6f7e5b270827ca98b2d5f7087aa766"
+msgctxt "_"
+msgid ""
+"external ref='media/statusbar2.png' md5='ff6f7e5b270827ca98b2d5f7087aa766'"
+msgstr "@@image: 'media/statusbar2.png'; md5=ff6f7e5b270827ca98b2d5f7087aa766"
 
-#: C/guitar-tuner.vala.page:214(p)
+#. (itstool) path: info/title
+#: C/statusbar.js.page:8
+#, fuzzy
+#| msgid "JavaScript"
+msgctxt "text"
+msgid "Statusbar (JavaScript)"
+msgstr "JavaScript"
+
+#. (itstool) path: info/desc
+#: C/statusbar.js.page:18
+msgid "Show notifications in a dedicated statusbar"
+msgstr "Afficher les notifications dans une barre de statut donnée"
+
+#. (itstool) path: page/p
+#: C/statusbar.js.page:23
 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:"
+"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 ""
-"Nous voulons jouer la note adéquate quand l'utilisateur clique sur un "
-"bouton. Pour cela, nous allons étoffer le gestionnaire de signal défini "
-"auparavant. Nous aurions pu connecter chaque bouton à un gestionnaire "
-"différent, mais cela aurait dupliqué beaucoup de code. Au lieu de ça, nous "
-"allons plutôt utiliser l'étiquette du bouton pour déterminer le bouton "
-"cliqué :"
+"Cette barre de statut enregistre le nombre de fois que vous avez cliqué sur "
+"un bouton. Des applications comme <link href=\"http://projects.gnome.org/";
+"gedit/\">gedit</link> utilisent une barre de statut pour rendre les "
+"informations visibles d'un coup d'œil sans interrompre l'utilisateur."
 
-#: C/guitar-tuner.vala.page:242(p)
+#. (itstool) path: page/p
+#: C/statusbar.js.page:24
 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>."
+"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 ""
-"Le bouton <code>Gtk.Button</code> qui a été cliqué est transmis comme "
-"argument (<code>sender</code>) à <code>on_button_clicked</code>. Nous "
-"pouvons obtenir l'étiquette de ce bouton en utilisant <code>get_child</code> "
-"puis, le texte de cette étiquette en utilisant <code>get_label</code>."
+"Les nouveaux messages sont ajoutés au sommet de la pile d'une barre de "
+"statut et peuvent être affichés pour consulter les plus récents. Vous pouvez "
+"aussi effacer tous les messages d'un type spécifique d'un seul coup. Cet "
+"exemple d'application explique ces fonctions."
 
-#: C/guitar-tuner.vala.page:243(p)
+#. (itstool) path: section/code
+#: C/statusbar.js.page:41
+#, no-wrap
 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!"
+"\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 ""
-"L'instruction « switch » compare le texte de l'étiquette à la note que nous "
-"pouvons jouer et <code>play_sound</code> est appelé avec la fréquence "
-"appropriée à cette note. Cela fonctionne ; nous obtenons un accordeur de "
-"guitare opérationnel !"
 
-#: C/guitar-tuner.vala.page:249(p) C/guitar-tuner.cpp.page:251(p)
-#: C/guitar-tuner.c.page:253(p)
+#. (itstool) path: section/p
+#: C/statusbar.js.page:67
 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!"
+"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 ""
-"Si ce n'est déjà fait, choisissez l'application <file>Debug/src/guitar-"
-"tuner</file> dans la boîte de dialogue qui s'affiche. Enfin, cliquez sur "
-"<gui>Exécuter</gui> et amusez-vous !"
+"Tout le code de cet exemple va dans la classe StatusbarExample. Le code ci-"
+"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
+"et la fenêtre qui les contient."
 
-#: C/guitar-tuner.vala.page:254(p)
+#. (itstool) path: section/code
+#: C/statusbar.js.page:68
+#, no-wrap
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"guitar-tuner/guitar-tuner.vala\">reference code</link>."
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 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 ""
-"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"guitar-tuner/guitar-tuner.vala\">programme de "
-"référence</link>."
 
-#: C/guitar-tuner.vala.page:259(p)
+#. (itstool) path: section/p
+#: C/statusbar.js.page:84
+#, fuzzy
+#| msgid ""
+#| "The _buildUI function is where we put all the code to create the "
+#| "application's user interface. The first step is creating a new <link href="
+#| "\"GtkApplicationWindow.js.page\">Gtk.ApplicationWindow</link> to put all "
+#| "our widgets into. The next step is to create a vertically-oriented <link "
+#| "href=\"paned.js.page\">Gtk.Paned</link> interface, to divide the window "
+#| "up into two sections. This way the statusbar looks like those used in "
+#| "other applications, and it stays at the bottom of the window, even if the "
+#| "user resizes it."
 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>"
+"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 ""
-"Pour en savoir plus à propos de la programmation en langage Vala, consultez "
-"le <link href=\"http://live.gnome.org/Vala/Tutorial\";>manuel Vala</link> et "
-"la <link href=\"http://valadoc.org/\";>Documentation de Vala API</link>."
+"Mettons tout le code nécessaire à la création de l'interface utilisateur "
+"dans la fonction _buildUI. Créons d'abord une <link href="
+"\"GtkApplicationWindow.js.page\">Gtk.ApplicationWindow</link> qui va "
+"contenir tous nos éléments graphiques. Ensuite, créons un panneau "
+"d'interface <link href=\"paned.js.page\">Gtk.Paned</link> orienté "
+"verticalement pour diviser la fenêtre en deux parties. De cette façon, la "
+"barre de statut va ressembler à celle d'autres application et restera en bas "
+"de la fenêtre, même si vous la redimensionnez."
 
-#: C/guitar-tuner.vala.page:268(p) C/guitar-tuner.py.page:238(p)
-#: C/guitar-tuner.cpp.page:272(p) C/guitar-tuner.c.page:266(p)
-msgid "Have the program automatically cycle through the notes."
-msgstr ""
-"Faire que le programme joue automatiquement les notes de manière cyclique."
+#. (itstool) path: section/title
+#: C/statusbar.js.page:88
+msgid "Creating the buttons"
+msgstr "Création des boutons"
 
-#: C/guitar-tuner.vala.page:271(p) C/guitar-tuner.py.page:241(p)
-#: C/guitar-tuner.cpp.page:275(p) C/guitar-tuner.c.page:269(p)
-msgid "Make the program play recordings of real guitar strings being plucked."
+#. (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 ""
-"Faire que le programme lise des enregistrements de vraies cordes de guitare "
-"pincées."
 
-#: C/guitar-tuner.vala.page:272(p) C/guitar-tuner.py.page:242(p)
-#: C/guitar-tuner.cpp.page:276(p) C/guitar-tuner.c.page:270(p)
+#. (itstool) path: section/p
+#: C/statusbar.js.page:107
+#, fuzzy
+#| msgid ""
+#| "This code creates the three <link href=\"button.js.page\">Gtk.Buttons</"
+#| "link> we'll use to push a new message to the statusbar, pop the last one "
+#| "off, and clear all existing messages. The \"back\" and \"clear\" buttons "
+#| "are <link href=\"http://developer.gnome.org/gtk/2.24/gtk-Stock-Items.html";
+#| "\">stock buttons,</link> which are automatically translated into any "
+#| "language GNOME supports."
 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."
+"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 ""
-"Pour y parvenir, vous devrez configurer un pipeline GStreamer un peu plus "
-"sophistiqué qui vous permette de charger et lire des fichiers musicaux. Vous "
-"devrez choisir des éléments GStreamer <link href=\"http://gstreamer.";
-"freedesktop.org/documentation/plugins.html\">décodeur et démuxeur</link> "
-"basés sur le format des sons enregistrés — par exemple, les MP3 utilisent "
-"des éléments différents de ceux des fichiers Ogg Vorbis."
+"Ce code génère les trois boutons <link href=\"button.js.page\">Gtk.Buttons</"
+"link> que nous utiliserons pour ajouter un nouveau message à la barre de "
+"statut, pour l'afficher et pour effacer tous les messages existants. Les "
+"boutons « Retour arrière » et « Suppr » sont des <link href=\"http://";
+"developer.gnome.org/gtk/2.24/gtk-Stock-Items.html\">boutons de la "
+"collection</link> qui sont automatiquement traduits dans toutes les langues "
+"prises en charge par GNOME."
 
-#: C/guitar-tuner.vala.page:273(p) C/guitar-tuner.py.page:243(p)
-#: C/guitar-tuner.cpp.page:277(p) C/guitar-tuner.c.page:271(p)
+#. (itstool) path: section/code
+#: C/statusbar.js.page:109
+#, no-wrap
 msgid ""
-"You might need to connect the elements in more complicated ways too. This "
-"could involve using <link href=\"http://gstreamer.freedesktop.org/data/doc/";
-"gstreamer/head/manual/html/chapter-intro-basics.html\">GStreamer concepts</"
-"link> that we didn't cover in this tutorial, such as <link href=\"http://";
-"gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-intro-"
-"basics-pads.html\">pads</link>. You may also find the <cmd>gst-inspect</cmd> "
-"command useful."
+"\n"
+"        // 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 ""
-"Il vous faudra aussi peut-être connecter les éléments de façon plus "
-"complexe. Vous aurez sans doute besoin de consulter les <link href=\"http://";
-"gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-intro-"
-"basics.html\">concepts GStreamer</link> que nous ne couvrons pas dans ce "
-"tutoriel, comme les <link href=\"http://gstreamer.freedesktop.org/data/doc/";
-"gstreamer/head/manual/html/section-intro-basics-pads.html\">pads</link>. La "
-"commande <cmd>gst-inspect</cmd> peut également vous être utile."
-
-#: C/guitar-tuner.vala.page:276(p) C/guitar-tuner.py.page:246(p)
-#: C/guitar-tuner.cpp.page:280(p) C/guitar-tuner.c.page:274(p)
-msgid "Automatically analyze notes that the user plays."
-msgstr "Analyser automatiquement les notes jouées par l'utilisateur."
 
-#: C/guitar-tuner.vala.page:277(p) C/guitar-tuner.py.page:247(p)
-#: C/guitar-tuner.cpp.page:281(p) C/guitar-tuner.c.page:275(p)
+#. (itstool) path: section/p
+#: C/statusbar.js.page:125
 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?"
+"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 ""
-"Vous pourriez branchez un microphone et enregistrez les sons obtenus en "
-"utilisant l'<link href=\"http://gstreamer.freedesktop.org/data/doc/gstreamer/";
-"head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-autoaudiosrc.html"
-"\">entrée source</link>. Peut-être qu'une espèce d'<link href=\"http://";
-"gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/"
-"html/gst-plugins-good-plugins-plugin-spectrum.html\">analyseur de spectre</"
-"link> peut vous aider à trouver les notes jouées ?"
+"Ce code génère la grille <link href=\"grid.js.page\">Gtk.Grid</link> que "
+"nous utiliserons pour organiser les boutons et les mettre dans le bon ordre. "
+"Il génère ensuite un cadre <link href=\"paned.js.page\">Gtk.Frame</link> qui "
+"occupe la majeure partie de la fenêtre et laisse beaucoup de marge autour "
+"des boutons, puis lui ajoute la grille. Il nous reste encore à placer le "
+"cadre dans le panneau interface et l'ajouter à l'ApplicationWindow."
 
-#: C/guitar-tuner.py.page:7(title)
-#, fuzzy
-#| msgid "Guitar Tuner"
-msgid "Guitar Tuner (Python)"
-msgstr "Accordeur de guitare"
+#. (itstool) path: section/title
+#: C/statusbar.js.page:129
+msgid "Creating the statusbar"
+msgstr "Création de la barre de statut"
 
-#: C/guitar-tuner.py.page:10(desc) C/guitar-tuner.c.page:10(desc)
+#. (itstool) path: section/code
+#: C/statusbar.js.page:130
+#, no-wrap
 msgid ""
-"Use Gtk+ and GStreamer to build a simple guitar tuner application for GNOME. "
-"Shows off how to use the interface designer."
+"\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 ""
-"Utilisation de Gtk+ et de GStreamer pour construire une application "
-"d'accordeur de guitare simple pour GNOME. Explications sur la manière "
-"d'utiliser le concepteur d'interface."
 
-#: C/guitar-tuner.py.page:26(p) C/guitar-tuner.cpp.page:24(p)
-#: C/guitar-tuner.c.page:26(p)
+#. (itstool) path: section/p
+#: C/statusbar.js.page:146
 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:"
+"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 ""
-"Dans ce tutoriel, nous allons écrire un programme qui émet des sons servant "
-"à accorder une guitare. Nous allons apprendre comment :"
-
-#: C/guitar-tuner.py.page:28(p) C/guitar-tuner.cpp.page:26(p)
-#: C/guitar-tuner.c.page:28(p)
-msgid "Set up a basic project in Anjuta"
-msgstr "créer un projet basique dans Anjuta,"
+"Ici, nous créons la barre de statuts Gtk.Statusbar et lui ajoutons un "
+"message pour commencer. Puis, nous lui attribuons son propre cadre étroit au "
+"bas de la fenêtre."
 
-#: C/guitar-tuner.py.page:29(p) C/guitar-tuner.cpp.page:27(p)
-#: C/guitar-tuner.c.page:29(p)
-msgid "Create a simple GUI with Anjuta's UI designer"
+#. (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 ""
-"créer une interface graphique simple avec le concepteur d'interface "
-"utilisateur d'Anjuta,"
-
-#: C/guitar-tuner.py.page:30(p) C/guitar-tuner.cpp.page:28(p)
-#: C/guitar-tuner.c.page:30(p)
-msgid "Use GStreamer to play sounds"
-msgstr "utiliser GStreamer pour émettre des sons."
+"Chaque message doit avoir un identifiant de contexte, une valeur entière qui "
+"peut vous être donnée par la fonction get_context_id(). Son seul paramètre "
+"est la valeur de la chaîne que vous utilisez pour décrire cet identifiant "
+"particulier. Normalement, il y a un identifiant différent selon le type de "
+"message, de façon à pouvoir utiliser la fonction remove() pour supprimer un "
+"message spécifique et non pas seulement le dernier au sommet de la pile. "
+"Voici un exemple simple avec un seul type de message, nous n'en utiliserons "
+"donc qu'un seul pour tout."
 
-#: C/guitar-tuner.py.page:35(p)
-msgid "Basic knowledge of the Python programming language"
-msgstr "de connaissances de base du langage de programmation Python."
+#. (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 ""
+"La fonction push(), ajoute un nouveau message au-dessus de la pile. Son "
+"premier paramètre est l'identifiant de contexte, et le second, le message."
 
-#: C/guitar-tuner.py.page:49(p)
+#. (itstool) path: section/code
+#: C/statusbar.js.page:149
+#, no-wrap
 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."
+"\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 ""
-"Sélectionnez <gui>PyGTK (automake)</gui> dans l'onglet <gui>Python</gui>, "
-"cliquez sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
-"suivantes. Utilisez <file>guitar-tuner</file> comme nom de projet et de "
-"répertoire."
 
-#: C/guitar-tuner.py.page:52(p)
+#. (itstool) path: section/p
+#: C/statusbar.js.page:161
 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:"
+"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 ""
-"Cliquez sur <gui>Appliquer</gui> et le projet est créé. Ouvrez <file>src/"
-"guitar_tuner.py</file> depuis l'onglet <gui>Projet</gui> ou l'onglet "
-"<gui>Fichiers</gui>. Vous devez voir apparaître du code commençant par les "
-"lignes :"
+"Ce code se termine par la création de la fenêtre, le placement du cadre dans "
+"le panneau et l'ordre donné à la fenêtre d'afficher tous ses éléments "
+"graphiques enfants."
 
-#: C/guitar-tuner.py.page:61(title)
-msgid "Run the code for the first time"
-msgstr "Exécution du programme pour la première fois"
+#. (itstool) path: section/title
+#: C/statusbar.js.page:165
+msgid "Functions for interacting with the statusbar"
+msgstr "Fonctions interagissant avec la barre de statut"
 
-#: C/guitar-tuner.py.page:62(p)
+#. (itstool) path: section/code
+#: C/statusbar.js.page:166
+#, no-wrap
 msgid ""
-"Most of the code in the file is template code. It loads an (empty) window "
-"from the user interface description file and shows it. More details are "
-"given below; skip this list if you understand the basics:"
+"\n"
+"    _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 ""
-"La plupart du code dans ce fichier est générique. Il charge une fenêtre "
-"(vide) à partir du fichier de description de l'interface et l'affiche. Vous "
-"trouverez plus de détails ci-dessous ; passez cette liste si vous comprenez "
-"les bases :"
 
-# Bruno : Pas de "include the"
-#: C/guitar-tuner.py.page:66(p)
+#. (itstool) path: section/p
+#: C/statusbar.js.page:206
 msgid ""
-"The <code>import</code> lines at the top include the tell Python to load the "
-"user interface and system libraries needed."
+"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 ""
-"Les lignes <code>import</code> tout en haut, indiquent à Python de charger "
-"l'interface utilisateur et les bibliothèques système nécessaires."
+"Voici des fonctions qui montrent comment ajouter un message à la pile, "
+"comment afficher celui qui se trouve au sommet et comment effacer tous les "
+"messages avec un identifiant de contexte particulier. La fonction pop() ne "
+"prend qu'un argument, l'identifiant de contexte du type de message le plus "
+"récent à afficher. La fonction remove_all() se comporte de la même façon, "
+"sauf qu'elle supprime de la pile tous les messages de ce type."
 
-#: C/guitar-tuner.py.page:70(p)
+#. (itstool) path: section/code
+#: C/statusbar.js.page:207
+#, no-wrap
 msgid ""
-"A class is declared that will be the main class for our application. In the "
-"<code>__init__</code> method the main window is loaded from the GtkBuilder "
-"file (<file>src/guitar-tuner.ui</file>) and the signals are connected."
+"\n"
+"// Run the application\n"
+"let app = new StatusbarExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Nous déclarons une classe qui est la classe principale de notre application. "
-"Dans la méthode <code>__init__</code>, la fenêtre principale est chargée "
-"depuis le fichier GtkBuilder (<file>src/guitar-tuner.ui</file>) et les "
-"signaux sont connectés."
 
-#: C/guitar-tuner.py.page:73(p)
+#. (itstool) path: section/p
+#: C/statusbar.js.page:212
 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."
+"Finally, we create a new instance of the finished StatusbarExample class, "
+"and set the application running."
 msgstr ""
-"Connecter des signaux, c'est décider de ce qui doit se passer quand on "
-"appuie sur un bouton ou quand quelque chose d'autre se produit. Ici, la "
-"méthode <code>destroy</code> est appelée (et quitte l'application) quand la "
-"fenêtre est fermée."
+"Enfin, nous créons un nouvel exemple de la classe StatusbarExample terminée "
+"et nous démarrons l'application."
 
-#: C/guitar-tuner.py.page:76(p)
+#. (itstool) path: section/code
+#: C/statusbar.js.page:217
+#, no-wrap
 msgid ""
-"The <code>main</code> function is run by default when you start a Python "
-"application. It just creates an instance of the main class and starts the "
-"main loop to bring up the window."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const StatusbarExample = new Lang.Class({\n"
+"    Name: 'Statusbar Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsstatusbar',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 120,\n"
+"            default_width: 300,\n"
+"            title: \"Button Clicker\"});\n"
+"\n"
+"        // Create a paned interface\n"
+"        this._panes = new Gtk.Paned ({\n"
+"            orientation: Gtk.Orientation.VERTICAL });\n"
+"\n"
+"        // Create the main button\n"
+"        this._clickMe = new Gtk.Button ({\n"
+"            label: \"Click Me!\" });\n"
+"        this._clickMe.connect (\"clicked\", Lang.bind (this, this._clicked));\n"
+"\n"
+"        // Create the back button\n"
+"        this._backButton = new Gtk.Button ({\n"
+"            label: \"gtk-go-back\",\n"
+"            use_stock: true });\n"
+"        this._backButton.connect (\"clicked\", Lang.bind (this, this._back));\n"
+"\n"
+"        // Create the clear button\n"
+"        this._clearButton = new Gtk.Button ({\n"
+"            label: \"gtk-clear\",\n"
+"            use_stock: true });\n"
+"        this._clearButton.connect (\"clicked\", Lang.bind (this, this._clear));\n"
+"\n"
+"        // Put the buttons in a grid\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"        this._grid.attach (this._backButton, 0, 0, 1, 1);\n"
+"        this._grid.attach_next_to (this._clickMe, this._backButton, Gtk.PositionType.RIGHT, 1, 1);\n"
+"        this._grid.attach_next_to (this._clearButton, this._clickMe, Gtk.PositionType.RIGHT, 1, 1);\n"
+"\n"
+"        // Put the grid in a large frame that fills most of the window\n"
+"        this._topFrame = new Gtk.Frame ({\n"
+"            border_width: 20,\n"
+"            height_request: 90,\n"
+"            width_request: 300});\n"
+"        this._topFrame.add (this._grid);\n"
+"\n"
+"        // Create the statusbar\n"
+"        this._statusbar = new Gtk.Statusbar();\n"
+"\n"
+"        // Keep track of the number of times the button has been clicked\n"
+"        this.Clicks = 0;\n"
+"        this.ContextID = this._statusbar.get_context_id (\"Number of Clicks\");\n"
+"\n"
+"        // Give the statusbar an initial message\n"
+"        this._statusbar.push (this.ContextID, \"Number of clicks: \" + this.Clicks);\n"
+"\n"
+"        // Put the statusbar in its own frame at the bottom\n"
+"        this._barFrame = new Gtk.Frame ({\n"
+"            height_request: 30 });\n"
+"        this._barFrame.add (this._statusbar);\n"
+"\n"
+"        // Assemble the frames into the paned interface\n"
+"        this._panes.pack1 (this._topFrame, true, false);\n"
+"        this._panes.pack2 (this._barFrame, false, false);\n"
+"\n"
+"        // Put the panes into the window\n"
+"        this._window.add (this._panes);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _clicked: function() {\n"
+"\n"
+"        // Increment the number of clicks by 1\n"
+"        this.Clicks++;\n"
+"\n"
+"        // Update the statusbar with the new number of clicks\n"
+"        this._statusbar.push (this.ContextID, \"Number of clicks: \" + this.Clicks);\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _back: function () {\n"
+"\n"
+"        // If there have been any clicks, decrement by 1 and remove last statusbar update\n"
+"        if (this.Clicks &gt; 0 ) {\n"
+"            this.Clicks--;\n"
+"            this._statusbar.pop (this.ContextID);\n"
+"        };\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _clear: function () {\n"
+"\n"
+"        // Reset the number of clicks\n"
+"        this.Clicks = 0;\n"
+"\n"
+"        // Wipe out all the messages pushed to the statusbar\n"
+"        this._statusbar.remove_all (this.ContextID);\n"
+"\n"
+"        // Reset the statusbar's message\n"
+"        this._statusbar.push (this.ContextID, \"Number of clicks: \" + this.Clicks);\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new StatusbarExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"La fonction <code>main</code> est exécutée par défaut quand vous lancez une "
-"application Python. Elle crée juste une instance de la classe principale et "
-"démarre la boucle principale pour afficher la fenêtre."
 
-#: C/guitar-tuner.py.page:81(p)
+#. (itstool) path: item/p
+#: C/statusbar.js.page:226
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"This code is ready to be used, so you can run it by clicking "
-"<guiseq><gui>Run</gui><gui>Execute</gui></guiseq>."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Frame.html";
+"\">Gtk.Frame</link>"
 msgstr ""
-"Le programme est prêt à être utilisé et vous pouvez l'exécuter avec "
-"<guiseq><gui>Exécuter</gui><gui>Exécuter</gui></guiseq>."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/guitar-tuner.py.page:86(p)
+#. (itstool) path: item/p
+#: C/statusbar.js.page:227
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Paned.html";
+"\">Gtk.Paned</link>"
 msgstr ""
-"Une description de l'interface utilisateur est contenue dans le fichier "
-"GtkBuilder. Pour la modifier, ouvrez le fichier <file>src/guitar_tuner.ui</"
-"file>. Ceci vous bascule vers le concepteur d'interface. La fenêtre de "
-"conception se trouve au centre ; les éléments graphiques et leurs propriétés "
-"sont sur la droite et la palette des composants graphiques disponibles est "
-"sur la gauche."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/guitar-tuner.py.page:88(p) C/guitar-tuner.cpp.page:86(p)
-#: C/guitar-tuner.c.page:92(p)
+#. (itstool) path: item/p
+#: C/statusbar.js.page:228
+#, fuzzy
+#| 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."
 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."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Statusbar.html";
+"\">Gtk.Statusbar</link>"
 msgstr ""
-"La disposition de toute interface utilisateur dans GTK+ est organisée à "
-"l'aide de boîtes et de tableaux. Dans cet exemple, prenons une "
-"<gui>GtkButtonBox</gui> verticale pour y mettre six <gui>GtkButtons</gui>, "
-"un pour chacune des six cordes de la guitare."
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
 
-#: C/guitar-tuner.py.page:94(p) C/guitar-tuner.cpp.page:92(p)
-#: C/guitar-tuner.c.page:98(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/statusbar.png'; md5=eb1aca55315d6cda57b12a5f36058ba8"
+msgctxt "_"
 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 ""
-"Choisissez une <gui>GtkButtonBox</gui> (Boîte) dans la section "
-"<gui>Conteneurs</gui> de la <gui>Palette</gui> à droite et mettez-la dans la "
-"fenêtre. Dans l'onglet <gui>Propriétés</gui>, définissez le nombre "
-"d'éléments à 6 (pour les six cordes) et l'orientation à verticale."
+"external ref='media/statusbar.png' md5='eb1aca55315d6cda57b12a5f36058ba8'"
+msgstr "@@image: 'media/statusbar.png'; md5=eb1aca55315d6cda57b12a5f36058ba8"
+
+#. (itstool) path: info/title
+#: C/statusbar.py.page:8
+#, fuzzy
+#| msgid "Statusbar"
+msgctxt "text"
+msgid "Statusbar (Python)"
+msgstr "Barre de statut"
 
-#: C/guitar-tuner.py.page:98(p) C/guitar-tuner.cpp.page:96(p)
-#: C/guitar-tuner.c.page:102(p)
+#. (itstool) path: page/p
+#: C/statusbar.py.page:25
 msgid ""
-"Now, choose a <gui>GtkButton</gui> from the palette and put it into the "
-"first part of the box."
+"This statusbar tells you if you click the button or if you press any key "
+"(and which key)."
 msgstr ""
-"Ensuite, choisissez un <gui>GtkButton</gui> (Bouton) dans la palette et "
-"mettez-le dans la première partie de la boîte."
+"Cette barre de statut vous informe si vous cliquez sur le bouton ou si vous "
+"appuyez sur n'importe quelle touche (et sur quelle touche)."
 
-#: C/guitar-tuner.py.page:101(p) C/guitar-tuner.c.page:105(p)
+#. (itstool) path: section/code
+#: C/statusbar.py.page:32
+#, no-wrap
 msgid ""
-"While the button is still selected, change the <gui>Label</gui> property in "
-"the <gui>Widgets</gui> tab to <gui>E</gui>. This will be the low E string."
+"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 ""
-"Pendant que le bouton est encore sélectionné, modifiez la propriété "
-"<gui>Étiquette</gui> dans l'onglet <gui>Composants graphiques</gui> à "
-"<gui>E</gui>. C'est la corde E du bas."
 
-#: C/guitar-tuner.py.page:104(p) C/guitar-tuner.c.page:108(p)
+#. (itstool) path: note/p
+#: C/statusbar.py.page:34
 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>."
+"<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 ""
-"Passez à l'onglet <gui>Signaux</gui> (dans l'onglet <gui>Composants "
-"graphiques</gui>) et recherchez le signal <code>clicked</code> du bouton. "
-"Vous pouvez l'utiliser pour connecter un gestionnaire de signal qui sera "
-"appelé quand le bouton est cliqué. Pour cela, cliquez sur le signal et "
-"saisissez <code>on_button_clicked</code> dans la colonne <gui>Gestionnaire</"
-"gui> et appuyez sur <key>Entrée</key>."
+"La méthode <code>Gdk.keyval_name(event.keyval)</code> convertit la valeur "
+"des touches <code>event.keyval</code> en noms symboliques. Les noms et les "
+"valeurs correspondantes des touches se trouvent <link href=\"http://git.";
+"gnome.org/browse/gtk+/tree/gdk/gdkkeysyms.h\">ici</link>. À titre d'exemple, "
+"<code>GDK_KEY_BackSpace</code> devient la chaîne <code>« Retour arrière »</"
+"code>."
 
-#: C/guitar-tuner.py.page:116(title)
-msgid "Write the signal handler"
-msgstr "Écriture du gestionnaire de signal"
+#. (itstool) path: section/title
+#: C/statusbar.py.page:40
+msgid "Useful methods for a Statusbar widget"
+msgstr "Méthodes utiles pour un élément graphique BarreDeStatut"
 
-#: C/guitar-tuner.py.page:117(p) C/guitar-tuner.c.page:121(p)
+#. (itstool) path: section/p
+#: C/statusbar.py.page:41
 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."
+"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 ""
-"Dans le concepteur d'interface utilisateur, il a été fait en sorte que tous "
-"les boutons appellent la même fonction, <gui>on_button_clicked</gui> quand "
-"ils sont cliqués. Nous devons ajouter cette fonction dans notre fichier "
-"source."
 
-#: C/guitar-tuner.py.page:118(p)
+#. (itstool) path: item/p
+#: C/statusbar.py.page:43
 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:"
+"<code>pop(context_id)</code> removes the first message in the statusbar "
+"stack with the given <code>context_id</code>."
 msgstr ""
-"Pour cela, ouvrez <file>guitar_tuner.py</file> pendant que le fichier "
-"interface utilisateur est encore ouvert. Allez au même onglet <gui>Signaux</"
-"gui> que vous aviez déjà utilisé pour nommer le signal. Prenez la ligne où "
-"vous aviez défini le signal <gui>clicked</gui> et faites-la glisser dans la "
-"classe du fichier source. Le code suivant s'ajoute à votre fichier source :"
+"La fonction <code>pop(context_id)</code> efface le premier message de la "
+"pile de la barre de statut avec le <code>context_id</code> donné."
 
-#: C/guitar-tuner.py.page:124(p)
+#. (itstool) path: item/p
+#: C/statusbar.py.page:44
 msgid ""
-"This signal handler has two arguments: the usual Python class pointer, and "
-"the <code>Gtk.Button</code> that called the function."
+"<code>remove_all(context_id)</code> removes all the messages in the "
+"statusbar stack with the given <code>context_id</code>."
 msgstr ""
-"Ce récepteur de signal possède deux arguments : le pointeur classique de "
-"Python et <code>Gtk.Button</code> qui appelle la fonction."
+"La méhode <code>remove_all(context_id)</code> efface tous les messages de la "
+"pile de la barre de statut ayant l'identifiant <code>context_id</code> donné."
 
-#: C/guitar-tuner.py.page:125(p) C/guitar-tuner.c.page:131(p)
+#. (itstool) path: item/p
+#: C/statusbar.py.page:45
 msgid ""
-"For now, we'll leave the signal handler empty while we work on writing the "
-"code to produce sounds."
+"<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 ""
-"Laissons le gestionnaire de signal vide pour l'instant et écrivons le code "
-"qui produit les sons."
+"La méthode <code>remove(context_id, message_id)</code> efface le message de "
+"la pile de la barre de statut avec le <code>context_id</code> donné. Le "
+"<code>message_id</code> est renvoyé par <code>push(context_id, lemessage)</"
+"code> quand il pousse le message dans la barre des statut."
 
-#: C/guitar-tuner.py.page:130(p) C/guitar-tuner.js.page:39(p)
-#: C/guitar-tuner.c.page:136(p)
+#. (itstool) path: item/p
+#: C/statusbar.py.page:53
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkStatusbar.html";
+"\">GtkStatusbar</link>"
 msgstr ""
-"GStreamer est l'architecture multimédia de GNOME — vous pouvez vous en "
-"servir pour des jeux, des enregistrements, pour traiter des flux vidéo, "
-"audio, de webcam entre autres. Ici, nous allons nous en servir pour émettre "
-"des tonalités à une seule fréquence."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/guitar-tuner.py.page:131(p) C/guitar-tuner.js.page:40(p)
-#: C/guitar-tuner.cpp.page:115(p) C/guitar-tuner.c.page:137(p)
+#. (itstool) path: item/p
+#: C/statusbar.py.page:54
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gdk/stable/gdk-Keyboard-Handling.html";
+"\">Gdk - Key Values</link>"
 msgstr ""
-"Le concept de GStreamer est le suivant : il y a création d'un <em>pipeline</"
-"em> contenant plusieurs éléments de traitement en provenance d'une "
-"<em>source</em> à destination d'un <em>collecteur</em> (sortie). La source "
-"peut être un fichier image, une vidéo ou un fichier musical, par exemple, et "
-"la sortie un élément graphique ou une carte son."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/guitar-tuner.py.page:140(p) C/guitar-tuner.cpp.page:129(p)
-#: C/guitar-tuner.c.page:146(p)
+#. (itstool) path: info/title
+#: C/statusbar.vala.page:8
+#, fuzzy
+#| msgid "Statusbar (Vala)"
+msgctxt "text"
+msgid "Statusbar (Vala)"
+msgstr "Barre de statut (Vala)"
+
+#. (itstool) path: page/p
+#: C/statusbar.vala.page:26
+msgid "This statusbar tells you what's going on."
+msgstr "Cette barre de statut vous indique ce qui se passe."
+
+#. (itstool) path: page/code
+#: C/statusbar.vala.page:28
+#, no-wrap
 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>."
+"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 ""
-"Dans ce petit exemple, nous utilisons une source génératrice de son de "
-"fréquence pure appelée <code>audiotestsrc</code> et envoyons sa sortie au "
-"périphérique son par défaut du système, <code>autoaudiosink</code>. Il nous "
-"faut seulement configurer la fréquence du générateur accessible depuis la "
-"propriété <code>freq</code> de <code>audiotestsrc</code>."
 
-#: C/guitar-tuner.py.page:142(p)
+#. (itstool) path: item/p
+#: C/statusbar.vala.page:33
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Change the import line in <file>guitar_tuner.py</file>, just at the "
-"beginning to :"
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Statusbar.html\";>Gtk."
+"Statusbar</link>"
 msgstr ""
-"Modifiez la ligne import au début du fichier <file>guitar_tuner.py</file> "
-"en :"
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/guitar-tuner.py.page:144(p)
-msgid ""
-"The <code>Gst</code> includes the GStreamer library. You also need to "
-"initialise GStreamer properly which is done in the <code>main()</code> "
-"method with this call added above the <code>app = GUI()</code> line:"
+#. (itstool) path: info/title
+#: C/strings.py.page:9
+#, fuzzy
+#| msgid "Strings (Python)"
+msgctxt "text"
+msgid "Strings (Python)"
+msgstr "Chaînes de caractères (Python)"
+
+#. (itstool) path: info/desc
+#: C/strings.py.page:14
+msgid "An explanation of how to deal with strings in Python and GTK+."
 msgstr ""
-"<code>Gst</code> contient la bibliothèque de GStreamer. Il vous faut aussi "
-"initialiser correctement GStreamer ce qui est réalisé dans la méthode "
-"<code>main()</code> par cet appel à ajouter au-dessus de la ligne <code>app "
-"= GUI()</code> :"
+"Une explication sur l'utilisation des chaînes de caractères dans Python et "
+"GTK+."
 
-#: C/guitar-tuner.py.page:148(p)
-msgid ""
-"Then, copy the following function into the class in <file>guitar_tuner.py</"
-"file> somewhere:"
+#. (itstool) path: page/title
+#: C/strings.py.page:27
+msgid "Strings"
+msgstr "Chaînes de caractères"
+
+#. (itstool) path: note/p
+#: C/strings.py.page:31
+msgid "GNOME strongly encourages the use of Python 3 for writing applications!"
 msgstr ""
-"Copiez ensuite la fonction suivante quelque part dans la classe de "
-"<file>guitar_tuner.py</file> :"
 
-#: C/guitar-tuner.py.page:164(p)
+#. (itstool) path: section/title
+#: C/strings.py.page:34
+msgid "Strings in Python 2"
+msgstr "Les chaînes de caractères dans Python 2"
+
+#. (itstool) path: section/p
+#: C/strings.py.page:36
 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)."
+"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 ""
-"Les trois premières lignes créent les éléments GStreamer source et sink "
-"(collecteur) et un élément pipeline (qui sera utilisé comme conteneur pour "
-"les deux autres éléments). Le pipeline est nommé « note » ; la source est "
-"nommée « source » et est définie comme étant le connecteur "
-"<code>audiotestsrc</code> et le collecteur est nommé « output » et est "
-"défini comme étant le connecteur <code>autoaudiosink</code> (qui est la "
-"sortie par défaut de la carte son)."
+"Python 2 est livré avec deux types différents d'objets qui peuvent être "
+"utilisés pour représenter des chaînes : <code>str</code> et <code>unicode</"
+"code>. Les instances du type <code>unicode</code> sont utilisées pour "
+"exprimer des chaînes Unicode, alors que les exemples du type <code>str</"
+"code> sont des représentations d'octets (la chaîne codée). En interne, "
+"Python représente les chaînes Unicode par des entiers de 16 ou de 32 bits, "
+"en fonction du type de compilation de l'interpréteur Python."
+
+#. (itstool) path: section/code
+#: C/strings.py.page:38
+#, fuzzy, no-wrap
+#| msgid ""
+#| "<![CDATA[\n"
+#| ">>> unicode_string = u\"Fu\\u00dfb\\u00e4lle\"\n"
+#| ">>> print unicode_string]]>\n"
+#| "Fußbälle\n"
+msgid ""
+"\n"
+"&gt;&gt;&gt; unicode_string = u\"Fu\\u00dfb\\u00e4lle\"\n"
+"&gt;&gt;&gt; print unicode_string\n"
+"Fußbälle\n"
+msgstr ""
+"<![CDATA[\n"
+">>> unicode_string = u\"Fu\\u00dfb\\u00e4lle\"\n"
+">>> print unicode_string]]>\n"
+"Fußbälle\n"
 
-#: C/guitar-tuner.py.page:167(p)
+#. (itstool) path: section/p
+#: C/strings.py.page:44
 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."
+"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 ""
-"L'appel à <code>source.set_property</code> définit la propriété <code>freq</"
-"code> de l'élément source à <code>frequency</code> qui est transmis comme "
-"argument de la fonction <code>play_sound</code>. Il s'agit simplement de la "
-"fréquence de la note de musique en Hertz ; certaines fréquences utiles "
-"seront définies plus tard."
+"Les chaînes Unicode peuvent être converties en 8 bits avec <code>unicode."
+"encode()</code>. Les chaînes Python en 8 bits contiennent une méthode "
+"<code>str.decode()</code> qui interprète la chaîne avec le codage qui lui "
+"est attribué (c'est donc l'inverse de <code>unicode.encode()</code>) :"
 
-#: C/guitar-tuner.py.page:170(p)
+#. (itstool) path: section/code
+#: C/strings.py.page:46
+#, no-wrap
 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."
+"\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 ""
-"Les deux lignes suivantes appellent <code>pipeline.add</code> qui place la "
-"source et le collecteur dans le pipeline. Le pipeline peut contenir beaucoup "
-"d'autres éléments GStreamer. En général, vous pouvez ajouter autant "
-"d'éléments que vous voulez au pipeline en faisant autant d'appels "
-"supplémentaires à <code>add</code>."
 
-#: C/guitar-tuner.py.page:173(p)
+#. (itstool) path: section/p
+#: C/strings.py.page:57
 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>)."
+"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 ""
-"Ensuite, <code>pipeline.set_state</code> est utilisé pour démarrer la "
-"lecture en basculant l'état du pipeline à « playing » (lecture) (<code>Gst."
-"State.PLAYING</code>)."
+"Malheureusement, Python 2.x vous permet de mélanger les types <code>unicode</"
+"code> et <code>str</code> s'il arrivait que la chaîne de 8 bits ne contienne "
+"que des octets de 7 bits (ASCII), mais retourne l'erreur "
+"<sys>UnicodeDecodeError</sys> si elle contient des valeurs qui ne sont pas "
+"ASCII."
 
-#: C/guitar-tuner.py.page:180(title) C/guitar-tuner.c.page:195(title)
-msgid "Stopping playback"
-msgstr "Arrêt de la lecture"
+#. (itstool) path: section/title
+#: C/strings.py.page:62
+msgid "Strings in Python 3"
+msgstr "Les chaînes dans Python 3"
 
-#: C/guitar-tuner.py.page:181(p)
+#. (itstool) path: section/p
+#: C/strings.py.page:64
 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>."
+"Since Python 3.0, all strings are stored as Unicode in an instance of the "
+"<code>str</code> type. Encoded strings on the other hand are represented as "
+"binary data in the form of instances of the bytes type. Conceptionally, "
+"<code>str</code> refers to text, whereas bytes refers to data. Use "
+"<code>encode()</code> to go from <code>str</code> to <code>bytes</code>, and "
+"<code>decode()</code> to go from <code>bytes</code> to <code>str</code>."
 msgstr ""
-"Comme nous ne voulons pas jouer indéfiniment une note ennuyeuse, la dernière "
-"chose que fait <code>play_sound</code> est d'appeler <code>GObject."
-"timeout_add</code> qui définit un délai avant la coupure du son ; cela "
-"attend <code>LENGTH</code> millisecondes avant d'appeler la fonction "
-"<code>pipeline_stop</code> et continuera à l'appeler jusqu'à ce que "
-"<code>pipeline_stop</code> renvoie la valeur <code>False</code>."
+"Depuis la version 3.0 de Python, toutes les chaînes sont stockées en Unicode "
+"dans une représentation du type <code>str</code>. D'autre part, les chaînes "
+"codées sont stockées en données binaires sous forme d'octets. "
+"Conceptuellement, le type <code>str</code> représente du texte, alors que "
+"les octets représentent des données. Utilisez la méthode <code>encode()</"
+"code> pour passer de <code>str</code> à <code>bytes</code> et "
+"<code>decode()</code> pour passer de <code>bytes</code> à <code>str</code>."
 
-#: C/guitar-tuner.py.page:182(p)
+#. (itstool) path: section/p
+#: C/strings.py.page:66
 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:"
+"In addition, it is no longer possible to mix Unicode strings with encoded "
+"strings, because it will result in a <code>TypeError</code>:"
 msgstr ""
-"Écrivons maintenant la fonction <code>pipeline_stop</code> qui est appelée "
-"par <code>GObject.timeout_add</code>. Insérez le code suivant <em>au-dessus</"
-"em> de la fonction <code>play_sound</code> :"
+"En plus, il n'est plus possible de mélanger des chaînes Unicode avec des "
+"chaînes codées, car cela retournerait une erreur <code>TypeError</code> :"
 
-#: C/guitar-tuner.py.page:188(p)
+#. (itstool) path: section/code
+#: C/strings.py.page:68
+#, no-wrap
 msgid ""
-"You need to define the <code>LENGTH</code> constant inside the class, so add "
-"this code at the beginning of the main class:"
+"\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 "Unicode dans GTK+"
+
+#. (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 ""
-"Vous devez définir la constante <code>LENGTH</code> dans la classe, donc "
-"ajoutez ce code au début de la classe principale :"
+"GTK+ utilise des chaînes au format UTF-8 pour tout ce qui est texte. Cela "
+"signifie que, si vous appelez une méthode qui renvoie une chaîne, vous "
+"obtenez toujours une représentation du type <code>str</code>. Cela "
+"s'applique également aux méthodes qui considèrent une ou plusieurs chaînes "
+"comme paramètres, elles doivent aussi être codées en UTF-8. Cependant, pour "
+"plus de souplesse, PyGObject convertit automatiquement n'importe quelle "
+"représentation Unicode au format str si vous lui donnez comme argument :"
 
-#: C/guitar-tuner.py.page:193(p)
+#. (itstool) path: section/code
+#: C/strings.py.page:87
+#, no-wrap
 msgid ""
-"The call to <code>pipeline.set_state</code> pauses the playback of the "
-"pipeline."
+"\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 ""
-"L'appel à <code>pipeline.set_state</code> met en pause la lecture du "
-"pipeline."
 
-#: C/guitar-tuner.py.page:197(title) C/guitar-tuner.c.page:213(title)
-msgid "Define the tones"
-msgstr "Définition des notes"
+#. (itstool) path: section/p
+#: C/strings.py.page:96
+msgid "Furthermore:"
+msgstr "Furthermore:"
 
-#: C/guitar-tuner.py.page:198(p)
+#. (itstool) path: section/code
+#: C/strings.py.page:98
+#, no-wrap
 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:"
+"\n"
+"&gt;&gt;&gt; txt == unicode_string"
 msgstr ""
-"Nous voulons jouer la note adéquate quand l'utilisateur clique sur un "
-"bouton. Avant tout, nous devons connaître la fréquence de chacune des six "
-"cordes de la guitare qui sont définies (au début de la classe principale) "
-"dans un dictionnaire de façon à pouvoir facilement les associer aux noms des "
-"cordes :"
 
-#: C/guitar-tuner.py.page:211(p) C/guitar-tuner.c.page:223(p)
+#. (itstool) path: section/p
+#: C/strings.py.page:101
 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:"
+"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 ""
-"Maintenant, nous allons étoffer le gestionnaire de signal "
-"<code>on_button_clicked</code> défini auparavant. Nous aurions pu connecter "
-"chaque bouton à un gestionnaire différent, mais cela aurait dupliqué "
-"beaucoup de code. Au lieu de ça, nous allons plutôt utiliser l'étiquette du "
-"bouton pour déterminer le bouton cliqué :"
+"devrait renvoyer <code>False</code>, avec l'avertissement <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> renvoie toujours une représentation <code>str</code> ; en "
+"conséquence, <code>txt</code> et <code>unicode_string</code> sont inégaux)."
 
-#: C/guitar-tuner.py.page:219(p)
+#. (itstool) path: section/p
+#: C/strings.py.page:103
 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>."
+"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 ""
-"Le bouton qui a été cliqué est transmis comme argument (<code>button</code>) "
-"à <code>on_button_clicked</code>. On peut obtenir l'étiquette de ce bouton "
-"en utilisant <code>button.get_child</code> puis en extrayant le texte de "
-"cette étiquette avec <code>label.get_label</code>."
+"Cela est particulièrement important si vous voulez internationnaliser votre "
+"programme avec <link href=\"http://docs.python.org/library/gettext.html";
+"\"><code>gettext</code></link>. Vous devez vous assurer que <code>gettext</"
+"code> va renvoyer des chaînes codées en UTF-8 pour toutes les langues."
 
-#: C/guitar-tuner.py.page:220(p)
+#. (itstool) path: section/p
+#: C/strings.py.page:105
 msgid ""
-"The label text is then used as a key for the dictionary and "
-"<code>play_sound</code> is called with the frequency appropriate for that "
-"note. This plays the tone; we have a working guitar tuner!"
+"In 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 ""
-"Le texte de cette étiquette est alors utilisé comme clé du dictionnaire et "
-"la fonction <code>play_sound</code> est appelée avec la fréquence appropriée "
-"à cette note. Cela joue la note ; nous avons un accordeur de guitare "
-"opérationnel !"
+"D'une manière générale, nous vous recommandons de ne pas du tout utiliser "
+"d'objets <code>unicode</code> dans les applications GTK+, mais seulement des "
+"objets <code>str</code> codés en UTF-8, car GTK+ n'intègre pas tous les "
+"objets <code>unicode</code>."
 
-#: C/guitar-tuner.py.page:225(p)
+#. (itstool) path: section/p
+#: C/strings.py.page:107
+#, fuzzy
+#| msgid ""
+#| "With Python 3.x things are much more consistent, because PyGObject will "
+#| "automatically encode/decode to/from UTF-8 if you pass a string to a "
+#| "method or a method returns a string. Strings, or text, will always be "
+#| "represented as instances of <code>str</code> only:"
 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!"
+"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 ""
-"Tout le programme nécessaire doit maintenant être fonctionnel. Cliquez sur "
-"<guiseq><gui>Exécuter</gui><gui>Exécuter</gui></guiseq> pour lancer "
-"l'application. Amusez-vous bien !"
+"Avec Python 3.x, les choses sont beaucoup plus logiques, car PyGObject code "
+"ou décode automatiquement en UTF-8 si vous assignez une chaîne à une méthode "
+"ou inversement. Les chaînes, ou le texte, sont toujours représentés en "
+"<code>str</code> seulement :"
 
-#: C/guitar-tuner.py.page:230(p)
+#. (itstool) path: section/p
+#: C/strings.py.page:114
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/";
+#| "basics.html\">Basics - Properties</link> in Python Gtk+ 3 Tutorial"
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"guitar-tuner/guitar-tuner.py\">reference code</link>."
+"<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 ""
-"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"guitar-tuner/guitar-tuner.py\">programme de "
-"référence</link>."
+"<link href=\"http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.";
+"html\">Propriétés de base</link> dans le tutoriel Python Gtk+ 3"
 
-#: C/guitar-tuner.js.page:6(title)
+#. (itstool) path: 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
 #, fuzzy
-#| msgid "Guitar Tuner"
-msgid "Guitar Tuner (JavaScript)"
-msgstr "Accordeur de guitare"
+#| msgid ""
+#| "@@image: 'media/switch_off.png'; md5=211a2962708800697ad5373dcc86ad6d"
+msgctxt "_"
+msgid ""
+"external ref='media/switch_off.png' md5='211a2962708800697ad5373dcc86ad6d'"
+msgstr "@@image: 'media/switch_off.png'; md5=211a2962708800697ad5373dcc86ad6d"
+
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/switch_on.png'; md5=95e8769f758c2d95ace0fa8ecf30b29d"
+msgctxt "_"
+msgid ""
+"external ref='media/switch_on.png' md5='95e8769f758c2d95ace0fa8ecf30b29d'"
+msgstr "@@image: 'media/switch_on.png'; md5=95e8769f758c2d95ace0fa8ecf30b29d"
+
+#. (itstool) path: info/title
+#: C/switch.c.page:8
+#, fuzzy
+#| msgid "Switch (C)"
+msgctxt "text"
+msgid "Switch (C)"
+msgstr "Switch (C)"
+
+#. (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 "Un bouton de basculement du style « interrupteur électrique »"
+
+#. (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 "Switch (interrupteur)"
+
+#. (itstool) path: page/p
+#: C/switch.c.page:25
+msgid "This switch toggles the title of the window."
+msgstr "Cet interrupteur bascule le titre de la fenêtre."
 
-#: C/guitar-tuner.js.page:16(desc)
+#. (itstool) path: page/code
+#: C/switch.c.page:27
+#, no-wrap
 msgid ""
-"Use Gtk+ and GStreamer to build a simple guitar tuner application for GNOME."
+"\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 ""
-"Utilisation de Gtk+ et de GStreamer pour construire une application "
-"d'accordeur de guitare simple pour GNOME."
 
-#: C/guitar-tuner.js.page:22(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/switchanimals.png'; md5=513ae15dcf68e15eef30b76420b8c714"
+msgctxt "_"
 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."
+"external ref='media/switchanimals.png' md5='513ae15dcf68e15eef30b76420b8c714'"
 msgstr ""
-"Dans ce tutoriel, nous allons construire une petite application, Accordeur "
-"de guitare, utilisant JavaScript, GTK+ et GStreamer. Pour écrire et lancer "
-"tous les exemples de code vous-même, vous avez besoin d'un éditeur pour "
-"écrire le code, de Terminal et d'un ordinateur sur lequel GNOME 3 ou "
-"supérieur est installé. Dans ce guide, nous illustrerons les éléments "
-"suivants :"
+"@@image: 'media/switchanimals.png'; md5=513ae15dcf68e15eef30b76420b8c714"
 
-#: C/guitar-tuner.js.page:28(link) C/guitar-tuner.js.page:77(title)
-msgid "Buttons for the tunes"
-msgstr "Les boutons pour les sons"
+#. (itstool) path: info/title
+#: C/switch.js.page:8
+#, fuzzy
+#| msgid "Switch (JavaScript)"
+msgctxt "text"
+msgid "Switch (JavaScript)"
+msgstr "Switch : interrupteur (JavaScript)"
 
-#: C/guitar-tuner.js.page:29(link) C/guitar-tuner.js.page:102(title)
-msgid "Making the sounds with GStreamer"
-msgstr "Création des sons avec GStreamer"
+#. (itstool) path: info/desc
+#: C/switch.js.page:18
+msgid "A sliding switch that can be flipped on and off"
+msgstr "Un interrupteur à glissière qui peut être allumé ou éteint"
 
-#: C/guitar-tuner.js.page:30(link) C/guitar-tuner.js.page:126(title)
-msgid "Connecting buttons to playSound"
-msgstr "Connexion des boutons à playSound"
+#. (itstool) path: page/p
+#: C/switch.js.page:23
+#, fuzzy
+#| 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>"
+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 ""
+"Un interrupteur possède deux positions : allumé ou éteint. Cet exemple "
+"montre comment utiliser plusieurs interrupteurs ensemble pour contrôler "
+"quelle <link xref=\"image.js\">Image</</link> s'affiche dans la fenêtre. Les "
+"images utilisées dans cet exemple <link href=\"https://live.gnome.org/";
+"TarynFox?action=AttachFile&amp;do=get&amp;target=Animal+Photos.zip\">peuvent "
+"être téléchargées ici.</link>"
 
-#: C/guitar-tuner.js.page:31(link) C/guitar-tuner.js.page:149(title)
-msgid "The whole program"
-msgstr "Le programme complet"
+#. (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 ""
+"Si les fichiers <file>redfox.png</file>, <file>muteswan.png</file>, "
+"<file>fruitbat.png</file> et <file>gentoopenguin.png</file> ne se trouvent "
+"pas dans le même dossier, la fenêtre affichera une icône « image brisée ». "
+"Vous pouvez modifier le code et les images comme bon vous semble, mais "
+"sachez que les photos sous licence Creative Commons utilisées dans cet "
+"exemple proviennent des sources suivantes et ont été rognées à 640x435 :"
 
-#: C/guitar-tuner.js.page:32(link) C/guitar-tuner.js.page:229(title)
-msgid "Running the application form Terminal"
-msgstr "Exécution de l'application à partir de Terminal"
+#. (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 ""
+"<link href=\"http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.jpg\";>Red fox "
+"photo</link> (renard rouge) par Rob Lee, licence <link href=\"http://";
+"creativecommons.org/licenses/by/2.0/deed.en\">CC-By</link>"
 
-#: C/guitar-tuner.js.page:50(p)
+#. (itstool) path: item/p
+#: C/switch.js.page:27
 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"
+"<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 ""
-"Cette ligne indique comment lancer le script. Elle doit être la première "
-"ligne de code et le script doit être exécutable. Pour donner les bonnes "
-"permissions, allez dans Terminal et lancer dans le dossier correct la "
-"commande : chmod +x nomduscript. Vous pouvez aussi utiliser le gestionnaire "
-"de fichiers graphique. Déplacez-vous dans le bon dossier où se trouve votre "
-"code, faites un clic-droit sur le fichier, sélectionnez Propriétés, cliquez "
-"sur l'onglet Permissions et cochez la case pour permettre l'exécution du "
-"fichier comme un programme."
+"<link href=\"http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-";
+"Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.jpg\">Gentoo penguinphoto</"
+"link> (pingouin) par Ken Funakoshi, licence <link href=\"http://";
+"creativecommons.org/licenses/by-sa/2.0/deed.en\">CC-By-SA</link>"
 
-#: C/guitar-tuner.js.page:60(p)
+#. (itstool) path: item/p
+#: C/switch.js.page:28
 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."
+"<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 ""
-"Afin que le programme fonctionne, vous devez importer quelques "
-"bibliothèques d'introspection GObject à utiliser. Pour faire une interface "
-"graphique, nous avons besoin de Gtk et pour que Gstreamer fonctionne, nous "
-"avons besoin de Gst. Elles sont importées au début afin de pouvoir les "
-"utiliser partout ensuite. Nous importons également au début une boucle "
-"principale Mainloop pour prendre en charge le délai à utiliser avec les sons "
-"d'accordage."
+"<link href=\"http://www.flickr.com/photos/shekgraham/127431519/in/";
+"photostream/\">Fruit bat photo</link> (chauve-souris) par Shek Graham, "
+"licence <link href=\"http://creativecommons.org/licenses/by/2.0/deed.en\";>CC-"
+"By</link>"
 
-#: C/guitar-tuner.js.page:74(p)
+#. (itstool) path: item/p
+#: C/switch.js.page:29
 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()"
+"<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 ""
-"L'importation de Gtk et Gst n'est pas suffisante, nous devons les "
-"initialiser afin qu'elles fonctionnent. Lorsque c'est fait, nous devons "
-"créer la fenêtre de l'application. Plus tard, nous allons placer tous les "
-"boutons pour faire les sons dans cette fenêtre. Afin que la fenêtre "
-"s'affiche, nous devons lui dire de s'afficher et nous avons besoin de lancer "
-"le code avec Gtk.main()."
+"<link href=\"http://commons.wikimedia.org/wiki/File:Mute_Swan-";
+"Mindaugas_Urbonas.jpg\">Mute swan photo</link> (cygne) par Mindaugas "
+"Urbonas, licence <link href=\"http://creativecommons.org/licenses/by-sa/2.5/";
+"deed.en\">CC-By-SA</link>"
 
-#: C/guitar-tuner.js.page:98(p)
+#. (itstool) path: note/p
+#: C/switch.js.page:31
+#, fuzzy
+#| 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>"
 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."
+"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 ""
-"Puisque Gtk.Window ne peut contenir qu'un seul élément graphique, nous "
-"devons créer quelque chose en dessous pour pouvoir ajouter tous les boutons "
-"nécessaires à l'intérieur. Dans cet exemple, nous utilisons Buttonbox. Après "
-"la création de Buttonbox, nous créons les boutons avec les étiquettes "
-"nécessaires. Après l'obtention des boutons, nous devons les ajouter au "
-"Buttonbox et celui-ci doit être ajouté au Gtk.Window et tout ce qui est dans "
-"Buttonbox doit être affiché."
+"Les crédits photos et les informations de licence sont affichés dans la "
+"boîte de dialogue <link xref=\"aboutdialog.js\">AboutDialog</link> de "
+"l'application. Pensez à toujours porter au crédit de l'artiste original tout "
+"<link href=\"http://creativecommons.org\";>travail sous licence Creative "
+"Commons !</link>."
 
-#: C/guitar-tuner.js.page:99(p)
+#. (itstool) path: section/code
+#: C/switch.js.page:48
+#, no-wrap
 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."
+"\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 ""
-"Après cette étape, vous devriez voir s'afficher une fenêtre à l'écran avec "
-"les 6 boutons. Pour l'instant, les boutons n'ont aucune action et nous "
-"verrons cela plus tard. Pour pouvoir connecter les signaux des boutons à "
-"quelque chose, il nous faut d'abord coder ce quelque chose."
 
-#: C/guitar-tuner.js.page:122(p)
+#. (itstool) path: section/p
+#: C/switch.js.page:75
 msgid ""
-"The first thing we need to do is decide what tunes we want to make when we "
-"push a button. The frequencies list takes care of that. After that we get to "
-"actually making the sounds with the function playSound. For function "
-"playSound we give as an input a frequency (that we just defined in the "
-"frequencies variable). First thing we need to construct is a pipeline, a "
-"source and a sink. For the source we set the frequency. To the pipeline we "
-"add both the source and the sink and then we tell it to keep playing. As a "
-"last thing we use the const Mainloop to get the pipeline to pause after a "
-"500ms."
+"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 ""
-"La chose à faire en premier est de décider quel son doit être émis à l'appui "
-"sur un bouton. La liste des fréquences gère cela. Ensuite, il nous faut "
-"émettre les sons avec la fonction playSound, à laquelle nous donnons en "
-"entrée une fréquence (définie par les variables fréquences). Construisons "
-"d'abord un pipeline, une source et un collecteur. Définissons la fréquence "
-"pour la source, ajoutons la source et le collecteur au pipeline et faisons "
-"le jouer. Enfin, utilisons la constante Mainloop pour arrêter l'émission du "
-"son après 500ms."
+"Tout le code de cet exemple est contenu dans la classe SwitchExample. Le "
+"code ci-dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.Application.html\">Gtk.Application</link> pour nos éléments "
+"graphiques et la fenêtre qui les contient."
 
-#: C/guitar-tuner.js.page:123(p)
+#. (itstool) path: section/code
+#: C/switch.js.page:77
+#, no-wrap
 msgid ""
-"Now we have the method of playing a tune when clicking a button. Next well "
-"make the conncetions between pushing a button and playing the correct sound "
-"from that button."
+"\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 ""
-"Maintenant, nous avons la bonne méthode pour émettre un son après appui sur "
-"un bouton. Faisons ensuite la connexion entre l'appui sur un bouton et "
-"l'émission du son correct relié à ce bouton."
 
-#: C/guitar-tuner.js.page:146(p)
+#. (itstool) path: section/title
+#: C/switch.js.page:92
+msgid "Creating the switches"
+msgstr "Création des interrupteurs"
+
+#. (itstool) path: section/code
+#: C/switch.js.page:93
+#, no-wrap
 msgid ""
-"The method of connecting button clicks to playSound with the correct tune is "
-"by using the connect method of the button widget. So we choose a button to "
-"be connected and type E.connect(\"clicked\", function(){playSound"
-"(frequencies.E);}); The connect tells that when pushing E, something should "
-"happen. The \"clicked\" tells the type of something happening to E and then "
-"in the function(){}; we the playSound happen with the correct tune that "
-"should be associated to the button."
+"\n"
+"        // Create the image widget and set its default picture\n"
+"        this._image = new Gtk.Image ({file: \"redfox.png\"});\n"
 msgstr ""
-"Pour connecter les clics des boutons à la fonction playSound avec la "
-"tonalité correcte, utilisez la méthode connect de l'élément graphique "
-"button : choisissez un bouton à connecter et saisissez E.connect(\"clicked"
-"\", function(){playSound(frequencies.E);}) ; la connection indique qu'en "
-"appuyant sur E, quelque chose doit se produire. « clicked » indique ce qui "
-"arrive à E et ensuite ce qui se passe dans la function(){} ; enfin la "
-"fonction playSound renvoie la tonalité correcte à associer au bouton."
 
-#: C/guitar-tuner.js.page:150(p)
+#. (itstool) path: section/p
+#: C/switch.js.page:98
 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)."
+"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 ""
-"Voici donc ce que donne toutes les parties assemblées. Lorsque vous exécutez "
-"ce code, vous devriez être capable d'accorder votre guitare (si vous avez "
-"correctement calibré vos haut-parleurs)."
+"Créons en premier l'<link xref=\"image.js\">Image</link> que les "
+"interrupteurs vont contrôler. Souvenez-vous qu'un fichier nommé <file>redfox."
+"png</file> doit être présent dans le même dossier que cette application."
 
-#: C/guitar-tuner.js.page:230(p)
+#. (itstool) path: section/code
+#: C/switch.js.page:100
+#, no-wrap
 msgid ""
-"To run this application open Terminal, go to the folder where your "
-"application is stored and then run"
+"\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 ""
-"Pour lancer cette application, ouvrez Terminal, allez dans le dossier où "
-"votre application est enregistrée et lancez"
 
-#: C/guitar-tuner.js.page:230(input)
-msgid "GJS_PATH=`pwd` gjs guitarTuner.js"
-msgstr "GJS_PATH=`pwd` gjs guitarTuner.js"
+#. (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 ""
+"Utilisons un <link xref=\"label.js\">Label</link> pour étiqueter chaque "
+"interrupteur et laissons-leur un peu de marge à droite pour qu'ils ne "
+"débordent pas les uns sur les autres. Créons ensuite les interrupteurs et "
+"paramétrons-les pour qu'ils soient en position « éteint » par défaut."
+
+#. (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 ""
+"Le signal qu'un interrupteur envoie quand il est basculé dans un sens ou "
+"dans l'autre est appelé notify::active. Après avoir créé chaque "
+"interrupteur, connectons son signal notify::active à une fonction appelée "
+"_switchFlip. Si vous avez plein d'interrupteurs qui font chacun quelque "
+"chose de différent, vous pouvez les connecter à différentes fonctions, mais "
+"ici, ils sont tous les deux utilisés pour la même chose : contrôler quelle "
+"image est affichée par _image."
 
-#: C/guitar-tuner.js.page:235(p)
+#. (itstool) path: section/code
+#: C/switch.js.page:123
+#, no-wrap
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"guitar-tuner/guitar-tuner.js\">reference code</link>."
+"\n"
+"        // 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 ""
-"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"guitar-tuner/guitar-tuner.js\">programme de "
-"référence</link>."
 
-#: C/guitar-tuner.cpp.page:8(desc)
+#. (itstool) path: section/p
+#: C/switch.js.page:145
 msgid ""
-"Use GTKmm and GStreamermm to build a simple guitar tuner application for "
-"GNOME. Shows off how to use the interface designer."
+"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 ""
-"Utilisation de GTKmm et de GStreamermm pour construire une application "
-"accordeur de guitare simple pour GNOME. Explications sur la manière "
-"d'utiliser le concepteur d'interface."
+"Créons une <link xref=\"grid.js\">grille</link> pour les étiquettes et les "
+"interrupteurs de façon à les organiser dans un agencement 2x2 avec une marge "
+"entre eux et l'image. Ensuite, mettons cette grille dans une plus grande au "
+"format 2x1 qui contient l'image en haut et la grille avec les étiquettes et "
+"les interrupteurs en bas."
 
-#: C/guitar-tuner.cpp.page:21(title) C/guitar-tuner.c.page:23(title)
-msgid "Guitar Tuner"
-msgstr "Accordeur de guitare"
+#. (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 ""
 
-#: C/guitar-tuner.cpp.page:33(p)
-msgid "Basic knowledge of the C++ programming language"
-msgstr "des connaissances de base de la programmation en langage C++."
+#. (itstool) path: section/title
+#: C/switch.js.page:158
+msgid "Function which handles the switches being flipped"
+msgstr "Fonction prenant en charge la commutation des interrupteurs"
 
-#: C/guitar-tuner.cpp.page:47(p)
+#. (itstool) path: section/code
+#: C/switch.js.page:160
+#, no-wrap
 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."
+"\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 ""
-"Sélectionnez <gui>GTKmm (Simple)</gui> dans l'onglet <gui>C++</gui>, cliquez "
-"sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
-"suivantes. Utilisez <file>guitar-tuner</file> comme nom de projet et de "
-"répertoire."
 
-#: C/guitar-tuner.cpp.page:50(p)
+#. (itstool) path: section/p
+#: C/switch.js.page:181
 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."
+"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 ""
-"Assurez-vous que <gui>Configuration des paquets externes</gui> est activé. "
-"Sur la page suivante, choisissez <em>gstreamermm-0.10</em> dans la liste "
-"pour inclure la bibliothèque GStreamermm à votre projet."
+"À chaque fois qu'un interrupteur est activé, cette fonction vérifie lequel "
+"des deux interrupteurs est allumé à l'aide de la fonction intégrée "
+"get_active(). Elle affiche ensuite l'image correspondante. Vous pouvez "
+"modifier les noms des fichiers comme bon vous semble, tant que les images "
+"correspondantes sont dans le même dossier."
 
-#: C/guitar-tuner.cpp.page:54(p)
+#. (itstool) path: section/title
+#: C/switch.js.page:185
+msgid "Creating the AboutDialog"
+msgstr "Création de la boîte de dialogue « À propos »"
+
+#. (itstool) path: section/code
+#: C/switch.js.page:186
+#, no-wrap
 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:"
+"\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 ""
-"Cliquez sur <gui>Appliquer</gui> et votre projet est créé. Ouvrez <file>src/"
-"main.cc</file> depuis l'onglet <gui>Projet</gui> ou l'onglet <gui>Fichiers</"
-"gui>. Vous devez voir apparaître du code commençant par les lignes :"
 
-#: C/guitar-tuner.cpp.page:68(p)
+#. (itstool) path: section/p
+#: C/switch.js.page:212
 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."
+"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 ""
-"Les trois lignes <code>#include</code> du haut incorporent les bibliothèques "
-"<code>config</code> (définitions utiles pour la construction autoconf), "
-"<code>gtkmm</code> (interface utilisateur) et <code>iostream</code> (STL). "
-"Les fonctions de ces bibliothèques seront utilisées dans le reste du "
-"programme."
+"La première étape est de créer le <link xref=\"gmenu.js\">GMenu</link> dans "
+"lequel s'insère le bouton « À propos ». C'est ce menu qui s'affiche quand "
+"vous cliquez dans le coin gauche supérieur de l'écran, à côté du menu "
+"Activités. Notre menu ne contient que deux options : À propos et Quitter."
 
-#: C/guitar-tuner.cpp.page:71(p)
+#. (itstool) path: section/code
+#: C/switch.js.page:214
+#, no-wrap
 msgid ""
-"The <code>main</code> function creates a new window by opening a GtkBuilder "
-"file (<file>src/guitar-tuner.ui</file>, defined a few lines above) and then "
-"displaying it in a window. The GtkBuilder file contains a description of a "
-"user interface and all of its elements. You can use Anjuta's editor to "
-"design GtkBuilder user interfaces."
+"\n"
+"    _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 ""
-"La fonction <code>main</code> crée une nouvelle fenêtre en ouvrant un "
-"fichier GtkBuilder (<file>src/guitar-tuner.ui</file>, défini quelques lignes "
-"plus haut) et en l'affichant. Le fichier GtkBuilder contient une description "
-"de l'interface utilisateur et de tous ses éléments. Vous pouvez utiliser "
-"l'éditeur d'Anjuta pour concevoir des interfaces utilisateur GtkBuilder."
 
-#: C/guitar-tuner.cpp.page:74(p)
+#. (itstool) path: section/p
+#: C/switch.js.page:248
 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)."
+"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 ""
-"Ensuite quelques fonctions sont appelées pour configurer puis exécuter "
-"l'application. La fonction <code>kit.run</code> démarre la boucle principale "
-"de GTKmm qui affiche l'interface utilisateur et commence à écouter les "
-"événements (comme des clics de souris ou des appuis sur des touches)."
+"Vous pouvez définir beaucoup de choses très différentes dans une boîte de "
+"dialogue <link xref=\"aboutdialog.js\">À propos</link>, comme créditer tous "
+"les contributeurs ayant participé au développement de l'application et "
+"laisser une note à qui veut la lire. Dans notre cas, la section licence "
+"contient nos notes et les crédits aux photographes auteurs, alors que la "
+"section artistes affiche une liste des photographes avec les liens vers les "
+"images originales quand vous cliquez sur le bouton Crédits. Les liens URL "
+"qui suivent leurs noms les transforment en liens cliquables vous renvoyant à "
+"la section Crédits."
 
-#: C/guitar-tuner.cpp.page:84(p) C/guitar-tuner.c.page:90(p)
+#. (itstool) path: section/code
+#: C/switch.js.page:250
+#, no-wrap
 msgid ""
-"A description of the user interface (UI) is contained in the GtkBuilder "
-"file. To edit the user interface, open <file>src/guitar_tuner.ui</file>. "
-"This will switch to the interface designer. The design window is in the "
-"center; widgets and widgets' properties are on the left, and the palette of "
-"available widgets is on the right."
+"\n"
+"// Run the application\n"
+"let app = new SwitchExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Une description de l'interface utilisateur est contenue dans le fichier "
-"GtkBuilder. Pour la modifier, ouvrez le fichier <file>src/guitar_tuner.ui</"
-"file>. Ceci vous bascule vers le concepteur d'interface. La fenêtre de "
-"conception se trouve au centre ; les éléments graphiques et leurs propriétés "
-"sont sur la gauche et la palette des composants graphiques disponibles est "
-"sur la droite."
 
-#: C/guitar-tuner.cpp.page:99(p)
+#. (itstool) path: section/p
+#: C/switch.js.page:255
 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."
+"Finally, we create a new instance of the finished SwitchExample class, and "
+"set the application running."
 msgstr ""
-"Pendant que le bouton est encore sélectionné, modifiez la propriété "
-"<gui>Étiquette</gui> dans l'onglet <gui>Composants graphiques</gui> à "
-"<gui>E</gui>. Ce sera la corde E du bas. Modifiez aussi la propriété "
-"<gui>Nom</gui> en <gui>bouton_E</gui>. Nous nous référerons à cet élément "
-"graphique par ce nom plus tard dans le programme."
+"Enfin, créons une nouvelle instance de la classe SwitchExample et démarrons "
+"l'application."
 
-#: C/guitar-tuner.cpp.page:103(p)
+#. (itstool) path: section/code
+#: C/switch.js.page:260
+#, no-wrap
 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."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const SwitchExample = new Lang.Class({\n"
+"    Name: 'Switch Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jsswitch'\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal creates the menu and builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._initMenus();\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            border_width: 20,\n"
+"            title: \"Animal Creator\"});\n"
+"\n"
+"        // Create the image widget and set its default picture\n"
+"        this._image = new Gtk.Image ({file: \"redfox.png\"});\n"
+"\n"
+"        // Create a label for the first switch\n"
+"        this._flyLabel = new Gtk.Label ({\n"
+"            label: \"Make it fly\",\n"
+"            margin_right: 30});\n"
+"\n"
+"        // Create the first switch and set its default position\n"
+"        this._flySwitch = new Gtk.Switch ({active: false});\n"
+"        this._flySwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));\n"
+"\n"
+"        // Create a label for the second switch\n"
+"        this._birdLabel = new Gtk.Label ({\n"
+"            label: \"Make it a bird\",\n"
+"            margin_right: 30});\n"
+"\n"
+"        // Create the second switch\n"
+"        this._birdSwitch = new Gtk.Switch ({active: false});\n"
+"        this._birdSwitch.connect ('notify::active', Lang.bind (this, this._switchFlip));\n"
+"\n"
+"        // Create a grid for the labels and switches beneath the picture\n"
+"        this._UIGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER,\n"
+"            margin_top: 20});\n"
+"\n"
+"        // Attach the labels and switches to that grid\n"
+"        this._UIGrid.attach (this._flyLabel, 0, 0, 1, 1);\n"
+"        this._UIGrid.attach (this._flySwitch, 1, 0, 1, 1);\n"
+"        this._UIGrid.attach (this._birdLabel, 0, 1, 1, 1);\n"
+"        this._UIGrid.attach (this._birdSwitch, 1, 1, 1, 1);\n"
+"\n"
+"        // Create a master grid to put both the UI and the picture into\n"
+"        this._mainGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Attach the picture and the UI grid to the master grid\n"
+"        this._mainGrid.attach (this._image, 0, 0, 1, 1);\n"
+"        this._mainGrid.attach (this._UIGrid, 0, 1, 1, 1);\n"
+"\n"
+"        // Add the master grid to the window\n"
+"        this._window.add (this._mainGrid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _switchFlip: function() {\n"
+"\n"
+"        // Change the picture depending on which switches are flipped\n"
+"        if (this._flySwitch.get_active()) {\n"
+"\n"
+"            if (this._birdSwitch.get_active()) this._image.set_from_file (\"muteswan.png\");\n"
+"\n"
+"            else this._image.set_from_file (\"fruitbat.png\");\n"
+"        }\n"
+"\n"
+"        else {\n"
+"\n"
+"            if (this._birdSwitch.get_active()) this._image.set_from_file (\"gentoopenguin.png\");\n"
+"\n"
+"            else this._image.set_from_file (\"redfox.png\");\n"
+"\n"
+"        }\n"
+"\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _initMenus: function() {\n"
+"\n"
+"        // Build the application's menu so we can have an \"About\" button\n"
+"        let menu = new Gio.Menu();\n"
+"        menu.append(\"About\", 'app.about');\n"
+"        menu.append(\"Quit\",'app.quit');\n"
+"        this.application.set_app_menu(menu);\n"
+"\n"
+"        // Bind the \"About\" button to the _showAbout() function\n"
+"        let aboutAction = new Gio.SimpleAction ({ name: 'about' });\n"
+"        aboutAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._showAbout();\n"
+"            }));\n"
+"        this.application.add_action(aboutAction);\n"
+"\n"
+"        // Bind the \"Quit\" button to the function that closes the window\n"
+"        let quitAction = new Gio.SimpleAction ({ name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"        this.application.add_action(quitAction);\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _showAbout: function () {\n"
+"\n"
+"        // String arrays of the names of the people involved in the project\n"
+"        var artists = ['Rob Lee http://en.wikipedia.org/wiki/File:Fuzzy_Freddy.png', 'Ken Funakoshi 
http://en.wikipedia.org/wiki/File:Pygoscelis_papua_-Nagasaki_Penguin_Aquarium_-swimming_underwater-8a.png', 
'Shek Graham http://www.flickr.com/photos/shekgraham/127431519/in/photostream/', 'Mindaugas Urbonas 
http://commons.wikimedia.org/wiki/File:Mute_Swan-Mindaugas_Urbonas.png'];\n"
+"        var authors = [\"GNOME Documentation Team\"];\n"
+"        var documenters = [\"GNOME Documentation Team\"];\n"
+"\n"
+"        // Create the About dialog\n"
+"        let aboutDialog = new Gtk.AboutDialog({\n"
+"            title: \"AboutDialog Example\",\n"
+"            program_name: \"Animal Creator\",\n"
+"            copyright: \"Copyright \\xa9 2012 GNOME Documentation Team\\n\\nRed fox photo licensed CC-By by 
Rob Lee\\nGentoo penguin photo licensed CC-By-SA by Ken Funakoshi\\nFruit bat photo licensed CC-By by Shek 
Graham\\nMute swan photo licensed CC-By-SA by Mindaugas Urbonas\\nLinks to the originals are available under 
Credits.\\n\\nHave you hugged a penguin today?\",\n"
+"            artists: artists,\n"
+"            authors: authors,\n"
+"            documenters: documenters,\n"
+"            website: \"http://developer.gnome.org\",\n";
+"            website_label: \"GNOME Developer Website\" });\n"
+"\n"
+"        // Attach the About dialog to the window\n"
+"        aboutDialog.modal = true;\n"
+"        aboutDialog.transient_for = this._window;\n"
+"\n"
+"        // Show the About dialog\n"
+"        aboutDialog.show();\n"
+"\n"
+"        // Connect the Close button to the destroy signal for the dialog\n"
+"        aboutDialog.connect('response', function() {\n"
+"            aboutDialog.destroy();\n"
+"        });\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new SwitchExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Répétez cette procédure pour les autres boutons, en ajoutant les 5 cordes "
-"suivantes avec les étiquettes <em>A</em>, <em>D</em>, <em>G</em>, <em>B</em> "
-"et <em>e</em> et les noms des <em>bouton_A</em>, etc. correspondants."
 
-#: C/guitar-tuner.cpp.page:106(p)
+#. (itstool) path: item/p
+#: C/switch.js.page:271
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"Save the UI design (by clicking <guiseq><gui>File</gui><gui>Save</gui></"
-"guiseq>) and close the file."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Image.html";
+"\">Gtk.Image</link>"
 msgstr ""
-"Enregistrez le fichier de conception de l'interface utilisateur (en cliquant "
-"sur <guiseq><gui>Fichier</gui><gui>Enregistrer</gui></guiseq>) et fermez le "
-"fichier."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/guitar-tuner.cpp.page:113(p)
+#. (itstool) path: item/p
+#: C/switch.js.page:273
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Switch.html";
+"\">Gtk.Switch</link>"
 msgstr ""
-"GStreamer est l'architecture multimédia de GNOME — vous pouvez vous en "
-"servir pour des jeux, des enregistrements, pour traiter des flux vidéo, "
-"audio, de webcam entre autres. Ici, nous allons nous en servir pour émettre "
-"des tonalités à une seule fréquence. GStreamermm est le lien C++ à GStreamer "
-"que nous utilisons dans cet exemple."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/guitar-tuner.cpp.page:123(title)
-msgid "Using GStreamermm"
-msgstr "Utilisation de GStreamermm"
+#. (itstool) path: info/title
+#: C/switch.py.page:8
+#, fuzzy
+#| msgid "Switch (Python)"
+msgctxt "text"
+msgid "Switch (Python)"
+msgstr "Switch : interrupteur (Python)"
 
-#: C/guitar-tuner.cpp.page:124(p)
+#. (itstool) path: page/p
+#: C/switch.py.page:26
+msgid "This Switch makes the title appears and disappear."
+msgstr "Cet interrupteur fait apparaître et disparaître le titre."
+
+#. (itstool) path: section/code
+#: C/switch.py.page:33
+#, no-wrap
 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>:"
+"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 ""
-"Pour utiliser GStreamermm, il faut l'initialiser. Ajoutez la ligne de code "
-"suivante en dessous de la ligne <code>Gtk::Main kit(argc, argv);</code> du "
-"fichier <file>main.cc</file> :"
 
-#: C/guitar-tuner.cpp.page:126(code)
-#, no-wrap
-msgid "\tGst::init (argc, argv);"
-msgstr "\tGst::init (argc, argv);"
+#. (itstool) path: section/title
+#: C/switch.py.page:37
+msgid "Useful methods for a Switch widget"
+msgstr "Méthodes utiles pour un élément graphique Switch"
 
-#: C/guitar-tuner.cpp.page:127(p)
+#. (itstool) path: section/p
+#: C/switch.py.page:38
 msgid ""
-"While we are on it, also make sure that the <file>gstreamermm.h</file> is "
-"included in <file>main.cc</file> properly."
+"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 ""
-"Vérifiez que le fichier <file>gstreamermm.h</file> est correctement inclus "
-"dans <file>main.cc</file>."
 
-#: C/guitar-tuner.cpp.page:131(p)
+#. (itstool) path: item/p
+#: C/switch.py.page:45
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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:"
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkSwitch.html";
+"\">GtkSwitch</link>"
 msgstr ""
-"Pour simplifier la gestion du pipeline, nous définissons une classe "
-"assistant <code>Sound</code>. Ceci est réalisé dans le fichier <file>main."
-"cc</file> pour garder toute sa simplicité à cet exemple, alors que "
-"normalement vous le feriez dans un fichier séparé :"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/guitar-tuner.cpp.page:178(p)
-msgid "The code has the following purpose:"
-msgstr "L'objectif du programme est le suivant :"
+#. (itstool) path: info/title
+#: C/switch.vala.page:8
+#, fuzzy
+#| msgid "Switch (Vala)"
+msgctxt "text"
+msgid "Switch (Vala)"
+msgstr "Switch (interrupteur) (Vala)"
 
-#: C/guitar-tuner.cpp.page:181(p)
+#. (itstool) path: page/p
+#: C/switch.vala.page:29
+msgid "This Switch toggles the title."
+msgstr "Cet interrupteur bascule le titre."
+
+#. (itstool) path: page/code
+#: C/switch.vala.page:31
+#, no-wrap
 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."
+"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 ""
-"Le constructeur crée les éléments GStreamer source et sink (collecteur) "
-"(<code>Gst.Element</code>) et un élément pipeline (qui sera utilisé comme "
-"conteneur pour les deux autres). Le pipeline est nommé « note » ; la source "
-"est nommée « source » et définie comme étant le connecteur "
-"<code>audiotestsrc</code> et le collecteur est nommé « output » et défini "
-"comme étant le connecteur <code>autoaudiosink</code> (qui est la sortie par "
-"défaut de la carte son). Après avoir lié entre eux et ajouté les éléments au "
-"pipeline, il est prêt à fonctionner."
 
-#: C/guitar-tuner.cpp.page:184(p)
+#. (itstool) path: item/p
+#: C/switch.vala.page:36
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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>."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Switch.html\";>Gtk.Switch</"
+"link>"
 msgstr ""
-"<code>start_playing</code> définit l'élément source à une fréquence donnée "
-"et démarre réellement le pipeline pour commencer à diffuser le son. Comme "
-"nous ne voulons pas jouer indéfiniment une note ennuyeuse, un délai de 200 "
-"ms est défini avant d'interrompre le pipeline en appelant la fonction "
-"<code>stop_playing</code>."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/guitar-tuner.cpp.page:189(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/textview.png'; md5=049e859ed1af2d7c93d8cb5cfd9f7792"
+msgctxt "_"
 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 ""
-"Dans <code>stop_playing</code>, après que la durée soit échue, le pipeline "
-"s'arrête et donc il n'y a plus de sortie son. Comme GStreamer utilise le "
-"comptage des références à l'objet <code>Glib::RefPtr</code>, la mémoire est "
-"automatiquement libérée dès que la classe <code>Sound</code> est détruite."
+"external ref='media/textview.png' md5='049e859ed1af2d7c93d8cb5cfd9f7792'"
+msgstr "@@image: 'media/textview.png'; md5=049e859ed1af2d7c93d8cb5cfd9f7792"
 
-#: C/guitar-tuner.cpp.page:197(title)
-msgid "Connecting the signals"
-msgstr "Connexion des signaux"
+#. (itstool) path: info/title
+#: C/textview.c.page:8
+#, fuzzy
+#| msgid "TextView (C)"
+msgctxt "text"
+msgid "TextView (C)"
+msgstr "TextView (C)"
 
-#: C/guitar-tuner.cpp.page:198(p)
+#. (itstool) path: info/desc
+#: C/textview.c.page:18 C/textview.vala.page:18
+msgid "Widget which displays a GtkTextBuffer"
+msgstr "L'élément graphique qui affiche un GtkTextBuffer"
+
+#. (itstool) path: page/title
+#: C/textview.c.page:21 C/textview.vala.page:21
+msgid "TextView widget"
+msgstr "Élément graphique TextView"
+
+#. (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 "En appuyant sur « Entrée », nous créons une nouvelle ligne."
+
+#. (itstool) path: note/p
+#: C/textview.c.page:23 C/textview.vala.page:23
 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."
+"If we press \"enter\" more times then there are lines in the default sized "
+"window, then a vertical scrollbar appears."
 msgstr ""
-"Nous voulons jouer la note adéquate quand l'utilisateur clique sur un "
-"bouton. Cela signifie que nous devons connecter le signal émis par ce "
-"bouton. Nous voulons aussi informer la fonction appelée du son à diffuser. "
-"GTKmm rend la chose facile car il est facile de lier des informations avec "
-"la bibliothèque <em>sigc</em>."
+"En appuyant encore de nombreuses fois sur « Entrée », d'autres lignes sont "
+"créées dans la fenêtre de taille par défaut, puis une barre de défilement "
+"verticale apparaît."
 
-#: C/guitar-tuner.cpp.page:203(p)
+#. (itstool) path: note/p
+#: C/textview.c.page:24 C/textview.vala.page:24
 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:"
+"If we write a long sentence, the text will wrap breaking lines between words."
+msgstr "Si nous écrivons une longue phrase, la césure se fait entre deux mots."
+
+#. (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 ""
-"La fonction appelée lors d'un clic sur un bouton peut être très simple, car "
-"tout le travail intéressant se fait maintenant dans la classe assistant :"
+"Si nous avons un loooooooooooooooooooooooooooooooooooong mot, une barre de "
+"défilement horizontale apparaît."
 
-#: C/guitar-tuner.cpp.page:212(p)
+#. (itstool) path: page/p
+#: C/textview.c.page:28 C/textview.vala.page:28
+msgid "This is an example of Gtk.TextView"
+msgstr "Ceci est un exemple de Gtk.TextView"
+
+#. (itstool) path: page/code
+#: C/textview.c.page:30
+#, no-wrap
 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."
+"\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 ""
-"Elle ne fait qu'appeler la classe assistant que nous avons configurée "
-"auparavant pour diffuser la fréquence appropriée. Avec un programme un peu "
-"plus malin, nous aurions pu aussi nous connecter directement à la classe "
-"sans passer par la fonction, mais laissons cela pour un exercice futur."
 
-#: C/guitar-tuner.cpp.page:216(p)
+#. (itstool) path: item/p
+#: C/textview.c.page:41
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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:"
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkContainer.html";
+"\">GtkContainer</link>"
 msgstr ""
-"Le code qui configure les signaux doit être ajouté à la fonction <code>main()"
-"</code>, juste après la ligne <code>builder-&gt;get_widget(\"main_window\","
-"main_win);</code> :"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/guitar-tuner.cpp.page:228(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/textviewpenguinchat.png'; "
+#| "md5=0dd6f6aa44aaeab7901bd90162ed4c9a"
+msgctxt "_"
 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."
+"external ref='media/textviewpenguinchat.png' "
+"md5='0dd6f6aa44aaeab7901bd90162ed4c9a'"
 msgstr ""
-"D'abord, nous créons une instance de notre classe assistant que nous voulons "
-"maintenant utiliser et déclarons une variable pour le bouton que nous "
-"voulons connecter."
+"@@image: 'media/textviewpenguinchat.png'; "
+"md5=0dd6f6aa44aaeab7901bd90162ed4c9a"
 
-#: C/guitar-tuner.cpp.page:232(p)
+#. (itstool) path: info/title
+#: C/textview.js.page:8
+#, fuzzy
+#| msgid "TextView (JavaScript)"
+msgctxt "text"
+msgid "TextView (JavaScript)"
+msgstr "TextView (JavaScript)"
+
+#. (itstool) path: info/desc
+#: C/textview.js.page:22
+msgid "A multiline text editor"
+msgstr "Un éditeur de texte multiligne"
+
+#. (itstool) path: page/title
+#: C/textview.js.page:25 C/textview.py.page:30
+msgid "TextView"
+msgstr "TextView"
+
+#. (itstool) path: page/p
+#: C/textview.js.page:27
 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."
+"A TextView is really (or at least usually) a nested set of three objects."
 msgstr ""
-"Ensuite, nous récupérons l'objet bouton de l'interface utilisateur qui a été "
-"créé à partir du fichier de l'interface utilisateur. Souvenez-vous que "
-"<em>bouton_E</em> est le nom que nous avons donné au premier bouton."
+"Un élément graphique TextView est en réalité (le plus souvent) une "
+"combinaison de trois objets."
 
-#: C/guitar-tuner.cpp.page:236(p)
+#. (itstool) path: item/p
+#: C/textview.js.page:29
 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."
+"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 ""
-"Enfin, nous connectons le signal <em>clicked</em>. Il est vrai que cela ne "
-"paraît pas très simple car nous prenons beaucoup de précautions sur le type "
-"des variables et que nous désirons en réalité transmettre notre classe "
-"assistant et la fréquence au récepteur de signal. <code>sigc::ptr_fun(&amp;"
-"on_button_clicked)</code> crée un <em>connecteur</em> pour la méthode "
-"<code>on_button_clicked</code> définie plus haut. Nous pouvons transmettre "
-"d'autres arguments avec <code>sigc::bind</code> et dans notre exemple, nous "
-"transmettons la fréquence (de type « double ») et notre classe assistant."
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
 
-#: C/guitar-tuner.cpp.page:243(p)
+#. (itstool) path: item/p
+#: C/textview.js.page:30
 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."
+"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 ""
-"Après avoir configuré le bouton <em>E</em>, nous devons connecter les autres "
-"boutons en fonction de leur fréquence : 440 pour A, 587,33 pour D, 783,99 "
-"pour G, 987,77 pour B et 1318,5 pour E aiguë. Le processus est le même, "
-"seule la fréquence transmise au récepteur change."
+"Au milieu, nous trouvons l'élément graphique <link href=\"http://www.roojs.";
+"org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextView.html\">TextView</link>, qui nous "
+"permet d'afficher et de modifier le texte du tampon. Il se redimensionne "
+"automatiquement en fonction de la quantité de texte qu'il contient."
 
-#: C/guitar-tuner.cpp.page:250(p)
+#. (itstool) path: item/p
+#: C/textview.js.page:31
+#, fuzzy
+#| msgid ""
+#| "Since the automatic resizing can make a TextView unwieldy, you normally "
+#| "place it inside of a <link xref=\"scrolledwindow.js\">ScrolledWindow</"
+#| "link>. Despite the name, it's not an actual window in terms of having a "
+#| "title bar and an X button; it's a widget you put on the application "
+#| "you're making, which acts like a window onto a more manageable chunk of a "
+#| "TextView. If the text in the buffer is too big to fit, scrollbars will "
+#| "appear."
 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."
+"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 ""
+"Étant donné que le redimensionnement automatique peut rendre un TextView peu "
+"maniable, placez-le dans une fenêtre à défilement <link xref="
+"\"scrolledwindow.js\">ScrolledWindow</link>. Malgré son nom, ce n'est pas à "
+"proprement parler une fenêtre, car elle ne comporte ni barre de titre, ni "
+"bouton X ; c'est un élément graphique à placer dans l'application que vous "
+"construisez et qui permet de mieux gérer un TextView. Si le texte du tampon "
+"est trop grand, des ascenseurs apparaissent."
+
+#. (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 ""
-"À ce stade, tout le programme est fonctionnel. Cliquez sur "
-"<guiseq><gui>Construire</gui><gui>Construire le projet</gui></guiseq> pour "
-"tout reconstruire et faites <guiseq><gui>Exécuter</gui><gui>Exécuter</gui></"
-"guiseq> pour lancer l'application."
+"Si vous modifiez le texte affiché dans le TextView, vous agissez sur le "
+"TextBuffer puisque c'est lui qui contient effectivement le texte. Procédez "
+"de la même manière si vous souhaitez connaître le texte saisi par quelqu'un. "
+"Cet exemple d'application vous permet de parler à un pingouin (imaginaire) "
+"et parcourt le TextBuffer pour voir si vous avez saisi le mot « poisson » "
+"quelque part."
 
-#: C/guitar-tuner.cpp.page:256(p)
+#. (itstool) path: note/p
+#: C/textview.js.page:34
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"guitar-tuner/guitar-tuner.cc\">reference code</link>."
+"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 ""
-"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"guitar-tuner/guitar-tuner.cc\">programme de "
-"référence</link>."
+"Dans la vraie vie, les populations de pingouins déclinent rapidement, à "
+"cause du changement climatique qui fait fondre les glaces sur lesquels ils "
+"vivent et raréfie les stocks de poissons dont ils se nourrissent. Allez "
+"jeter un coup d'œil à <link href=\"http://pingus.seul.org/\";>Pingus.</link> "
+"si vous voulez jouer à un jeu GNOME (un peu stupide) basé sur ce constat."
 
-#: C/guitar-tuner.cpp.page:260(title)
-msgid "Further Reading"
-msgstr "Lecture complémentaire"
+#. (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 ""
 
-#: C/guitar-tuner.cpp.page:261(p)
+#. (itstool) path: section/p
+#: C/textview.js.page:74
 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>."
+"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 ""
-"Pour des informations plus détaillées sur les exemples ci-dessus, consultez "
-"le <link href=\"http://library.gnome.org/devel/gtkmm-tutorial/stable/";
-"\">manuel de GTKmm</link> qui couvre beaucoup plus de sujets clés pour "
-"utiliser toute la puissance de GTKmm, ainsi que la <link href=\"http://";
-"library.gnome.org/devel/gstreamermm/\">documentation de référence de "
-"gstreamermm</link>."
+"Tout le code de cet exemple tient dans la classe TextViewExample. Le code ci-"
+"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
+"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
+"et la fenêtre qui les contient."
 
-#: C/guitar-tuner.c.page:7(title)
-#, fuzzy
-#| msgid "Guitar Tuner"
-msgid "Guitar Tuner (C)"
-msgstr "Accordeur de guitare"
+#. (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 "Création de l'élément graphique TextView"
 
-#: C/guitar-tuner.c.page:35(p)
-msgid "Basic knowledge of the C programming language"
-msgstr "des connaissances de base de la programmation en langage C"
+#. (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 ""
 
-#: C/guitar-tuner.c.page:49(p)
+#. (itstool) path: section/p
+#: C/textview.js.page:102
 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."
+"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 ""
-"Sélectionnez <gui>Gtk+ (Simple)</gui> dans l'onglet <gui>C</gui>, cliquez "
-"sur <gui>Continuer</gui> et saisissez vos informations sur les pages "
-"suivantes. Utilisez <file>guitar-tuner</file> comme nom de projet et de "
-"répertoire."
+"Pour commencer, créons le <link xref=\"label.js\">Label</link> (étiquette) "
+"que le pingouin va utiliser pour dialoguer avec vous. Définissons la "
+"propriété de césure du texte de l'étiquette sur wrap (césure) en lui "
+"attribuant la valeur « true », mais nous utiliserons une méthode différente "
+"sur l'élément graphique TextView lui-même pour avoir un contrôle plus fin."
 
-#: C/guitar-tuner.c.page:52(p)
+#. (itstool) path: section/code
+#: C/textview.js.page:104
+#, no-wrap
 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."
+"\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 ""
-"Assurez-vous que <gui>Configuration des paquets externes</gui> est basculée "
-"sur <gui>I</gui>. Sur la page suivante, choisissez <em>gstreamer-0.10</em> "
-"dans la liste pour inclure la bibliothèque GStreamer à votre projet."
 
-#: C/guitar-tuner.c.page:66(p)
+#. (itstool) path: section/p
+#: C/textview.js.page:113
 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:"
+"Our first step is to create a TextBuffer to put the words into. After that "
+"we create the TextView, and tell it to use the TextBuffer we created as its "
+"buffer. We also set it to be editable, since we want to be able to type new "
+"things in."
 msgstr ""
-"« C » est un langage plutôt verbeux, donc ne soyez pas surpris par la "
-"quantité de code que contient le fichier. La plupart du code est générique. "
-"Il charge une fenêtre (vide) à partir du fichier de description de "
-"l'interface et l'affiche. Vous trouverez plus de détails ci-dessous ; passez "
-"cette liste si vous comprenez les bases :"
+"La première étape consiste à créer un élément graphique TextBuffer pour y "
+"placer les mots. Ensuite, nous créons l'élément TextView et nous lui "
+"indiquons d'utiliser le TextBuffer comme tampon. Nous le paramétrons aussi "
+"pour qu'il soit modifiable (editable), car nous voulons pouvoir y saisir "
+"d'autres choses."
 
-#: C/guitar-tuner.c.page:73(p)
+#. (itstool) path: section/p
+#: C/textview.js.page:114
+#, fuzzy
+#| 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."
 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."
+"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 ""
-"La fonction <code>create_window</code> crée une nouvelle fenêtre en ouvrant "
-"un fichier GtkBuilder (<file>src/guitar-tuner.ui</file>, défini quelques "
-"lignes plus haut), en connectant ses signaux et en l'affichant dans une "
-"fenêtre. Le fichier GtkBuilder contient une description de l'interface "
-"utilisateur et de tous ses éléments. Vous pouvez utiliser l'éditeur d'Anjuta "
-"pour concevoir des interfaces utilisateur GtkBuilder."
+"La propriété wrap_mode permet de choisir entre quatre modes de césure <link "
+"href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.WrapMode.html";
+"\">WrapModes</link> différents. Le mode Gtk.WrapMode.CHAR, par exemple, fait "
+"la césure au milieu d'un mot si vous continuer la saisie après avoir atteint "
+"le bord. La plupart d'entre vous sont certainement plus habitués au mode Gtk."
+"WrapMode.WORD, qui met automatiquement le mot entier à la ligne s'il est "
+"trop long."
 
-#: C/guitar-tuner.c.page:122(p)
+#. (itstool) path: section/code
+#: C/textview.js.page:116
+#, no-wrap
 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:"
+"\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 ""
-"Pour cela, ouvrez <file>main.c</file> pendant que le fichier de l'interface "
-"utilisateur est encore ouvert. Allez au même onglet <gui>Signaux</gui> que "
-"vous aviez déjà utilisé pour nommer le signal. Prenez la ligne où vous aviez "
-"défini le signal <gui>clicked</gui> et faites la glisser quelque part à "
-"l'extérieur d'une fonction dans le fichier source. Le code suivant s'ajoute "
-"à votre fichier source :"
 
-#: C/guitar-tuner.c.page:130(p)
+#. (itstool) path: section/p
+#: C/textview.js.page:128
+#, fuzzy
+#| msgid ""
+#| "Here we create a <link xref=\"scrolledwindow.js\">ScrolledWindow,</link> "
+#| "and set it to automatically scroll if it gets to be too big horizontally "
+#| "or vertically. We also give it a nice-looking ETCHED_IN border. After "
+#| "that, we put our TextView inside, and tell the ScrolledWindow to give us "
+#| "a viewport onto it."
+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 ""
+"Ici, nous créons une <link xref=\"scrolledwindow.js\">ScrolledWindow</link> "
+"et nous la paramétrons pour défiler automatiquement si son contenu déborde "
+"horizontalement ou verticalement. Nous lui ajoutons aussi une belle bordure "
+"ETCHED_IN. Ensuite, nous y mettons notre TextView et nous indiquons à la "
+"fenêtre ScrolledWindow de nous l'afficher."
+
+#. (itstool) path: section/code
+#: C/textview.js.page:134
+#, no-wrap
 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.)"
+"\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 ""
-"Ce récepteur de signal a deux arguments : un pointeur vers le "
-"<code>GtkWidget</code> qui a appelé la fonction (dans notre cas, toujours un "
-"<code>GtkButton</code>) et un pointeur sur des « données "
-"utilisateur » (user_data) que vous pouvez définir, mais que nous n'utilisons "
-"pas ici (les données utilisateur peuvent être définies par un appel à la "
-"fonction <code>gtk_builder_connect_signals</code> ; il sert normalement à "
-"transmettre un pointeur à une structure de données auxquelles vous pouvez "
-"avoir besoin d'accéder à l'intérieur du gestionnaire de signal)."
 
-#: C/guitar-tuner.c.page:148(p)
+#. (itstool) path: section/p
+#: C/textview.js.page:144
 msgid ""
-"Insert the following line into <file>main.c</file>, just below the <code><!"
-"[CDATA[#include <gtk/gtk.h>]]></code> line:"
+"The first <link xref=\"grid.js\">Grid</link> we create only has the Label "
+"and the ScrolledWindow inside it."
 msgstr ""
-"Insérez la ligne suivante dans le fichier <file>main.c</file>, juste en "
-"dessous de la ligne <code><![CDATA[#include <gtk/gtk.h>]]></code> :"
+"Le premier <link xref=\"grid.js\">Grid</link> (grille) que nous avons créé "
+"ne contient que l'étiquette et la ScrolledWindow."
 
-#: C/guitar-tuner.c.page:150(p)
+#. (itstool) path: section/code
+#: C/textview.js.page:146
+#, no-wrap
 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:"
+"\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 ""
-"Cela inclut la bibliothèque de GStreamer. Ajoutez aussi une ligne pour "
-"initialiser GStreamer ; mettez le code suivant dans la ligne au-dessus de "
-"<code>gtk_init</code> dans la fonction <code>main</code> :"
 
-#: C/guitar-tuner.c.page:152(p)
+#. (itstool) path: section/p
+#: C/textview.js.page:163
 msgid ""
-"Then, copy the following function into <file>main.c</file> above the empty "
-"<code>on_button_clicked</code> function:"
+"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 ""
-"Ensuite, copiez la fonction suivante dans le fichier <file>main.c</file> au-"
-"dessus de la fonction vide <code>on_button_clicked</code> :"
+"Nous créons un <link xref=\"button.js\">Button</link> (bouton) pour envoyer "
+"votre message au pingouin et un nouveau Grid (grille) qui contient l'autre "
+"grille en haut et le bouton en bas. Le bouton comporte une marge (margin) "
+"dans sa partie supérieure, de telle sorte qu'il n'est pas collé contre la "
+"ScrolledWindow."
 
-#: C/guitar-tuner.c.page:179(p)
+#. (itstool) path: section/code
+#: C/textview.js.page:165
+#, no-wrap
 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)."
+"\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 ""
-"Les cinq premières lignes créent les éléments GStreamer source et sink "
-"(collecteur) et un élément pipeline (qui sera utilisé comme conteneur pour "
-"les deux autres éléments). Le pipeline est nommé « note » ; la source est "
-"nommée « source » et définie comme étant le connecteur <code>audiotestsrc</"
-"code> et le collecteur est nommé « output » et défini comme étant le "
-"connecteur <code>autoaudiosink</code> (qui est la sortie par défaut de la "
-"carte son)."
 
-#: C/guitar-tuner.c.page:182(p)
+#. (itstool) path: section/p
+#: C/textview.js.page:174
 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."
+"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 ""
-"L'appel à <code>g_object_set</code> définit la propriété <code>freq</code> "
-"de l'élément source à <code>frequency</code> qui est transmis comme argument "
-"de la fonction <code>play_sound</code>. Il s'agit simplement de la fréquence "
-"de la note de musique en Hertz ; certaines fréquences utiles seront définies "
-"plus tard."
+"Enfin, nous relions la grille principale à la fenêtre, puis indiquons à la "
+"fenêtre de s'afficher avec son contenu quand l'application est lancée."
+
+#. (itstool) path: section/title
+#: C/textview.js.page:179
+msgid "Function which handles the penguin's response"
+msgstr "Fonction prenant en charge la réponse du pingouin"
 
-#: C/guitar-tuner.c.page:185(p)
+#. (itstool) path: section/code
+#: C/textview.js.page:180
+#, no-wrap
 msgid ""
-"<code>gst_bin_add_many</code> puts the source and sink into the pipeline. "
-"The pipeline is a <code>GstBin</code>, which is just an element that can "
-"contain multiple other GStreamer elements. In general, you can add as many "
-"elements as you like to the pipeline by adding more arguments to "
-"<code>gst_bin_add_many</code>."
+"\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 ""
-"<code>gst_bin_add_many</code> place la source et le collecteur dans le "
-"pipeline. Le pipeline est un <code>GstBin</code> qui est juste un élément "
-"qui peut contenir beaucoup d'autres éléments GStreamer. En général, vous "
-"pouvez ajouter autant d'éléments que vous voulez au pipeline en ajoutant "
-"d'autres d'arguments à <code>gst_bin_add_many</code>."
 
-#: C/guitar-tuner.c.page:188(p)
+#. (itstool) path: section/p
+#: C/textview.js.page:231
 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>)."
+"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 ""
-"Ensuite, <code>gst_element_link</code> est utilisé pour connecter les "
-"éléments ensemble, de sorte que la sortie de la source (une note) va à "
-"l'entrée du collecteur (et est ensuite envoyée à la carte son). "
-"<code>gst_element_set_state</code> sert enfin à démarrer la lecture en "
-"basculant l'état du pipeline à « playing » (lecture) "
-"(<code>GST_STATE_PLAYING</code>)."
+"Nous utilisons ici quelques fonctions JavaScript de base pour que le "
+"pingouin dise quelque chose au hasard. Les pingouins apprécient le poisson "
+"et nous allons donc le faire répondre quand on prononce le mot "
+"« fish » (poisson). Pour cela, nous appliquons la méthode JavaScript de "
+"correspondance d'objets chaîne de caractères sur le texte <file>this.buffer."
+"text</file>, qui renvoie le contenu de notre TextBuffer."
 
-#: C/guitar-tuner.c.page:196(p)
+#. (itstool) path: section/p
+#: C/textview.js.page:232
 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>."
+"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 ""
-"Comme nous ne voulons pas jouer indéfiniment une note ennuyeuse, la dernière "
-"chose que fait <code>play_sound</code> est d'appeler <code>g_timeout_add</"
-"code> qui définit un délai avant la coupure du son ; cela attend "
-"<code>LENGTH</code> millisecondes avant d'appeler la fonction "
-"<code>pipeline_stop</code> et continuera à l'appeler jusqu'à ce que "
-"<code>pipeline_stop</code> renvoie la valeur <code>FALSE</code>."
+"Comme nous voulons effacer le TextBuffer après chaque clic sur "
+"« Sent » (Envoyer), nous paramétrons le <file>this.buffer.text</file> pour "
+"qu'il contienne une chaîne vide après cela. Nous renvoyons ensuite le focus "
+"sur notre élément TextView, pour pouvoir continuer à y saisir du texte sans "
+"avoir besoin de cliquer dessus au préalable."
 
-#: C/guitar-tuner.c.page:197(p)
+#. (itstool) path: section/code
+#: C/textview.js.page:234
+#, no-wrap
 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:"
+"\n"
+"// Run the application\n"
+"let app = new TextViewExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Écrivons maintenant la fonction <code>pipeline_stop</code> qui est appelée "
-"par <code>g_timeout_add</code>. Insérez le code suivant <em>au-dessus</em> "
-"de la fonction <code>play_sound</code> :"
 
-#: C/guitar-tuner.c.page:209(p)
+#. (itstool) path: section/p
+#: C/textview.js.page:239
 msgid ""
-"The call to <code>gst_element_set_state</code> pauses the playback of the "
-"pipeline and <code>g_object_unref</code> unreferences the pipeline, "
-"destroying it and freeing its memory."
+"Finally, we create a new instance of the finished TextViewExample class, and "
+"set the application running."
 msgstr ""
-"L'appel à <code>gst_element_set_state</code> met en pause la lecture du "
-"pipeline et <code>g_object_unref</code> déréférence le pipeline, le "
-"détruisant ainsi et effaçant sa mémoire."
+"Enfin, nous créons une nouvelle instance de la classe TextViewExample que "
+"nous venons de terminer et démarrons l'application."
 
-#: C/guitar-tuner.c.page:214(p)
+#. (itstool) path: section/code
+#: C/textview.js.page:244
+#, no-wrap
 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:"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const TextViewExample = new Lang.Class ({\n"
+"    Name: 'TextView Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.jstextview' });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function () {\n"
+"        this._window.present ();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow  ({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            title: \"Talk to a Penguin\",\n"
+"            default_height: 400,\n"
+"            default_width: 440,\n"
+"            border_width: 20 });\n"
+"\n"
+"        // Create a label for the penguin to talk to you\n"
+"        this._penguin = new Gtk.Label ({\n"
+"            height_request: 180,\n"
+"            width_request: 400,\n"
+"            label: \"Squaaaak?\",\n"
+"            wrap: true });\n"
+"\n"
+"        // Create a textview for you to talk to the penguin\n"
+"        this.buffer = new Gtk.TextBuffer();\n"
+"        this._textView = new Gtk.TextView ({\n"
+"            buffer: this.buffer,\n"
+"            editable: true,\n"
+"            wrap_mode: Gtk.WrapMode.WORD });\n"
+"\n"
+"        // Create a \"scrolled window\" to put your textview in so it will scroll\n"
+"        this._scrolled = new Gtk.ScrolledWindow ({\n"
+"            hscrollbar_policy: Gtk.PolicyType.AUTOMATIC,\n"
+"            vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,\n"
+"            shadow_type: Gtk.ShadowType.ETCHED_IN,\n"
+"            height_request: 180,\n"
+"            width_request: 400, });\n"
+"\n"
+"        // Put the textview into the scrolled window\n"
+"        this._scrolled.add_with_viewport (this._textView);\n"
+"\n"
+"        // Create a grid to organize them in\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Put the label and textview in the grid one on top of the other\n"
+"        this._grid.attach (this._penguin, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._scrolled, 0, 1, 1, 1);\n"
+"\n"
+"        // Create a button to send your message to the penguin\n"
+"        this._send = new Gtk.Button ({\n"
+"            halign: Gtk.Align.END,\n"
+"            margin_top: 20,\n"
+"            label: \"Send\" });\n"
+"        this._send.connect ('clicked', Lang.bind (this, this._chat));\n"
+"\n"
+"        // Create a grid that will have the other grid on top and the button on bottom\n"
+"        this._mainGrid = new Gtk.Grid ({\n"
+"            halign: Gtk.Align.CENTER,\n"
+"            valign: Gtk.Align.CENTER });\n"
+"\n"
+"        // Add the other grid and the button to the main grid\n"
+"        this._mainGrid.attach (this._grid, 0, 0, 1, 1);\n"
+"        this._mainGrid.attach (this._send, 0, 1, 1, 1);\n"
+"\n"
+"        // Attach the main grid to the window\n"
+"        this._window.add (this._mainGrid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _chat: function () {\n"
+"\n"
+"        // Create a random number to determine what the penguin says\n"
+"        this.number = Math.floor ((Math.random() * 3) + 1);\n"
+"\n"
+"        // Did you actually say anything?\n"
+"        if (this.buffer.text) {\n"
+"\n"
+"            // Did you mention fish?\n"
+"            if (this.buffer.text.match (/fish/gi)) {\n"
+"\n"
+"                // Have the penguin squaak about fish\n"
+"                if (this.number == 1)\n"
+"                    this._penguin.set_label (\"FISH!\");\n"
+"\n"
+"                else if (this.number == 2)\n"
+"                    this._penguin.set_label (\"Fish fish fish fish. Fish!\");\n"
+"\n"
+"                else\n"
+"                    this._penguin.set_label (\"Fish? Fish fish fish. Fish fish. FISH!\");\n"
+"\n"
+"            }\n"
+"\n"
+"            // I guess you didn't mention fish\n"
+"            else {\n"
+"\n"
+"                // Have the penguin talk about penguinny stuff\n"
+"                if (this.number == 1)\n"
+"                    this._penguin.set_label (\"SQUAAK!\");\n"
+"\n"
+"                else if (this.number == 2)\n"
+"                    this._penguin.set_label (\"Ork ork ork ork squaak. Squaak squaak! *waves 
flippers*\");\n"
+"\n"
+"                else\n"
+"                    this._penguin.set_label (\"Ork ork ork ork ork?\");\n"
+"\n"
+"            }\n"
+"\n"
+"        }\n"
+"\n"
+"        // Clear the buffer\n"
+"        this.buffer.text = \"\";\n"
+"\n"
+"        // Give focus back to the textview so you don't have to click it again\n"
+"        this._textView.has_focus = true;\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new TextViewExample ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
-"Nous voulons jouer la note adéquate quand l'utilisateur clique sur un "
-"bouton. Avant tout, nous devons connaître la fréquence de chacune des six "
-"cordes de la guitare qui sont définies (au début du fichier <file>main.c</"
-"file>) ainsi :"
 
-#: C/guitar-tuner.c.page:246(p)
+#. (itstool) path: item/p
+#: C/textview.js.page:256
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"A pointer to the <code>GtkButton</code> that was clicked is passed as an "
-"argument (<code>button</code>) to <code>on_button_clicked</code>. We can get "
-"the label of that button by using <code>gtk_bin_get_child</code>, and then "
-"get the text from that label using <code>gtk_label_get_label</code>."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.";
+"ScrolledWindow.html\">Gtk.ScrolledWindow</link>"
 msgstr ""
-"Un pointeur vers le bouton <code>GtkButton</code> qui a été cliqué est "
-"transmis comme argument (<code>button</code>) à <code>on_button_clicked</"
-"code>. On peut obtenir l'étiquette de ce bouton en utilisant "
-"<code>gtk_bin_get_child</code> puis en extrayant le texte de cette étiquette "
-"avec <code>gtk_label_get_label</code>."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/guitar-tuner.c.page:247(p)
+#. (itstool) path: item/p
+#: C/textview.js.page:257
+#, fuzzy
+#| 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."
 msgid ""
-"The label text is then compared to the notes that we have using "
-"<code>g_str_equal</code>, and <code>play_sound</code> is called with the "
-"frequency appropriate for that note. This plays the tone; we have a working "
-"guitar tuner!"
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextBuffer.";
+"html\">Gtk.TextBuffer</link>"
 msgstr ""
-"On compare ensuite le texte de cette étiquette à la note à l'aide de la "
-"fonction <code>g_str_equal</code> et <code>play_sound</code> est appelée "
-"avec la fréquence appropriée à cette note. Cela joue la note ; nous avons un "
-"accordeur de guitare opérationnel !"
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
 
-#: C/guitar-tuner.c.page:258(p)
+#. (itstool) path: item/p
+#: C/textview.js.page:258
+#, fuzzy
+#| 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."
 msgid ""
-"If you run into problems with the tutorial, compare your code with this "
-"<link href=\"guitar-tuner/guitar-tuner.c\">reference code</link>."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TextView.html";
+"\">Gtk.TextView</link>"
 msgstr ""
-"Si vous rencontrez des difficultés avec ce tutoriel, comparez votre "
-"programme à ce <link href=\"guitar-tuner/guitar-tuner.c\">programme de "
-"référence</link>."
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
 
-#: C/GtkApplicationWindow.vala.page:7(title)
+#. (itstool) path: info/title
+#: C/textview.py.page:8
 #, fuzzy
-#| msgid "ApplicationWindow"
-msgid "ApplicationWindow (Vala)"
-msgstr "ApplicationWindow"
+#| msgid "TextView (Python)"
+msgctxt "text"
+msgid "TextView (Python)"
+msgstr "TextView (Python)"
 
-#: C/GtkApplicationWindow.vala.page:17(desc)
-#: C/GtkApplicationWindow.py.page:22(desc)
-#: C/GtkApplicationWindow.js.page:17(desc)
-msgid "GtkWindow subclass with GtkApplication support"
-msgstr "Sous-classe GtkWindow avec la prise en charge de GtkApplication"
+#. (itstool) path: info/desc
+#: C/textview.py.page:27
+msgid "Widget that displays a GtkTextBuffer"
+msgstr "L'élément graphique qui affiche un GtkTextBuffer"
 
-#: C/GtkApplicationWindow.vala.page:20(title)
-#: C/GtkApplicationWindow.py.page:25(title)
-#: C/GtkApplicationWindow.js.page:20(title)
-#: C/GtkApplicationWindow.c.page:20(title)
-msgid "ApplicationWindow"
-msgstr "ApplicationWindow"
+#. (itstool) path: note/p
+#: C/textview.py.page:32
+msgid "This is an example of Gtk.TextView."
+msgstr "Ceci est un exemple de Gtk.TextView."
 
-#: C/GtkApplicationWindow.vala.page:22(p) C/GtkApplicationWindow.py.page:27(p)
-msgid "The simplest GtkApplication Window which can support Menus."
-msgstr "L'application Gtk la plus simple qui prend en charge les menus."
+#. (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 ""
+"Mais il peut également y avoir un retour à la ligne si nous écrivons une "
+"longue phrase (la césure se fait entre deux mots)."
 
-#: C/GtkApplicationWindow.py.page:7(title)
-#, fuzzy
-#| msgid "ApplicationWindow"
-msgid "ApplicationWindow (Python)"
-msgstr "ApplicationWindow"
+#. (itstool) path: note/p
+#: C/textview.py.page:35
+msgid "If we have a loooooooooooooooooooooooooooooooooooong"
+msgstr "Si nous avons un loooooooooooooooooooooooooooooooooooong"
 
-#: C/GtkApplicationWindow.py.page:38(title)
-msgid "Useful methods for a Gtk.ApplicationWindow widget"
-msgstr "Méthodes utiles pour un élément graphique Gtk.ApplicationWindow"
+#. (itstool) path: note/p
+#: C/textview.py.page:36
+msgid "(that was long)"
+msgstr "(long comme ça)"
 
-#: C/GtkApplicationWindow.js.page:7(title)
-#, fuzzy
-#| msgid "ApplicationWindow"
-msgid "ApplicationWindow (JavaScript)"
-msgstr "ApplicationWindow"
+#. (itstool) path: note/p
+#: C/textview.py.page:37
+msgid "word, an horizontal scrollbar will appear."
+msgstr "mot, une barre de défilement horizontale apparaît."
 
-#: C/GtkApplicationWindow.js.page:22(p)
-msgid "A simple GtkApplicationWindow which can support Menus."
-msgstr "Une simple GtkApplicationWindow qui prend en charge les menus."
+#. (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 ""
 
-#: C/GtkApplicationWindow.c.page:7(title)
-#, fuzzy
-#| msgid "ApplicationWindow"
-msgid "ApplicationWindow (C)"
-msgstr "ApplicationWindow"
+#. (itstool) path: section/title
+#: C/textview.py.page:50
+msgid "Useful methods for a TextView widget"
+msgstr "Méthodes utiles pour un élément graphique TextView"
 
-#: C/GtkApplicationWindow.c.page:17(desc)
-msgid "A toplevel window which can contain other widgets, and support GMenu"
+#. (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 ""
-"Une fenêtre de niveau supérieur qui peut contenir d'autres éléments "
-"graphiques et prend en charge GMenu."
-
-#: C/GtkApplicationWindow.c.page:22(p)
-msgid "A minimal GtkApplication with a GtkApplicationWindow"
-msgstr "Une application Gtk minimale avec une GtkApplicationWindow"
+"Un <code>Gtk.TextView</code> affiche le texte stocké dans le tampon d'un "
+"<code>Gtk.TextBuffer</code>. Cependant, la plupart des manipulations de "
+"texte se font avec des itérateurs représentés par un <code>Gtk.TextIter</"
+"code> - une position entre deux caractères dans le tampon du texte. Les "
+"itérateurs ne restent pas valides indéfiniment ; à chaque fois que le tampon "
+"se trouve modifié d'une façon qui affecte son contenu, tous les itérateurs "
+"en cours deviennent non valides. À cause de cela, les itérateurs ne peuvent "
+"pas être utilisés pour préserver les positions en cas de modifications du "
+"tampon. Pour préserver une position, nous utilisons donc un marqueur "
+"<code>Gtk.TextMark</code>, qui peut être rendu visible avec "
+"<code>visible(True)</code>. Un tampon de texte contient deux marqueurs "
+"intégrés : un marqueur « insert » (la position du curseur) et un marqueur "
+"« selection_bound » (limite de sélection)."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/grid.vala.page:23(None) C/grid.js.page:25(None) C/grid.c.page:22(None)
-msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
-msgstr "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+#. (itstool) path: section/p
+#: C/textview.py.page:52
+msgid "Methods for a TextView widget:"
+msgstr "Méthodes pour un élément graphique TextView :"
 
-#: C/grid.vala.page:7(title)
-msgid "Grid (Vala)"
+#. (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 ""
+"L'élément graphique TextView est modifiable par défaut. Si vous préférez le "
+"contraire, utilisez <code>set_editable(False)</code>. Si le tampon ne "
+"contient pas de texte modifiable, c'est une bonne idée d'utiliser "
+"<code>set_cursor_visible(False)</code> aussi."
 
-#: C/grid.vala.page:19(desc) C/grid.py.page:24(desc) C/grid.js.page:21(desc)
-#: C/grid.c.page:17(desc)
-msgid "Pack widgets in rows and columns"
-msgstr "Ranger les éléments graphiques en lignes et colonnes"
+#. (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 ""
+"La justification du texte est définie par <code>set_justification(Gtk."
+"Justification.JUSTIFICATION)</code> où <code>JUSTIFICATION</code> est l'une "
+"des valeurs <code>LEFT, RIGHT, CENTER, FILL</code>."
 
-#: C/grid.vala.page:22(title)
-msgid "Grid widget"
-msgstr "Élément graphique Grille"
+#. (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 ""
+"La césure du texte est définie par <code>set_wrap_mode(Gtk.WrapMode.WRAP)</"
+"code> où <code>WRAP</code> est une des valeurs <code>NONE</code> (la zone de "
+"texte s'élargit), <code>CHAR</code> (fait la césure n'importe où le curseur "
+"peut apparaître), <code>WORD</code> (fait la césure entre deux mots), "
+"<code>WORD_CHAR</code> (fait la césure entre deux mots, mais si cela ne "
+"suffit pas, la fait entre deux caractères)."
 
-#: C/grid.vala.page:24(p) C/grid.c.page:23(p)
-msgid "A button widget connected to a progress bar."
-msgstr "Un élément graphique bouton connecté à une barre de progression."
+#. (itstool) path: section/p
+#: C/textview.py.page:58
+msgid "Methods for a TextBuffer widget:"
+msgstr "Méthodes pour un élément graphique TextBuffer :"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/grid.py.page:29(None)
-msgid "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
-msgstr "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
+#. (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 ""
+"La méthode <code>get_insert()</code> retourne le marqueur <code>Gtk."
+"TextMark</code> qui représente le curseur, c'est-à-dire le point d'insertion."
 
-#: C/grid.py.page:7(title)
-#, fuzzy
-#| msgid "Python"
-msgid "Grid (Python)"
-msgstr "Python"
+#. (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 ""
+"La méthode <code>get_selection_bound()</code> renvoie le marqueur <code>Gtk."
+"TextMark</code> qui représente les limites de la sélection."
 
-#: C/grid.py.page:30(p)
-msgid "Some labels in a grid."
-msgstr "Quelques étiquettes dans une grille."
+#. (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 ""
+"La méthode <code>set_text(\"du texte\", longueur)</code> où <code>longueur</"
+"code> est un nombre entier positif ou <code>-1</code> définit le contenu du "
+"tampon comme étant les <code>longueur</code> premiers caractères du texte "
+"<code>du texte</code>. Si <code>longueur</code> est omis ou égal à <code>-1</"
+"code>, tout le texte est inséré. Le contenu du tampon, s'il existe, est "
+"détruit."
 
-#: C/grid.py.page:40(title)
-msgid "Useful methods for a Grid widget"
-msgstr "Méthodes utiles pour un élément graphique Grille"
+#. (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 ""
+"La méthode <code>insert(iter, \"du texte\", longueur)</code>, où <code>iter</"
+"code> est un itérateur et <code>longueur</code> est un nombre entier positif "
+"ou <code>-1</code>, insère dans le tampon à l'endroit de <code>iter</code> "
+"les <code>longueur</code> premiers caractères du texte <code>du texte</"
+"code>. Si <code>longueur</code> est omis ou égal à <code>-1</code>, tout le "
+"texte est inséré."
 
-#: C/grid.py.page:43(p)
+#. (itstool) path: item/p
+#: C/textview.py.page:64
 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>."
+"<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 ""
-"Pour joindre un élément graphique <code>enfant</code> à l'emplacement "
-"<code>gauche, superieur</code> dans un créneaux de taille <code>largeur, "
-"hauteur</code> donné, utilisez la méthode <code>attach(enfant, superieur, "
-"gauche, largeur, hauteur)</code>. S'il y a déjà un élément graphique "
-"<code>sibling</code> à cette place, utilisez la fonction <code>attach_next_to"
-"(enfant, sibling, side, largeur, hauteur)</code>, où <code>side</code> est "
-"l'une des positions <code>Gtk.PositionType.LEFT, Gtk.PositionType.RIGHT, Gtk."
-"PositionType.TOP, Gtk.PositionType.BOTTOM</code>."
+"La méthode <code>insert_at_cursor(\"du texte\", longueur)</code> effectue la "
+"même action que <code>insert(iter, \"du texte\", length)</code>, avec le "
+"curseur actuel comme <code>iter</code>."
 
-#: C/grid.py.page:44(p)
+#. (itstool) path: item/p
+#: C/textview.py.page:65
 msgid ""
-"<code>insert_row(position)</code> and <code>insert_column(position)</code> "
-"do exactly what they say; children which are attached at or below this "
-"position are moved one row down, and children which span across this "
-"position are grown to span the new row. <code>insert_next_to(sibling, side)</"
-"code> inserts a row or column at the specified position. The new row or "
-"column is placed next to <code>sibling</code>, on the side determined by "
-"<code>side</code>; if side is <code>Gtk.PositionType.TOP</code> or <code>Gtk."
-"PositionType.BOTTOM</code>, a row is inserted, if side is <code>Gtk."
-"PositionType.LEFT</code> of <code>Gtk.PositionType.RIGHT</code>, a column is "
-"inserted."
+"<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 ""
-"Les méthodes <code>insert_row(position)</code> et <code>insert_column"
-"(position)</code> font littéralement ce qu'elles indiquent ; les enfants "
-"liés à ou au-dessous de cette position sont descendus une ligne plus bas et "
-"les enfants qui s'étendent sur cette position sont agrandis pour s'étendre "
-"sur la nouvelle ligne. La fonction <code>insert_next_to(sibling, side)</"
-"code> insère une ligne ou une colonne à la position spécifiée. La nouvelle "
-"ligne ou nouvelle colonne est placée à côté de <code>sibling</code>, du côté "
-"défini par <code>side</code> ; si side est défini à <code>Gtk.PositionType."
-"TOP</code> ou à <code>Gtk.PositionType.BOTTOM</code>, une ligne est "
-"insérée ; si side est défini à <code>Gtk.PositionType.LEFT</code> ou à "
-"<code>Gtk.PositionType.RIGHT</code>, une colonne est insérée."
+"La méthode <code>create_mark(\"nom_marqueur\", iter, left_gravity)</code>, "
+"où <code>iter</code> est un <code>Gtk.TextIter</code> et <code>left_gravity</"
+"code> une valeur booléenne, crée un marqueur <code>Gtk.TextMark</code> à "
+"l'emplacement de l'<code>iter</code>. Si la valeur de <code>\"nom_marqueur"
+"\"</code> est <code>None</code>, le marqueur est anonyme ; sinon, le "
+"marqueur peut être récupéré par son nom avec <code>get_mark()</code>. Si un "
+"marqueur possède la propriété left_gravity et que le texte est inséré à son "
+"emplacement actuel, alors le marqueur est déplacé à gauche du texte qui "
+"vient d'être inséré. Si la valeur <code>left_gravity</code> est omise, alors "
+"la valeur <code>False</code> est utilisée par défaut."
 
-#: C/grid.py.page:45(p)
+#. (itstool) path: item/p
+#: C/textview.py.page:67
 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."
+"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 ""
-"Les méthodes <code>set_row_homogeneous(True)</code> et "
-"<code>set_column_homogeneous(True)</code> vérifient que chaque ligne ou "
-"chaque colonne a la même largeur ou la même hauteur."
+"Pour indiquer qu'un morceau de texte du tampon doit être formatée "
+"spécifiquement, vous devez définir une étiquette contenant cette information "
+"de formatage et ensuite l'appliquer à la portion de texte en utilisant "
+"<code>create_tag(\"nom etiquette\", propriété)</code> et "
+"<code>apply_tag(tag, start_iter, end_iter)</code>, par exemple comme ceci :"
 
-#: C/grid.py.page:46(p)
+#. (itstool) path: item/code
+#: C/textview.py.page:68
+#, no-wrap
 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>"
+"\n"
+"tag = textbuffer.create_tag(\"orange_bg\", background=\"orange\")\n"
+"textbuffer.apply_tag(tag, start_iter, end_iter)"
 msgstr ""
-"Les méthodes <code>set_row_spacing(espace)</code> et <code>set_column_spacing"
-"(espace)</code> forcent un espace entre (respectivement) les lignes ou les "
-"colonnes. La valeur de <code>espace</code> peut être comprise entre <code>0</"
-"code>, qui est la valeur par défaut et <code>32767</code>"
+"\n"
+"etiquette = textbuffer.create_tag(\"fond_orange\", background=\"orange\")\n"
+"textbuffer.apply_tag(etiquette, start_iter, end_iter)"
 
-#: C/grid.js.page:7(title)
-#, fuzzy
-#| msgid "JavaScript"
-msgid "Grid (JavaScript)"
-msgstr "JavaScript"
+#. (itstool) path: item/p
+#: C/textview.py.page:71
+msgid "The following are some of the common styles applied to text:"
+msgstr "Voici quelques styles les plus usuels appliqués à du texte :"
+
+#. (itstool) path: item/p
+#: C/textview.py.page:73
+msgid "Background colour (\"background\" property)"
+msgstr "Couleur d'arrière-plan (propriété « background »)"
+
+#. (itstool) path: item/p
+#: C/textview.py.page:74
+msgid "Foreground colour (\"foreground\" property)"
+msgstr "Couleur de premier plan (propriété « foreground »)"
+
+#. (itstool) path: item/p
+#: C/textview.py.page:75
+msgid "Underline (\"underline\" property)"
+msgstr "Souligné (propriété « underline »)"
+
+#. (itstool) path: item/p
+#: C/textview.py.page:76
+msgid "Bold (\"weight\" property)"
+msgstr "Gras (propriété « weight »)"
+
+#. (itstool) path: item/p
+#: C/textview.py.page:77
+msgid "Italics (\"style\" property)"
+msgstr "Italique (propriété « style »)"
 
-#: C/grid.js.page:26(p)
+#. (itstool) path: item/p
+#: C/textview.py.page:78
+msgid "Strikethrough (\"strikethrough\" property)"
+msgstr "Barré (propriété « strikethrough »)"
+
+#. (itstool) path: item/p
+#: C/textview.py.page:79
+msgid "Justification (\"justification\" property)"
+msgstr "Justifié (propriété « justification »)"
+
+#. (itstool) path: item/p
+#: C/textview.py.page:80
+msgid "Size (\"size\" and \"size-points\" properties)"
+msgstr "Taille (propriétés « size » et « size-points »)"
+
+#. (itstool) path: item/p
+#: C/textview.py.page:81
+msgid "Text wrapping (\"wrap-mode\" property)"
+msgstr "Césure (propriété « wrap-mode »)"
+
+#. (itstool) path: item/p
+#: C/textview.py.page:83
 msgid ""
-"A button widget connected to a progress bar, inside of a grid which handles "
-"the layout."
+"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 ""
-"Un élément graphique bouton connecté à une barre de progression, à "
-"l'intérieur d'une grille qui gère l'agencement."
+"Vous pouvez aussi supprimer par la suite certaines étiquettes en particulier "
+"avec <code>remove_tag()</code>, ou supprimer toutes celles d'une région "
+"donnée avec <code>remove_all_tags()</code>."
 
-#: C/grid.c.page:7(title)
-#, fuzzy
-#| msgid "Grid"
-msgid "Grid (C)"
-msgstr "Grille"
+#. (itstool) path: section/p
+#: C/textview.py.page:85
+msgid "Methods for a TextIter widget"
+msgstr "Méthodes pour un élément graphique TextIter"
 
-#: C/grid.c.page:34(link) C/buttonbox.py.page:49(link)
-#: C/button.py.page:52(link) C/button.c.page:35(link)
-msgid "GtkButton"
-msgstr "GtkButton"
+#. (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 ""
+"La méthode <code>forward_search(needle, flags, limit)</code> effectue une "
+"recherche en avant de <code>needle</code> (cible). La recherche ne "
+"s'effectue pas au delà de l'itérateur <code>Gtk.TextIter</code>. Les "
+"<code>flags</code> (drapeaux) peuvent être définis comme l'un des éléments "
+"suivants, ou comme n'importe quelle combinaison de l'un d'eux, en les "
+"concaténant avec l'opérateur binaire OR <code>|</code> : <code>0</code> (la "
+"correspondance doit être exacte) ; <code>Gtk.TextSearchFlags.VISIBLE_ONLY</"
+"code> (la correspondance peut contenir du texte invisible intercalé dans la "
+"sélection) ; <code>Gtk.TextSearchFlags.TEXT_ONLY</code> (la correspondance "
+"peut contenir des pixbufs ou des éléments graphiques enfants mélangés dans "
+"la sélection) ; <code>Gtk.TextSearchFlags.CASE_INSENSITIVE</code> (la "
+"correspondance n'est pas sensible à la casse). La méthode renvoie un tuple "
+"contenant un <code>Gtk.TextIter</code> qui pointe vers le début et vers le "
+"premier caractère après la correspondance ; s'il n'y a pas de "
+"correspondance, elle renvoie la valeur <code>None</code>."
+
+#. (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 ""
+"La méthode <code>backward_search(needle, flags, limit)</code> effectue les "
+"même actions que <code>forward_search()</code>, mais en arrière."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/gmenu.vala.page:27(None)
-msgid "@@image: 'media/gmenu.vala.png'; md5=7a9f381fc3ed5bf8d1c50d2acb095400"
-msgstr "@@image: 'media/gmenu.vala.png'; md5=7a9f381fc3ed5bf8d1c50d2acb095400"
+#. (itstool) path: item/p
+#: C/textview.py.page:96
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTextView.html";
+"\">GtkTextView</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/gmenu.vala.page:7(title)
-msgid "GMenu (Vala)"
+#. (itstool) path: item/p
+#: C/textview.py.page:97
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTextBuffer.html";
+"\">GtkTextBuffer</link>"
 msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/gmenu.vala.page:13(name) C/aboutdialog.vala.page:14(name)
-msgid "Ryan Lortie"
-msgstr "Ryan Lortie"
+#. (itstool) path: item/p
+#: C/textview.py.page:98
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTextTag.html";
+"\">GtkTextTag</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/gmenu.vala.page:14(email) C/aboutdialog.vala.page:15(email)
-msgid "desrt desrt ca"
-msgstr "desrt desrt ca"
+#. (itstool) path: info/title
+#: C/textview.vala.page:8
+#, fuzzy
+#| msgid "TextView (Vala)"
+msgctxt "text"
+msgid "TextView (Vala)"
+msgstr "TextView (Vala)"
 
-#: C/gmenu.vala.page:23(desc) C/gmenu.js.page:17(desc) C/gmenu.c.page:17(desc)
-msgid "A simple implementation of GMenuModel"
-msgstr "Une implémentation simple de GMenuModel"
+#. (itstool) path: note/p
+#: C/textview.vala.page:25
+msgid ""
+"If we have a loooooooooooooooooooooooooooooooooooong word, a horizontal "
+"scrollbar will appear."
+msgstr ""
+"Si nous avons un loooooooooooooooooooooooooooooooooooong mot, une barre de "
+"défilement horizontale apparaît."
 
-#: C/gmenu.vala.page:29(em)
-msgid "You need to be running Gtk+-3.4 or later for this to work"
+#. (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 ""
-"Pour que cela fonctionne, il vous faut avoir installé Gtk+-3.4 ou supérieur"
 
-#: C/gmenu.vala.page:32(p)
+#. (itstool) path: item/p
+#: C/textview.vala.page:35
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"This program will not compile with the quit action connected until <link "
-"href=\"https://bugzilla.gnome.org/show_bug.cgi?id=674090\";>Bug #674090</"
-"link> is fixed. Therefore, the problematic line has been commented out."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TextBuffer.html\";>Gtk."
+"TextBuffer</link>"
 msgstr ""
-"Ce programme ne se compilera pas avec l'action « quitter » connectée, tant "
-"que le <link href=\"https://bugzilla.gnome.org/show_bug.cgi?id=674090\";>Bug "
-"#674090</link> ne sera pas résolu. En conséquence, la ligne posant problème "
-"a été mise en commentaire."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/gmenu.vala.page:34(p) C/gmenu.py.page:28(p) C/gmenu.js.page:22(p)
-#: C/gmenu.c.page:22(p)
-msgid "A GtkApplication with a simple GMenu and SimpleActions"
-msgstr "Une application Gtk avec un GMenu de base et des SimpleActions"
+#. (itstool) path: item/p
+#: C/textview.vala.page:36
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TextView.html\";>Gtk."
+"TextView</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/gmenu.vala.page:43(link)
-msgid "Menu"
-msgstr "Menu"
+#. (itstool) path: item/p
+#: C/textview.vala.page:38
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WrapMode.html\";>Gtk."
+"WrapMode</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/gmenu.vala.page:44(link)
-msgid "append"
-msgstr "append"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/togglebutton.png'; md5=791e062613d4f9bd5936390b0aa18448"
+msgctxt "_"
+msgid ""
+"external ref='media/togglebutton.png' md5='791e062613d4f9bd5936390b0aa18448'"
+msgstr ""
+"@@image: 'media/togglebutton.png'; md5=791e062613d4f9bd5936390b0aa18448"
 
-#: C/gmenu.vala.page:45(link)
-msgid "SimpleAction"
-msgstr "SimpleAction"
+#. (itstool) path: info/title
+#: C/togglebutton.c.page:8
+#, fuzzy
+#| msgid "ToggleButton (C)"
+msgctxt "text"
+msgid "ToggleButton (C)"
+msgstr "ToggleButton (C)"
 
-#: C/gmenu.vala.page:46(link)
-msgid "add_action"
-msgstr "add_action"
+#. (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 "Un bouton qui mémorise l'état"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/gmenu.py.page:27(None)
-msgid "@@image: 'media/gmenu.py.png'; md5=52c68b34d5d566f37e9f803dedb6353a"
-msgstr "@@image: 'media/gmenu.py.png'; md5=52c68b34d5d566f37e9f803dedb6353a"
+#. (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 "ToggleButton"
 
-#: C/gmenu.py.page:7(title)
-#, fuzzy
-#| msgid "Python"
-msgid "GMenu (Python)"
-msgstr "Python"
+#. (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 "Quand ce ToggleButton est activé, l'indicateur d'activité tourne."
 
-#: C/gmenu.py.page:23(desc)
-msgid "A simple implementation of GMenu"
-msgstr "Une implémentation simple de GMenu"
+#. (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 ""
 
-#: C/gmenu.py.page:29(em) C/gmenu.c.page:23(em) C/aboutdialog.vala.page:31(em)
-#: C/aboutdialog.c.page:26(em)
-msgid "You need to be running Gtk3.4 or later for this to work"
+#. (itstool) path: item/p
+#: C/togglebutton.c.page:39
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkToggleButton.html";
+"\">GtkTogglebutton</link>"
 msgstr ""
-"Pour que cela fonctionne, il vous faut avoir installé Gtk3.4 ou supérieur"
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/gmenu.py.page:40(title)
-msgid "Useful methods for a GSimpleAction and a GMenu"
-msgstr "Méthodes utiles pour GSimpleAction et GMenu"
+#. (itstool) path: info/title
+#: C/togglebutton.js.page:8
+#, fuzzy
+#| msgid "ToggleButton (JavaScript)"
+msgctxt "text"
+msgid "ToggleButton (JavaScript)"
+msgstr "ToggleButton (JavaScript)"
 
-#: C/gmenu.py.page:42(p)
-msgid "Useful methods for a GSimpleAction:"
-msgstr "Méthodes utiles pour GSimpleAction :"
+#. (itstool) path: info/desc
+#: C/togglebutton.js.page:18
+msgid "Stays pressed until you click it again"
+msgstr "Reste enfoncé jusqu'à ce que vous cliquiez dessus à nouveau"
 
-#: C/gmenu.py.page:44(p)
+#. (itstool) path: page/p
+#: C/togglebutton.js.page:23
 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"
+"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 ""
-"Pour créer une nouvelle action qui est <em>stateless</em>, c-à-d. une action "
-"qui ne retient ni ne dépend d'un état définit par l'action elle-même, "
-"utilisez"
+"Un ToggleButton ressemble à un <link xref=\"button.js\">bouton</link> "
+"normal, sauf qu'il reste enfoncé après l'avoir cliqué. Vous pouvez "
+"l'utiliser comme un commutateur allumé/éteint pour contrôler des éléments "
+"comme l'<link xref=\"spinner.js\">indicateur d'activité</link> de cet "
+"exemple."
 
-#: C/gmenu.py.page:45(code)
+#. (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 ""
+"La méthode get_active d'un ToggleButton renvoie « true » (vrai) s'il est "
+"enfoncé et « false » dans le cas contraire. Utilisez sa méthode set_active "
+"si vous souhaitez changer son état sans avoir besoin de cliquer dessus. "
+"Quand il passe de l'état « enfoncé » à « relâché » et vice versa, il envoie "
+"le signal « toggled » que vous pouvez connecter à une fonction afin "
+"d'effectuer une action."
+
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:41
 #, no-wrap
 msgid ""
 "\n"
-"action = Gio.SimpleAction.new(\"name\", parameter_type)"
-msgstr ""
+"const ToggleButtonExample = new Lang.Class({\n"
+"    Name: 'ToggleButton Example',\n"
 "\n"
-"action = Gio.SimpleAction.new(« nom », parameter_type)"
-
-#: C/gmenu.py.page:47(p)
-msgid ""
-"where <code>\"name\"</code> is the name of the action and "
-"<code>parameter_type</code> is the type of the parameters that the action "
-"receives when being activated. This can be <code>None</code>, or <code>GLib."
-"VariantType.new('s')</code> if the parameter is of type <code>str</code>, or "
-"instead of <code>'s'</code> a character as described <link href=\"http://";
-"developer.gnome.org/glib/unstable/glib-GVariantType.html\">here</link>. To "
-"create a new <em>stateful</em> (i.e. not stateless) action, use"
+"    // 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 ""
-"où <code>« nom »</code> est le nom de l'action et <code>parameter_type</"
-"code> est le type de paramètre que l'action reçoit quand elle est activée. "
-"Ce peut être <code>None</code>, ou <code>GLib.VariantType.new('s')</code> si "
-"le paramètre est du type <code>str</code>, ou au lieu de <code>'s'</code>, "
-"un caractère tel que décrit <link href=\"http://developer.gnome.org/glib/";
-"unstable/glib-GVariantType.html\">ici</link>."
 
-#: C/gmenu.py.page:48(code)
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:68
 #, no-wrap
 msgid ""
 "\n"
-"action = Gio.SimpleAction.new_stateful(\"name\", parameter_type, initial_state)"
-msgstr ""
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
 "\n"
-"action = Gio.SimpleAction.new_stateful(« nom », parameter_type, initial_state)"
+"        // 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 "Création du ToggleButton et des autres éléments graphiques"
 
-#: C/gmenu.py.page:50(p)
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:86
+#, no-wrap
 msgid ""
-"where <code>initial_state</code> is defined as a GVariant - for instance "
-"<code>Glib.Variant.new_string('start')</code>; for a list of possiblities "
-"see <link href=\"http://developer.gnome.org/glib/unstable/glib-GVariant.html";
-"\">here</link>."
+"\n"
+"        // Create the spinner that the button stops and starts\n"
+"        this._spinner = new Gtk.Spinner ({hexpand: true, vexpand: true});\n"
 msgstr ""
-"où <code>initial_state</code> est défini comme étant une GVariant - par "
-"exemple <code>Glib.Variant.new_string('start')</code> ; voyez <link href="
-"\"http://developer.gnome.org/glib/unstable/glib-GVariant.html\";>ici</link> "
-"pour accéder à une liste des possibilités."
 
-#: C/gmenu.py.page:51(p)
+#. (itstool) path: section/p
+#: C/togglebutton.js.page:91
 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."
+"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 ""
-"La méthode <code>set_enabled(True)</code> définit l'action à enabled ; une "
-"action doit être en position enabled pour pouvoir être activée ou pour voir "
-"son état modifié par des appels extérieurs. La fonction ne peut être appelée "
-"que par l'implémenteur de l'action. Les utilisateurs de l'action ne doivent "
-"pas tenter de modifier son drapeau enabled."
+"Nous voulons que cet <link xref=\"spinner.js\">indicateur d'activité</link> "
+"puisse s'étendre verticalement et horizontalement pour prendre le maximum "
+"d'espace disponible dans la fenêtre."
 
-#: C/gmenu.py.page:52(p)
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:93
+#, no-wrap
 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."
+"\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 ""
-"La fonction <code>set_state(state)</code>, où <code>state</code> est une "
-"GVariant, définit l'état de l'action en mettant à jour la propriété "
-"« state » à la valeur donnée. Elle ne peut être appelée que par "
-"l'implémenteur de l'action ; par contre, les utilisateurs peuvent appeler "
-"<code>change_state(state)</code> (où <code>state</code> est une GVariant) "
-"pour demander le changement d'état."
 
-#: C/gmenu.py.page:55(p)
-msgid "Useful methods for a GMenu:"
-msgstr "Méthodes utiles pour un GMenu :"
-
-#: C/gmenu.py.page:57(p)
+#. (itstool) path: section/p
+#: C/togglebutton.js.page:99
 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\"/>."
+"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 ""
-"Pour insérer un élément dans le menu à la <code>position</code>, utilisez la "
-"méthode <code>insert(position, label, detailed_action)</code>, où "
-"<code>label</code> est l'étiquette qui s'affiche dans le menu et "
-"<code>detailed_action</code> est une chaîne de caractères composée du nom de "
-"l'action à laquelle vous ajoutez le préfixe <code>app.</code>. Pour de plus "
-"amples détails, consultez <link xref=\"menubar.py#win-app\"/>."
+"La création d'un ToggleButton ressemble beaucoup à la création d'un <link "
+"xref=\"button.js\">bouton</link> normal. La plus grosse différence réside "
+"dans le fait que vous manipulez un signal « toggled » au lieu d'un signal "
+"« clicked ». Ce code relie la fonction _onToggle à ce signal, de sorte "
+"qu'elle est appelée à chaque fois que le ToggleButton est commuté."
 
-#: C/gmenu.py.page:58(p)
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:101
+#, no-wrap
 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>."
+"\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 ""
-"Pour joindre ou ajouter un élément dans le menu, utilisez respectivement les "
-"méthodes <code>append(label, detailed_action)</code> et <code>prepend(label, "
-"detailed_action)</code>."
 
-#: C/gmenu.py.page:59(p)
+#. (itstool) path: section/p
+#: C/togglebutton.js.page:109
 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:"
+"Here we create a simple <link xref=\"grid.js\">Grid</link> to organize "
+"everything in, then attach the Spinner and ToggleButton to it."
 msgstr ""
-"Une autre méthode pour ajouter des éléments au menu est de les créer comme "
-"des éléments <code>GMenuItem</code> et d'utiliser l'une des fonctions "
-"<code>insert_item(position, item)</code>, <code>append_item(item)</code>, ou "
-"<code>prepend_item(item)</code> ; par exemple :"
+"Nous créons ici une simple <link xref=\"grid.js\">grille</link> pour tout "
+"ranger dedans, puis nous lui attachons le Spinner (indicateur d'activité) et "
+"le ToggleButton."
 
-#: C/gmenu.py.page:60(code)
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:111
 #, no-wrap
 msgid ""
 "\n"
-"about = Gio.MenuItem.new(\"About\", \"app.about\")\n"
-"menu.append_item(about)"
-msgstr ""
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
 "\n"
-"about = Gio.MenuItem.new(\"About\", \"app.about\")\n"
-"menu.append_item(about)"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+msgstr ""
 
-#: C/gmenu.py.page:64(p)
+#. (itstool) path: section/p
+#: C/togglebutton.js.page:119
 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."
+"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 ""
-"Nous pouvons aussi ajouter une sous-section entière dans un menu avec "
-"<code>insert_section(position, label, section)</code>, <code>append_section"
-"(label, section)</code>, ou <code>prepend_section(label, section)</code>, où "
-"<code>label</code> est le titre de la sous-section."
+"Ensuite, nous ajoutons la grille à la fenêtre et demandons à celle-ci de "
+"s'afficher ainsi que ses éléments graphiques enfants quand l'application est "
+"démarrée."
+
+#. (itstool) path: section/title
+#: C/togglebutton.js.page:123
+msgid "Making something happen when the ToggleButton is toggled"
+msgstr "Déclenchement d'une action quand le ToggleButton est commuté"
 
-#: C/gmenu.py.page:65(p)
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:125
+#, no-wrap
 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."
+"\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 ""
-"Pour ajouter un sous-menu qui va s'étendre et se contracter, utilisez l'une "
-"des méthodes <code>insert_submenu(position, label, section)</code>, "
-"<code>append_submenu(label, section)</code>, ou bien <code>prepend_submenu"
-"(label, section)</code>, où <code>label</code> est le titre du sous-menu."
 
-#: C/gmenu.py.page:66(p)
-#, fuzzy
-msgid "To remove an item from the menu, use <code>remove(postion)</code>."
+#. (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 ""
-"Pour supprimer un élément du menu, utilisez la fonction <code>remove"
-"(position)</code>."
+"Chaque fois que quelqu'un commutte le bouton, cette fonction vérifie s'il "
+"est enfoncé ou non en utilisant get_active et, selon le cas, démarre ou "
+"arrête l'indicateur d'activité. Nous voulons qu'il ne tourne que lorsque le "
+"bouton est enfoncé, donc, si get_active renvoie la valeur true (vrai), nous "
+"démarrons l'indicateur, sinon, nous lui indiquons de s'arrêter."
 
-#: C/gmenu.py.page:67(p)
-msgid "To set a label for the menu, use <code>set_label(label)</code>."
+#. (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 ""
-"Pour définir une étiquette pour le menu, utilisez la méthode <code>set_label"
-"(label)</code>."
-
-#: C/gmenu.py.page:78(link)
-msgid "GVariantType"
-msgstr "GVariantType"
-
-#: C/gmenu.py.page:79(link)
-msgid "GVariant"
-msgstr "GVariant"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/gmenu.js.page:21(None)
-msgid "@@image: 'media/gmenu.js.png'; md5=16b8bee122197771ec8498dac42f196b"
-msgstr "@@image: 'media/gmenu.js.png'; md5=16b8bee122197771ec8498dac42f196b"
+#. (itstool) path: section/code
+#: C/togglebutton.js.page:149
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const ToggleButtonExample = new Lang.Class({\n"
+"    Name: 'ToggleButton Example',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jstogglebutton',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 300,\n"
+"            default_width: 300,\n"
+"            border_width: 30,\n"
+"            title: \"ToggleButton Example\"});\n"
+"\n"
+"        // Create the spinner that the button stops and starts\n"
+"        this._spinner = new Gtk.Spinner ({hexpand: true, vexpand: true});\n"
+"\n"
+"        // Create the togglebutton that starts and stops the spinner\n"
+"        this._toggleButton = new Gtk.ToggleButton ({label: \"Start/Stop\"});\n"
+"        this._toggleButton.connect ('toggled', Lang.bind (this, this._onToggle));\n"
+"\n"
+"        // Create a grid and put everything in it\n"
+"        this._grid = new Gtk.Grid ({\n"
+"            row_homogeneous: false,\n"
+"            row_spacing: 15});\n"
+"        this._grid.attach (this._spinner, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._toggleButton, 0, 1, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onToggle: function() {\n"
+"\n"
+"        // Start or stop the spinner\n"
+"        if (this._toggleButton.get_active ())\n"
+"            this._spinner.start ();\n"
+"        else this._spinner.stop ();\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new ToggleButtonExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
 
-#: C/gmenu.js.page:7(title)
+#. (itstool) path: item/p
+#: C/togglebutton.js.page:159
 #, fuzzy
-#| msgid "JavaScript"
-msgid "GMenu (JavaScript)"
-msgstr "JavaScript"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/gmenu.c.page:21(None)
-msgid "@@image: 'media/gmenu.c.png'; md5=f305fc3cae8d16d72b734ee53b559e33"
-msgstr "@@image: 'media/gmenu.c.png'; md5=f305fc3cae8d16d72b734ee53b559e33"
+#| 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."
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ToggleButton.";
+"html\">Gtk.ToggleButton</link>"
+msgstr ""
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
 
-#: C/gmenu.c.page:7(title)
+#. (itstool) path: info/title
+#: C/togglebutton.py.page:8
 #, fuzzy
-#| msgid "GMenu"
-msgid "GMenu (C)"
-msgstr "GMenu"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/getting-ready.page:39(None)
-msgid "@@image: 'media/ubuntu.png'; md5=40845e4a40b335b1958da1403f01c13f"
-msgstr "@@image: 'media/ubuntu.png'; md5=40845e4a40b335b1958da1403f01c13f"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/getting-ready.page:44(None)
-msgid "@@image: 'media/fedora.png'; md5=19add55f4349fd9e90f3a50b344ba626"
-msgstr "@@image: 'media/fedora.png'; md5=19add55f4349fd9e90f3a50b344ba626"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/getting-ready.page:49(None)
-msgid "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
-msgstr "@@image: 'media/opensuse.png'; md5=a852a94199328e2f978c7f6a55bf8b54"
-
-#: C/getting-ready.page:6(title)
-msgid "Install GNOME development tools"
-msgstr "Installer les objets de développement GNOME"
+#| msgid "ToggleButton (Python)"
+msgctxt "text"
+msgid "ToggleButton (Python)"
+msgstr "ToggleButton (Python)"
 
-#: C/getting-ready.page:16(title)
-msgid "Getting ready for GNOME development"
-msgstr "Préparation de l'environnement pour le développement avec GNOME"
+#. (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 ""
 
-#: C/getting-ready.page:19(title)
-msgid "Install the required tools"
-msgstr "Installation des outils nécessaires"
+#. (itstool) path: section/title
+#: C/togglebutton.py.page:36
+msgid "Useful methods for a ToggleButton widget"
+msgstr "Méthodes utiles pour un élément graphique ToggleButton"
 
-#: C/getting-ready.page:20(p)
+#. (itstool) path: section/p
+#: C/togglebutton.py.page:37
 msgid ""
-"Before you can start coding you will have to install the required tools for "
-"GNOME development on your computer. This shouldn't take you more than ten "
-"minutes."
+"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 ""
-"Avant de pouvoir commencer à programmer, vous devez installer sur votre "
-"ordinateur les outils nécessaires au développement avec GNOME. Cela ne "
-"devrait pas vous prendre plus de dix minutes."
-
-#: C/getting-ready.page:25(title)
-msgid "Automatic installation"
-msgstr "Installation automatique"
 
-#: C/getting-ready.page:26(p)
+#. (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
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"On an up-to-date distribution you should be able to simply install the "
-"required packages by clicking on <link href=\"media/gnome-devtools.catalog"
-"\">Install now</link>."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkWidget.html";
+"\">GtkWidget</link>"
 msgstr ""
-"Avec une distribution à jour, vous devriez pouvoir installer les paquets "
-"nécessaires tout simplement en cliquant sur <link href=\"media/gnome-"
-"devtools.catalog\">Installer maintenant</link>."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/getting-ready.page:31(title)
-msgid "Manual installation"
-msgstr "Installation manuelle"
+#. (itstool) path: info/title
+#: C/togglebutton.vala.page:8
+#, fuzzy
+#| msgid "ToggleButton (Vala)"
+msgctxt "text"
+msgid "ToggleButton (Vala)"
+msgstr "ToggleButton (Vala)"
 
-#: C/getting-ready.page:32(p)
+#. (itstool) path: page/code
+#: C/togglebutton.vala.page:28
+#, no-wrap
 msgid ""
-"If you prefer manual installation you can find the instructions for the "
-"various distributions in the <link href=\"http://live.gnome.org/";
-"DeveloperTools/Installation\">GNOME wiki</link>. Click on the image to go "
-"directly to the installation page for your distribution:"
+"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 ""
-"Si vous préférez faire une installation manuelle, consultez les instructions "
-"pour les différentes distributions sur le <link href=\"http://live.gnome.org/";
-"DeveloperTools/Installation\">wiki GNOME</link>. Cliquez sur l'image pour "
-"aller directement à la page d'installation pour votre distribution :"
 
-#: C/getting-ready.page:39(media)
-msgid "Ubuntu"
-msgstr "Ubuntu"
+#. (itstool) path: item/p
+#: C/togglebutton.vala.page:33
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ToggleButton.html\";>Gtk."
+"ToggleButton</link>"
+msgstr ""
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/getting-ready.page:44(media)
-msgid "Fedora"
-msgstr "Fedora"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid "@@image: 'media/toolbar.png'; md5=f0350855eedf6343952b72d6d906f738"
+msgctxt "_"
+msgid "external ref='media/toolbar.png' md5='f0350855eedf6343952b72d6d906f738'"
+msgstr "@@image: 'media/toolbar.png'; md5=f0350855eedf6343952b72d6d906f738"
 
-#: C/getting-ready.page:49(media)
-msgid "OpenSuSE"
-msgstr "OpenSuSE"
+#. (itstool) path: info/title
+#: C/toolbar.c.page:8
+#, fuzzy
+#| msgid "Toolbar (Vala)"
+msgctxt "text"
+msgid "Toolbar (C)"
+msgstr "Barre d'outils (Vala)"
 
-#: C/getting-ready.page:52(link)
-msgid "Others"
-msgstr "Autres"
+#. (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 "Une barre de boutons"
 
-#: C/getting-ready.page:59(title)
-msgid "Required versions"
-msgstr "Versions requises"
+#. (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 "Barre d'outils"
 
-#: C/getting-ready.page:60(p)
+#. (itstool) path: page/p
+#: C/toolbar.c.page:26 C/toolbar.js.page:23 C/toolbar.vala.page:25
 msgid ""
-"The guides assume that you have at least the following versions of the tools "
-"installed:"
+"Toolbar can contain either text or stock icons. In this sample we use stock "
+"icons. This example has fullscreen functionality."
 msgstr ""
-"Dans ce manuel, il est supposé que vous possédez au minimum les versions "
-"suivantes des outils installées :"
-
-#: C/getting-ready.page:63(p)
-msgid "Anjuta - 3.0"
-msgstr "Anjuta - 3.0"
-
-#: C/getting-ready.page:64(p)
-msgid "Devhelp - 3.0"
-msgstr "Devhelp - 3.0"
-
-#: C/getting-ready.page:65(p)
-msgid "Glade - 3.10"
-msgstr "Glade - 3.10"
+"La barre d'outils peut contenir soit du texte, soit des icônes de la "
+"collection. Dans cet exemple, nous utilisons les icônes de la collection. "
+"Cet exemple possède la fonction plein écran."
 
-#: C/getting-ready.page:67(p)
+#. (itstool) path: page/p
+#: C/toolbar.c.page:27
+#, fuzzy
+#| msgid ""
+#| "This example uses SimpleActions (window and app). App actions can easily "
+#| "be added the the app menu."
 msgid ""
-"Of course, any newer version will also work. Now, we wish you a lot of fun "
-"with the <link xref=\"index\">Demos</link>."
+"This example uses SimpleActions (window and app). App actions can easily be "
+"added to the app menu."
 msgstr ""
-"Bien sûr, n'importe quelle version supérieure convient aussi. Maintenant, "
-"nous vous souhaitons de prendre beaucoup de plaisir avec ces <link xref="
-"\"index\">exemples</link>."
+"Cet exemple utilise SimpleActions (fenêtre et application). Les actions "
+"applications peuvent être facilement ajoutées au menu « Applications »."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/fontchooserwidget.py.page:23(None)
+#. (itstool) path: page/code
+#: C/toolbar.c.page:29
+#, no-wrap
 msgid ""
-"@@image: 'media/fontchooserwidget.png'; md5=9161245e307b432ae1313e9a9941edae"
+"\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 ""
-"@@image: 'media/fontchooserwidget.png'; md5=9161245e307b432ae1313e9a9941edae"
 
-#: C/fontchooserwidget.py.page:7(title)
+#. (itstool) path: item/p
+#: C/toolbar.c.page:35 C/tooltip.c.page:39 C/tooltip.py.page:60
 #, fuzzy
-#| msgid "FontChooserWidget"
-msgid "FontChooserWidget (Python)"
-msgstr "Élément graphique GtkFontChooser"
-
-#: C/fontchooserwidget.py.page:18(desc)
-msgid "A widget to choose a font"
-msgstr "Un élément graphique pour choisir une police"
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkToolbar.html";
+"\">GtkToolbar</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/fontchooserwidget.py.page:21(title)
-msgid "FontChooserWidget"
-msgstr "Élément graphique GtkFontChooser"
+#. (itstool) path: item/p
+#: C/toolbar.c.page:36
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkToolButton.html";
+"\">GtkToolbutton</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/fontchooserwidget.py.page:24(p)
-msgid "A FontChooserWidget with a callback function."
-msgstr "Un élément graphique GtkFontChooser avec une fonction de rappel."
+#. (itstool) path: info/title
+#: C/toolbar.js.page:8
+#, fuzzy
+#| msgid "Toolbar (JavaScript)"
+msgctxt "text"
+msgid "Toolbar (JavaScript)"
+msgstr "Barre d'outils (JavaScript)"
 
-#: C/fontchooserwidget.py.page:33(title)
-msgid "Useful methods for a FontChooserWidget"
-msgstr "Méthodes utiles pour un élément graphique GtkFontChooser"
+#. (itstool) path: info/desc
+#: C/toolbar.js.page:18
+msgid "A bar of tools"
+msgstr "Une barre d'outils"
 
-#: C/fontchooserwidget.py.page:36(p)
+#. (itstool) path: page/p
+#: C/toolbar.js.page:24 C/toolbar.vala.page:26
 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)."
+"This example uses SimpleActions (window and app). App actions can easily be "
+"added the the app menu."
 msgstr ""
-"Pour définir la police initiallement sélectionnée, utilisez la méthode "
-"<code>set_font(font)</code> (où <code>font</code> est le nom de la police), "
-"ou <code>set_font_desc(font)</code> (où <code>font</code> est la "
-"PangoFontDescription)."
+"Cet exemple utilise SimpleActions (fenêtre et application). Les actions "
+"applications peuvent être facilement ajoutées au menu « Applications »."
 
-#: C/fontchooserwidget.py.page:37(p)
+#. (itstool) path: page/code
+#: C/toolbar.js.page:26
+#, no-wrap
 msgid ""
-"To get the selected font use <code>get_font()</code> or <code>get_font_desc()"
-"</code>."
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gdk = imports.gi.Gdk;\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const Application = new Lang.Class({\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.myapp',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"       //connect to 'activate' and 'startup' signals to the callback functions\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"       this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    //create the UI (in this case it's just the ApplicationWindow\n"
+"    _buildUI: function() {\n"
+"        this._window = new Gtk.ApplicationWindow({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"Toolbar Example\",\n"
+"                                                   default_height: 200,\n"
+"                                                   default_width: 400 });\n"
+"\n"
+"        this._grid = new Gtk.Grid();\n"
+"        this._window.add(this._grid);\n"
+"        this._grid.show();\n"
+"\n"
+"        this._createToolbar();\n"
+"        this._toolbar.set_hexpand(true);\n"
+"        this._grid.attach(this._toolbar, 0, 0, 1, 1);\n"
+"\n"
+"        //show the  toolbar and window\n"
+"        this._toolbar.show();\n"
+"        this._window.show();\n"
+"    },\n"
+"\n"
+"    //callback function for 'activate' signal\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    //callback function for 'startup' signal\n"
+"    _onStartup: function() {\n"
+"        this._initMenus();\n"
+"        this._buildUI();\n"
+"    },\n"
+"\n"
+"    //create the toolbar, its toolbuttons and their actions\n"
+"    _createToolbar: function() {\n"
+"\n"
+"        this._toolbar = new Gtk.Toolbar();\n"
+"        this._toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR);\n"
+"\n"
+"        //create the \"New\" ToolButton and its SimpleAction.\n"
+"        //Using actions allows you to add them to the app menu\n"
+"        //without duplicating code.\n"
+"        let newAction = new Gio.SimpleAction({ name: 'new'});\n"
+"        newAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._newCB();\n"
+"            }));\n"
+"        this.application.add_action(newAction);//note: this action is added to the app\n"
+"\n"
+"        this._newButton = new Gtk.ToolButton.new_from_stock(Gtk.STOCK_NEW);\n"
+"        this._newButton.is_important = true;\n"
+"        this._toolbar.add(this._newButton);\n"
+"        this._newButton.show();\n"
+"        this._newButton.action_name = \"app.new\";\n"
+"\n"
+"        //create the \"Open\" ToolButton and its SimpleAction\n"
+"        let openAction = new Gio.SimpleAction({ name: 'open'});\n"
+"        openAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._openCB();\n"
+"            }));\n"
+"        this.application.add_action(openAction);\n"
+"\n"
+"        this._openButton = new Gtk.ToolButton.new_from_stock(Gtk.STOCK_OPEN);\n"
+"        this._openButton.is_important = true;\n"
+"        this._toolbar.add(this._openButton);\n"
+"        this._openButton.show();\n"
+"        this._openButton.action_name = \"app.open\";\n"
+"\n"
+"        //create the \"Undo\" ToolButton and its SimpleAction\n"
+"        let undoAction = new Gio.SimpleAction({ name: 'undo'});\n"
+"        undoAction.connect('activate', Lang.bind (this,\n"
+"            function() {\n"
+"                this._undoCB();\n"
+"            }));\n"
+"        this._window.add_action(undoAction);//note this action is added to the window\n"
+"\n"
+"        this._undoButton = new Gtk.ToolButton.new_from_stock(Gtk.STOCK_UNDO);\n"
+"        this._undoButton.is_important = true;\n"
+"        this._toolbar.add(this._undoButton);\n"
+"        this._undoButton.show();\n"
+"        this._undoButton.action_name = \"win.undo\";\n"
+"\n"
+"        //create the \"Fullscreen\" ToolButton and its SimpleAction\n"
+"        let fullscreenToggleAction = new Gio.SimpleAction ({ name: 'fullscreenToggle' });\n"
+"        fullscreenToggleAction.connect ('activate', Lang.bind (this,\n"
+"            function () {\n"
+"                this._fullscreenToggleCB();\n"
+"            }));\n"
+"        this._window.add_action(fullscreenToggleAction);\n"
+"\n"
+"        this._fullscreenButton = new Gtk.ToolButton.new_from_stock(Gtk.STOCK_FULLSCREEN);\n"
+"        this._fullscreenButton.is_important = true;\n"
+"        this._toolbar.add(this._fullscreenButton);\n"
+"        this._fullscreenButton.show();\n"
+"        this._fullscreenButton.action_name = \"win.fullscreenToggle\";\n"
+"\n"
+"        //create the \"leaveFullscreen\" ToolButton, and set the action name to \"win.fullscreenToggle\"\n"
+"        this._leaveFullscreenButton = new Gtk.ToolButton.new_from_stock(Gtk.STOCK_LEAVE_FULLSCREEN);\n"
+"        this._leaveFullscreenButton.is_important = true;\n"
+"        this._toolbar.add(this._leaveFullscreenButton);\n"
+"        this._leaveFullscreenButton.action_name = \"win.fullscreenToggle\";\n"
+"    },\n"
+"\n"
+"    _initMenus: function () {\n"
+"        let menu = new Gio.Menu();\n"
+"        menu.append(\"New\", 'app.new');\n"
+"        menu.append(\"Open\", 'app.open');\n"
+"        menu.append(\"Quit\", 'app.quit');\n"
+"\n"
+"        this.application.set_app_menu(menu);\n"
+"\n"
+"        let quitAction = new Gio.SimpleAction({name: 'quit' });\n"
+"        quitAction.connect('activate', Lang.bind(this,\n"
+"            function() {\n"
+"                this._window.destroy();\n"
+"            }));\n"
+"        this.application.add_action(quitAction);\n"
+"    },\n"
+"\n"
+"    _newCB: function() {\n"
+"        print(\"You clicked 'New'.\");\n"
+"    },\n"
+"\n"
+"    _openCB: function() {\n"
+"        print(\"You clicked 'Open'.\");\n"
+"    },\n"
+"\n"
+"    _undoCB:function () {\n"
+"        print (\"You clicked 'Undo'.\");\n"
+"    },\n"
+"\n"
+"    _fullscreenToggleCB: function() {\n"
+"        if ((this._window.get_window().get_state() &amp; Gdk.WindowState.FULLSCREEN) != 0 ) {\n"
+"              this._window.unfullscreen();\n"
+"              this._leaveFullscreenButton.hide();\n"
+"              this._fullscreenButton.show();\n"
+"        }\n"
+"        else {\n"
+"             this._window.fullscreen();\n"
+"             this._fullscreenButton.hide();\n"
+"             this._leaveFullscreenButton.show();\n"
+"        }\n"
+"    }\n"
+"});\n"
+"\n"
+"//run the application\n"
+"let app = new Application();\n"
+"app.application.run(ARGV);\n"
 msgstr ""
-"Pour obtenir la police sélectionnée, utilisez l'une des deux méthodes "
-"<code>get_font()</code> ou <code>get_font_desc()</code>."
 
-#: C/fontchooserwidget.py.page:38(p)
+#. (itstool) path: item/p
+#: C/toolbar.js.page:31
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"To change the text which is shown in the preview area, use "
-"<code>set_preview_text()</code>."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Window.html";
+"\">Gtk.Window</link>"
 msgstr ""
-"Pour modifier le texte affiché dans la position précédente, utilisez la "
-"méthode <code>set_preview_text()</code>."
-
-#: C/fontchooserwidget.py.page:45(link)
-msgid "GtkFontChooserWidget"
-msgstr "Élément graphique GtkFontChooser"
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/filechooserdialog.vala.page:7(title)
+#. (itstool) path: item/p
+#: C/toolbar.js.page:32
 #, fuzzy
-#| msgid "FileChooserDialog"
-msgid "FileChooserDialog (Vala)"
-msgstr "Boîte de dialogue FileChooser"
-
-#: C/filechooserdialog.vala.page:20(desc)
-msgid "A dialog suitable for \"Open\" and \"Save\" commands."
-msgstr "Une boîte de dialogue qui convient aux commandes « open » et « save »."
-
-#: C/filechooserdialog.vala.page:23(title)
-#: C/filechooserdialog.vala.page:40(link)
-#: C/filechooserdialog.py.page:23(title)
-msgid "FileChooserDialog"
-msgstr "Boîte de dialogue FileChooser"
-
-#: C/filechooserdialog.vala.page:25(title)
-msgid "Overview of the example"
-msgstr "Vue d'ensemble de l'exemple"
-
-#: C/filechooserdialog.vala.page:26(p)
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.Toolbar.html";
+"\">Gtk.Toolbar</link>"
 msgstr ""
-"Cet exemple montre l'utilisation d'une boîte de dialogue FileChooser. Elle "
-"est intégrée dans une application éditeur de texte très simple. Toutes les "
-"<link xref=\"menubar.vala#win-app\">actions</link>, y compris les commandes "
-"« open », « save » et « save-as » sont disponibles dans <link xref=\"gmenu."
-"vala\">app-menu</link>. Ici, nous créons l'app-menu avec un fichier "
-"interface utilisateur en XML, qui est ensuite importé dans l'application "
-"avec Gtk.Builder."
-
-#: C/filechooserdialog.vala.page:28(title)
-msgid "XML UI file which creates the app-menu"
-msgstr "Fichier XML interface utilisateur créant l'app-menu"
-
-#: C/filechooserdialog.vala.page:31(title)
-msgid "Vala Code"
-msgstr "Code Vala"
-
-#: C/filechooserdialog.vala.page:39(link)
-msgid "FileChooser"
-msgstr "FileChooser"
-
-#: C/filechooserdialog.vala.page:42(link)
-msgid "GLib.ActionEntry"
-msgstr "GLib.ActionEntry"
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/filechooserdialog.py.page:24(None)
+#. (itstool) path: item/p
+#: C/toolbar.js.page:33
 #, fuzzy
-#| msgid "@@image: 'media/image.png'; md5=9416aa74d9d6a857783f7a36338e7a02"
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"@@image: 'media/filechooserdialog_save.png'; "
-"md5=3a7a3b71b9d3a36066857843b68ff27f"
-msgstr "@@image: 'media/image.png'; md5=9416aa74d9d6a857783f7a36338e7a02"
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.ToolButton.";
+"html\">Gtk.ToolButton</link>"
+msgstr ""
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/filechooserdialog.py.page:26(None)
+#. (itstool) path: item/p
+#: C/toolbar.js.page:34
 #, fuzzy
 #| msgid ""
-#| "@@image: 'media/fontchooserwidget.png'; "
-#| "md5=9161245e307b432ae1313e9a9941edae"
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 msgid ""
-"@@image: 'media/filechooserdialog_menu.png'; "
-"md5=8a75f04127a70eba0ed68a9eb1d3bbca"
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.html\";>Gtk "
+"Stock items</link>"
 msgstr ""
-"@@image: 'media/fontchooserwidget.png'; md5=9161245e307b432ae1313e9a9941edae"
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/filechooserdialog.py.page:7(title)
+#. (itstool) path: item/p
+#: C/toolbar.js.page:35
 #, fuzzy
-#| msgid "FileChooserDialog"
-msgid "FileChooserDialog (Python)"
-msgstr "Boîte de dialogue FileChooser"
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gdk.WindowState.";
+"html\">Gdk.WindowState</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/filechooserdialog.py.page:20(desc)
+#. (itstool) path: info/title
+#: C/toolbar.py.page:8
 #, fuzzy
-#| msgid "A dialog suitable for \"Open\" and \"Save\" commands."
-msgid "A dialog suitable for \"Open\" and \"Save\" commands"
-msgstr "Une boîte de dialogue qui convient aux commandes « open » et « save »."
+#| msgid "Toolbar (Python)"
+msgctxt "text"
+msgid "Toolbar (Python)"
+msgstr "Barre d'outils (Python)"
 
-#: C/filechooserdialog.py.page:25(p)
-msgid ""
-"This FileChooserDialog saves a text document, which can be opened or written "
-"from scratch in a TextView (see below)."
+#. (itstool) path: info/desc
+#: C/toolbar.py.page:20 C/toolbar_builder.py.page:33
+msgid "A bar of buttons and other widgets"
+msgstr "Une barre de boutons et autres éléments graphiques"
+
+#. (itstool) path: page/p
+#: C/toolbar.py.page:26
+msgid "An example of toolbar with buttons (from stock icons)."
 msgstr ""
+"Un exemple de barre d'outils avec des boutons (à partir des icônes de la "
+"collection)."
 
-#: C/filechooserdialog.py.page:27(p)
-msgid "It is also possible to call a FileChooserDialog to open a new document."
+#. (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 ""
 
-#: C/filechooserdialog.py.page:32(title)
-#, fuzzy
-#| msgid "Code used to generate this example"
-msgid "Steps to recreate the example"
-msgstr "Code utilisé pour générer cet exemple"
+#. (itstool) path: section/title
+#: C/toolbar.py.page:37
+msgid "Useful methods for a Toolbar widget"
+msgstr "Méthodes utiles pour un élément graphique barre d'outils"
 
-#: C/filechooserdialog.py.page:34(p)
+#. (itstool) path: section/p
+#: C/toolbar.py.page:38
 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\"/>"
+"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 ""
 
-#: C/filechooserdialog.py.page:35(p)
+#. (itstool) path: item/p
+#: C/toolbar.py.page:41
 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>."
+"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 ""
+"La méthode <code>insert(tool_item, position)</code> insère l'élément "
+"<code>tool_item</code> à sa place <code>position</code>. Si <code>position</"
+"code> est négatif, l'élément est ajouté à la fin de la barre d'outils."
 
-#: C/filechooserdialog.py.page:36(p)
+#. (itstool) path: item/p
+#: C/toolbar.py.page:42
 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."
+"<code>get_item_index(tool_item)</code> retrieves the position of "
+"<code>tool_item</code> on the toolbar."
 msgstr ""
+"La méthode <code>get_item_index(tool_item)</code> récupère la position de "
+"l'élément <code>tool_item</code> dans la barre d'outils."
 
-#: C/filechooserdialog.py.page:37(p)
+#. (itstool) path: item/p
+#: C/toolbar.py.page:43
 msgid ""
-"\"New\" and \"Quit\" actions and callback functions are quite "
-"straightforward, see <link xref=\"#code\"/>."
+"<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 ""
+"La méthode <code>get_n_items()</code> renvoie le nombre d'éléments de la "
+"barre d'outils ; <code>get_nth_item(position)</code> renvoie l'élément placé "
+"à <code>position</code>."
 
-#: C/filechooserdialog.py.page:38(p)
+#. (itstool) path: item/p
+#: C/toolbar.py.page:44
 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."
+"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 ""
+"S'il n'y a pas assez de place dans la barre d'outils pour tous les éléments "
+"du menu, et si l'affichage de la flèche est sur <code>set_show_arrow(True)</"
+"code>, les éléments en surplus sont affichés dans un menu de dépassement."
 
-#: C/filechooserdialog.py.page:39(p)
+#. (itstool) path: item/p
+#: C/toolbar.py.page:45
 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>."
+"<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 ""
+"La méthode <code>set_icon_size(icon_size)</code> définit la taille des "
+"icônes de la barre d'outils ; <code>icon_size</code> peut être : <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>. Cette option ne doit être utilisée que pour des barres "
+"d'outils spéciales. Les barres d'outils des applications normales doivent "
+"respecter le choix des préférences des utilisateurs en ce qui concerne la "
+"taille des icônes. La fonction <code>unset_icon_size()</code> désactive les "
+"préférences définies avec <code>set_icon_size(icon_size)</code> afin que les "
+"préférences de l'utilisateur soient utilisées pour déterminer la taille des "
+"icônes."
 
-#: C/filechooserdialog.py.page:40(p)
+#. (itstool) path: item/p
+#: C/toolbar.py.page:46
 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>."
+"<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 ""
+"La méthode <code>set_style(style)</code>, où <code>style</code> peut être "
+"<code>Gtk.ToolbarStyle.ICONS, Gtk.ToolbarStyle.TEXT, Gtk.ToolbarStyle.BOTH, "
+"Gtk.ToolbarStyle.BOTH_HORIZ</code>, définit si la barre d'outils affiche "
+"seulement les icônes, seulement du texte ou les deux à la fois (placés "
+"verticalement ou les uns à côté des autres). Pour que les préférences "
+"utilisateur déterminent le style de la barre et annule un style de barre "
+"d'outils ainsi défini, utilisez <code>unset_style()</code>."
 
-#: C/filechooserdialog.py.page:41(p)
+#. (itstool) path: item/p
+#: C/toolbar.py.page:55
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"Finally, the method <code>save_to_file()</code>: see <link xref=\"#code\"/>, "
-"lines 146 - 175."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToolbar.html";
+"\">GtkToolbar</link>"
 msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/filechooserdialog.py.page:46(title)
+#. (itstool) path: item/p
+#: C/toolbar.py.page:56
 #, fuzzy
-#| msgid "XML UI file which creates the app-menu"
-msgid "XML file which creates the app-menu"
-msgstr "Fichier XML interface utilisateur créant l'app-menu"
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToolButton.html";
+"\">GtkToolButton</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/filechooserdialog.py.page:56(title)
+#. (itstool) path: item/p
+#: C/toolbar.py.page:57
 #, fuzzy
-#| msgid "Useful methods for a FontChooserWidget"
-msgid "Useful methods for a FileChooserDialog"
-msgstr "Méthodes utiles pour un élément graphique GtkFontChooser"
-
-#: C/filechooserdialog.py.page:57(p)
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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)."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkToolItem.html";
+"\">GtkToolItem</link>"
 msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/filechooserdialog.py.page:58(p)
-msgid "Besides the methods used in the <link xref=\"#code\"/>, we have:"
+#. (itstool) path: item/p
+#: C/toolbar.py.page:59
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkActionable.html";
+"\">GtkActionable</link>"
 msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/filechooserdialog.py.page:60(p)
+#. (itstool) path: item/p
+#: C/toolbar.py.page:61 C/toolbar_builder.py.page:199
 msgid ""
-"<code>set_show_hidden(True)</code> is used to display hidden files and "
-"folders."
+"<link href=\"http://developer.gnome.org/gdk3/unstable/gdk3-Event-Structures.";
+"html#GdkEventWindowState\">Event Structures</link>"
 msgstr ""
 
-#: C/filechooserdialog.py.page:61(p)
+#. (itstool) path: info/title
+#: C/toolbar.vala.page:8
+#, fuzzy
+#| msgid "Toolbar (Vala)"
+msgctxt "text"
+msgid "Toolbar (Vala)"
+msgstr "Barre d'outils (Vala)"
+
+#. (itstool) path: page/code
+#: C/toolbar.vala.page:28
+#, no-wrap
 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>."
+"/* 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 ""
 
-#: C/filechooserdialog.py.page:62(p)
+#. (itstool) path: item/p
+#: C/toolbar.vala.page:34 C/toolbar_builder.vala.page:151
+#: C/tooltip.vala.page:40
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Toolbar.html\";>Gtk.Toolbar</"
+"link>"
 msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/filechooserdialog.py.page:63(p)
+#. (itstool) path: item/p
+#: C/toolbar.vala.page:35 C/toolbar_builder.vala.page:152
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 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."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.ToolButton.html\";>Gtk."
+"Toolbutton</link>"
 msgstr ""
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/filechooserdialog.py.page:71(link)
+#. (itstool) path: item/p
+#: C/toolbar.vala.page:36 C/toolbar_builder.vala.page:153
 #, fuzzy
-#| msgid "FileChooserDialog"
-msgid "GtkFileChooserDialog"
-msgstr "Boîte de dialogue FileChooser"
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Stock.html\";>Gtk.Stock</"
+"link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/filechooserdialog.py.page:72(link)
+#. (itstool) path: 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
 #, fuzzy
-#| msgid "FileChooser"
-msgid "GtkFileChooser"
-msgstr "FileChooser"
+#| msgid "@@image: 'media/glade_ui.png'; md5=baea74fe213bc12ea934f64f6977215a"
+msgctxt "_"
+msgid ""
+"external ref='media/glade_ui.png' md5='baea74fe213bc12ea934f64f6977215a'"
+msgstr "@@image: 'media/glade_ui.png'; md5=baea74fe213bc12ea934f64f6977215a"
 
-#: C/filechooserdialog.py.page:77(link)
-msgid "GFile"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/glade_select_toolbar.png'; "
+#| "md5=f7b5b224050b2e387eb04362fc99df00"
+msgctxt "_"
+msgid ""
+"external ref='media/glade_select_toolbar.png' "
+"md5='f7b5b224050b2e387eb04362fc99df00'"
 msgstr ""
+"@@image: 'media/glade_select_toolbar.png'; "
+"md5=f7b5b224050b2e387eb04362fc99df00"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/entry.vala.page:21(None) C/entry.py.page:26(None)
-#: C/entry.js.page:21(None) C/entry.c.page:22(None)
-msgid "@@image: 'media/entry.png'; md5=8a828cffdcbaa4bad83342e109f28cc8"
-msgstr "@@image: 'media/entry.png'; md5=8a828cffdcbaa4bad83342e109f28cc8"
-
-#: C/entry.vala.page:7(title)
-msgid "Entry (Vala)"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/glade_toolbar_general.png'; "
+#| "md5=e31daba6e8a3e526aca89d5f1622edaa"
+msgctxt "_"
+msgid ""
+"external ref='media/glade_toolbar_general.png' "
+"md5='e31daba6e8a3e526aca89d5f1622edaa'"
 msgstr ""
+"@@image: 'media/glade_toolbar_general.png'; "
+"md5=e31daba6e8a3e526aca89d5f1622edaa"
 
-#: C/entry.vala.page:17(desc) C/entry.py.page:22(desc) C/entry.c.page:17(desc)
-msgid "A single line text entry field"
-msgstr "Un champ de saisie de texte sur une ligne"
-
-#: C/entry.vala.page:20(title) C/entry.py.page:25(title)
-#: C/entry.js.page:20(title) C/entry.c.page:20(title)
-msgid "Entry"
-msgstr "Entrée"
-
-#: C/entry.vala.page:22(p) C/entry.c.page:23(p)
-msgid "This application greets you in the terminal."
-msgstr "Cette application vous accueille dans le terminal."
-
-#: C/entry.vala.page:29(link) C/entry.js.page:31(link)
-msgid "Gtk.Entry"
-msgstr "Gtk.Entry"
-
-#: C/entry.py.page:7(title)
+#. (itstool) path: 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
 #, fuzzy
-#| msgid "Python"
-msgid "Entry (Python)"
-msgstr "Python"
-
-#: C/entry.py.page:27(p)
-msgid "This application greets you in the terminal with the name you provide."
+#| msgid ""
+#| "@@image: 'media/glade_toolbar_common.png'; "
+#| "md5=d5ec6cc0218ca98e195dbd033feb9ac5"
+msgctxt "_"
+msgid ""
+"external ref='media/glade_toolbar_common.png' "
+"md5='d5ec6cc0218ca98e195dbd033feb9ac5'"
 msgstr ""
-"Cette application vous accueille dans le terminal avec le nom que vous "
-"fournissez."
-
-#: C/entry.py.page:37(title)
-msgid "Useful methods for an Entry widget"
-msgstr "Méthodes utiles pour un élément graphique Entrée"
+"@@image: 'media/glade_toolbar_common.png'; "
+"md5=d5ec6cc0218ca98e195dbd033feb9ac5"
 
-#: C/entry.py.page:38(p)
-msgid ""
-"For an explanation of signals and callback functions, see <link xref="
-"\"signals-callbacks.py\">this page</link>. Some of the signals that a Gtk."
-"Entry widget can emit are: <code>\"activate\"</code> (emitted when the user "
-"activates the Entry key); <code>\"backspace\"</code> (emitted when the user "
-"activates the Backspace or Shift-Backspace keys); <code>\"copy-clipboard\"</"
-"code> (Ctrl-c and Ctrl-Insert); <code>\"paste-clipboard\"</code> (Ctrl-v and "
-"Shift-Insert); <code>\"delete-from-cursor\"</code> (Delete, for deleting a "
-"character; Ctrl-Delete, for deleting a word); <code>\"icon-press\"</code> "
-"(emitted when the user clicks an activable icon); <code>\"icon-release\"</"
-"code> (emitted on the button release from a mouse click over an activable "
-"icon); <code>\"insert-at-cursor\"</code> (emitted when the user initiates "
-"the insertion of a fixed string at the cursor); <code>\"move-cursor\"</code> "
-"(emitted when the user initiates a cursor movement); <code>\"populate-popup"
-"\"</code> (emitted before showing the context menu of the entry; it can be "
-"used to add items to it)."
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/glade_toolbar_edit.png'; "
+#| "md5=feb1e2b7040d24a4d030f94cf07c81fd"
+msgctxt "_"
+msgid ""
+"external ref='media/glade_toolbar_edit.png' "
+"md5='feb1e2b7040d24a4d030f94cf07c81fd'"
 msgstr ""
-"Pour de plus amples informations sur les signaux et les fonctions de rappel, "
-"consultez <link xref=\"signals-callbacks.py\">cette page</link>. Voici "
-"quelques uns des signaux qu'un élément graphique Gtk.Entry peut émettre : "
-"<code>\"activate\"</code> (émis quand l'utilisateur appuie sur la touche "
-"Entrée) ; <code>\"backspace\"</code> (émis quand l'utilisateur appuie soit "
-"sur la touche Retour arrière, soit sur la combinaison de touches Maj+Retour "
-"arrière) ; <code>\"copy-clipboard\"</code> (Ctrl+c et Ctrl+Inser) ; <code>"
-"\"paste-clipboard\"</code> (Ctrl+v et Ctrl+Inser) ; <code>\"delete-from-"
-"cursor\"</code> (Suppr pour supprimer un caractère et Ctrl+Suppr pour "
-"supprimer un mot) ; <code>\"icon-press\"</code> (émis quand l'utilisateur "
-"clique sur une icône activable) ; <code>\"icon-release\"</code> (émis lors "
-"du relâchement du bouton après un clic de souris sur une icône activable) ; "
-"<code>\"insert-at-cursor\"</code> (émis quand l'utilisateur commence "
-"l'insertion du premier caractère d'une chaîne à l'emplacement du curseur) ; "
-"<code>\"move-cursor\"</code> (émis quand l'utilisateur commence à déplacer "
-"le curseur) ; <code>\"populate-popup \"</code> (émis avant d'afficher le "
-"menu contextuel de l'entrée ; il peut servir à y ajouter des éléments)."
+"@@image: 'media/glade_toolbar_edit.png'; md5=feb1e2b7040d24a4d030f94cf07c81fd"
 
-#: C/entry.py.page:40(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/glade_toolbar_editor.png'; "
+#| "md5=8af65241e5ca47d5494a7b36640e6f1c"
+msgctxt "_"
 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."
+"external ref='media/glade_toolbar_editor.png' "
+"md5='8af65241e5ca47d5494a7b36640e6f1c'"
 msgstr ""
-"Les méthodes <code>get_buffer()</code> et <code>set_buffer(tampon)</code>, "
-"où <code>tampon</code> est un objet Gtk.EntryBuffer, peuvent être utilisées "
-"pour obtenir et définir le tampon de l'entrée."
+"@@image: 'media/glade_toolbar_editor.png'; "
+"md5=8af65241e5ca47d5494a7b36640e6f1c"
 
-#: C/entry.py.page:41(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/glade_visible_no.png'; "
+#| "md5=dc6c025aa825f4d772fbd283d6330026"
+msgctxt "_"
 msgid ""
-"<code>get_text()</code> and <code>set_text(\"some text\")</code> can be used "
-"to get and set the content for the entry."
+"external ref='media/glade_visible_no.png' "
+"md5='dc6c025aa825f4d772fbd283d6330026'"
 msgstr ""
-"Les fonctions <code>get_text()</code> et <code>set_text(\"some text\")</"
-"code> peuvent être utilisées pour obtenir et définir le contenu de l'entrée."
+"@@image: 'media/glade_visible_no.png'; md5=dc6c025aa825f4d772fbd283d6330026"
 
-#: C/entry.py.page:42(p)
-msgid "<code>get_text_length()</code> is self-explanatory."
-msgstr "La méthode <code>get_text_length()</code> parle d'elle-même."
+#. (itstool) path: info/title
+#: C/toolbar_builder.py.page:8
+#, fuzzy
+#| msgid "Toolbar created using Glade (Python)"
+msgctxt "text"
+msgid "Toolbar created using Glade (Python)"
+msgstr "Barre d'outils créée avec Glade (Python)"
 
-#: C/entry.py.page:43(p)
+#. (itstool) path: page/title
+#: C/toolbar_builder.py.page:36 C/toolbar_builder.vala.page:23
+msgid "Toolbar created using Glade"
+msgstr "Barre d'outils créée avec Glade"
+
+#. (itstool) path: page/p
+#: C/toolbar_builder.py.page:39
 msgid ""
-"<code>get_text_area()</code> gets the area where the entry's text is drawn."
+"This example is similar to <link xref=\"toolbar.py\"/>, except we use Glade "
+"to create the toolbar in an XML .ui file."
 msgstr ""
-"La méthode <code>get_text_area()</code> obtient la position où le texte de "
-"l'entrée est dessiné."
+"Cet exemple est identique à <link xref=\"toolbar.py\"/>, sauf que nous "
+"utilisons Glade pour créer la barre d'outils dans un fichier XML .ui."
+
+#. (itstool) path: section/title
+#: C/toolbar_builder.py.page:44
+msgid "Creating the toolbar with Glade"
+msgstr "Création de la barre d'outils avec Glade"
 
-#: C/entry.py.page:44(p)
+#. (itstool) path: section/p
+#. (itstool) path: page/p
+#: C/toolbar_builder.py.page:45 C/toolbar_builder.vala.page:28
 msgid ""
-"If we set <code>set_visibility(False)</code> the characters in the entry are "
-"displayed as the invisible char. This is the best available in the current "
-"font, but it can be changed with <code>set_invisible_char(ch)</code>, where "
-"<code>ch</code> is a Unicode charcater. The latter method is reversed by "
-"<code>unset_invisbile_char()</code>."
+"To create the toolbar using the <link href=\"http://glade.gnome.org/\";>Glade "
+"Interface Designer</link>:"
 msgstr ""
-"Si nous définissons la méthode <code>set_visibility(False)</code>, les "
-"caractères de l'entrée sont affichés en tant que caractères invisibles. "
-"C'est la meilleur police disponible dans le type actuel, mais peut être "
-"modifié à l'aide de <code>set_invisible_char(ch)</code>, où <code>ch</code> "
-"est un caractère Unicode. Nous pouvons inverser cette denière fonction avec "
-"<code>unset_invisible_char()</code>."
+"Pour créer la barre d'outils avec <link href=\"http://glade.gnome.org/";
+"\">Glade</link> :"
 
-#: C/entry.py.page:45(p)
-msgid ""
-"<code>set_max_length(int)</code>, where <code>int</code> is an integer, "
-"truncates every entry longer than <code>int</code> to have the desired "
-"maximum length."
+#. (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 ""
-"La méthode <code>set_max_length(int)</code>, où <code>int</code> est un "
-"nombre entier, coupe chaque entrée plus longue que <code>int</code> afin "
-"d'obtenir la longueur maximum désirée."
+"ouvrez Glade et enregistrez le fichier sous <file>toolbar_builder.ui</file>"
 
-#: C/entry.py.page:46(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:50 C/toolbar_builder.vala.page:33
 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>."
+"<media type=\"image\" src=\"media/glade_ui.png\" width=\"900\"> Screenshot "
+"of Glade ui </media>"
 msgstr ""
-"Par défaut, si vous appuyez sur la touche Entrée, Gtk.Entry émet le signal "
-"<code>\"activate\"</code>. Si vous préférez activer l'élément graphique par "
-"défaut de la fenêtre (défini par la méthode <code>set_default(widget)</code> "
-"pour la fenêtre), utilisez alors <code>set_activates_default(True)</code>."
 
-#: C/entry.py.page:47(p)
-msgid "To set a frame around the entry: <code>set_has_frame(True)</code>."
+# Bruno : c'est hélas bien widget dans glade
+#. (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 ""
-"Pour définir un cadre autour de l'entrée, utilisez la méthode "
-"<code>set_has_frame(True)</code>."
+"Au-dessous de <gui>Conteneurs</gui>, dans la partie gauche, faites un clic "
+"droit sur une icône de la barre d'outils et sélectionnez <gui>Ajouter un "
+"widget comme premier niveau</gui>."
 
-#: C/entry.py.page:48(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:56 C/toolbar_builder.vala.page:39
 msgid ""
-"<code>set_placeholder_text(\"some text\")</code> sets the text to be "
-"displayed in the entry when it is empty and unfocused."
+"<media type=\"image\" src=\"media/glade_select_toolbar.png\"> Screenshot of "
+"toolbar icon in Glade ui </media>"
 msgstr ""
-"La méthode <code>set_placeholder_text(« texte »)</code> définit le texte "
-"pour qu'il s'affiche dans l'entrée quand il est vide et inactif."
 
-#: C/entry.py.page:49(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:61 C/toolbar_builder.vala.page:44
 msgid ""
-"<code>set_overwrite_mode(True)</code> and <code>set_overwrite_mode(False)</"
-"code> are self-explanatory."
+"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 ""
-"Les méthodes <code>set_overwrite_mode(True)</code> et "
-"<code>set_overwrite_mode(False)</code> parlent d'elles-mêmes."
+"Dans l'onglet <gui>Général</gui>, dans la partie inférieure droite, modifiez "
+"le <gui>Nom</gui> en <input>toolbar</input> et mettez l'option <gui>Afficher "
+"la flèche</gui> à <gui>Non</gui>."
 
-#: C/entry.py.page:50(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:62 C/toolbar_builder.vala.page:45
 msgid ""
-"If we have <code>set_editable(False)</code> the user cannot edit the text in "
-"the widget."
+"<media type=\"image\" src=\"media/glade_toolbar_general.png\"> Screenshot of "
+"General tab </media>"
 msgstr ""
-"La méthode <code>set_editable(False)</code> n'autorise pas l'utilisateur à "
-"modifier le texte dans l'élément graphique."
 
-#: C/entry.py.page:51(p)
-#, fuzzy
-#| msgid ""
-#| "<code>set_completion(completion)</code>, where <code>completion</code> is "
-#| "a <link href=\"http://developer.gnome.org/gtk3/3.4/GtkEntryCompletion.html";
-#| "\"><code>Gtk.EntryCompletion</code></link>, sets completion - or disables "
-#| "it if <code>completion</code> is <code>None</code>."
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:67 C/toolbar_builder.vala.page:50
 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>."
+"Under the <gui>Common</gui> tab, set <gui>Horizontal Expand</gui> to "
+"<gui>Yes</gui>."
 msgstr ""
-"La méthode <code>set_completion(completion)</code>, où <code>completion</"
-"code> est une <link href=\"http://developer.gnome.org/gtk3/3.4/";
-"GtkEntryCompletion.html\"><code>Gtk.EntryCompletion</code></link>, active la "
-"complétion - ou la désactive si <code>completion</code> est <code>None</"
-"code>."
+"Dans l'onglet <gui>Commun</gui>, définissez <gui>Extension horizontale</"
+"gui>à <gui>Oui</gui>."
 
-#: C/entry.py.page:52(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:68 C/toolbar_builder.vala.page:51
 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>)."
+"<media type=\"image\" src=\"media/glade_toolbar_common.png\"> Screenshot of "
+"Common tab </media>"
 msgstr ""
-"Un élément graphique Entry peut afficher la progression ou les informations "
-"d'activité derrière le texte. La méthode <code>set_progress_fraction"
-"(fraction)</code>, où <code>fraction</code> est un nombre flottant "
-"<code>float</code> compris entre <code>0.0</code> et <code>1.0</code> "
-"inclus, sert à remplir la fraction définie de la barre de progression. La "
-"méthode <code>set_progress_pulse_step()</code> définit la fraction de la "
-"largeur totale de l'entrée qui va se remplir d'un bloc à chaque appel à "
-"<code>progress_pulse()</code>. Cette dernière fonction indique qu'une "
-"progression est en cours et passe l'indicateur de progression sur \"activity "
-"mode\", ce qui fait avancer ou reculer un bloc. Chaque appel à "
-"<code>progress_pulse()</code> fait un petit peu bouger le bloc (l'amplitude "
-"du mouvement par pulsation est définie par <code>set_progress_pulse_step()</"
-"code>), comme expliqué précédemment."
-
-#: C/entry.py.page:53(p)
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:73 C/toolbar_builder.vala.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>."
+"Right click on the toolbar in the top right and select <gui>Edit</gui>. The "
+"<gui>Tool Bar Editor</gui> window will appear."
 msgstr ""
-"Un élément graphique Entry peut aussi afficher des icônes. Ces icônes sont "
-"activables d'un clic de souris, ou peuvent être définies comme étant la "
-"source d'un élément glissable et comporter des infobulles. Pour ajouter une "
-"icône de la collection, utilisez la méthode <code>set_icon_from_stock"
-"(icon_position, stock_id)</code>, ou bien l'une des méthodes suivantes : "
-"<code>set_icon_from_pixbuf(icon_position, pixbuf)</code> ; "
-"<code>set_icon_from_icon_name(icon_position, icon_name)</code>, où "
-"<code>icon_position</code> est l'une des deux positions <code>Gtk."
-"EntryIconPosition.PRIMARY</code> (pour positionner l'icône au début de "
-"l'entrée) ou <code>Gtk.EntryIconPosition.SECONDARY</code> (pour positionner "
-"l'icône à la fin de l'entrée). Pour ajouter une infobulle à une icône, "
-"utiliser l'une des deux fonctions <code>set_icon_tooltip_text(\"tooltip text"
-"\")</code> ou <code>set_icon_tooltip_markup(\"tooltip text in Pango markup "
-"language\")</code>."
-
-#: C/entry.py.page:61(link) C/entry.c.page:33(link)
-#: C/buttonbox.py.page:50(link)
-msgid "GtkEntry"
-msgstr "GtkEntry"
+"Faites un clic droit sur « toolbar » dans la partie en haut à droite et "
+"sélectionnez <gui>Éditer</gui>. La boîte de dialogue <gui>Éditeur de barre "
+"d'outils</gui> s'affiche."
 
-#: C/entry.js.page:7(title)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:74 C/toolbar_builder.vala.page:57
 #, fuzzy
-#| msgid "JavaScript"
-msgid "Entry (JavaScript)"
-msgstr "JavaScript"
-
-#: C/entry.js.page:17(desc)
-msgid "A single-line text entry field"
-msgstr "Un champ de saisie de texte sur une ligne"
-
-#: C/entry.js.page:22(p)
-msgid "This application greets you by name through a pop-up window."
+#| msgid "Screenshot of where to right click to edit toolbar."
+msgid ""
+"<media type=\"image\" src=\"media/glade_toolbar_edit.png\"> Screenshot of "
+"where to right click to edit toolbar. </media>"
 msgstr ""
-"Cette application vous accueille par votre nom dans une fenêtre surgissante."
-
-#: C/entry.c.page:7(title)
-#, fuzzy
-#| msgid "Entry"
-msgid "Entry (C)"
-msgstr "Entrée"
-
-#: C/documentation.page:19(title)
-msgid "Help develop"
-msgstr "Contribution au développement"
-
-#: C/documentation.page:20(p)
-msgid ""
-"The <app>GNOME Developer Tutorials</app> are developed and maintained by a "
-"volunteer community. You are welcome to participate."
-msgstr ""
-"Les tutoriels du <app>Centre de développement GNOME</app> sont développés et "
-"maintenus par une communauté de volontaires. Votre participation est la "
-"bienvenue."
-
-#: C/documentation.page:23(p)
-msgid ""
-"If you would like to <link href=\"https://live.gnome.org/";
-"DocumentationProject/Tasks/DeveloperDocs\">help develop <app>GNOME Developer "
-"Tutorials</app></link>, you can get in touch with the developers using <link "
-"href=\"https://cbe005.chat.mibbit.com/?url=irc%3A%2F%2Firc.gnome.org%2Fdocs";
-"\">irc</link>, or via our <link href=\"http://mail.gnome.org/mailman/";
-"listinfo/gnome-doc-devel-list\">mailing list</link>."
-msgstr ""
-"Si vous voulez <link href=\"https://live.gnome.org/DocumentationProject/";
-"Tasks/DeveloperDocs\">aider au développement des <app>tutoriels pour les "
-"développeurs GNOME</app></link>, vous pouvez vous mettre en contact avec les "
-"développeurs en utilisant <link href=\"https://cbe005.chat.mibbit.com/?";
-"url=irc%3A%2F%2Firc.gnome.org%2Fdocs\">irc</link> ou via notre <link href="
-"\"http://mail.gnome.org/mailman/listinfo/gnome-doc-devel-list\";>liste de "
-"diffusion</link>."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/dialog.vala.page:21(None) C/dialog.py.page:22(None)
-#: C/dialog.js.page:21(None) C/dialog.c.page:24(None)
-msgid "@@image: 'media/dialog.png'; md5=c90a33386a600e892fe623d4072c8c38"
-msgstr "@@image: 'media/dialog.png'; md5=c90a33386a600e892fe623d4072c8c38"
-
-#: C/dialog.vala.page:7(title)
-#, fuzzy
-#| msgid "Dialog"
-msgid "Dialog (Vala)"
-msgstr "Boîte de dialogue"
-
-#: C/dialog.vala.page:17(desc) C/dialog.py.page:18(desc)
-#: C/dialog.js.page:17(desc) C/dialog.c.page:19(desc)
-msgid "A popup window"
-msgstr "Une fenêtre surgissante"
+"Capture d'écran indiquant où faire un clic-droit pour éditer la barre "
+"d'outils."
 
-#: C/dialog.vala.page:20(title) C/dialog.py.page:21(title)
-#: C/dialog.js.page:20(title) C/dialog.c.page:22(title)
-msgid "Dialog"
-msgstr "Boîte de dialogue"
-
-#: C/dialog.vala.page:22(p)
-msgid "A dialog with the response signal hooked up to a callback function."
+#. (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 ""
-"Une boîte de dialogue avec le signal de réponse connecté à une fonction de "
-"rappel."
+"Nous voulons ajouter 5 ToolButtons (boutons) : « Nouveau », « Ouvrir », "
+"« Mode plein écran » et « Quitter le mode plein écran ». Ajoutons d'abord le "
+"ToolButton « Nouveau »."
 
-#: C/dialog.vala.page:31(link) C/dialog.js.page:31(link)
-msgid "Gtk.Dialog"
-msgstr "Gtk.Dialog"
-
-#: C/dialog.vala.page:32(link)
-msgid "Gtk.Dialog.with_buttons"
-msgstr "Gtk.Dialog.with_buttons"
-
-#: C/dialog.vala.page:34(link)
-msgid "get_content_area"
-msgstr "get_content_area"
+#. (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 "Dans l'onglet <gui>Hiérarchie</gui>, cliquez sur <gui>Ajouter</gui>."
 
-#: C/dialog.py.page:7(title)
-msgid "Dialog (Python)"
+#. (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 ""
+"Modifiez le nom de l'élément outil (ToolItem) en <input>new_button</input>."
 
-#: C/dialog.py.page:23(p)
-msgid "A dialog with the response signal connected to a callback function."
+#. (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 ""
-"Une boîte de dialogue avec le signal de réponse connecté à une fonction de "
-"rappel."
+"Faites défiler vers le bas et définissez <gui>Est important</gui> à "
+"<gui>Oui</gui>. Ceci provoque l'affichage de l'étiquette du ToolButton quand "
+"vous affichez la barre d'outils."
 
-#: C/dialog.py.page:35(title)
-msgid "Useful methods for a Dialog widget"
-msgstr "Méthodes utiles pour un élément graphique BoiteDeDialogue"
+#. (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 "Saisissez le <gui>nom de l'action</gui> : <input>app.new</input>."
 
-#: C/dialog.py.page:38(p)
-msgid ""
-"Instead of <code>set_modal(True)</code> we could have <code>set_modal(False)"
-"</code> followed by <code>set_destroy_with_parent(True)</code> that would "
-"destroy the dialog window if the main window is closed."
+#. (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 ""
-"Au lieu de <code>set_modal(True)</code>, nous pouvons avoir <code>set_modal"
-"(False)</code> suivi de la méthode <code>set_destroy_with_parent(True)</"
-"code>, qui détruit la boîte de dialogue quand on ferme la fenêtre principale."
+"Modifiez le champ <gui>Étiquette</gui> en <input>New</input> (Nouveau)."
 
-#: C/dialog.py.page:39(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:87 C/toolbar_builder.vala.page:70
 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>."
+"Select the <gui>New</gui> Stock Id from the drop down menu, or type "
+"<input>gtk-new</input>."
 msgstr ""
-"La méthode <code>add_button(button_text=\"The Answer\", response_id=42)</"
-"code>, où <code>42</code> est un nombre entier, est une alternative à la "
-"fonction <code>add_button(button_text=\"text\", response_id=Gtk.ResponseType."
-"RESPONSE)</code>, où <code>RESPONSE</code> peut être l'une des valeurs "
-"<code>OK, CANCEL, CLOSE, YES, NO, APPLY, HELP</code> qui correspondent aux "
-"nombres entiers <code>-5, -6,..., -11</code>."
-
-#: C/dialog.js.page:7(title)
-#, fuzzy
-#| msgid "JavaScript"
-msgid "Dialog (JavaScript)"
-msgstr "JavaScript"
+"Dans le menu déroulant « ID prédéfini », sélectionnez <gui>Nouveau</gui>, ou "
+"saisissez <input>gtk-new</input>."
 
-#: C/dialog.js.page:22(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:89 C/toolbar_builder.vala.page:72
 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."
+"Repeat the above steps for the remaining ToolButtons, with the following "
+"properties:"
 msgstr ""
-"Une fenêtre surgissante personnalisable, avec une zone de contenu et une "
-"zone d'action. Cet exemple de boîte de dialogue montre que dans la zone de "
-"contenu il y a un petit message et dans la zone d'action il y a un bouton "
-"qui ferme la boîte."
+"Répétez les étapes ci-dessus pour tous les autres ToolButtons en leur "
+"attribuant les propriétés suivantes :"
 
-#: C/dialog.c.page:7(title)
-#, fuzzy
-#| msgid "Dialog"
-msgid "Dialog (C)"
-msgstr "Boîte de dialogue"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:96 C/toolbar_builder.vala.page:79
+msgid "Is important"
+msgstr "Est important"
 
-#: C/dialog.c.page:25(p)
-msgid "A dialog window that pops up when a button is pressed."
-msgstr "Une boîte de dialogue qui surgit quand un bouton est enfoncé."
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:97 C/toolbar_builder.vala.page:80
+msgid "Action name"
+msgstr "Nom de l'action"
 
-#: C/cpp.page:6(title)
-msgid "C++"
-msgstr "C++"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:99 C/toolbar_builder.vala.page:82
+msgid "Stock Id"
+msgstr "ID prédéfini"
 
-#: C/cpp.page:15(title)
-msgid "Platform demos in C++"
-msgstr "Exemples de la plateforme en langage C++"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:104 C/toolbar_builder.vala.page:87
+msgid "open_button"
+msgstr "open_button"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/combobox_multicolumn.py.page:22(None) C/combobox.js.page:25(None)
-msgid ""
-"@@image: 'media/combobox_multicolumn.png'; "
-"md5=43f16648fb11ebc7d2f70825ed0f63b3"
-msgstr ""
-"@@image: 'media/combobox_multicolumn.png'; "
-"md5=43f16648fb11ebc7d2f70825ed0f63b3"
+#. (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 "Oui"
 
-#: C/combobox_multicolumn.py.page:7(title) C/combobox.py.page:7(title)
-#, fuzzy
-#| msgid "ComboBox"
-msgid "ComboBox (Python)"
-msgstr "BoiteCombinee"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:106 C/toolbar_builder.vala.page:89
+msgid "app.open"
+msgstr "app.open"
 
-#: C/combobox_multicolumn.py.page:18(desc) C/combobox.vala.page:17(desc)
-#: C/combobox.py.page:17(desc)
-msgid "A widget used to choose from a list of items"
-msgstr ""
-"Un élément graphique utilisé pour effectuer un choix dans une liste "
-"d'éléments"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:107 C/toolbar_builder.vala.page:90
+msgid "Open"
+msgstr "Open (Ouvrir)"
 
-#: C/combobox_multicolumn.py.page:21(title) C/combobox.vala.page:20(title)
-#: C/combobox.py.page:20(title) C/combobox.js.page:24(title)
-msgid "ComboBox"
-msgstr "BoiteCombinee"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:108 C/toolbar_builder.vala.page:91
+msgid "gtk-open"
+msgstr "gtk-open"
 
-#: C/combobox_multicolumn.py.page:23(p) C/combobox.py.page:22(p)
-msgid "This ComboBox prints to the terminal your selection when you change it."
-msgstr ""
-"Cette BoiteCombinee affiche votre sélection dans le terminal quand vous la "
-"modifiez."
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:111 C/toolbar_builder.vala.page:94
+msgid "undo_button"
+msgstr "undo_button"
 
-#: C/combobox_multicolumn.py.page:34(title) C/combobox.py.page:32(title)
-msgid "Useful methods for a ComboBox widget"
-msgstr "Méthode utiles pour un élément graphique BoiteCombinee"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:113 C/toolbar_builder.vala.page:96
+msgid "win.undo"
+msgstr "win.undo"
 
-#: C/combobox_multicolumn.py.page:35(p) C/combobox.py.page:33(p)
-msgid ""
-"The ComboBox widget is designed around a <em>Model/View/Controller</em> "
-"design. For more information, and for a list of useful methods for ComboBox "
-"and TreeModel, see <link xref=\"model-view-controller.py\">here</link>."
-msgstr ""
-"La BoiteCombinee est construite autour d'un concept <em>Modèle/Vue/"
-"Contrôleur</em>. Pour de plus amples informations et pour obtenir une liste "
-"des méthodes utiles pour une BoiteCombinee et un ModeleArborescent, allez "
-"<link xref=\"model-view-controller.py\">ici</link>."
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:114 C/toolbar_builder.vala.page:97
+msgid "Undo"
+msgstr "Undo (Annuler)"
 
-#: C/combobox_multicolumn.py.page:46(link)
-msgid "GtkCellRendererPixbuf"
-msgstr "GtkCellRendererPixbuf"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:115 C/toolbar_builder.vala.page:98
+msgid "gtk-undo"
+msgstr "gtk-undo"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/combobox.vala.page:21(None) C/combobox.py.page:21(None)
-#: C/comboboxtext.js.page:23(None)
-msgid "@@image: 'media/combobox.png'; md5=ab9e91bc1a58fe866cb00dd52159251d"
-msgstr "@@image: 'media/combobox.png'; md5=ab9e91bc1a58fe866cb00dd52159251d"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:118 C/toolbar_builder.vala.page:101
+msgid "fullscreen_button"
+msgstr "fullscreen_button"
 
-#: C/combobox.vala.page:7(title)
-#, fuzzy
-#| msgid "ComboBox"
-msgid "ComboBox (Vala)"
-msgstr "BoiteCombinee"
+#. (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 "win.fullscreen"
 
-#: C/combobox.vala.page:22(p)
-msgid "This ComboBox prints to the terminal when you change your selection."
-msgstr ""
-"Cette BoiteCombinee s'affiche dans le terminal quand vous modifiez votre "
-"sélection."
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:121 C/toolbar_builder.vala.page:104
+msgid "Fullscreen"
+msgstr "Fullscreen (Mode plein écran)"
 
-#: C/combobox.vala.page:30(link) C/combobox.js.page:241(link)
-msgid "Gtk.ComboBox"
-msgstr "Gtk.ComboBox"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:122 C/toolbar_builder.vala.page:105
+msgid "gtk-fullscreen"
+msgstr "gtk-fullscreen"
 
-#: C/combobox.vala.page:32(link)
-msgid "set_attributes"
-msgstr "set_attributes"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:125 C/toolbar_builder.vala.page:108
+msgid "leave_fullscreen_button"
+msgstr "leave_fullscreen_button"
 
-#: C/combobox.py.page:43(link)
-msgid "GtkCellLayout"
-msgstr "GtkCellLayout"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:128 C/toolbar_builder.vala.page:111
+msgid "Leave Fullscreen"
+msgstr "Leave Fullscreen (Quitter le mode plein écran)"
 
-#: C/combobox.js.page:7(title)
-#, fuzzy
-#| msgid "JavaScript"
-msgid "ComboBox (JavaScript)"
-msgstr "JavaScript"
+#. (itstool) path: td/p
+#: C/toolbar_builder.py.page:129 C/toolbar_builder.vala.page:112
+msgid "gtk-leave-fullscreen"
+msgstr "gtk-leave-fullscreen"
 
-#: C/combobox.js.page:21(desc)
-#, fuzzy
-#| msgid "A text-only drop-down menu"
-msgid "A customizable drop-down menu"
-msgstr "Un menu déroulant texte seul"
+#. (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 "Fermez l'<gui>Éditeur de barre d'outils</gui>."
 
-#: C/combobox.js.page:26(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:141
 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."
+"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 ""
+"Au lancement du programme, nous ne voulons pas que le ToolButton "
+"<gui>Quitter le mode plein écran</gui> s'affiche, car nous ne sommes pas en "
+"mode plein écran. Dans l'onglet <gui>Commun</gui>, définissez la propriété "
+"<gui>Visible</gui> sur <gui>Non</gui>. Le ToolButton sera toujours présent "
+"dans le concepteur d'interface, mais se comportera comme souhaité quand le "
+"fichier sera chargé dans le code de votre programme. Notez que la méthode "
+"<code>show_all()</code> ne prend pas en compte ce réglage, de sorte qu'il "
+"nous faut utiliser <code>show()</code> séparément pour chaque élément."
 
-#: C/combobox.js.page:27(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:142 C/toolbar_builder.vala.page:125
 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."
+"<media type=\"image\" src=\"media/glade_visible_no.png\"> Setting the "
+"visible property to No </media>"
 msgstr ""
 
-#: C/combobox.js.page:28(p)
-msgid ""
-"Working with a ListStore can be time-consuming. If you just want a simple "
-"text-only drop-down menu, take a look at the <link xref=\"comboboxtext.js"
-"\">ComboBoxText.</link> It doesn't take as much time to set up, and is "
-"easier to work with."
-msgstr ""
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:147 C/toolbar_builder.vala.page:130
+msgid "Save your work, and close Glade."
+msgstr "Enregistrez votre travail et quittez Glade."
 
-#: C/combobox.js.page:69(p)
-#, fuzzy
-#| 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."
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:150 C/toolbar_builder.vala.page:133
 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."
+"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 ""
-"Tout le code de cet exemple va dans la classe CheckButtonExample. Le code ci-"
-"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
-"et la fenêtre qui les contient."
+"Vous pouvez voir le fichier XML créé par Glade ci-dessous. C'est la "
+"description de la barre d'outils. Au moment de la rédaction de ces lignes, "
+"l'option pour ajouter la classe Gtk.STYLE_CLASS_PRIMARY_TOOLBAR dans "
+"l'interface de Glade n'existait pas. Mais nous pouvons le faire "
+"manuellement. Pour cela, ajoutez le code XML suivant à la ligne 9 du fichier "
+"<file>toolbar_builder.ui</file> :"
 
-#: C/combobox.js.page:94(p)
+#. (itstool) path: item/code
+#: C/toolbar_builder.py.page:151 C/toolbar_builder.vala.page:134
+#, no-wrap
 msgid ""
-"This ListStore works like the one used in the <link xref="
-"\"treeview_simple_liststore.js\">TreeView</link> example. We're giving it "
-"two columns, both strings, because one of them will contain the names of "
-"<link href=\"http://developer.gnome.org/gtk/2.24/gtk-Stock-Items.html#GTK-";
-"STOCK-ABOUT:CAPS\">stock Gtk icons.</link>"
+"\n"
+"  &lt;style&gt;\n"
+"     &lt;class name=\"primary-toolbar\"/&gt;\n"
+"  &lt;/style&gt;\n"
+"  "
 msgstr ""
 
-#: C/combobox.js.page:95(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:156 C/toolbar_builder.vala.page:139
 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:"
+"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 ""
+"Le programme fonctionnera malgré tout correctement si vous ne l'ajoutez pas, "
+"mais la barre d'outils que vous obtiendrez sera légèrement différente de "
+"celle de la capture d'écran en haut de cette page."
 
-#: C/combobox.js.page:119(p)
+#. (itstool) path: section/code
+#. (itstool) path: page/code
+#: C/toolbar_builder.py.page:159 C/toolbar_builder.vala.page:142
+#, no-wrap
 msgid ""
-"Here we create an array of the text options and their corresponding icons, "
-"then put them into the ListStore in much the same way we would for a <link "
-"xref=\"treeview_simple_liststore.js\">TreeView's</link> ListStore. We only "
-"want to put an icon in if there's actually an icon in the options array, so "
-"we make sure to check for that first."
+"&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 ""
+"Le code ci-dessous ajoute la barre d'outils du fichier que nous venons de "
+"finir."
 
-#: C/combobox.js.page:120(p)
+#. (itstool) path: section/code
+#: C/toolbar_builder.py.page:167
+#, no-wrap
 msgid ""
-"\"Select\" isn't really an option so much as an invitation to click on our "
-"ComboBox, so it doesn't need an icon."
+"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 ""
 
-#: C/combobox.js.page:124(title)
-#, fuzzy
-#| msgid "Creating the ComboBoxText"
-msgid "Creating the ComboBox"
-msgstr "Création de la BoiteCombineeTexte"
+#. (itstool) path: section/title
+#: C/toolbar_builder.py.page:172
+msgid "Useful methods for Gtk.Builder"
+msgstr "Méthodes utiles pour Gtk.Builder"
 
-#: C/combobox.js.page:130(p)
+#. (itstool) path: section/p
+#: C/toolbar_builder.py.page:173
 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."
+"For the useful methods for a Toolbar widget, see <link xref=\"toolbar.py\"/>"
 msgstr ""
+"Consultez <link xref=\"toolbar.py\"/> pour connaître les méthodes utiles à "
+"un élément graphique de barre d'outils"
 
-#: C/combobox.js.page:144(p)
-msgid ""
-"This part, again, works much like creating CellRenderers and packing them "
-"into the columns of a <link xref=\"treeview_simple_liststore.js\">TreeView.</"
-"link> The biggest difference is that we don't need to create the ComboBox's "
-"columns as separate objects. We just pack the CellRenderers into it in the "
-"order we want them to show up, then tell them to pull information from the "
-"ListStore (and what type of information we want them to expect)."
+#. (itstool) path: section/p
+#: C/toolbar_builder.py.page:175
+msgid "Gtk.Builder builds an interface from an XML UI definition."
 msgstr ""
+"Gtk.Builder construit une interface à partir d'une définition XML d'une "
+"interface utilisateur."
 
-#: C/combobox.js.page:145(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:178
 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."
+"<code>add_from_file(filename)</code> loads and parses the given file and "
+"merges it with the current contents of the Gtk.Builder."
 msgstr ""
+"La méthode <code>add_from_file(nomdufichier)</code> charge et analyse le "
+"fichier donné et le fusionne avec le contenu actuel de Gtk.Builder."
 
-#: C/combobox.js.page:146(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:179
 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."
+"<code>add_from_string(string)</code> parses the given string and merges it "
+"with the current contents of the Gtk.Builder."
 msgstr ""
+"La méthode <code>add_from_string(chaîne)</code> charge et analyse la chaîne "
+"de caractères donnée et la fusionne avec le contenu actuel de Gtk.Builder."
 
-#: C/combobox.js.page:155(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:180
 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."
+"<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 ""
+"La méthode <code>add_objects_from_file(nomdufichier, object_ids)</code> est "
+"identique à <code>add_from_file()</code>, mais elle ne charge que les objets "
+"qui possèdent les identifiants donnés par la liste <code>object_id</code>."
 
-#: C/combobox.js.page:165(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:181
 #, fuzzy
 #| msgid ""
-#| "Finally, we add the ComboBoxText to the window, and tell the window to "
-#| "show itself and the widget inside it."
+#| "<code>add_objects_from_string(filename, object_ids)</code> is the same as "
+#| "<code>add_from_string()</code>, but it loads only the objects with the "
+#| "ids given in the <code>object_id</code>s list."
 msgid ""
-"Finally, we add the ComboBox to the window, and tell the window to show "
-"itself and everything inside it."
+"<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 ""
-"Enfin, ajoutons la BoiteCombineeTexte à la fenêtre et indiquons à la fenêtre "
-"de s'afficher avec ses éléments graphiques à l'intérieur."
+"La méthode <code>add_objects_from_string(nomdufichier, object_ids)</code> "
+"est identique à <code>add_from_string()</code>, mais elle ne charge que les "
+"objets avec les identifiants donnés par la liste <code>object_id</code>."
 
-#: C/combobox.js.page:179(p)
-#, fuzzy
-#| 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."
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:182
 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."
+"<code>get_object(object_id)</code> retrieves the widget with the id "
+"<code>object_id</code> from the loaded objects in the builder."
 msgstr ""
-"Nous allons créer une <link xref=\"messagedialog.js"
-"\">BoiteDeDialogueDemessage</link> qui affiche un message en fonction de la "
-"distribution sélectionnée. Créons d'abord le tableau des réponses à "
-"utiliser. Comme la première chaîne de notre BoiteCombineeTexte est justement "
-"le message « Select distribution », laissons celle-ci vide."
+"La méthode <code>get_object(object_id)</code> récupère l'élément graphique "
+"possédant l'identifiant <code>object_id</code> à partir des objets chargés "
+"dans le constructeur."
 
-#: C/combobox.js.page:203(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:183
+msgid "<code>get_objects()</code> returns all loaded objects."
+msgstr "La méthode <code>get_objects()</code> renvoie tous les objets chargés."
+
+#. (itstool) path: item/p
+#: C/toolbar_builder.py.page:184
 #, fuzzy
 #| 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."
+#| "<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."
 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."
+"<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 ""
-"Avant d'afficher une BoiteDeDialogueDemessage, vérifions d'abord que vous "
-"n'avez pas choisi le message « Select distribution ». Ensuite, définissons "
-"son texte comme étant l'entrée dans le tableau qui correspond à l'entrée "
-"active de notre BoiteDeDialogueDemessage. Cela se fait avec la méthode "
-"<file>get_active</file>, qui renvoie l'identifiant numérique de votre "
-"sélection."
+"La méthode <code>connect_signals(handler_object)</code> connecte les signaux "
+"aux méthodes fournies par le gestionnaire <code>handler_object</code>. Ce "
+"peut être n'importe quel objet contenant des clés ou des attributs qui sont "
+"appelés comme les noms des gestionnaires de signaux dans la description de "
+"l'interface, par ex. une classe ou un dictionnaire."
 
-#: C/combobox.js.page:204(p) C/comboboxtext.js.page:147(p)
+#. (itstool) path: info/title
+#: C/toolbar_builder.vala.page:8
+#, fuzzy
+#| msgid "Toolbar created using Glade (Vala)"
+msgctxt "text"
+msgid "Toolbar created using Glade (Vala)"
+msgstr "Barre d'outils créée avec Glade (Vala)"
+
+#. (itstool) path: page/p
+#: C/toolbar_builder.vala.page:26
 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."
+"This example is similar to <link xref=\"toolbar.vala\"/>, except we use "
+"Glade to create the toolbar in an XML ui file."
 msgstr ""
-"Il existe d'autres méthodes alternatives : <file>get_active_id</file>, qui "
-"renvoie l'identifiant texte assigné par <file>append</file>, et "
-"<file>get_active_text</file>, qui renvoie le texte complet de la chaîne "
-"sélectionnée."
+"Cet exemple est identique à <link xref=\"toolbar.vala\"/>, sauf que nous "
+"utilisons Glade pour créer la barre d'outils dans un fichier XML .ui."
 
-#: C/combobox.js.page:205(p) C/comboboxtext.js.page:148(p)
+#. (itstool) path: item/p
+#: C/toolbar_builder.vala.page:124
 msgid ""
-"After we create the MessageDialog, we connect its response signal to the "
-"_onDialogResponse function, then tell it to show itself."
+"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 ""
-"Une fois la BoiteDeDialogueDemessage terminée, connectons son signal de "
-"retour à la fonction _onDialogResponse et indiquons lui de s'afficher toute "
-"seule."
+"Au lancement du programme, nous ne voulons pas que le ToolButton "
+"<gui>Quitter le mode plein écran</gui> s'affiche, car nous ne sommes pas en "
+"mode plein écran. Dans l'onglet <gui>Commun</gui>, définissez la propriété "
+"<gui>Visible</gui> sur <gui>Non</gui>. Le ToolButton sera toujours présent "
+"dans le concepteur d'interface, mais se comportera comme souhaité quand le "
+"fichier sera chargé dans le code de votre programme."
 
-#: C/combobox.js.page:216(p) C/comboboxtext.js.page:159(p)
+#. (itstool) path: page/code
+#: C/toolbar_builder.vala.page:145
+#, no-wrap
 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."
+"/* 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 ""
-"Comme le seul bouton de la BoiteDeDialogueDemessage est le bouton OK, il "
-"n'est pas nécessaire de vérifier son response_id pour savoir quel bouton a "
-"été cliqué. Tout ce que nous faisons ici est détruire le message surgissant."
 
-#: C/combobox.js.page:223(p)
-#, fuzzy
-#| msgid ""
-#| "Finally, we create a new instance of the finished ComboBoxTextExample "
-#| "class, and set the application running."
-msgid ""
-"Finally, we create a new instance of the finished ComboBoxExample class, and "
-"set the application running."
+#. (itstool) path: 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 ""
-"Enfin, nous créons un nouvel exemple de la classe ComboBoxTextExample "
-"terminée et démarrons l'application."
 
-#: C/combobox.js.page:239(link)
+#. (itstool) path: info/title
+#: C/tooltip.c.page:8
 #, fuzzy
-#| msgid "GtkCellRendererPixbuf"
-msgid "Gtk.CellRendererPixbuf"
-msgstr "GtkCellRendererPixbuf"
+#| msgid "Tooltip"
+msgctxt "text"
+msgid "Tooltip (C)"
+msgstr "Infobulle"
 
-#: C/comboboxtext.js.page:7(title)
-#, fuzzy
-#| msgid "ComboBoxText"
-msgid "ComboBoxText (JavaScript)"
-msgstr "BoiteCombineeTexte"
+#. (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 "Ajouter des infobulles à vos éléments graphiques"
 
-#: C/comboboxtext.js.page:19(desc)
-msgid "A text-only drop-down menu"
-msgstr "Un menu déroulant texte seul"
+#. (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 "Infobulle"
 
-#: C/comboboxtext.js.page:22(title)
-msgid "ComboBoxText"
-msgstr "BoiteCombineeTexte"
+#. (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 "Une barre d'outil avec une infobulle (une image) pour un bouton."
 
-#: C/comboboxtext.js.page:24(p)
+#. (itstool) path: note/p
+#: C/tooltip.c.page:26
 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."
+"This example builds on the <link xref=\"toolbar.c\">Toolbar</link> example."
 msgstr ""
-"Une BoiteCombinee est un menu déroulant. La différence entre une <link xref="
-"\"combobox.js\">BoiteCombinee</link> et une BoiteCombineeTexte est que cette "
-"dernière ne possède que des options texte de base, alors que la "
-"BoiteCombinee utilise un ListStore ou un TreeStore (qui sont de "
-"simples feuilles de calcul) pour afficher des éléments arborescents ou des "
-"images à côté de chaque choix."
 
-#: C/comboboxtext.js.page:25(p)
+#. (itstool) path: section/code
+#: C/tooltip.c.page:31
+#, no-wrap
 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."
+"#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 ""
-"À moins que vous n'ayez besoin des fonctions supplémentaires d'une "
-"BoiteCombinee, ou si vous vous sentez à l'aise dans la manipulation des "
-"ListStore et TreeStore, il est préférable d'utiliser la "
-"simplicité d'une BoiteCombineeTexte chaque fois que possible."
 
-#: C/comboboxtext.js.page:82(title)
-msgid "Creating the ComboBoxText"
-msgstr "Création de la BoiteCombineeTexte"
-
-#: C/comboboxtext.js.page:96(p)
+#. (itstool) path: item/p
+#: C/tooltip.c.page:38 C/tooltip.py.page:59
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkTooltip.html";
+"\">GtkTooltip</link>"
 msgstr ""
-"Après avoir créé la BoiteCombineeTexte, utilisons la méthode "
-"<file>append_text</file> pour lui ajouter des chaînes de texte. Comme les "
-"entrées d'un tableau, les chaînes ont chacune un nombre comme identifiant, "
-"en commençant par 0. Pour simplifier les choses, créons un tableau pour les "
-"entrées de la BoiteCombineeTexte et utilisons une boucle pour les ajouter "
-"dans l'ordre, comme ici."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/comboboxtext.js.page:97(p)
+#. (itstool) path: item/p
+#: C/tooltip.c.page:40 C/tooltip.py.page:61
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/stable/GtkWidget.html";
+"\">GtkWidget</link>"
 msgstr ""
-"Après avoir garni la BoiteCombineeTexte, définissons sa première entrée pour "
-"qu'elle devienne active, nous pouvons ainsi voir la ligne « Select "
-"distribution » avant de cliquer dessus. Connectons ensuite son signal "
-"<file>changed</file> à la fonction _onComboChanged, pour qu'elle soit "
-"appelée à chaque fois que vous faites une nouvelle sélection dans le menu "
-"déroulant."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/comboboxtext.js.page:98(p)
+#. (itstool) path: item/p
+#: C/tooltip.c.page:41 C/tooltip.js.page:40 C/tooltip.py.page:62
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 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."
+"<link href=\"http://developer.gnome.org/gtk3/stable/gtk3-Stock-Items.html";
+"\">Stock Items</link>"
 msgstr ""
-"Pour ajouter une entrée dans une BoiteCombineeTexte, utilisez la méthode "
-"<file>insert_text</file>. Pour utiliser une chaîne texte plutôt qu'un "
-"identifiant pour chaque entrée se référant à un nombre seul, utilisez les "
-"méthodes <file>append</file> et <file>insert</file>. Reportez-vous aux liens "
-"au bas de ce tutoriel pour de plus amples informations sur leur utilisation."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/comboboxtext.js.page:108(p)
+#. (itstool) path: info/title
+#: C/tooltip.js.page:8
+#, fuzzy
+#| msgid "Toolbar (JavaScript)"
+msgctxt "text"
+msgid "Tooltip (JavaScript)"
+msgstr "Barre d'outils (JavaScript)"
+
+#. (itstool) path: note/p
+#: C/tooltip.js.page:25
 msgid ""
-"Finally, we add the ComboBoxText to the window, and tell the window to show "
-"itself and the widget inside it."
+"This example builds on the <link xref=\"toolbar.js\">Toolbar</link> example."
 msgstr ""
-"Enfin, ajoutons la BoiteCombineeTexte à la fenêtre et indiquons à la fenêtre "
-"de s'afficher avec ses éléments graphiques à l'intérieur."
 
-#: C/comboboxtext.js.page:122(p)
+#. (itstool) path: section/code
+#: C/tooltip.js.page:30
+#, no-wrap
 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."
+"//!/usr/bin/gjs\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"
+"const Lang = imports.lang;\n"
+"\n"
+"const TooltipExample = new Lang.Class ({\n"
+"    Name: 'Tooltip Example',\n"
+"\n"
+"    // Create the application \n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({ application_id: 'org.example.jstooltip' });\n"
+"\n"
+"        // Connect 'activate' and 'startup' signals to the callback functions\n"
+"        this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"        this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents windows when active\n"
+"    _onActivate: function() {\n"
+"        this.window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function () {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function () {\n"
+"\n"
+"        // Create the application window\n"
+"        this.window = new Gtk.ApplicationWindow ({ application: this.application,\n"
+"                                                   window_position: Gtk.WindowPosition.CENTER,\n"
+"                                                   title: \"Toolbar with Tooltips Example\",\n"
+"                                                   default_width: 400,\n"
+"                                                   default_height: 200,\n"
+"                                                   border_width: 10 });\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\", Lang.bind(this, this._newCallback));\n"
+"        this.window.add_action(this._newAction);\n"
+"\n"
+"        this._openAction = new Gio.SimpleAction({ name: \"open\" });\n"
+"        this._openAction.connect(\"activate\", Lang.bind(this, this._openCallback));\n"
+"        this.window.add_action(this._openAction);\n"
+"\n"
+"        this._undoAction = new Gio.SimpleAction({ name: \"undo\" });\n"
+"        this._undoAction.connect(\"activate\", Lang.bind(this, this._undoCallback));\n"
+"        this.window.add_action(this._undoAction);\n"
+"\n"
+"        this._fullScreenAction = new Gio.SimpleAction({ name: \"fullscreenToggle\" });\n"
+"        this._fullScreenAction.connect(\"activate\", Lang.bind(this, this._fullScreenCallback));\n"
+"        this.window.add_action(this._fullScreenAction);\n"
+"\n"
+"        this.window.show_all();\n"
+"   },\n"
+"\n"
+"     _createToolbar: function(){\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\", Lang.bind(this, this._undoTooltipCallback));\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: function(action, parameter) {\n"
+"        print(\"You clicked \\\"New\\\".\");\n"
+"    },\n"
+"\n"
+"    _openCallback: function(action, parameter) {\n"
+"        print(\"You clicked \\\"Open\\\".\");\n"
+"    },\n"
+"\n"
+"    // the callback function for the tooltip of the \"undo\" button\n"
+"    _undoTooltipCallback: function(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: function(action, parameter) {\n"
+"        print(\"You clicked \\\"Undo\\\".\");\n"
+"    },\n"
+"\n"
+"    _fullScreenCallback: function() {\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 ""
-"Nous allons créer une <link xref=\"messagedialog.js"
-"\">BoiteDeDialogueDemessage</link> qui affiche un message en fonction de la "
-"distribution sélectionnée. Créons d'abord le tableau des réponses à "
-"utiliser. Comme la première chaîne de notre BoiteCombineeTexte est justement "
-"le message « Select distribution », laissons celle-ci vide."
 
-#: C/comboboxtext.js.page:146(p)
+#. (itstool) path: item/p
+#: C/tooltip.js.page:37
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 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."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Tooltip.html";
+"\">GtkTooltip</link>"
 msgstr ""
-"Avant d'afficher une BoiteDeDialogueDemessage, vérifions d'abord que vous "
-"n'avez pas choisi le message « Select distribution ». Ensuite, définissons "
-"son texte comme étant l'entrée dans le tableau qui correspond à l'entrée "
-"active de notre BoiteDeDialogueDemessage. Cela se fait avec la méthode "
-"<file>get_active</file>, qui renvoie l'identifiant numérique de votre "
-"sélection."
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/comboboxtext.js.page:166(p)
+#. (itstool) path: item/p
+#: C/tooltip.js.page:38
+#, fuzzy
+#| 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."
 msgid ""
-"Finally, we create a new instance of the finished ComboBoxTextExample class, "
-"and set the application running."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Toolbar.html";
+"\">GtkToolbar</link>"
 msgstr ""
-"Enfin, nous créons un nouvel exemple de la classe ComboBoxTextExample "
-"terminée et démarrons l'application."
-
-#: C/comboboxtext.js.page:182(link)
-msgid "Gtk.ComboBoxText"
-msgstr "Gtk.ComboBoxText"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/colorbutton.vala.page:23(None) C/colorbutton.py.page:21(None)
-msgid "@@image: 'media/colorbutton.png'; md5=904539d26fe367bf99f9a0961cfc9a03"
-msgstr "@@image: 'media/colorbutton.png'; md5=904539d26fe367bf99f9a0961cfc9a03"
+"En bas se trouve un tampon <link href=\"http://www.roojs.org/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.TextBuffer.html\">TextBuffer</link> qui contient le texte "
+"lui-même."
 
-#: C/colorbutton.vala.page:7(title)
+#. (itstool) path: item/p
+#: C/tooltip.js.page:39
 #, fuzzy
-#| msgid "ColorButton"
-msgid "ColorButton (Vala)"
-msgstr "BoutonDeCouleur"
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Widget.html";
+"\">GtkWidget</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/colorbutton.vala.page:19(desc) C/colorbutton.py.page:17(desc)
-msgid "A button to launch a color selection dialog"
-msgstr "Un bouton pour ouvrir une boîte de dialogue de sélection de couleur"
+#. (itstool) path: info/title
+#: C/tooltip.py.page:8
+#, fuzzy
+#| msgid "Toolbar (Python)"
+msgctxt "text"
+msgid "Tooltip (Python)"
+msgstr "Barre d'outils (Python)"
 
-#: C/colorbutton.vala.page:22(title) C/colorbutton.py.page:20(title)
-msgid "ColorButton"
-msgstr "BoutonDeCouleur"
+#. (itstool) path: note/p
+#: C/tooltip.py.page:26
+msgid ""
+"This example builds on the <link xref=\"toolbar.py\">Toolbar</link> example."
+msgstr ""
 
-#: C/colorbutton.vala.page:24(p)
-msgid "RGB values of the selected color are shown in the label."
+#. (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 ""
-"Les valeurs RVB de la couleur sélectionnée sont affichées dans cette "
-"étiquette."
 
-#: C/colorbutton.vala.page:31(link)
-msgid "Gtk.ColorButton"
-msgstr "Gtk.ColorButton"
+#. (itstool) path: section/title
+#: C/tooltip.py.page:36
+msgid "Useful methods for a Tooltip widget"
+msgstr "Méthodes utiles pour un élément graphique infobulle (Tooltip)"
 
-#: C/colorbutton.vala.page:32(link)
-msgid "Gdk.RGBA"
-msgstr "Gdk.RGBA"
+#. (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 ""
+"Les fonctions <code>set_tooltip_text(text)</code> et "
+"<code>set_tooltip_markup(text)</code> peuvent être utilisées pour ajouter "
+"une infobulle textuelle (ou un texte dans le langage de balisage Pango) à un "
+"élément graphique."
 
-#: C/colorbutton.py.page:7(title)
-#, fuzzy
-#| msgid "ColorButton"
-msgid "ColorButton (Python)"
-msgstr "BoutonDeCouleur"
+#. (itstool) path: section/p
+#: C/tooltip.py.page:39
+msgid "For more complex tooltips, for instance for a tooltip with an image:"
+msgstr ""
+"Pour des infobulles plus complexes, par exemple pour une infobulle sous la "
+"forme d'image :"
 
-#: C/colorbutton.py.page:22(p)
+#. (itstool) path: item/p
+#: C/tooltip.py.page:41
 msgid ""
-"This ColorButton launches a color selection dialog and prints in the "
-"terminal the RGB values of the color selected."
+"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 ""
-"Ce BoutonDeCouleur ouvre une boîte de dialogue pour sélectionner une couleur "
-"et affiche dans le terminal les valeurs RVB de la couleur sélectionnée."
+"Attribuez la valeur <code>True</code> (vrai) à la propriété <code>\"has-"
+"tooltip\"</code> de l'élément graphique ; de cette façon GTK+ surveille les "
+"événements liés aux mouvements de la souris et tous ceux qui sont "
+"nécessaires afin de déterminer quand et où afficher une infobulle."
 
-#: C/colorbutton.py.page:32(title)
-#, fuzzy
-#| msgid "Useful methods for a Button widget"
-msgid "Useful methods for a ColorButton widget"
-msgstr "Méthode utiles pour un élément graphique Bouton"
+#. (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 ""
+"Connectez le signal <code>\"query-tooltip\"</code>. Ce signal est émis "
+"lorsqu'une infobulle doit s'afficher. Un des arguments transmis au "
+"gestionnaire de signaux est un objet GtkTooltip. C'est l'objet que nous "
+"allons afficher comme infobulle et qui peut être manipulé dans votre "
+"fonction de rappel (callback) en utilisant des fonctions comme "
+"<code>set_icon()</code>. Ce sont des fonctions servant à paramétrer le "
+"balisage de l'infobulle (<code>set_markup(text)</code>), à définir une image "
+"à partir de la collection d'icônes (<code>set_icon_from_stock(stock_id, "
+"size)</code>), ou même à positionner un élément graphique personnalisé "
+"(<code>set_custom(widget)</code>)."
 
-#: C/colorbutton.py.page:33(p)
+#. (itstool) path: item/p
+#: C/tooltip.py.page:43
 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."
+"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 ""
+"Renvoyez la valeur <code>True</code> à partir de votre gestionnaire query-"
+"tooltip. Cela provoque l'affichage de l'infobulle. Si vous renvoyez "
+"<code>False</code>, elle n'est pas affichée."
 
-#: C/colorbutton.py.page:40(link)
-msgid "GtkColorButton"
-msgstr "GtkColorButton"
+#. (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 ""
+"Dans le cas peut probable où vous voulez avoir plus de contrôle sur "
+"l'infobulle qui est sur le point d'être affichée, vous pouvez définir votre "
+"propre GtkWindow qui sera utilisée comme fenêtre d'infobulle. Cela "
+"fonctionne comme ceci :"
 
-#: C/colorbutton.py.page:41(link)
-msgid "GtkColorChooser"
-msgstr "GtkColorChooser"
+#. (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 ""
+"Paramétrez <code>\"has-tooltip\"</code> et connectez le à <code>\"query-"
+"tooltip\"</code> comme auparavant."
 
-#: C/colorbutton.py.page:42(link)
-msgid "RGBA Colors"
-msgstr "Couleurs RVBA"
+#. (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 ""
+"Utilisez <code>set_tooltip_window()</code> sur l'élément graphique pour "
+"définir un GtkWindow créé par vos soins comme fenêtre d'infobulle."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/checkbutton.vala.page:21(None) C/checkbutton.py.page:22(None)
-#: C/checkbutton.js.page:21(None) C/checkbutton.c.page:21(None)
-msgid "@@image: 'media/checkbutton.png'; md5=7921a6812c87dd2b3781f4fad241e858"
-msgstr "@@image: 'media/checkbutton.png'; md5=7921a6812c87dd2b3781f4fad241e858"
+#. (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 ""
+"Dans la fonction de rappel <code>\"query-tooltip\"</code> vous pouvez "
+"accéder à votre fenêtre en utilisant <code>get_tooltip_window()</code> et la "
+"manipuler comme bon vous semble. La sémantiques pour la valeur retournée est "
+"exactement comme ci-dessus, renvoyez <code>True</code> pour afficher la "
+"fenêtre, <code>False</code> dans le cas contraire."
 
-#: C/checkbutton.vala.page:7(title)
+#. (itstool) path: info/title
+#: C/tooltip.vala.page:8
 #, fuzzy
-#| msgid "CheckButton"
-msgid "CheckButton (Vala)"
-msgstr "CaseAcocher"
-
-#: C/checkbutton.vala.page:17(desc)
-msgid "Create widgets with a disrete toggle button"
-msgstr "Créer des éléments graphiques avec un bouton d'inversion discret"
-
-#: C/checkbutton.vala.page:20(title) C/checkbutton.py.page:21(title)
-#: C/checkbutton.js.page:20(title) C/checkbutton.c.page:20(title)
-msgid "CheckButton"
-msgstr "CaseAcocher"
-
-#: C/checkbutton.vala.page:22(p) C/checkbutton.py.page:23(p)
-#: C/checkbutton.c.page:22(p)
-msgid "This CheckButton toggles the title."
-msgstr "Cette CaseAcocher inverse le titre."
-
-#: C/checkbutton.vala.page:29(link) C/checkbutton.js.page:139(link)
-msgid "Gtk.CheckButton"
-msgstr "Gtk.CheckButton"
+#| msgid "Toolbar (Vala)"
+msgctxt "text"
+msgid "Tooltip (Vala)"
+msgstr "Barre d'outils (Vala)"
 
-#: C/checkbutton.py.page:7(title)
+#. (itstool) path: note/p
+#: C/tooltip.vala.page:25
 #, fuzzy
-#| msgid "CheckButton"
-msgid "CheckButton (Python)"
-msgstr "CaseAcocher"
-
-#: C/checkbutton.py.page:18(desc)
-msgid "A toggle button in a window"
-msgstr "Un bouton de basculement dans une fenêtre"
-
-#: C/checkbutton.py.page:32(p)
+#| msgid ""
+#| "This example is similar to <link xref=\"toolbar.vala\"/>, except we use "
+#| "Glade to create the toolbar in an XML ui file."
 msgid ""
-"We could also create the CheckButton with <code>button = Gtk.CheckButton."
-"new_with_label(\"Show Title\")</code>."
+"This example builds on the <link xref=\"toolbar.vala\">Toolbar</link> "
+"example."
 msgstr ""
-"Nous aurions pu aussi créer la CaseAcocher avec <code>button = Gtk."
-"CheckButton.new_with_label(\"Show Title\")</code>."
-
-#: C/checkbutton.py.page:37(title)
-msgid "Useful methods for a CheckButton widget"
-msgstr "Méthodes utiles pour un élément graphique CaseAcocher"
+"Cet exemple est identique à <link xref=\"toolbar.vala\"/>, sauf que nous "
+"utilisons Glade pour créer la barre d'outils dans un fichier XML .ui."
 
-#: C/checkbutton.py.page:49(link) C/checkbutton.c.page:29(link)
-msgid "GtkCheckButton"
-msgstr "GtkCheckButton"
+#. (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 ""
 
-#: C/checkbutton.js.page:7(title)
+#. (itstool) path: item/p
+#: C/tooltip.vala.page:39
 #, fuzzy
-#| msgid "CheckButton"
-msgid "CheckButton (JavaScript)"
-msgstr "CaseAcocher"
-
-#: C/checkbutton.js.page:17(desc)
-msgid "A box which can be checked or unchecked"
-msgstr "Une case qui peut être cochée ou décochée"
-
-#: C/checkbutton.js.page:22(p)
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"This application has a CheckButton. Whether the box is checked dictates "
-"whether the window's title bar shows anything."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Tooltip.html\";>Gtk.Tooltip</"
+"link>"
 msgstr ""
-"Cette application possède une CaseAcocher. Selon que la case soit cochée ou "
-"non dicte l'affichage ou non de quelque chose dans la barre de titre de la "
-"fenêtre."
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/checkbutton.js.page:23(p)
+#. (itstool) path: item/p
+#: C/tooltip.vala.page:41
+#, fuzzy
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 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."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Widget.query_tooltip.html";
+"\">Gtk.Widget.query_tooltip</link>"
 msgstr ""
-"Une CaseAcocher envoie le signal d'inversion « toggled » quand elle cochée "
-"ou décochée. Pendant qu'elle est cochée, la valeur de la propriété "
-"« active » est sur vrai et quand elle ne l'est pas, elle est sur faux."
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/checkbutton.js.page:66(p)
+#. (itstool) path: item/p
+#: C/tooltip.vala.page:42
 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."
+"<link href=\"https://developer.gnome.org/gtk3/3.4/gtk3-Stock-Items.html#GTK-";
+"STOCK-UNDO:CAPS\">Stock Items</link>"
 msgstr ""
-"Tout le code de cet exemple va dans la classe CheckButtonExample. Le code ci-"
-"dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/";
-"Gtk.Application.html\">Gtk.Application</link> pour nos éléments graphiques "
-"et la fenêtre qui les contient."
 
-#: C/checkbutton.js.page:80(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/treeview_advanced_liststore.png'; "
+#| "md5=102b512197fb9aa4ed9a16462f6af911"
+msgctxt "_"
 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."
+"external ref='media/treeview_advanced_liststore.png' "
+"md5='102b512197fb9aa4ed9a16462f6af911'"
 msgstr ""
-"Mettons tout le code nécessaire à la création de l'interface utilisateur "
-"dans la fonction _buildUI. Créons maintenant une nouvelle <link href="
-"\"GtkApplicationWindow.js.page\">Gtk.ApplicationWindow</link> pour y mettre "
-"tous nos éléments graphiques."
+"@@image: 'media/treeview_advanced_liststore.png'; "
+"md5=102b512197fb9aa4ed9a16462f6af911"
 
-#: C/checkbutton.js.page:84(title)
-msgid "Creating the checkbutton"
-msgstr "Création de la CaseAcocher"
+#. (itstool) path: info/title
+#: C/treeview_advanced_liststore.py.page:8
+#, fuzzy
+#| msgid "Simple Treeview with ListStore (Python)"
+msgctxt "text"
+msgid "Simple Treeview with ListStore (Python)"
+msgstr "Simple TreeView avec ListStore (Python)"
 
-#: C/checkbutton.js.page:96(p)
+#. (itstool) path: info/desc
+#: C/treeview_advanced_liststore.py.page:19
+msgid "A TreeView displaying a ListStore (more complex example)"
+msgstr "Une TreeView affichant un ListStore (exemple plus complexe)"
+
+#. (itstool) path: page/title
+#: C/treeview_advanced_liststore.py.page:22
+#, fuzzy
+#| msgid "Simple Treeview with ListStore"
+msgid "More Complex Treeview with ListStore"
+msgstr "Simple Treeview avec ListStore"
+
+#. (itstool) path: page/p
+#: C/treeview_advanced_liststore.py.page:24
+#: C/treeview_simple_liststore.py.page:25
 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."
+"This TreeView displays a simple ListStore with the selection \"changed\" "
+"signal connected."
 msgstr ""
-"Ce code ne génère que la CaseAcocher. Pour créer l'étiquette à côté de la "
-"CaseAcocher, il faut donner à la CaseAcocher la propriété « label » et lui "
-"assigner une valeur de chaîne. Comme la CaseAcocher s'inverse selon que le "
-"titre de la fenêtre s'affiche ou non (et nous le mettons en position affiché "
-"pour commencer), il faut que la case soit cochée par défaut. Ensuite, à "
-"chaque fois que l'utilisateur coche ou décoche la case, cela appelle la "
-"fonction ._toggledCB."
+"Ce Treeview affiche un ListStore tout simple avec le signal « changed » de "
+"la sélection connecté."
 
-#: C/checkbutton.js.page:102(p)
+#. (itstool) path: section/code
+#: C/treeview_advanced_liststore.py.page:31
+#, no-wrap
 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)."
+"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 ""
-"Ce code termine la création de l'interface utilisateur en indiquant à la "
-"fenêtre de s'afficher toute seule avec tous ses éléments graphiques enfants "
-"(il n'y a que la CaseAcocher dans cet exemple)."
 
-#: C/checkbutton.js.page:106(title)
-msgid "Function which handles the checkbutton's toggling"
-msgstr "Fonction prenant en charge l'inversion de la CaseAcocher"
+#. (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 "Méthodes utiles pour un élément graphique TreeView"
 
-#: C/checkbutton.js.page:120(p)
+#. (itstool) path: section/p
+#: C/treeview_advanced_liststore.py.page:36
+#: C/treeview_cellrenderertoggle.py.page:36 C/treeview_treestore.py.page:37
 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."
+"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 ""
-"Quand la CaseAcocher est décochée, nous voulons que le titre de la fenêtre "
-"disparaisse. Quand elle est cochée, nous voulons qu'elle réapparaisse. Pour "
-"savoir quel est son état, il nous faut la tester. C'est l'instruction if ou "
-"else qui va appeler la méthode get_active() de la CaseAcocher et qui fera ce "
-"travail."
 
-#: C/checkbutton.js.page:126(p)
+#. (itstool) path: section/p
+#: C/treeview_advanced_liststore.py.page:37
 msgid ""
-"Finally, we create a new instance of the finished CheckButtonExample class, "
-"and set the application running."
+"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 ""
-"Enfin, nous créons un nouvel exemple de la classe CheckButtonExample et "
-"démarrons l'application."
-
-#: C/checkbutton.c.page:7(title)
-#, fuzzy
-#| msgid "CheckButton"
-msgid "CheckButton (C)"
-msgstr "CaseAcocher"
-
-#: C/checkbutton.c.page:13(email)
-msgid "tiffany antpoolski gmail com"
-msgstr "tiffany antpoolski gmail com"
-
-#: C/checkbutton.c.page:17(desc)
-msgid "Create widgets with a discrete ToggleButton"
-msgstr "Créer des éléments graphiques avec un bouton de basculement discret"
-
-#: C/c.page:6(title)
-msgid "C"
-msgstr "C"
-
-#: C/c.page:15(title)
-msgid "Tutorials, code samples, and plaform demos in C"
-msgstr "Tutoriels, exemples de code et démonstrations de la plateforme en C"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/buttonbox.py.page:23(None)
+#. (itstool) path: 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
 #, fuzzy
-#| msgid "@@image: 'media/toolbar.png'; md5=f0350855eedf6343952b72d6d906f738"
+#| msgid ""
+#| "@@image: 'media/treeview_cellrenderertoggle.png'; "
+#| "md5=ade9b9437f8f83150acf37610dab834d"
+msgctxt "_"
 msgid ""
-"@@image: 'media/buttonbox_calculator.png'; "
-"md5=ce0de08b7ac66f517290e33e6d33d508"
-msgstr "@@image: 'media/toolbar.png'; md5=f0350855eedf6343952b72d6d906f738"
-
-#: C/buttonbox.py.page:7(title)
-msgid "ButtonBox (Python)"
-msgstr ""
-
-#: C/buttonbox.py.page:18(desc)
-msgid "A container for arranging buttons"
+"external ref='media/treeview_cellrenderertoggle.png' "
+"md5='ade9b9437f8f83150acf37610dab834d'"
 msgstr ""
+"@@image: 'media/treeview_cellrenderertoggle.png'; "
+"md5=ade9b9437f8f83150acf37610dab834d"
 
-#: C/buttonbox.py.page:21(title)
+#. (itstool) path: info/title
+#: C/treeview_cellrenderertoggle.py.page:8 C/treeview_treestore.py.page:8
 #, fuzzy
-#| msgid "Button"
-msgid "ButtonBox"
-msgstr "Bouton"
+#| msgid "TreeView with TreeStore (Python)"
+msgctxt "text"
+msgid "TreeView with TreeStore (Python)"
+msgstr "TreeView avec TreeStore (Python)"
 
-#: C/buttonbox.py.page:24(p)
-msgid "A calculator - the buttons are enclosed in horizontal ButtonBoxes."
+#. (itstool) path: info/desc
+#: C/treeview_cellrenderertoggle.py.page:19
+msgid ""
+"A TreeView displaying a TreeStore (more complex example, with "
+"CellRendererToggle)"
 msgstr ""
+"Une TreeView affichant un TreeStore (exemple plus complexe avec "
+"CellRendererToggle)"
 
-#: C/buttonbox.py.page:34(title)
+#. (itstool) path: page/title
+#: C/treeview_cellrenderertoggle.py.page:22
 #, fuzzy
-#| msgid "Useful methods for a Button widget"
-msgid "Uselful methods for a ButtonBox widget"
-msgstr "Méthode utiles pour un élément graphique Bouton"
+#| msgid "TreeView with TreeStore"
+msgid "More Complex TreeView with TreeStore"
+msgstr "TreeView avec TreeStore"
 
-#: C/buttonbox.py.page:36(p)
+# Bruno : toggle = inverseur
+#. (itstool) path: page/p
+#: C/treeview_cellrenderertoggle.py.page:24
 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)."
+"This TreeView displays a TreeStore with two columns, one of which is "
+"rendered as a toggle."
 msgstr ""
+"Ce TreeView affiche un TreeStore de deux colonnes, dont l'une est affichée "
+"sous la forme d'un inverseur."
 
-#: C/buttonbox.py.page:37(p)
+#. (itstool) path: section/code
+#: C/treeview_cellrenderertoggle.py.page:31
+#, no-wrap
 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."
+"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 ""
 
-#: C/buttonbox.py.page:38(p)
+#. (itstool) path: section/p
+#: C/treeview_cellrenderertoggle.py.page:37
 msgid ""
-"<code>set_child_non_homogeneous(button, is_non_homogeneous)</code> sets "
-"whether the child is exempted from homogeous sizing. Default value is "
-"<code>False</code>."
+"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 ""
 
-#: C/buttonbox.py.page:39(p)
+#. (itstool) path: item/p
+#: C/treeview_cellrenderertoggle.py.page:46 C/treeview_treestore.py.page:46
 #, fuzzy
 #| msgid ""
-#| "<code>set_digits(digits)</code> sets the precision to be displayed by the "
-#| "spinbutton, up to 20 digits."
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"<code>set_spacing(spacing)</code> sets the spacing, in pixels, between the "
-"buttons of the box."
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkTreeStore.html";
+"\">GtkTreeStore</link>"
 msgstr ""
-"La méthode <code>set_digits(caracteres)</code> définit la précision "
-"d'affichage du BoutonDactivité, jusqu'à 20 caractères."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/buttonbox.py.page:47(link)
+#. (itstool) path: item/p
+#: C/treeview_cellrenderertoggle.py.page:48
 #, fuzzy
-#| msgid "GtkButton"
-msgid "GtkButtonBox"
-msgstr "GtkButton"
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkCellRendererToggle.";
+"html\">GtkCellRendererToggle</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/buttonbox.py.page:48(link)
+#. (itstool) path: 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
 #, fuzzy
-#| msgid "GtkButton"
-msgid "GtkBox"
-msgstr "GtkButton"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/button.vala.page:23(None) C/button.py.page:23(None)
-#: C/button.js.page:21(None) C/button.c.page:24(None)
-msgid "@@image: 'media/button.png'; md5=8d69efbb3a0d3e043af6139b6492171c"
-msgstr "@@image: 'media/button.png'; md5=8d69efbb3a0d3e043af6139b6492171c"
+#| msgid ""
+#| "@@image: 'media/treeview_simple_liststore_penguins.png'; "
+#| "md5=d750a0b9fddf8e508753cc639839871d"
+msgctxt "_"
+msgid ""
+"external ref='media/treeview_simple_liststore_penguins.png' "
+"md5='d750a0b9fddf8e508753cc639839871d'"
+msgstr ""
+"@@image: 'media/treeview_simple_liststore_penguins.png'; "
+"md5=d750a0b9fddf8e508753cc639839871d"
 
-#: C/button.vala.page:7(title)
+#. (itstool) path: info/title
+#: C/treeview_simple_liststore.js.page:8
 #, fuzzy
-#| msgid "Button"
-msgid "Button (Vala)"
-msgstr "Bouton"
+#| msgid "TreeView with ListStore (JavaScript)"
+msgctxt "text"
+msgid "TreeView with ListStore (JavaScript)"
+msgstr "TreeView avec ListStore (JavaScript)"
 
-#: C/button.vala.page:18(desc) C/button.py.page:18(desc)
-#: C/button.c.page:19(desc)
-msgid "A button widget which emits a signal when clicked"
-msgstr "Un élément graphique bouton qui émet un signal quand il est cliqué"
+#. (itstool) path: info/desc
+#: C/treeview_simple_liststore.js.page:21
+msgid "A widget that shows a separate list of items"
+msgstr "Un élément graphique qui affiche une liste séparée d'éléments"
 
-#: C/button.vala.page:21(title)
-msgid "Button widget"
-msgstr "Élément graphique bouton"
+#. (itstool) path: page/title
+#: C/treeview_simple_liststore.js.page:24
+msgid "TreeView with ListStore"
+msgstr "TreeView avec ListStore"
 
-#: C/button.vala.page:24(p) C/button.py.page:24(p)
-msgid "A button widget connected to a simple callback function."
-msgstr "Un élément graphique bouton connecté à une fonction de rappel simple."
+#. (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 ""
+"Un TreeView est une fenêtre affichant le contenu soit d'un ListStore, soit "
+"d'un TreeStore. Un ListStore peut être comparé à une feuille de calcul : une "
+"liste « plate », en deux dimensions, contenant des données réparties sur des "
+"lignes et dans des colonnes. Alors qu'un TreeStore peut déployer ses "
+"branches dans différentes directions, à la manière d'un arbre. Dans cet "
+"exemple, nous créons un TreeView qui affiche le contenu d'un ListStore "
+"contenant des noms et des numéros de téléphone (fictifs) et nous le "
+"paramétrons pour que l'<link xref=\"label.js\">étiquette</link> en bas de la "
+"fenêtre affiche plus d'informations sur le nom qui a été cliqué."
 
-#: C/button.vala.page:28(p)
+#. (itstool) path: page/p
+#: C/treeview_simple_liststore.js.page:27
 msgid ""
-"In this sample we used the following: <link href=\"http://www.valadoc.org/gtk";
-"+-3.0/Gtk.Button.html\">Gtk.Button</link>"
+"The TreeView is not just a single widget, but contains a number of smaller "
+"ones:"
 msgstr ""
-"Dans cet exemple, nous avons utilisé le <link href=\"http://www.valadoc.org/";
-"gtk+-3.0/Gtk.Button.html\">Gtk.Button</link>"
+"Un TreeView n'est pas qu'un simple élément graphique, il contient aussi un "
+"certain nombre d'autres plus petits :"
 
-#: C/button.py.page:7(title)
-msgid "Button (Python)"
+#. (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 ""
+"Les éléments graphiques TreeViewColumn affichent chaque colonne "
+"d'informations contenue dans le ListStore. Chacune d'elle a un nom qui peut "
+"être affiché dans l'en-tête de la colonne, comme montré dans la capture "
+"d'écran."
 
-#: C/button.py.page:21(title) C/button.js.page:20(title)
-#: C/button.c.page:22(title)
-msgid "Button"
-msgstr "Bouton"
+#. (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 ""
+"Les éléments graphiques CellRenderer sont « empilés » dans chaque "
+"TreeViewColumn et contiennent les instructions sur la manière d'afficher "
+"chaque « cellule » individuelle ou chaque élément du ListStore. Il en existe "
+"beaucoup de types différents, y compris le CellRendererText utilisé ici et "
+"le CellRendererPixbuf qui affiche une image « pixel buffer »."
 
-#: C/button.py.page:33(title)
-msgid "Useful methods for a Button widget"
-msgstr "Méthode utiles pour un élément graphique Bouton"
+#. (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 ""
+"Pour finir, nous allons utiliser un objet nommé TreeIter, qui n'est pas à "
+"proprement parler un élément graphique, mais plutôt un curseur invisible qui "
+"pointe vers une ligne horizontale du ListStore. Si vous cliquez par exemple "
+"sur un nom de la liste téléphonique, cela génère un TreeIter qui pointe vers "
+"la ligne sélectionnée et qui sert à indiquer au ListStore quelles "
+"informations supplémentaires l'étiquette doit afficher."
 
-#: C/button.py.page:35(p)
+#. (itstool) path: note/p
+#: C/treeview_simple_liststore.js.page:33
 msgid ""
-"<code>button = Gtk.Button(label=\"Click me\")</code> could also be used "
-"create a button and set the text directly. For a general discussion of this, "
-"see <link xref=\"properties.py\">here</link>."
+"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 ""
-"La méthode <code>button = Gtk.Button(label=« Cliquez moi »)</code> pourrait "
-"aussi servir à créer un bouton et définir le texte directement. Pour de plus "
-"amples informations sur cette fonction, rendez-vous <link xref=\"properties."
-"py\">ici</link>."
+"Le TreeView est probablement l'élément graphique Gtk le plus compliqué, de "
+"par le nombre d'éléments qu'il contient et à cause de la façon dont ils sont "
+"imbriqués pour travailler ensemble. Prenez le temps d'apprendre et son "
+"fonctionnement en faisant des essais, ou alors essayez de commencer par "
+"quelque chose de plus facile si vous n'y arrivez pas."
 
-#: C/button.py.page:37(p)
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:38
+#, no-wrap
 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>."
+"\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 ""
-"La méthode <code>set_relief(Gtk.ReliefStyle.NONE)</code> annule le style en "
-"relief des bordures du Gtk.Button - à l'opposé, <code>Gtk.ReliefStyle."
-"NORMAL</code> le rétablit."
 
-#: C/button.py.page:38(p)
-#, fuzzy
-#| msgid ""
-#| "If the label of the button is a <link href=\"http://developer.gnome.org/";
-#| "gtk3/3.4/gtk3-Stock-Items.html\">stock icon</link>, <code>set_use_stock"
-#| "(True)</code> sets the label as the name of the corresponding stock icon."
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:51
+#, no-wrap
 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."
+"\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 ""
-"Si l'étiquette du bouton est issue de la <link href=\"http://developer.gnome.";
-"org/gtk3/3.4/gtk3-Stock-Items.html\">collection d'icônes</link>, la méthode "
-"<code>set_use_stock(True)</code> assigne l'étiquette comme étant le nom de "
-"l'icône correspondante de la collection."
 
-#: C/button.py.page:39(p)
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:76
 msgid ""
-"To set an image (e.g. a stock image) for the button <code>button</code>:"
+"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 ""
-"Pour assigner une image (par ex. une image de la collection d'images) au "
-"bouton <code>button</code> :"
+"Tout le code utilisé pour cet exemple va dans la classe TreeViewExample. Le "
+"code ci-dessus crée une <link href=\"http://www.roojs.com/seed/gir-1.2-";
+"gtk-3.0/gjs/Gtk.Application.html\">Gtk.Application</link> pour nos éléments "
+"graphiques et la fenêtre qui les contient."
 
-#: C/button.py.page:40(code)
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:77
 #, no-wrap
 msgid ""
 "\n"
-"image = Gtk.Image()\n"
-"image.set_from_stock(Gtk.STOCK_ABOUT, Gtk.IconSize.BUTTON)\n"
-"button.set_image(image)"
-msgstr ""
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
 "\n"
-"image = Gtk.Image()\n"
-"image.set_from_stock(Gtk.STOCK_ABOUT, Gtk.IconSize.BUTTON)\n"
-"button.set_image(image)"
-
-#: C/button.py.page:44(p)
+"        // 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 ""
-"You should not set a label for the button after this, otherwise it will show "
-"the label and not the image."
+"\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 ""
-"Vous ne devez plus assigner d'étiquette au bouton après cela, sinon il "
-"affichera l'étiquette au lieu de l'image."
 
-#: C/button.py.page:45(p)
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:104
 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."
+"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 ""
-"La fonction <code>set_focus_on_click(False)</code> empêche le bouton de "
-"prendre le focus quand vous cliquez dessus avec la souris."
+"Créons en premier le ListStore comme nous l'aurions fait pour n'importe quel "
+"élément graphique. Appelons ensuite sa méthode set_column_types et passons "
+"lui un tableau de types de données GObject (nous aurions pu placer tous les "
+"types sur une seule et même ligne, mais pour faciliter la lecture, nous les "
+"séparons)."
 
-#: C/button.js.page:7(title)
-#, fuzzy
-#| msgid "JavaScript"
-msgid "Button (JavaScript)"
-msgstr "JavaScript"
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:105
+msgid "The GObject data types you can use include:"
+msgstr "Les types de données GObject que vous pouvez utiliser incluent :"
 
-#: C/button.js.page:17(desc)
-msgid "A button which can be connected to other widgets"
-msgstr "Un bouton qui peut être connecté à d'autres éléments graphiques."
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:110
+msgid "<file>gtk.gdk.Pixbuf</file> -- A picture"
+msgstr "<file>gtk.gdk.Pixbuf</file> -- une image"
 
-#: C/button.js.page:22(p)
-msgid "A button widget that changes its label when you click it."
+#. (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 ""
-"Un élément graphique Bouton qui change d'étiquette quand il est cliqué."
+"Dans ce cas, nous créons un ListStore de quatre colonnes contenant chacune "
+"des valeurs de type chaînes de caractères."
 
-#: C/button.c.page:7(title)
-#, fuzzy
-#| msgid "Button"
-msgid "Button (C)"
-msgstr "Bouton"
+#. (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 ""
+"Voici les informations contenues dans le ListStore. C'est un assortiment "
+"d'objets, chacun correspondant à une entrée de notre répertoire téléphonique."
 
-#: C/button.c.page:25(p)
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:133
 msgid ""
-"A button widget connected to a callback function that reverses its label "
-"when clicked."
+"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 ""
-"Un élément graphique Bouton connecté à une fonction de rappel qui inverse "
-"son étiquette quand il est cliqué."
+"Notez que le TreeView de la capture d'écran n'affiche pas pour l'instant les "
+"données des propriétés « description ». Elles s'afficheront dans l'étiquette "
+"du dessous à chaque clic sur une ligne. C'est parce qu'un TreeView et un "
+"ListStore sont deux choses bien distinctes et qu'un TreeView peut afficher "
+"tout ou une partie du contenu d'un ListStore de différentes façons. Vous "
+"pouvez même posséder plusieurs éléments graphiques affichant des éléments "
+"d'un même ListStore, comme l'étiquette de notre exemple ou bien encore un "
+"second TreeView."
 
-#: C/button.c.page:36(link)
-msgid "Unicode Manipulation"
-msgstr "Manipulation Unicode"
+#. (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 ""
 
-#: C/bug-filing.page:10(email)
-msgid "tiffany antopolski com"
-msgstr "tiffany antopolski com"
+#. (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 ""
+"Cette boucle <file>for</file> place les chaînes de caractères de notre "
+"répertoire téléphonique dans notre ListStore dans l'ordre. Pour ce faire, "
+"nous passons à la méthode set du ListStore le curseur qui pointe vers la "
+"bonne ligne, un tableau qui indique quelles colonnes nous voulons définir et "
+"un tableau qui contient les données que nous voulons y mettre."
 
-#: C/bug-filing.page:18(title)
-msgid "Help make <app>GNOME Developer Tutorials</app> better"
+#. (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 ""
-"Contribution à l'amélioration des tutoriels du <app>Centre de développement "
-"GNOME</app>"
+"La méthode <file>append</file> du ListStore ajoute une ligne horizontale à "
+"celui-ci (au début, il n'y en a pas) et renvoie un TreeIter pointant vers "
+"cette ligne comme un curseur. Donc, en transmettant <file>this._listStore."
+"append()</file> au ListStore comme propriété, nous créons une nouvelle ligne "
+"en indiquant en même temps à la méthode <file>set</file> à quelle ligne elle "
+"doit attribuer les données."
 
-#: C/bug-filing.page:21(title)
-msgid "Report a bug or suggest an improvement"
-msgstr "Envoi d'un rapport d'anomalie ou d'une suggestion d'amélioration"
+#. (itstool) path: section/title
+#: C/treeview_simple_liststore.js.page:148
+msgid "Creating the TreeView"
+msgstr "Création du TreeView"
 
-#: C/bug-filing.page:22(p)
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:149
+#, no-wrap
 msgid ""
-"<app>GNOME Developer Tutorials</app> are maintained by a volunteer "
-"community. You are welcome to participate. If you notice a problem you can "
-"file a <em>bug report</em>. To file a bug, go to <link href=\"https://";
-"bugzilla.gnome.org/\"/>."
+"\n"
+"        // Create the treeview\n"
+"        this._treeView = new Gtk.TreeView ({\n"
+"            expand: true,\n"
+"            model: this._listStore });\n"
 msgstr ""
-"Les tutoriels du <app>Centre de développement GNOME</app> sont maintenus par "
-"une communauté de volontaires. Votre participation est la bienvenue. Si vous "
-"remarquez un problème, vous pouvez rédiger un <em>rapport d'anomalie</em>. "
-"Pour cela, allez à <link href=\"https://bugzilla.gnome.org/\"/>."
 
-#: C/bug-filing.page:25(p)
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:155
 msgid ""
-"This is a bug tracking system where users and developers can file details "
-"about bugs, crashes and request enhancements."
+"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 ""
-"Ce site est un système de regroupement d'anomalies où les utilisateurs et "
-"les développeurs peuvent renseigner les détails d'anomalies, de pannes et "
-"proposer des améliorations."
+"Ici, nous créons un élément graphique TreeView de base, qui s'étend à la "
+"fois horizontalement et verticalement pour utiliser autant d'espace que "
+"nécessaire. Nous le paramétrons pour utiliser le ListStore que nous avons "
+"créé comme étant son « modèle » et d'où proviendront les éléments qu'il "
+"affichera."
 
-#: C/bug-filing.page:28(p)
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:157
+#, no-wrap
 msgid ""
-"To participate you need an account which will give you the ability to gain "
-"access, file bugs, and make comments. Also, you need to register so you can "
-"receive updates by e-mail about the status of your bug. If you don't already "
-"have an account, just click on the <gui>New Account</gui> link to create one."
+"\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 ""
-"Pour participer, il vous faut ouvrir un compte qui vous donne l'autorisation "
-"d'accéder au site, de remplir les formulaires d'anomalies et de faire des "
-"commentaires. Une fois enregistré, vous recevrez les mises à jour sur l'état "
-"de votre anomalie par courriel. Pour ouvrir un compte, cliquez sur le lien "
-"<gui>New Account</gui>."
 
-#: C/bug-filing.page:31(p)
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:163
 msgid ""
-"Once you have an account, log in, click on <guiseq><gui>File a Bug</"
-"gui><gui>All</gui><gui>gnome-devel-docs</gui></guiseq>. Before reporting a "
-"bug, please read the <link href=\"https://bugzilla.gnome.org/page.cgi?id=bug-";
-"writing.html\">bug writing guidelines</link>, and please <link href="
-"\"https://bugzilla.gnome.org/browse.cgi?product=gnome-games\";>browse</link> "
-"for the bug to see if it already exists."
+"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 ""
-"Une fois votre compte créé, identifiez-vous, cliquez sur <guiseq><gui>File a "
-"Bug</gui><gui>All</gui><gui>gnome-devel-docs</gui></guiseq>. Avant de "
-"remplir le formulaire, veuillez lire les <link href=\"https://bugzilla.gnome.";
-"org/page.cgi?id=bug-writing.html\">règles pour remplir un formulaire "
-"d'anomalie</link> et <link href=\"https://bugzilla.gnome.org/browse.cgi?";
-"product=gnome-games\">recherchez</link> si votre anomalie n'est pas déjà "
-"signalée."
+"Nous créons maintenant chacun des TreeViewColumns vertical qui s'afficheront "
+"dans notre TreeView. Comme le montre la capture d'écran, chaque titre se "
+"situe respectivement en haut de sa colonne."
 
-#: C/bug-filing.page:35(p)
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:165
+#, no-wrap
 msgid ""
-"To file your bug, choose the component <gui>platform-demos</gui> in the "
-"<gui>Component</gui> menu."
+"\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 ""
-"Pour remplir votre rapport, sélectionnez l'élément <gui>platform-demos</gui> "
-"dans le menu <gui>Component</gui>."
 
-#: C/bug-filing.page:38(p)
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:178
 msgid ""
-"If you are requesting a new feature, choose <gui>enhancement</gui> in the "
-"<gui>Severity</gui> menu. Fill in the Summary and Description sections and "
-"click <gui>Commit</gui>."
+"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 ""
-"Si vous demandez une nouvelle fonctionnalité, sélectionnez <gui>enhancement</"
-"gui> dans le menu <gui>Severity</gui>. Remplissez les sections « Summary » "
-"et « Description » et cliquez sur <gui>Commit</gui>."
-
-#: C/bug-filing.page:42(p)
+"Ici, nous créons les CellRenderers que nous allons utiliser pour afficher le "
+"texte contenu dans notre ListStore et nous les positionnons dans les "
+"TreeViewColumns. Chaque CellRendererText est utilisé pour toutes les entrées "
+"de cette colonne. Notre CellRendererText normal (normal) ne génère que du "
+"texte brut, alors que celui en gras (bold) utilise du texte plus gras. Nous "
+"le mettons dans la première en-tête de colonne et nous indiquons aux deux "
+"autres d'utiliser des copies du normal. L'argument « true » utilisé comme "
+"second paramètre de la méthode <file>pack_start</file> lui indique "
+"d'agrandir les cellules quand cela est possible, au lieu de les laisser "
+"compactes."
+
+#. (itstool) path: note/p
+#: C/treeview_simple_liststore.js.page:179
 msgid ""
-"Your report will be given an ID number, and its status will be updated as it "
-"is being dealt with. Thanks for helping make <app>GNOME Developer Tutorials</"
-"app> better!"
+"<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 ""
-"Votre rapport reçoit alors un numéro d'identification et son état va être "
-"mis à jour chaque fois que quelqu'un s'en occupera. Merci pour votre "
-"contribution à l'amélioration des tutoriels du <app>Centre de développement "
-"GNOME</app> !"
+"<link href=\"http://www.pygtk.org/docs/pygtk/pango-constants.html\";>Voici "
+"iciune liste</link> d'autres propriétés de texte que vous pouvez utiliser. "
+"Pour pouvoir utiliser les constantes Pango, assurez-vous d'ajouter la ligne "
+"<file>const Pango = imports.gi.Pango;</file> au début de votre code comme "
+"nous l'avons fait."
 
-#: C/beginner.vala.page:8(title)
-#, fuzzy
-#| msgid "0 Beginner's Tutorials"
-msgid "Beginner Tutorials (Vala)"
-msgstr "Tutoriels pour les débutants zéro"
+#. (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 ""
 
-#: C/beginner.vala.page:12(desc) C/beginner.c.page:12(desc)
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.js.page:191
 msgid ""
-"A beginner's guide to GUI programming using GTK+, including code samples and "
-"practice exercises."
+"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 ""
-"Un guide pour débuter la programmation d'interfaces graphiques avec GTK+, "
-"incluant des exemples de code et des exercices pratiques."
+"Après avoir placé les CellRenderers dans les TreeViewColumns, nous utilisons "
+"la méthode <file>add_attribute</file> pour indiquer à chaque colonne "
+"d'extraire du modèle le texte pour lequel notre TreeView est programmée ; "
+"dans ce cas, le ListStore contenant le répertoire téléphonique."
 
-#: C/beginner.vala.page:19(title) C/beginner.c.page:20(title)
-msgid "0 Beginner's Tutorials"
-msgstr "Tutoriels pour les débutants zéro"
+#. (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 ""
+"Le premier paramètre indique quel CellRenderer nous allons utiliser pour "
+"restituer ce que nous extrayons."
 
-#: C/beginner.vala.page:21(p) C/beginner.c.page:22(p)
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:194
 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:"
+"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 ""
-"Bien que ces tutoriels soient conçus pour les débutants, ils ne couvrent pas "
-"toutes les bases de la programmation. Avant d'essayer de suivre ces "
-"tutoriels, vous devez maîtriser les concepts suivants :"
+"Le second paramètre indique le type d'information que nous voulons extraire. "
+"Dans ce cas, nous lui indiquons que nous voulons du texte."
 
-#: C/beginner.vala.page:23(p) C/beginner.c.page:24(p)
-msgid "Object oriented programming"
-msgstr "La programmation objet"
+#. (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 ""
+"Le troisième paramètre indique de quelle colonne du ListStore nous voulons "
+"extraire cette information."
 
-#: C/beginner.vala.page:24(p)
-msgid "The Vala programming language:"
-msgstr "Le language de programmation Vala :"
+#. (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 ""
+"Après avoir paramétré ceci, nous utilisons la méthode <file>insert_column</"
+"file> pour trier le contenu de nos TreeViewColumns. Notre TreeView est à "
+"présent terminée."
 
-#: C/beginner.vala.page:26(link)
-msgid "The Vala Tutorial"
-msgstr "Le tutoriel Vala"
+#. (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 ""
+"Normalement, vous devriez utiliser une boucle pour initialiser votre "
+"TreeView, mais dans cet exemple, nous avons détaillé étape par étape ce qui "
+"ce passe afin de mieux comprendre."
 
-#: C/beginner.vala.page:27(link)
-msgid "Sample Vala code"
-msgstr "Exemple de code Vala"
+#. (itstool) path: section/title
+#: C/treeview_simple_liststore.js.page:202
+msgid "Building the rest of the UI"
+msgstr "Construction du reste de l'interface utilisateur"
 
-#: C/beginner.vala.page:36(title) C/beginner.js.page:36(title)
-#: C/beginner.c.page:33(title)
-msgid "Tutorials"
-msgstr "Tutoriels"
+#. (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 ""
 
-#: C/beginner.vala.page:40(title) C/beginner.py.page:27(title)
-#: C/beginner.js.page:40(title) C/beginner.c.page:37(title)
-msgid "Code samples"
-msgstr "Exemples de code"
+#. (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 ""
+"La méthode <file>get_selection</file> du TreeView retourne un objet appelé "
+"un TreeSelection. Un TreeSelection est comme un TreeIter, tout simplement un "
+"curseur qui pointe vers une ligne particulière, à la différence que celui-ci "
+"pointe vers la ligne qui est marqué visuellement comme sélectionnée."
 
-#: C/beginner.vala.page:45(p)
-msgid "Copy and paste the code into <var>filename</var>.vala"
-msgstr "Copiez et collez le code dans <var>nomdufichier</var>.vala"
+#. (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 ""
+"Une fois obtenu le TreeSelection qui va avec notre TreeView, nous lui "
+"demandons de nous indiquer vers quelle ligne il pointe quand il est modifié. "
+"Nous obtenons cela en connectant le signal <file>changed</file> à la "
+"fonction _onSelectionChanged que nous avons programmée. Cette fonction "
+"modifie le texte affiché par l'étiquette que nous venons de créer."
 
-#: C/beginner.vala.page:47(screen)
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:216
 #, no-wrap
-msgid "valac --pkg gtk+-3.0 <var>filename</var>.vala"
-msgstr "valac --pkg gtk+-3.0 <var>nomdufichier</var>.vala"
+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 ""
 
-#: C/beginner.vala.page:48(screen) C/beginner.c.page:46(screen)
-#: C/beginner.c.page:60(screen)
-#, no-wrap
-msgid "./<var>filename</var>"
-msgstr "./<var>nomdufichier</var>"
+#. (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 ""
+"Ceci fait, nous créons une <link xref=\"grid.js\">grille (grid)</link> pour "
+"y placer le tout, puis nous l'ajoutons à notre fenêtre et demandons à cette "
+"fenêtre de s'afficher avec son contenu."
 
-#: C/beginner.vala.page:52(title) C/beginner.py.page:29(title)
-#: C/beginner.js.page:49(title) C/beginner.c.page:63(title)
-msgid "Windows"
-msgstr "Fenêtres"
+#. (itstool) path: section/title
+#: C/treeview_simple_liststore.js.page:235
+msgid "Function which handles a changed selection"
+msgstr "Fonction prenant en charge la modification de la sélection"
 
-#: C/beginner.vala.page:55(title) C/beginner.py.page:32(title)
-#: C/beginner.js.page:51(title) C/beginner.c.page:66(title)
-msgid "Display widgets"
-msgstr "Éléments graphiques d'affichage"
+#. (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 ""
 
-#: C/beginner.vala.page:57(title) C/beginner.py.page:34(title)
-#: C/beginner.js.page:53(title) C/beginner.c.page:68(title)
-msgid "Buttons and toggles"
-msgstr "Boutons et inverseurs"
+#. (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 ""
+"La ligne de code utilisant l'instruction « let » est quelque peu compliquée, "
+"mais c'est néanmoins la meilleure façon d'obtenir un TreeIter qui pointe "
+"vers la même ligne que notre TreeSelection. Elle doit créer quelques autres "
+"références d'objets, mais le seul qui nous intéresse est l'<file>iter</file>."
 
-#: C/beginner.vala.page:59(title) C/beginner.py.page:36(title)
-#: C/beginner.js.page:55(title) C/beginner.c.page:70(title)
-msgid "Numeric and text data entry"
-msgstr "Entrée de données numériques et de texte"
+#. (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 ""
+"Ceci fait, nous appelons la fonction <file>set_label</file> de l'étiquette "
+"et nous utilisons la fonction <file>get_value</file> du ListStore autant de "
+"fois que nécessaire pour la remplir de toutes les données que nous "
+"souhaitons y mettre. Ses paramètres sont un TreeIter pointant vers la ligne "
+"dont nous voulons extraire les données et la colonne."
 
-#: C/beginner.vala.page:61(title) C/beginner.py.page:38(title)
-#: C/beginner.js.page:57(title) C/beginner.c.page:72(title)
-msgid "Multiline text editor"
-msgstr "Éditeur de texte multiligne"
+#. (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 ""
+"Ici, nous voulons obtenir les données des quatre colonnes, y compris celles "
+"qui sont « masquées » et qui ne font pas partie du TreeView. De cette façon, "
+"nous pouvons utiliser notre étiquette pour afficher les chaînes de "
+"caractères qui sont trop longues pour tenir dans le TreeView et que nous "
+"n'avons pas besoin de voir au premier coup d'œil."
 
-#: C/beginner.vala.page:63(title) C/beginner.py.page:40(title)
-#: C/beginner.js.page:59(title) C/beginner.c.page:74(title)
-msgid "Menu, combo box and toolbar widgets"
-msgstr "Menu, boîte combinée et éléments graphiques de barre d'outils"
+#. (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 ""
 
-#: C/beginner.vala.page:65(title) C/beginner.py.page:42(title)
-#: C/beginner.js.page:61(title) C/beginner.c.page:76(title)
-msgid "TreeView widget"
-msgstr "Élément graphique arborescent"
+#. (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 ""
+"Enfin, nous créons une nouvelle instance de la classe TreeViewExample qui "
+"est terminée et nous démarrons l'application."
 
-#: C/beginner.vala.page:67(title) C/beginner.py.page:44(title)
-#: C/beginner.js.page:63(title) C/beginner.c.page:78(title)
-msgid "Selectors"
-msgstr "Sélecteurs"
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.js.page:268
+#, no-wrap
+msgid ""
+"#!/usr/bin/gjs\n"
+"\n"
+"const GObject = imports.gi.GObject;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"const Pango = imports.gi.Pango;\n"
+"\n"
+"const TreeViewExample = new Lang.Class({\n"
+"    Name: 'TreeView Example with Simple ListStore',\n"
+"\n"
+"    // Create the application itself\n"
+"    _init: function() {\n"
+"        this.application = new Gtk.Application({\n"
+"            application_id: 'org.example.jstreeviewsimpleliststore'\n"
+"        });\n"
+"\n"
+"    // Connect 'activate' and 'startup' signals to the callback functions\n"
+"    this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    this.application.connect('startup', Lang.bind(this, this._onStartup));\n"
+"    },\n"
+"\n"
+"    // Callback function for 'activate' signal presents window when active\n"
+"    _onActivate: function() {\n"
+"        this._window.present();\n"
+"    },\n"
+"\n"
+"    // Callback function for 'startup' signal builds the UI\n"
+"    _onStartup: function() {\n"
+"        this._buildUI ();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    // Build the application's UI\n"
+"    _buildUI: function() {\n"
+"\n"
+"        // Create the application window\n"
+"        this._window = new Gtk.ApplicationWindow({\n"
+"            application: this.application,\n"
+"            window_position: Gtk.WindowPosition.CENTER,\n"
+"            default_height: 250,\n"
+"            default_width: 100,\n"
+"            border_width: 20,\n"
+"            title: \"My Phone Book\"});\n"
+"\n"
+"        // Create the underlying liststore for the phonebook\n"
+"        this._listStore = new Gtk.ListStore ();\n"
+"        this._listStore.set_column_types ([\n"
+"            GObject.TYPE_STRING,\n"
+"            GObject.TYPE_STRING,\n"
+"            GObject.TYPE_STRING,\n"
+"            GObject.TYPE_STRING]);\n"
+"\n"
+"        // Data to go in the phonebook\n"
+"        let phonebook =\n"
+"            [{ name: \"Jurg\", surname: \"Billeter\", phone: \"555-0123\",\n"
+"                description: \"A friendly person.\"},\n"
+"             { name: \"Johannes\", surname: \"Schmid\", phone: \"555-1234\",\n"
+"                description: \"Easy phone number to remember.\"},\n"
+"             { name: \"Julita\", surname: \"Inca\", phone: \"555-2345\",\n"
+"                description: \"Another friendly person.\"},\n"
+"             { name: \"Javier\", surname: \"Jardon\", phone: \"555-3456\",\n"
+"                description: \"Bring fish for his penguins.\"},\n"
+"             { name: \"Jason\", surname: \"Clinton\", phone: \"555-4567\",\n"
+"                description: \"His cake's not a lie.\"},\n"
+"             { name: \"Random J.\", surname: \"Hacker\", phone: \"555-5678\",\n"
+"                description: \"Very random!\"}];\n"
+"\n"
+"        // Put the data in the phonebook\n"
+"        for (let i = 0; i &lt; phonebook.length; i++ ) {\n"
+"            let contact = phonebook [i];\n"
+"            this._listStore.set (this._listStore.append(), [0, 1, 2, 3],\n"
+"                [contact.name, contact.surname, contact.phone, contact.description]);\n"
+"        }\n"
+"\n"
+"        // Create the treeview\n"
+"        this._treeView = new Gtk.TreeView ({\n"
+"            expand: true,\n"
+"            model: this._listStore });\n"
+"\n"
+"        // Create the columns for the address book\n"
+"        let firstName = new Gtk.TreeViewColumn ({ title: \"First Name\" });\n"
+"        let lastName = new Gtk.TreeViewColumn ({ title: \"Last Name\" });\n"
+"        let phone = new Gtk.TreeViewColumn ({ title: \"Phone Number\" });\n"
+"\n"
+"        // Create a cell renderer for when bold text is needed\n"
+"        let bold = new Gtk.CellRendererText ({\n"
+"            weight: Pango.Weight.BOLD });\n"
+"\n"
+"        // Create a cell renderer for normal text\n"
+"        let normal = new Gtk.CellRendererText ();\n"
+"\n"
+"        // Pack the cell renderers into the columns\n"
+"        firstName.pack_start (bold, true);\n"
+"        lastName.pack_start (normal, true);\n"
+"        phone.pack_start (normal, true);\n"
+"\n"
+"        // Set each column to pull text from the TreeView's model\n"
+"        firstName.add_attribute (bold, \"text\", 0);\n"
+"        lastName.add_attribute (normal, \"text\", 1);\n"
+"        phone.add_attribute (normal, \"text\", 2);\n"
+"\n"
+"        // Insert the columns into the treeview\n"
+"        this._treeView.insert_column (firstName, 0);\n"
+"        this._treeView.insert_column (lastName, 1);\n"
+"        this._treeView.insert_column (phone, 2);\n"
+"\n"
+"        // Create the label that shows details for the name you select\n"
+"        this._label = new Gtk.Label ({ label: \"\" });\n"
+"\n"
+"        // Get which item is selected\n"
+"        this.selection = this._treeView.get_selection();\n"
+"\n"
+"        // When something new is selected, call _on_changed\n"
+"        this.selection.connect ('changed', Lang.bind (this, this._onSelectionChanged));\n"
+"\n"
+"        // Create a grid to organize everything in\n"
+"        this._grid = new Gtk.Grid;\n"
+"\n"
+"        // Attach the treeview and label to the grid\n"
+"        this._grid.attach (this._treeView, 0, 0, 1, 1);\n"
+"        this._grid.attach (this._label, 0, 1, 1, 1);\n"
+"\n"
+"        // Add the grid to the window\n"
+"        this._window.add (this._grid);\n"
+"\n"
+"        // Show the window and all child widgets\n"
+"        this._window.show_all();\n"
+"    },\n"
+"\n"
+"\n"
+"\n"
+"    _onSelectionChanged: function () {\n"
+"\n"
+"        // Grab a treeiter pointing to the current selection\n"
+"        let [ isSelected, model, iter ] = this.selection.get_selected();\n"
+"\n"
+"        // Set the label to read off the values stored in the current selection\n"
+"        this._label.set_label (\"\\n\" +\n"
+"            this._listStore.get_value (iter, 0) + \" \" +\n"
+"            this._listStore.get_value (iter, 1) + \" \" +\n"
+"            this._listStore.get_value (iter, 2) + \"\\n\" +\n"
+"            this._listStore.get_value (iter, 3));\n"
+"\n"
+"    }\n"
+"\n"
+"});\n"
+"\n"
+"// Run the application\n"
+"let app = new TreeViewExample ();\n"
+"app.application.run (ARGV);\n"
+msgstr ""
 
-#: C/beginner.vala.page:68(title) C/beginner.py.page:45(title)
-#: C/beginner.js.page:64(title) C/beginner.c.page:79(title)
-msgid "File selectors"
-msgstr "Sélecteurs de fichiers"
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:282
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeSelection.";
+"html\">Gtk.TreeSelection</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/beginner.vala.page:70(title) C/beginner.py.page:47(title)
-#: C/beginner.js.page:66(title) C/beginner.c.page:81(title)
-msgid "Font selectors"
-msgstr "Sélecteurs de polices"
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:283
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.TreeView.html";
+"\">Gtk.TreeView</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/beginner.vala.page:72(title) C/beginner.py.page:49(title)
-#: C/beginner.js.page:68(title) C/beginner.c.page:83(title)
-msgid "Color Selectors"
-msgstr "Sélecteurs de couleurs"
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.js.page:284
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
+msgid ""
+"<link href=\"http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Gtk.";
+"TreeViewColumn.html\">Gtk.TreeViewColumn</link>"
+msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/beginner.vala.page:75(title) C/beginner.py.page:52(title)
-#: C/beginner.js.page:71(title) C/beginner.c.page:86(title)
-msgid "Layout containers"
-msgstr "Conteneurs d'agencement"
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/treeview_simple_liststore.png'; "
+#| "md5=2dc501a2b95b094da985d37b66aee90c"
+msgctxt "_"
+msgid ""
+"external ref='media/treeview_simple_liststore.png' "
+"md5='2dc501a2b95b094da985d37b66aee90c'"
+msgstr ""
+"@@image: 'media/treeview_simple_liststore.png'; "
+"md5=2dc501a2b95b094da985d37b66aee90c"
 
-#: C/beginner.vala.page:79(title) C/beginner.py.page:56(title)
-#: C/beginner.js.page:75(title) C/beginner.c.page:90(title)
-msgid "Scrolling"
-msgstr "Barre de défilement"
+#. (itstool) path: info/title
+#: C/treeview_simple_liststore.py.page:8
+#, fuzzy
+#| msgid "Simple TreeView with ListStore (Python)"
+msgctxt "text"
+msgid "Simple TreeView with ListStore (Python)"
+msgstr "TreeView tout simple avec ListStore (Python)"
 
-#: C/beginner.vala.page:81(title) C/beginner.py.page:58(title)
-#: C/beginner.js.page:77(title) C/beginner.c.page:92(title)
-msgid "Miscellaneous"
-msgstr "Divers"
+#. (itstool) path: info/desc
+#: C/treeview_simple_liststore.py.page:20
+msgid "A TreeView displaying a ListStore (simpler example)"
+msgstr "Un TreeView affichant un ListStore (exemple le plus simple)"
 
-#: C/beginner.py.page:8(title)
-#, fuzzy
-#| msgid "Gtk Widget Sample Code and Tutorials"
-msgid "Gtk Widget Sample Code and Tutorials (Python)"
-msgstr "Exemple de code pour l'élément graphique Gtk et tutoriels"
+#. (itstool) path: page/title
+#: C/treeview_simple_liststore.py.page:23
+msgid "Simple TreeView with ListStore"
+msgstr "TreeView tout simple avec ListStore"
 
-#: C/beginner.py.page:12(desc)
+#. (itstool) path: section/code
+#: C/treeview_simple_liststore.py.page:32
+#, no-wrap
 msgid ""
-"A guide to GUI programming using GTK+, including code samples and practice "
-"exercises."
+"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 in range(len(columns)):\n"
+"            # cellrenderer to render the text\n"
+"            cell = Gtk.CellRendererText()\n"
+"            # the text in the first column should be in boldface\n"
+"            if i == 0:\n"
+"                cell.props.weight_set = True\n"
+"                cell.props.weight = Pango.Weight.BOLD\n"
+"            # the column is created\n"
+"            col = Gtk.TreeViewColumn(columns[i], cell, text=i)\n"
+"            # and it is appended to the treeview\n"
+"            view.append_column(col)\n"
+"\n"
+"        # when a row is selected, it emits a signal\n"
+"        view.get_selection().connect(\"changed\", self.on_changed)\n"
+"\n"
+"        # the label we use to show the selection\n"
+"        self.label = Gtk.Label()\n"
+"        self.label.set_text(\"\")\n"
+"\n"
+"        # a grid to attach the widgets\n"
+"        grid = Gtk.Grid()\n"
+"        grid.attach(view, 0, 0, 1, 1)\n"
+"        grid.attach(self.label, 0, 1, 1, 1)\n"
+"\n"
+"        # attach the grid to the window\n"
+"        self.add(grid)\n"
+"\n"
+"    def on_changed(self, selection):\n"
+"        # get the model and the iterator that points at the data in the model\n"
+"        (model, iter) = selection.get_selected()\n"
+"        # set the label to a new value depending on the selection\n"
+"        self.label.set_text(\"\\n %s %s %s\" %\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 ""
-"Un guide pour la programmation d'interfaces graphiques avec GTK+, incluant "
-"des exemples de code et des exercices pratiques."
 
-#: C/beginner.py.page:19(title)
-msgid "Gtk Widget Sample Code and Tutorials"
-msgstr "Exemple de code pour l'élément graphique Gtk et tutoriels"
-
-#: C/beginner.py.page:21(p)
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.py.page:37
 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."
+"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 ""
-"Si vous êtes débutant et que vous souhaitez un tutoriel pour vous guider pas "
-"à pas dans la découverte des possibilités de GTK+ 3, vous devriez consulter "
-"cette page <link xref=\"tutorial.py\"/>. Si vous recherchez un élément "
-"graphique en particulier, vous pouvez le trouver dans les sections ci-"
-"dessous."
 
-#: C/beginner.js.page:15(desc)
+#. (itstool) path: section/p
+#: C/treeview_simple_liststore.py.page:38
 msgid ""
-"A beginner's guide to writing GNOME applications in JavaScript, including "
-"code samples and practice exercises."
+"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 ""
-"Un guide pour débuter la programmation d'applications GNOME en JavaScript, y "
-"compris des exemples de code et des exercices pratiques."
-
-#: C/beginner.js.page:18(title)
-msgid "0 Beginner's tutorials and samples"
-msgstr "Tutoriels pour les débutants zéro et exemples"
 
-#: C/beginner.js.page:20(p)
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.py.page:51
+#, fuzzy
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
 msgid ""
-"JavaScript is one of the most popular programming languages on the web. It's "
-"not just for the web, though. If you have even a basic understanding of "
-"JavaScript, you can write full-fledged applications for GNOME. <link href="
-"\"https://live.gnome.org/GnomeDocuments\";>GNOME Documents</link> is written "
-"in JavaScript, and so is <link href=\"https://live.gnome.org/GnomeShell/Tour";
-"\">GNOME Shell,</link> the most basic part of GNOME."
+"<link href=\"http://developer.gnome.org/pango/stable/pango-Fonts.html";
+"\">Fonts</link>"
 msgstr ""
-"JavaScript est l'un des langages de programmation les plus courants sur le "
-"Web. Il n'est cependant pas seulement réservé au Web. Même si vous n'avez "
-"que des notions de base en JavaScript, vous pouvez quand même programmer des "
-"applications complètes pour GNOME. <link href=\"https://live.gnome.org/";
-"GnomeDocuments\">GNOME Documents</link> est programmé en JavaScript, de même "
-"que <link href=\"https://live.gnome.org/GnomeShell/Tour\";>GNOME Shell</"
-"link>, la partie la plus basique de GNOME."
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#: C/beginner.js.page:21(p)
-msgid ""
-"GNOME Shell is what you see when you click on \"Activities\" in the top-left "
-"corner of your screen. It also controls the clock and the rest of the top "
-"panel. Besides showing how you to write GNOME applications, these tutorials "
-"will also show you how to use JavaScript to write GNOME Shell extensions, "
-"which give it new features or change the way it does things."
+#. (itstool) path: info/title
+#: C/treeview_simple_liststore.vala.page:8
+#, fuzzy
+#| msgid "Simple Treeview with ListStore (Vala)"
+msgctxt "text"
+msgid "Simple Treeview with ListStore (Vala)"
+msgstr "TreeView tout simple avec ListStore (Vala)"
+
+#. (itstool) path: info/desc
+#: C/treeview_simple_liststore.vala.page:20
+msgid "A widget can display any TreeModel implementation (lists and trees)"
 msgstr ""
-"GNOME Shell est le bureau qui s'affiche quand vous cliquez sur « Activités » "
-"dans le coin supérieur gauche de votre écran. Il contrôle aussi l'horloge et "
-"toute la barre supérieure. En plus de vous guider dans la programmation "
-"d'applications GNOME, ces tutoriels vont aussi vous montrer comment utiliser "
-"JavaScript pour programmer des extensions pour GNOME Shell, ces extensions "
-"qui lui apportent de nouvelles fonctionnalités ou modifient son comportement."
+"Un élément graphique peut afficher n'importe quelle implémentation de "
+"TreeModel (en listes et arborescentes)"
 
-#: C/beginner.js.page:25(title)
-msgid "Getting Started"
-msgstr "Premiers pas"
+#. (itstool) path: page/title
+#: C/treeview_simple_liststore.vala.page:23
+msgid "Simple Treeview with ListStore"
+msgstr "Simple Treeview avec ListStore"
 
-#: C/beginner.js.page:26(p)
+#. (itstool) path: page/p
+#: C/treeview_simple_liststore.vala.page:25
 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:"
+"This TreeView displays a simple ListStore with the Selection \"changed\" "
+"signal connected."
 msgstr ""
-"Ces tutoriels sont destinés à des personnes ayant déjà des connaissances en "
-"JavaScript et qui ont déjà installé GNOME comme interface de bureau sur leur "
-"ordinateur, mais qui n'ont encore jamais developpé d'application GNOME. Si "
-"vous n'avez encore aucune connaissance en JavaScript, ou si vous avez besoin "
-"d'aide pour installer GNOME, consultez d'abord ces ressources :"
+"Ce Treeview affiche un ListStore tout simple avec le signal « changed » de "
+"la sélection connecté."
 
-#: C/beginner.js.page:28(p)
+#. (itstool) path: page/code
+#: C/treeview_simple_liststore.vala.page:27
+#, no-wrap
 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."
+"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 ""
-"<link href=\"http://eloquentjavascript.net/contents.html\";>Eloquent "
-"JavaScript</link> est un livre gratuit, sous licence Creative Commons et qui "
-"explique les bases de la programmation en JavaScript. Comme vous n'allez pas "
-"programmer en JavaScript pour le Web, il vous suffit de lire les chapitres "
-"de 1 à 10 approximativement."
 
-#: C/beginner.js.page:29(p)
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.vala.page:32
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TreeView.html\";>Gtk."
+"TreeView</link>"
 msgstr ""
-"<link href=\"http://www.gnome.org/getting-gnome/\";>Obtenir GNOME</link> pour "
-"une distribution, comme Fedora, openSUSE ou Ubuntu. Chaque distribution "
-"possède ses propres règles pour l'obtention de GNOME."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/beginner.js.page:30(p)
+#. (itstool) path: item/p
+#: C/treeview_simple_liststore.vala.page:34
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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.\""
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.TreeSelection.html\";>Gtk."
+"TreeSelection</link>"
 msgstr ""
-"<link xref=\"set-up-gedit.js\">Configurer Gedit</link> pour programmer des "
-"applications. Gedit est l'éditeur de texte de GNOME et parfois simplement "
-"appelé « éditeur de texte »."
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/beginner.js.page:41(p)
+#. (itstool) path: 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
+#, fuzzy
+#| msgid ""
+#| "@@image: 'media/treeview_treestore.png'; "
+#| "md5=5ca87bc4acd55c527b3fb5fd46779d85"
+msgctxt "_"
 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."
+"external ref='media/treeview_treestore.png' "
+"md5='5ca87bc4acd55c527b3fb5fd46779d85'"
 msgstr ""
-"Ces exemples montrent l'utilisation des éléments graphiques dans vos "
-"applications GNOME. Chacun d'eux fait la démonstration d'une application "
-"complète avec des exemples d'éléments graphiques. À la fin de chaque "
-"exemple, vous trouverez des liens pour de plus amples informations."
+"@@image: 'media/treeview_treestore.png'; md5=5ca87bc4acd55c527b3fb5fd46779d85"
 
-#: C/beginner.js.page:44(p)
-msgid "Copy and paste the code into <var>filename</var>.js"
-msgstr "Copiez et collez le code dans <var>nomdufichier</var>.js"
+#. (itstool) path: info/desc
+#: C/treeview_treestore.py.page:20
+msgid "A TreeView displaying a TreeStore (simpler example)"
+msgstr "Un TreeView affichant un TreeStore (exemple le plus simple)"
 
-#: C/beginner.js.page:45(p)
-msgid "In the terminal, type:"
-msgstr "Saisissez dans le terminal :"
+#. (itstool) path: page/title
+#: C/treeview_treestore.py.page:23
+#, fuzzy
+#| msgid "Simple TreeView with ListStore"
+msgid "Simpler TreeView with TreeStore"
+msgstr "TreeView tout simple avec ListStore"
+
+#. (itstool) path: page/p
+#: C/treeview_treestore.py.page:25
+msgid "This TreeView displays a TreeStore."
+msgstr "Ce TreeView affiche un TreeStore."
 
-#: C/beginner.js.page:46(screen)
+#. (itstool) path: section/code
+#: C/treeview_treestore.py.page:32
 #, no-wrap
-msgid "gjs <var>filename</var>.js"
-msgstr "gjs <var>nomdufichier</var>.js"
+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 ""
 
-#: C/beginner.c.page:8(title)
+#. (itstool) path: info/title
+#: C/tutorial.py.page:9
 #, fuzzy
-#| msgid "0 Beginner's Tutorials"
-msgid "Beginner's Tutorials (C)"
-msgstr "Tutoriels pour les débutants zéro"
+#| msgid "Guitar Tuner"
+msgctxt "text"
+msgid "Tutorial for beginners (Python)"
+msgstr "Accordeur de guitare"
 
-#: C/beginner.c.page:25(p)
-msgid "The C programming language"
-msgstr "Le language de programmation C"
+#. (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 ""
+"Un tutoriel pour les débutants souhaitant apprendre comment programmer des "
+"interfaces utilisateur graphiques en Python."
 
-#: C/beginner.c.page:42(p)
-msgid "Copy and paste the code into <var>filename</var>.c"
-msgstr "Copiez et collez le code dans <var>nomdufichier</var>.c"
+#. (itstool) path: credit/years
+#: C/tutorial.py.page:22
+#, fuzzy
+#| msgid "2010, 2011"
+msgid "2012 2013"
+msgstr "2010, 2011"
 
-#: C/beginner.c.page:44(screen)
-#, no-wrap
-msgid "gcc <var>filename</var>.c `pkg-config --cflags --libs gtk+-3.0` -o <var>filename</var>\n"
-msgstr "gcc <var>nomdufichier</var>.c `pkg-config --cflags --libs gtk+-3.0` -o <var>nomdufichier</var>\n"
+#. (itstool) path: credit/name
+#: C/tutorial.py.page:25
+msgid "Jim Campbell"
+msgstr ""
 
-#: C/beginner.c.page:50(p)
+#. (itstool) path: synopsis/p
+#: C/tutorial.py.page:34
+#, fuzzy
+#| msgid ""
+#| "By following these tutorials you will learn the basics of GUI programming "
+#| "using Gtk+."
 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>."
+"By following these tutorials you will learn the basics of GUI programming "
+"using GTK+ in Python."
 msgstr ""
-"Pour davantage d'informations sur la compilation des programmes Gtk+, "
-"consultez <link href=\"http://developer.gnome.org/gtk3/3.4/gtk-compiling.html";
-"\">Compilation d'applications Gtk+ sur UNIX</link>."
+"En suivant ces tutoriels, vous allez apprendre les bases de la programmation "
+"d'interfaces utilisateurs avec Gtk+."
 
-#: C/beginner.c.page:54(p)
-msgid "You can also use the Vala compiler to compile these samples:"
+#. (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 ""
-"Vous pouvez aussi utiliser le compilateur vala pour construire ces exemples :"
+"Si vous n'avez jamais programmé auparavant, ou si vous n'êtes pas à l'aise "
+"avec le concept de programmation orienté objets, il est préférable "
+"d'acquérir quelques bases avant toute chose. Vous pourriez par exemple "
+"commencer par lire les livres <link href=\"http://learnpythonthehardway.org/";
+"book/\">Learn Python the Hard Way</link> ou <link href=\"http://docs.python.";
+"org/tutorial/index.html\">The Python Tutorial</link>. Vous pourriez aussi "
+"être intéressé par <link href=\"http://python-gtk-3-tutorial.readthedocs.org/";
+"en/latest/index.html\">The Python GTK+ 3 Tutorial</link>. Dès que vous "
+"maîtrisez les bases, n'oubliez pas de revenir consulter ces tutoriels."
 
-#: C/beginner.c.page:57(screen)
-#, no-wrap
-msgid "valac --pkg gtk+-3.0 <var>filename</var>.c"
-msgstr "valac --pkg gtk+-3.0 <var>nom du fichier</var>.c"
+#. (itstool) path: section/title
+#: C/tutorial.py.page:42
+msgid "To run the code samples"
+msgstr "Lancement des exemples de code"
 
-#: C/beginner.c.page:59(p)
-msgid "To run:"
-msgstr "To run:"
+#. (itstool) path: section/p
+#: C/tutorial.py.page:44
+#, fuzzy
+#| msgid "To run the code samples:"
+msgid "To run the code samples in the tutorial:"
+msgstr "Pour lancer les exemples de code :"
 
-#: C/audio-player.vala.page:9(desc)
-msgid "Coming soon..."
-msgstr "Prévu bientôt..."
+#. (itstool) path: item/p
+#: C/tutorial.py.page:46
+#, fuzzy
+#| msgid "Copy and paste the code into <var>filename</var>.py"
+msgid ""
+"Type or copy and paste the code into a file, and save the file with a name "
+"like <var>filename</var>.py"
+msgstr "Copiez et collez le code dans <var>nomdufichier</var>.py"
+
+#. (itstool) path: item/p
+#: C/tutorial.py.page:47
+#, fuzzy
+#| msgid "These RadioButtons report their activity in the terminal."
+msgid "To execute the code, type in the terminal:"
+msgstr "Ces boutons radio signalent leur activité dans le terminal."
 
-#: C/audio-player.vala.page:18(title)
-msgid "3 Audio Player"
-msgstr "3 Lecteur audio"
+#. (itstool) path: item/screen
+#: C/tutorial.py.page:48
+#, no-wrap
+msgid "python <var>filename</var>.py"
+msgstr "python <var>nomdufichier</var>.py"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/aboutdialog.vala.page:29(None) C/aboutdialog.py.page:22(None)
-#: C/aboutdialog.js.page:20(None) C/aboutdialog.c.page:24(None)
+#. (itstool) path: section/p
+#: C/tutorial.py.page:51
 msgid ""
-"@@image: 'media/aboutdialog_GMenu.png'; md5=a36117a559fa98e25e2f6b3db593639f"
+"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 ""
-"@@image: 'media/aboutdialog_GMenu.png'; md5=a36117a559fa98e25e2f6b3db593639f"
 
-#: C/aboutdialog.vala.page:7(title)
+#. (itstool) path: section/title
+#: C/tutorial.py.page:55
 #, fuzzy
-#| msgid "AboutDialog"
-msgid "AboutDialog (Vala)"
-msgstr "AboutDialog"
+#| msgid "A path through the widgets"
+msgid "A path through the widgets (with some theory)"
+msgstr "Parcours des éléments graphiques"
 
-#: C/aboutdialog.vala.page:25(desc) C/aboutdialog.js.page:16(desc)
-#: C/aboutdialog.c.page:19(desc)
-msgid "Display information about an application"
-msgstr "Afficher des informations à propos d'une application"
+#. (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 ""
 
-#: C/aboutdialog.vala.page:28(title) C/aboutdialog.py.page:21(title)
-#: C/aboutdialog.js.page:19(title) C/aboutdialog.c.page:22(title)
-msgid "AboutDialog"
-msgstr "AboutDialog"
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:58
+msgid "Tutorial"
+msgstr "Tutoriel"
 
-#: C/aboutdialog.vala.page:30(p) C/aboutdialog.c.page:25(p)
-msgid "An AboutDialog example using Gtk.ApplicationWindow and Menu"
-msgstr "Un exemple AboutDialog utilisant Gtk.ApplicationWindow et Menu"
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:60
+msgid "Basic windows"
+msgstr "Fenêtres élémentaires"
 
-#: C/aboutdialog.vala.page:40(link)
-msgid "set_default_size"
-msgstr "set_default_size"
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:65
+msgid "Images and labels"
+msgstr "Images et étiquettes"
 
-#: C/aboutdialog.py.page:7(title)
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:71
 #, fuzzy
-#| msgid "AboutDialog"
-msgid "AboutDialog (Python)"
-msgstr "AboutDialog"
+#| msgid "Introduction"
+msgid "Introduction to properties"
+msgstr "Introduction"
 
-#: C/aboutdialog.py.page:18(desc)
-msgid "A window that displays information about an application"
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:75
+msgid "Grid, separator and scrolling"
 msgstr ""
-"Une boîte de dialogue qui affiche des informations à propos d'une application"
 
-#: C/aboutdialog.py.page:23(p)
-msgid ""
-"An AboutDialog example using Gtk.ApplicationWindow and Menu (the \"about\" "
-"is displayed if \"About\" in the menu is selected)."
-msgstr ""
-"Un exemple AboutDialog utilisant Gtk.ApplicationWindow et Menu (le « about » "
-"s'affiche si « À propos » a été sélectionné dans le menu)."
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:82
+#, fuzzy
+#| msgid "Signals and callbacks"
+msgid "Signals, callbacks and buttons"
+msgstr "Signaux et rappels"
 
-#: C/aboutdialog.py.page:35(title)
-msgid "Useful methods for an AboutDialog widget"
-msgstr "Méthodes utiles pour un élément graphique AboutDialog"
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:96
+msgid "Other display widgets"
+msgstr "Autre éléments graphiques d'affichage"
 
-#: C/aboutdialog.py.page:45(link) C/aboutdialog.c.page:36(link)
-msgid "GtkAboutDialog"
-msgstr "GtkAboutDialog"
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:102
+#, fuzzy
+#| msgid "Grid widget"
+msgid "Entry widgets"
+msgstr "Élément graphique Grille"
 
-#: C/aboutdialog.js.page:6(title)
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:108
 #, fuzzy
-#| msgid "AboutDialog"
-msgid "AboutDialog (JavaScript)"
-msgstr "AboutDialog"
+#| msgid "A widget which displays text"
+msgid "A widget to write and display text"
+msgstr "Un élément graphique qui affiche du texte"
 
-#: C/aboutdialog.js.page:21(p)
-msgid ""
-"A modal dialog window which shows information about an application and its "
-"creators. This one is triggered by clicking \"About\" in the application's "
-"menu, which is normally a good place to put it."
-msgstr ""
-"Une boîte de dialogue qui affiche des informations sur une application ainsi "
-"que sur ses auteurs. Celle-ci est activée en cliquant sur « À propos » dans "
-"le menu de l'application, ce qui est normalement son emplacement approprié."
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:112
+msgid "Dialogs"
+msgstr "Boîtes de dialogue"
 
-#: C/aboutdialog.js.page:30(link)
-msgid "Gtk.AboutDialog"
-msgstr "Gtk.AboutDialog"
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:118
+#, fuzzy
+#| msgid "Menus and toolbars (also: using Glade)"
+msgid "Menus, Toolbars and Tooltips (also: using Glade and GtkBuilder)"
+msgstr "Menus et barres d'outils (et également utilisation de Glade)"
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:133
+msgid "TreeViews and ComboBoxes (using the M/V/C design)"
+msgstr "Arborescences et boites combinées (utilisant la conception M/V/C)"
+
+#. (itstool) path: steps/title
+#: C/tutorial.py.page:143
+msgid "Custom widget"
+msgstr "Élément graphique personnalisé"
 
-#: C/aboutdialog.c.page:7(title)
+#. (itstool) path: info/title
+#: C/vala.page:7
 #, fuzzy
-#| msgid "AboutDialog"
-msgid "AboutDialog (C)"
-msgstr "AboutDialog"
+#| msgid "Vala"
+msgctxt "link"
+msgid "Vala"
+msgstr "Vala"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/03_getting_the_signal.js.page:36(None)
-#: C/03_getting_the_signal.js.page:352(None)
+#. (itstool) path: page/title
+#: C/vala.page:21
+msgid "Tutorials, code samples and platform demos in Vala"
+msgstr "Tutoriels, exemples de code et plateforme de démonstrations en vala"
+
+#. (itstool) path: section/title
+#: C/vala.page:26
 #, fuzzy
-#| msgid "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
-msgid ""
-"@@image: 'media/03_jssignal_01.png'; md5=8d6ecab185f4af4534cc255d62b58b8e"
-msgstr "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
+#| msgid "Code samples"
+msgid "Code samples and tutorial"
+msgstr "Exemples de code"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/03_getting_the_signal.js.page:156(None)
-#: C/03_getting_the_signal.js.page:358(None)
+#. (itstool) path: 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
 #, fuzzy
-#| msgid "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
+#| msgid ""
+#| "@@image: 'media/weatherAppJs.png'; md5=1fe859ac4854273d72ea8fc9203639b2"
+msgctxt "_"
 msgid ""
-"@@image: 'media/03_jssignal_02.png'; md5=ba941390fbafc4a0f653c8f70bca92c0"
-msgstr "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/03_getting_the_signal.js.page:160(None)
-msgid "@@image: 'media/03_jssignal_02b.png'; md5=THIS FILE DOESN'T EXIST"
+"external ref='media/weatherAppJs.png' md5='1fe859ac4854273d72ea8fc9203639b2'"
 msgstr ""
+"@@image: 'media/weatherAppJs.png'; md5=1fe859ac4854273d72ea8fc9203639b2"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/03_getting_the_signal.js.page:232(None)
-#: C/03_getting_the_signal.js.page:364(None)
+#. (itstool) path: info/title
+#: C/weatherApp.js.page:7
 #, fuzzy
-#| msgid "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
+#| msgid "Weather Application (JavaScript)"
+msgctxt "text"
+msgid "Weather application (JavaScript)"
+msgstr "Application météo (JavaScript)"
+
+#. (itstool) path: info/desc
+#: C/weatherApp.js.page:22
 msgid ""
-"@@image: 'media/03_jssignal_03.png'; md5=49ecf251b0bf57543c8d79a77b6f306d"
-msgstr "@@image: 'media/scale2.png'; md5=ae2ba0a6675f3d9cdcd961cdf32f1a5c"
+"How to plan an application that uses asynchronous calls. Asynchronous calls "
+"will be presented through a weather application."
+msgstr ""
+"Comment planifier une application qui utilise des appels asynchrones. Les "
+"appels asynchrones sont présentés au travers d'une application météo."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/03_getting_the_signal.js.page:303(None)
-#: C/03_getting_the_signal.js.page:370(None)
+#. (itstool) path: page/title
+#: C/weatherApp.js.page:27
 #, fuzzy
-#| msgid "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
+#| msgid "4 Weather Application"
+msgid "Weather application"
+msgstr "4 Application météo"
+
+#. (itstool) path: synopsis/p
+#: C/weatherApp.js.page:29
 msgid ""
-"@@image: 'media/03_jssignal_04.png'; md5=dfc5221ca15ca9fba7d3c76a73804e2d"
-msgstr "@@image: 'media/scale.png'; md5=462c52a53b773cb9e8c62c646bf88452"
+"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 ""
+"Dans cette partie du guide, nous allons construire une application météo "
+"utilisant des appels asynchrones. Dans cet exemple, les informations "
+"météorologiques sont récupérées sur geonames.org et l'application utilise "
+"les <link href=\"http://fr.wikipedia.org/wiki/Liste_des_codes_OACI_des_a";
+"%C3%A9roports\">codes OACI</link> pour localiser les requêtes météo. Pour "
+"écrire et lancer tous les exemples de code, vous avez besoin d'un éditeur "
+"pour écrire le code, de l'application Terminal et d'un ordinateur sur lequel "
+"GNOME 3 ou supérieur est installé. Dans ce guide, nous illustrerons les "
+"éléments suivants :"
 
-#: C/03_getting_the_signal.js.page:20(desc)
+#. (itstool) path: item/p
+#: C/weatherApp.js.page:32
 #, fuzzy
-#| msgid "A button widget that changes its label when you click it."
-msgid "Create Buttons and other widgets that do things when you click on them."
+#| msgid "Planning the graphical user interface"
+msgid "<link xref=\"#planningUi\">Planning the graphical user interface</link>"
+msgstr "Organisation de l'interface graphique utilisateur"
+
+#. (itstool) path: item/p
+#: C/weatherApp.js.page:33
+msgid "<link xref=\"#asynchronous\">Asynchronous calls</link>"
 msgstr ""
-"Un élément graphique Bouton qui change d'étiquette quand il est cliqué."
 
-#: C/03_getting_the_signal.js.page:23(title)
+#. (itstool) path: item/p
+#: C/weatherApp.js.page:34
 #, fuzzy
-#| msgid "Connecting the signals"
-msgid "3. Getting the Signal"
-msgstr "Connexion des signaux"
+#| msgid "The main program file"
+msgid "<link xref=\"#main\">The main program file</link>"
+msgstr "Le fichier du programme principal"
+
+#. (itstool) path: item/p
+#: C/weatherApp.js.page:35
+#, fuzzy
+#| msgid "Local library GeoNames"
+msgid "<link xref=\"#main\">Local library GeoNames</link>"
+msgstr "Bibliothèque locale GeoNames"
+
+#. (itstool) path: item/p
+#: C/weatherApp.js.page:36
+msgid "<link xref=\"#main\">Autotools and Icons</link>"
+msgstr ""
 
-#: C/03_getting_the_signal.js.page:25(p)
+#. (itstool) path: section/title
+#: C/weatherApp.js.page:44
+msgid "Planning the graphical user interface"
+msgstr "Organisation de l'interface graphique utilisateur"
+
+#. (itstool) path: section/p
+#: C/weatherApp.js.page:45
 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."
+"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 ""
+"Pour structurer une application pour GNOME 3, vous devez utiliser <link href="
+"\"http://developer.gnome.org/platform-overview/stable/gtk\";>GTK+</link>. "
+"Vous devez aussi vous souvenir que la fenêtre principale ne peut comporter "
+"qu'un seul élément graphique, donc organisez votre structure en fonction de "
+"cet impératif (dans cet exemple, nous utilisons Gtk.Grid). Une bonne méthode "
+"consiste à dessiner la boîte « fenêtre principale » et d'y placer chaque "
+"élément graphique nécessaire. En regardant l'image de votre future "
+"application, vous pourrez plus facilement déceler les relations existantes "
+"entre les éléments graphiques. Par exemple, Gtk.Grid place vos éléments "
+"graphiques en fonction des autres, donc la position du premier sur la grille "
+"conditionne le placement des autres."
 
-#: C/03_getting_the_signal.js.page:31(title)
-#, fuzzy
-#| msgid "A basic \"hello, world\" application"
-msgid "A basic application"
-msgstr "Une application basique « hello, world »"
+#. (itstool) path: section/title
+#: C/weatherApp.js.page:48
+msgid "Asynchronous calls"
+msgstr "Appels asynchrones"
 
-#: C/03_getting_the_signal.js.page:32(p)
+# Bruno : for example file system I/O ???
+#. (itstool) path: section/p
+#: C/weatherApp.js.page:49
 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."
+"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 ""
+"Avec beaucoup de langages de programmation, toutes les opérations sont "
+"exécutées de manière synchrone : quand vous exécutez une action, le "
+"programme attend qu'elle soit terminée avant de continuer. Cependant, cette "
+"procédure est mal adaptée aux interfaces utilisateurs graphiques, car "
+"l'application devient inactive pendant ce temps. La méthode asynchrone "
+"(async) est donc beaucoup mieux adaptée dans notre cas, car elle ne bloque "
+"pas votre interface pour d'autres actions. Elle rend ainsi votre application "
+"plus flexible et mieux armée pour affronter des appels plus longs que "
+"prévus, ou qui parfois restent bloqués pour une raison ou une autre. Vous "
+"pouvez par exemple utiliser cette méthode pour des accès entrée/sortie de "
+"fichiers systèmes et des calculs lents en arrière-plan."
 
-#: C/03_getting_the_signal.js.page:33(p)
+# Bruno :  would have to ***be*** killed from terminal."
+#. (itstool) path: section/p
+#: C/weatherApp.js.page:52
 msgid ""
-"How do we write that code? By connecting that Button's \"clicked\" signal to "
-"a callback function, which is a function you write just to handle that "
-"signal. So whenever it gives off that signal, the function connected to that "
-"signal is run."
+"In 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 ""
+"Dans cet exemple, il nous faut obtenir des données de geonames.org. Pendant "
+"ce temps, nous voulons que le reste du programme continue à tourner. Si nous "
+"utilisions pour cela une application synchrone et que nous n'arrivions pas à "
+"avoir une connexion internet fonctionnelle avec le site geonames.org, nous "
+"n'obtiendrions aucune donnée et donc nous n'atteindrions jamais la ligne où "
+"l'instruction main_quit() est exécutée. Il faudrait alors « tuer » "
+"l'application à partir du Terminal."
 
-#: C/03_getting_the_signal.js.page:34(p)
-msgid "Here is an extremely basic example:"
+#. (itstool) path: section/title
+#: C/weatherApp.js.page:55
+msgid "The different parts of the program"
+msgstr "Les différentes parties du programme"
+
+#. (itstool) path: page/title
+#: C/weatherAppMain.js.page:19
+msgid "The main program file"
+msgstr "Le fichier du programme principal"
+
+#. (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 ""
+"Dans cette partie du guide, nous allons construire le fichier du programme "
+"principal de l'application météo. Pour écrire et lancer tous les exemples de "
+"code, vous avez besoin d'un éditeur pour écrire le code, de l'application "
+"Terminal et d'un ordinateur sur lequel GNOME 3 ou supérieur est installé. "
+"Dans ce guide, nous illustrerons les éléments suivants :"
 
-#: C/03_getting_the_signal.js.page:38(p)
+#. (itstool) path: item/p
+#: C/weatherAppMain.js.page:26
+#, fuzzy
+#| msgid "Adding a grid and all the necessary widgets to it"
 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."
+"<link xref=\"#widgets\">Adding a grid and all the necessary widgets to it</"
+"link>"
+msgstr "Ajout d'une grille et de tous les éléments graphiques nécessaires"
+
+#. (itstool) path: item/p
+#: C/weatherAppMain.js.page:27
+#, fuzzy
+#| msgid "Requesting the weather information asynchronously"
+msgid ""
+"<link xref=\"#asynccall\">Requesting the weather information asynchronously</"
+"link>"
+msgstr "Requête des informations météo de manière asynchrone"
+
+#. (itstool) path: item/p
+#: C/weatherAppMain.js.page:28
+#, fuzzy
+#| msgid "Connecting signals to button and entry."
+msgid ""
+"<link xref=\"#connectingbuttons\">Connecting signals to button and entry</"
+"link>."
+msgstr "Connexion des signaux au bouton et champ de saisie."
+
+#. (itstool) path: item/p
+#: C/weatherAppMain.js.page:29
+msgid "<link xref=\"#weatherapp.js\">weatherapp.js</link>"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:39(p)
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:36
 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."
+"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 ""
+"Cette ligne indique comment exécuter le script. Elle doit être la première "
+"ligne de code et le script doit être exécutable. Pour donner les bonnes "
+"permissions, allez dans Terminal et lancez dans le dossier correct la "
+"commande : chmod +x nomduscript. Vous pouvez aussi utiliser le gestionnaire "
+"de fichiers. Déplacez-vous dans le dossier où se trouve votre code, faites "
+"un clic-droit sur le fichier, sélectionnez Propriétés, cliquez sur l'onglet "
+"Permissions et cochez la case pour permettre l'exécution du fichier comme un "
+"programme."
 
-#: C/03_getting_the_signal.js.page:40(p)
+#. (itstool) path: section/code
+#: C/weatherAppMain.js.page:42
+#, no-wrap
 msgid ""
-"Here is the basic, boilerplate code that goes at the start of the "
-"application, before we start creating the window and widgets. Besides the "
-"application having a unique name, the biggest change from the usual "
-"boilerplate is that we create a global variable right near the beginning, to "
-"hold the number of cookies."
+"\n"
+"var Gtk = imports.gi.Gtk;\n"
+"const WeatherService = imports.geonames;"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:72(p)
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:45
 msgid ""
-"Take a look at the part that uses our application's connect method and Lang."
-"bind, to connect its activate and startup signals to the functions that "
-"present the window and build the UI. We're going to do the same thing with "
-"our Button when we get to it, except that we're going to connect its "
-"\"clicked\" signal instead."
+"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 ""
+"Afin que le programme fonctionne, vous devez importer une bibliothèque "
+"d'introspection GObject à utiliser. Pour faire une interface graphique, nous "
+"avons besoin de Gtk. Gtk est importée au début afin de pouvoir l'utiliser "
+"partout ensuite. Nous importons également notre propre bibliothèque locale "
+"JavaScript geonames afin de pouvoir l'utiliser ici."
 
-#: C/03_getting_the_signal.js.page:76(title)
-#, fuzzy
-#| msgid "Creating the buttons"
-msgid "Click the button"
-msgstr "Création des boutons"
+#. (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 ""
 
-#: C/03_getting_the_signal.js.page:78(p)
+#. (itstool) path: section/title
+#: C/weatherAppMain.js.page:64
+msgid "Adding a grid and all the necessary widgets to it"
+msgstr "Ajout d'une grille et de tous les éléments graphiques nécessaires"
+
+#. (itstool) path: section/code
+#: C/weatherAppMain.js.page:65
+#, no-wrap
 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."
+"\n"
+"var grid = new Gtk.Grid();\n"
+"weatherwindow.add(grid);\n"
+"\n"
+"//We initialize the icon here, but deside the file later in geonames.js.\n"
+"var weatherIcon = new Gtk.Image();\n"
+"\n"
+"//Set some labels to your window\n"
+"var label1 = new Gtk.Label({label: \"\"});\n"
+"var label2 = new Gtk.Label({label: \"Looking in the sky...\"});\n"
+"var label3 = new Gtk.Label({label: \"\"});\n"
+"\n"
+"var entry = new Gtk.Entry();\n"
+"entry.set_width_chars(4);\n"
+"entry.set_max_length(4);\n"
+"var label4 = new Gtk.Label({label: \"Enter ICAO station for weather: \"});\n"
+"var button1 = new Gtk.Button({label: \"search!\"});\n"
+"\n"
+"grid.attach(label4, 2, 1, 1, 1);\n"
+"grid.attach_next_to(label1,label4,3,1,1);\n"
+"grid.attach_next_to(label2,label1,3,1,1);\n"
+"grid.attach_next_to(label3,label2,3,1,1);\n"
+"grid.attach_next_to(entry,label4,1,1,1);\n"
+"grid.attach_next_to(button1,entry,1,1,1);\n"
+"grid.attach_next_to(weatherIcon,label2,1,1,1)\n"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:84(p)
-msgid "First, we create the window itself:"
+#. (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 entrys are initialized and placed on "
+"the grid. As seen from the placing of the different widgets, they don't need "
+"to be related only to one widget. At this point some of the labels don't "
+"have any content. The content for those widgets is applied later. If you run "
+"the application at this stage, you have the UI ready, but the widgets are "
+"not connected to anything. For this we need to first build the weather "
+"searching local library, and then get the information we need "
+"asynchronously. When we have our local library ready we can connect it to "
+"the necessary widgets."
 msgstr ""
+"Dans cette section, nous créons la grille que nous allons utiliser pour "
+"positionner les éléments graphiques. Tous les boutons, étiquettes et champs "
+"de saisie sont initialisés et positionnés dans la grille. Comme vous pouvez "
+"le voir à partir du positionnement des différents éléments graphiques, ils "
+"ne sont pas nécessairement en relation avec un seul élément graphique. Pour "
+"l'instant, certaines étiquettes n'ont pas de contenu. Le contenu de ces "
+"éléments graphiques est appliqué plus tard. Si vous lancez l'application à "
+"cet instant, l'interface graphique est prête mais les éléments graphiques ne "
+"sont connectés à rien. Pour cela, nous avons besoin de construire d'abord la "
+"bibliothèque locale de recherche météorologique puis de récupérer les "
+"informations nécessaires de manière asynchrone. Lorsque notre bibliothèque "
+"locale est prête, nous pouvons la connecter aux éléments graphiques "
+"nécessaires."
 
-#: C/03_getting_the_signal.js.page:94(p)
+#. (itstool) path: section/title
+#: C/weatherAppMain.js.page:95
+msgid "Requesting the weather information asynchronously"
+msgstr "Requête des informations météo de manière asynchrone"
+
+#. (itstool) path: section/code
+#: C/weatherAppMain.js.page:96
+#, no-wrap
 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."
+"\n"
+"function getWeatherForStation() {\n"
+"  var station = entry.get_text();\n"
+"\n"
+"  var GeoNames = new WeatherService.GeoNames(station); //\"EFHF\";\n"
+"\n"
+"  GeoNames.getWeather(function(error, weather) {\n"
+"    //this here works bit like signals. This code will be run when we have weather.\n"
+"    if (error) {\n"
+"      label2.set_text(\"Suggested ICAO station does not exist Try EFHF\");\n"
+"    return; }\n"
+"    weatherIcon.file = GeoNames.getIcon(weather);\n"
+"\n"
+"    label1.set_text(\"Temperature is \" + weather.weatherObservation.temperature + \" degrees.\");\n"
+"    if (weather.weatherObservation.weatherCondition !== \"n/a\"){\n"
+"      label2.set_text(\"Looks like there is \" + weather.weatherObservation.weatherCondition + \" in the 
sky.\");\n"
+"      }\n"
+"    else {\n"
+"      label2.set_text(\"Looks like there is \" + weather.weatherObservation.clouds + \" in the sky.\");\n"
+"    }\n"
+"    label3.set_text(\"Windspeed is \" + weather.weatherObservation.windSpeed + \" m/s\")\n"
+"    // ...\n"
+"  });\n"
+"}\n"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:95(p)
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:121
 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."
+"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 ""
+"Cette fonction est dédiée à la recherche des informations météo et à la mise "
+"à jour des étiquettes et des icônes de manière adéquate. Au début de la "
+"fonction, nous récupérons la saisie de l'utilisateur pour la recherche. "
+"Ainsi, ici, pour la première fois, nous utilisons notre propre bibliothèque "
+"et l'attribuons à la variable GeoNames. Lors de l'attribution de "
+"WeatherService, nous lui fournissons la station. La première chose que nous "
+"faisons avec GeoNames est la requête météo. Tout ce qui se trouve derrière "
+"GeoNames.getWeather(function(error, weather)  ne se produit que si nous "
+"obtenons un message d'erreur ou des informations météo. Si aucun des deux ne "
+"se produit, le reste du programme fonctionne normalement, donc main_Quit  "
+"fonctionne."
+
+#. (itstool) path: section/title
+#: C/weatherAppMain.js.page:125
+msgid "Connecting signals to button and entry."
+msgstr "Connexion des signaux au bouton et champ de saisie."
 
-#: C/03_getting_the_signal.js.page:102(p)
+#. (itstool) path: section/code
+#: C/weatherAppMain.js.page:126
+#, no-wrap
 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."
+"\n"
+"entry.connect(\"key_press_event\", function(widget, event) {\n"
+"  if (entry.get_text().length === 4) {\n"
+"    // Enough is enough\n"
+"    getWeatherForStation();\n"
+"  }\n"
+"  return false;\n"
+"});\n"
+"\n"
+"button1.connect(\"clicked\", function(){\n"
+"  getWeatherForStation();\n"
+"});"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:110(p)
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:138
 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."
+"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 ""
+"Enfin, nous avons les connexions qui permettent à l'application de "
+"fonctionner comme il se doit. Nous connectons à la fois le champ de saisie "
+"et le bouton afin qu'ils fassent la même chose : obtenir la météo. De cette "
+"manière, peu importe que l'utilisateur appuie sur la touche Entrée ou clique "
+"sur le bouton de recherche."
 
-#: C/03_getting_the_signal.js.page:130(p)
+#. (itstool) path: section/title
+#: C/weatherAppMain.js.page:142
+msgid "Weatherapp.js"
+msgstr "Weatherapp.js"
+
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:143
+msgid "Weatherapp.js file looks like this:"
+msgstr "Le fichier weatherapp.js ressemble à ceci :"
+
+#. (itstool) path: section/code
+#: C/weatherAppMain.js.page:144
+#, no-wrap
 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."
+"\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 "Exécutez-le jusqu'à obtenir tous les fichiers autotools prêts."
+
+#. (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 ""
 
-#: C/03_getting_the_signal.js.page:131(p)
+#. (itstool) path: section/p
+#: C/weatherAppMain.js.page:232
 msgid ""
-"Many widgets have the same properties and methods. Both Labels and Buttons, "
-"for instance, have a label property that says what text is inside them, and "
-"get_label and set_label methods that let you check what that text is and "
-"change it, respectively. So if you learn how one widget works, you'll also "
-"know how others like it work."
+"Use 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 ""
+"Utilisez cette commande dans un terminal pendant le développement de votre "
+"module. En appelant votre programme de cette manière, il sait où trouver "
+"votre bibliothèques JavaScript personnalisées, dans ce cas geonames.js."
 
-#: C/03_getting_the_signal.js.page:144(p)
+#. (itstool) path: page/title
+#: C/weatherAutotools.js.page:19
+msgid "Autotools and Icons"
+msgstr "Autotools et icônes"
+
+#. (itstool) path: synopsis/p
+#: C/weatherAutotools.js.page:21
 msgid ""
-"Finally, we run the application, using the same kind of code as in our last "
-"tutorial."
+"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 ""
+"Dans cette partie du guide, nous allons construire les « autotools » et "
+"personnaliser les icônes dont nous avons besoin pour que l'application météo "
+"fasse partie intégrante de notre bureau. Pour écrire et lancer tous les "
+"exemples de code, vous avez besoin d'un éditeur pour écrire le code, de "
+"l'application Terminal et d'un ordinateur sur lequel GNOME 3 ou supérieur "
+"est installé. Dans ce guide, nous illustrerons les éléments suivants :"
+
+#. (itstool) path: item/p
+#: C/weatherAutotools.js.page:24
+msgid "<link xref=\"#autotools\"> Autotools</link>"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:153(title)
+#. (itstool) path: item/p
+#: C/weatherAutotools.js.page:25
 #, fuzzy
-#| msgid "Creating the switches"
-msgid "Flip the switch"
-msgstr "Création des interrupteurs"
+#| msgid "Custom icons for your application"
+msgid "<link xref=\"#icons\">Custom icons for your application</link>"
+msgstr "Icônes personnalisées pour votre application"
 
-#: C/03_getting_the_signal.js.page:154(p)
+#. (itstool) path: section/title
+#: C/weatherAutotools.js.page:32
+msgid "Autotools and necessary files"
+msgstr "Autotools et fichiers nécessaires"
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:33
+#, fuzzy
+#| msgid ""
+#| "Having more than one file in your folder makes using autotools a bit "
+#| "tricky. You need the .desktop file, autogen.sh, Makefile.am, configure.ac "
+#| "and as a new file: myapp.sh.in file. Hacking the autotools file is a "
+#| "complicated field. More information can be found in many different "
+#| "sources, <link href=\"http://en.wikipedia.org/wiki/GNU_build_system\";>the "
+#| "wikipedia article</link> provides a good overwiev on the subject."
 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."
+"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 ""
+"Le fait d'avoir plus d'un seul fichier dans votre dossier rend l'usage "
+"d'autotools un peu complexe. Vous avez besoin des fichiers .desktop, de "
+"autogen.sh, Makefile.am, configure.ac et d'un nouveau fichier : "
+"monapplication.sh.in par exemple. Détailler le fichier autotools est un peu "
+"compliqué. Vous trouverez plus d'informations dans de nombreuses autres "
+"sources, <link href=\"http://en.wikipedia.org/wiki/GNU_build_system\";>cet "
+"article sur wikipédia</link> fournit un bon aperçu sur le sujet."
+
+#. (itstool) path: item/p
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:36 C/weatherAutotools.js.page:42
+msgid "weatherapp.desktop"
+msgstr "weatherapp.desktop"
+
+#. (itstool) path: item/p
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:37 C/weatherAutotools.js.page:57
+msgid "weatherapp.sh.in"
+msgstr "weatherapp.sh.in"
 
-#: C/03_getting_the_signal.js.page:158(p)
+#. (itstool) path: section/code
+#: C/weatherAutotools.js.page:43
+#, no-wrap
 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."
+"\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 ""
 
-#: C/03_getting_the_signal.js.page:162(p)
+# Bruno : l'anglais est totalement incompréhensible !
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:55
 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."
+"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 ""
+"La chose à noter dans ce fichier est que la ligne « Exec » rendra "
+"fonctionnel ce fichier « desktop » seulement après avoir exécuté tous les "
+"autres « makefiles ». Weatherapp.sh est un petit script créé avec le "
+"weatherapp.sh.in."
 
-#: C/03_getting_the_signal.js.page:163(p)
+#. (itstool) path: section/code
+#: C/weatherAutotools.js.page:58
+#, no-wrap
 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."
+"\n"
+"#!/bin/sh\n"
+"export GJS_PATH= bindir@\n"
+"gjs @bindir@/weatherapp.js"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:164(p)
-msgid "Here's how we create the Switch:"
+#. (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 ""
+"Ce fichier est un modèle que le fichier Makefile va créer pour être lancé à "
+"partir de .desktop."
 
-#: C/03_getting_the_signal.js.page:170(p)
+#. (itstool) path: section/code
+#: C/weatherAutotools.js.page:65
+#, no-wrap
 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:"
+"\n"
+"# The actual runnable program is set to the SCRIPTS primitive. Prefix bin_ tells where to copy this\n"
+"bin_SCRIPTS = weatherapp.js geonames.js weatherapp.sh\n"
+"# List of files to be distributed\n"
+"EXTRA_DIST=  \\\n"
+"    $(bin_SCRIPTS) \\\n"
+"    $(private_icons)\t\\\n"
+"\t  $(NULL)\n"
+"\n"
+"CLEANFILES =\n"
+"\n"
+"# The desktop files\n"
+"desktopdir = $(datadir)/applications\n"
+"desktop_DATA =weatherapp.desktop\n"
+"\n"
+"# convenience command for doing Makefile variable substitutions in non-Makefile\n"
+"# files (scripts, service files, etc.)\n"
+"do_subst = sed -e 's|@abs_top_srcdir[ ]|$(abs_top_srcdir)|g' \\\n"
+"               -e 's|@abs_top_builddir[ ]|$(abs_top_builddir)|g' \\\n"
+"               -e 's|@localedir[ ]|$(localedir)|g' \\\n"
+"               -e 's|@bindir[ ]|$(bindir)|g' \\\n"
+"               -e 's|@libexecdir[ ]|$(libexecdir)|g' \\\n"
+"\t       -e 's|@pkglibdir[ ]|$(pkglibdir)|g' \\\n"
+"\t       -e 's|@pkgdatadir[ ]|$(pkgdatadir)|g' \\\n"
+"\t       -e 's|@have_libnotify[ ]|$(HAVE_LIBNOTIFY)|g' \\\n"
+"\t       -e 's|@have_libsoup[ ]|$(HAVE_LIBSOUP)|g' \\\n"
+"\t       -e 's|@have_cheese[ ]|$(HAVE_CHEESE)|g'\n"
+"\n"
+"weatherapp.sh: weatherapp.sh.in\n"
+"\t$(AM_V_GEN) $(do_subst) $&lt; &gt; $ \n"
+"\tchmod +x $ \n"
+"\n"
+"CLEANFILES += weatherapp.sh\n"
+"EXTRA_DIST += weatherapp.sh.in\n"
+"\n"
+"#the application icon\n"
+"appicondir=$(datadir)/icons/hicolor/scalable/apps\n"
+"appicon_DATA=weather-icon.svg\n"
+"\n"
+"#icons in the application\n"
+"NULL =\n"
+"\n"
+"private_icons = \\\n"
+"\tweather-clear.svg \\\n"
+"  weather-few-clouds.svg \\\n"
+"  weather-fog.svg \\\n"
+"  weather-icon.svg \\\n"
+"  weather-overcast.svg \\\n"
+"  weather-showers.svg \\\n"
+"  weather-showers-scattered.svg \\\n"
+"  weather-snow.svg \\\n"
+"  $(NULL)\n"
+"\n"
+"install-icons:\n"
+"\tfor icon in $(private_icons); do \\\n"
+"\t\tmkdir -p $(DESTDIR)$(pkgdatadir)/icons/; \\\n"
+"\t\t$(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(pkgdatadir)/icons/; \\\n"
+"\tdone\n"
+"\n"
+"install-data-local: install-icons"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:176(p)
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:125
 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."
+"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 ""
+"Ceci nécessite un peu plus d'explications. Comparé au Makefile.am de "
+"Helloworld, celui-ci a été fortement modifié. Parcourons tous les nouveaux "
+"blocs :"
 
-#: C/03_getting_the_signal.js.page:181(p)
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:126
 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:"
+"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 ""
+"« bin_scripts » sont les fichiers nécessaires pour exécuter votre "
+"application. Dans ce cas, les deux premiers fichiers sont les programmes eux-"
+"mêmes et le troisième est le script qui lance l'application."
 
-#: C/03_getting_the_signal.js.page:200(p)
-msgid "And now we arrange everything in the larger Grid like so."
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:127
+msgid "EXTRA_DIST are the files that are to be distributed"
+msgstr "EXTRA_DIST sont les fichiers qui doivent être distribués."
+
+#. (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 ""
+"le bloc « do_subst » est quelque chose qui a besoin d'être là où il est."
 
-#: C/03_getting_the_signal.js.page:208(p)
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:129
 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."
+"after the comment #icons in the application there are all the icons that are "
+"used by the program. For them to be useful you need to install the icons in "
+"correct places and that is done byt the install-icons: bit"
 msgstr ""
+"Après le commentaire « #icons in the application » se trouvent toutes les "
+"icônes qui sont utilisées par le programme. Pour qu'elles soient utiles, "
+"vous devez installer les icônes aux emplacements corrects, ce qui est "
+"réalisé par la partie « install-icons »."
 
-#: C/03_getting_the_signal.js.page:209(p)
+#. (itstool) path: section/code
+#: C/weatherAutotools.js.page:132
+#, no-wrap
 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."
+"\n"
+"dnl This file is processed by autoconf to create a configure script\n"
+"AC_INIT([Weather App], 1.0)\n"
+"AM_INIT_AUTOMAKE([1.10 no-define foreign])\n"
+"AC_CONFIG_FILES(Makefile)\n"
+"AC_OUTPUT"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:228(title)
-#, fuzzy
-#| msgid "Creating the radiobuttons"
-msgid "Tuning the radio"
-msgstr "Création des boutons de radio"
-
-#: C/03_getting_the_signal.js.page:230(p)
+#. (itstool) path: section/code
+#: C/weatherAutotools.js.page:139
+#, no-wrap
 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."
+"\n"
+"#!/bin/sh\n"
+"# This will run autoconf, automake, etc. for us\n"
+"autoreconf --force --install"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:234(p)
+#. (itstool) path: section/title
+#: C/weatherAutotools.js.page:145
+msgid "Custom icons for your application"
+msgstr "Icônes personnalisées pour votre application"
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:146
 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."
+"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 ""
+"Lorsque vous pensez icônes personnalisées, une bonne règle est : souhaitez-"
+"vous que cette icône puisse être utilisée autre part ou est-elle privée ? "
+"Dans le premier cas (par ex. des icônes dans le fichier desktop qui sont "
+"affichées par le shell) alors vous avez besoin de /usr/share/hicolor sinon "
+"(par ex. les icônes météo de votre application) /usr/share/$application/bla/"
+"bla"
 
-#: C/03_getting_the_signal.js.page:246(p)
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:147
 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."
+"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 ""
+"Pour utiliser autotools, vous devez apporter quelques modifications à vos "
+"fichiers .desktop et Makefile. Dans le fichier desktop, modifiez le nom de "
+"l'icône Icon=weather-icon. Dans le fichier Makefile.am, ajoutez ces deux "
+"lignes à la fin de votre application #the application icon."
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:148
+msgid "appicondir=$(datadir)/icons/hicolor/scalable/apps"
+msgstr "appicondir=$(datadir)/icons/hicolor/scalable/apps"
+
+#. (itstool) path: section/p
+#: C/weatherAutotools.js.page:149
+msgid "appicon_DATA=weather-icon.svg"
+msgstr "appicon_DATA=weather-icon.svg"
 
-#: C/03_getting_the_signal.js.page:256(p)
+#. (itstool) path: page/title
+#: C/weatherGeonames.js.page:19
+msgid "Local library geoNames"
+msgstr "Bibliothèque locale geoNames"
+
+#. (itstool) path: synopsis/p
+#: C/weatherGeonames.js.page:21
 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."
+"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 ""
+"Dans cette partie du guide nous allons construire la bibliothèque locale "
+"geoNames en utilisant des appels asynchrones. Dans cet exemple, les "
+"informations météorologiques sont récupérés sur geonames.org et "
+"l'application utilise les <link href=\"http://fr.wikipedia.org/wiki/";
+"Liste_des_codes_OACI_des_a%C3%A9roports\">codes OACI</link> pour localiser "
+"les requêtes météo. Pour écrire et lancer tous les exemples de code vous "
+"avez besoin d'un éditeur pour saisir le code, de l'application Terminal et "
+"d'un ordinateur sur lequel GNOME 3 ou supérieur est installé. Dans ce guide, "
+"nous illustrerons les éléments suivants :"
 
-#: C/03_getting_the_signal.js.page:265(p)
+#. (itstool) path: item/p
+#: C/weatherGeonames.js.page:24
+#, fuzzy
+#| msgid "Local library for getting the weather"
 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."
+"<link xref=\"#geonamesimports\">Local library for getting the weather</link>"
+msgstr "Bibliothèque locale pour obtenir la météo"
+
+#. (itstool) path: item/p
+#: C/weatherGeonames.js.page:25
+msgid "<link xref=\"#geonamesfunction\">Creating function geoNames</link>"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:266(p)
-msgid "We could also set its active property to true when we create it."
+#. (itstool) path: item/p
+#: C/weatherGeonames.js.page:26
+msgid "<link xref=\"#geonamesmethods\">Methods for geoNames</link>"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:272(p)
-msgid "Now we arrange everything in our main Grid like usual ..."
+#. (itstool) path: item/p
+#: C/weatherGeonames.js.page:27
+msgid "<link xref=\"#geonames.js\">geonames.js </link>"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:280(p)
-msgid ""
-"And then we change our _getACookie function to test to see if the cookie "
-"button is the one that's selected."
+#. (itstool) path: section/title
+#: C/weatherGeonames.js.page:32
+msgid "Local library for getting the weather"
+msgstr "Bibliothèque locale pour obtenir la météo"
+
+#. (itstool) path: section/p
+#: C/weatherGeonames.js.page:33
+msgid "For this we need a new file that will be our local library."
 msgstr ""
+"Pour cela, nous avons besoin d'un nouveau fichier qui sera notre "
+"bibliothèque locale."
 
-#: C/03_getting_the_signal.js.page:299(title)
-msgid "Can you spell \"cookie\"?"
+#. (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 ""
 
-#: C/03_getting_the_signal.js.page:301(p)
+#. (itstool) path: section/p
+#: C/weatherGeonames.js.page:39
 msgid ""
-"The last input widget we're going to cover is the Entry widget, which is "
-"used for single-line text entry."
+"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 ""
+"Dès les premières lignes, nous importons et initialisons les bibliothèques "
+"dont nous avons besoin dans cette bibliothèque locale. « Soup » prend en "
+"charge toutes les requêtes que nous devons faire via http."
+
+#. (itstool) path: section/title
+#: C/weatherGeonames.js.page:43
+msgid "Creating function GeoNames"
+msgstr "Création de la fonction GeoNames"
 
-#: C/03_getting_the_signal.js.page:302(p)
+#. (itstool) path: section/code
+#: C/weatherGeonames.js.page:44
+#, no-wrap
 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."
+"\n"
+"function GeoNames(station) {\n"
+"  this.station = station;\n"
+"}\n"
+"\n"
+"GeoNames.prototype = {\n"
+"\n"
+"}\n"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:305(p)
-msgid "After we change the window's name, we create the Entry widget."
+#. (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 ""
+"Ici, nous créons la fonction GeoNames qui prend en charge l'obtention de la "
+"météo pour nous. Le JavaScript nous permet de créer des fonctions qui, au "
+"départ contiennent peu de code et de les étendre ensuite. Cela se fait à "
+"l'intérieur des accolades {} de GeoNames.prototype."
 
-#: C/03_getting_the_signal.js.page:311(p)
-msgid "Next, we arrange everything in the Grid ..."
+#. (itstool) path: section/title
+#: C/weatherGeonames.js.page:57
+msgid "Methods for GeoNames"
+msgstr "Méthodes pour GeoNames"
+
+#. (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 ""
 
-#: C/03_getting_the_signal.js.page:319(p)
+# Bruno : then parse the information from the request ***to a form that we can use.***  ???
+#. (itstool) path: section/p
+#: C/weatherGeonames.js.page:97
 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."
+"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 ""
+"La première méthode de GeoNames est getWeather et la seconde getIcon. Dans "
+"getWeather, une requête http est effectuée avec « soup », nous prenons en "
+"charge les erreurs puis analysons (parse) les informations à partir de la "
+"requête vers une forme utilisable. Dans getIcon, nous comparons tout "
+"simplement les résultats obtenus avec getWeather à l'aide de l'instruction "
+"switch afin d'obtenir l'icône correspondant à la météo actuelle. Notre "
+"bibliothèque locale est prête et nous pouvons maintenant l'utiliser."
 
-#: C/03_getting_the_signal.js.page:320(p)
+#. (itstool) path: section/title
+#: C/weatherGeonames.js.page:102
+msgid "geonames.js"
+msgstr "geonames.js"
+
+#. (itstool) path: section/p
+#: C/weatherGeonames.js.page:103
 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."
+"Here is the entire code for our local library. The main program file calls "
+"this asynchronously."
 msgstr ""
+"Voici le code complet pour notre bibliothèque locale. Le fichier principal "
+"du programme l'appelle de manière asynchrone."
 
-#: C/03_getting_the_signal.js.page:340(p)
+#. (itstool) path: section/code
+#: C/weatherGeonames.js.page:104
+#, no-wrap
 msgid ""
-"<link xref=\"04_popup_dialog_boxes.js\">Click here</link> to go on to the "
-"next tutorial. Or keep reading, if you'd like to see the complete code for "
-"each version of our cookie maker application."
+"\n"
+"const Soup = imports.gi.Soup;\n"
+"const _httpSession = new Soup.SessionAsync();\n"
+"Soup.Session.prototype.add_feature.call(_httpSession, new Soup.ProxyResolverDefault());\n"
+"\n"
+"function GeoNames(station) {\n"
+"  this.station = station;\n"
+"}\n"
+"\n"
+"GeoNames.prototype = {\n"
+"  getWeather: function(callback) {\n"
+"    var request = Soup.Message.new('GET', 'http://api.geonames.org/weatherIcaoJSON?ICAO=' + this.station + 
'&amp;username=demo');\n"
+"    _httpSession.queue_message(request, function(_httpSession, message) {\n"
+"      if (message.status_code !== 200) {\n"
+"        callback(message.status_code, null);\n"
+"        return;\n"
+"      }\n"
+"      var weatherJSON = request.response_body.data;\n"
+"      var weather = JSON.parse(weatherJSON);\n"
+"      callback(null, weather);\n"
+"      });\n"
+"    },\n"
+"\n"
+"  getIcon: function(weather){\n"
+"    switch (weather.weatherObservation.weatherCondition){\n"
+"    case \"drizzle\":\n"
+"    case \"light showers rain\":\n"
+"    case \"light rain\":\n"
+"      return \"weather-showers-scattered.svg\";\n"
+"    case \"rain\":\n"
+"      return \"weather-showers.svg\";\n"
+"    case \"light snow\":\n"
+"    case \"snow grains\":\n"
+"      return \"weather-snow.svg\";\n"
+"    }\n"
+"    switch (weather.weatherObservation.clouds){\n"
+"      case \"few clouds\":\n"
+"      case \"scattered clouds\":\n"
+"        return \"weather-few-clouds.svg\";\n"
+"      case \"clear sky\":\n"
+"        return \"weather-clear.svg\"\n"
+"      case \"broken clouds\":\n"
+"      case \"overcast\":\n"
+"        return \"weather-overcast.svg\";\n"
+"    }\n"
+"    return \"weather-fog.svg\";\n"
+"    }\n"
+"}\n"
+"}  "
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:341(p)
+#. (itstool) path: 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 ""
-"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."
+"external ref='media/widget_drawing.png' "
+"md5='d00abd8cb9e158018c57fd75b81dfe58'"
 msgstr ""
 
-#: C/03_getting_the_signal.js.page:346(title)
+#. (itstool) path: info/title
+#: C/widget_drawing.py.page:8
 #, fuzzy
-#| msgid "Complete code sample"
-msgid "Complete code samples"
-msgstr "Exemple complet de code"
+#| msgid "Window (Python)"
+msgctxt "text"
+msgid "Widget (Python)"
+msgstr "Window (Python)"
 
-#: C/03_getting_the_signal.js.page:351(title)
-#, fuzzy
-#| msgid "Code samples"
-msgid "Code sample with Button"
-msgstr "Exemples de code"
+#. (itstool) path: info/desc
+#: C/widget_drawing.py.page:18
+msgid "A widget that uses the Cairo library to draw"
+msgstr ""
 
-#: C/03_getting_the_signal.js.page:357(title)
+#. (itstool) path: page/title
+#: C/widget_drawing.py.page:21
 #, fuzzy
-#| msgid "Code samples"
-msgid "Code sample with Switch"
-msgstr "Exemples de code"
+#| msgid "GtkWidget"
+msgid "Widget"
+msgstr "GtkWidget"
 
-#: C/03_getting_the_signal.js.page:363(title)
-#, fuzzy
-#| msgid "Creating the radiobuttons"
-msgid "Code sample with RadioButton"
-msgstr "Création des boutons de radio"
+#. (itstool) path: page/p
+#: C/widget_drawing.py.page:23
+msgid "Enter an angle, visualize it."
+msgstr ""
 
-#: C/03_getting_the_signal.js.page:369(title)
-#, fuzzy
-#| msgid "Code samples"
-msgid "Code sample with Entry"
-msgstr "Exemples de code"
+#. (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 ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:94(None)
+#. (itstool) path: item/p
+#: C/widget_drawing.py.page:39
 #, fuzzy
-#| msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
-msgid "@@image: 'media/02_jsgrid_01.png'; md5=3fdc22d361cf801f71557fdc76ae5b49"
-msgstr "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+#| msgid ""
+#| "<link href=\"http://developer.gnome.org/gobject/stable/signal.html";
+#| "\">Signals</link> in GObject documentation"
+msgid ""
+"<link href=\"http://developer.gnome.org/gtk3/unstable/GtkDrawingArea.html";
+"\">GtkDrawingArea</link>"
+msgstr ""
+"<link href=\"http://developer.gnome.org/gobject/stable/signal.html\";>Les "
+"signaux</link> dans la documentation GObject"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:149(None)
-#, fuzzy
-#| msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
-msgid "@@image: 'media/02_jsgrid_02.png'; md5=07db86b0043ba5c3c24a90d7322bd81e"
-msgstr "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+#. (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 ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:166(None)
+#. (itstool) path: info/title
+#: C/window.c.page:8
 #, fuzzy
-#| msgid ""
-#| "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
-msgid "@@image: 'media/02_jsgrid_03.png'; md5=817351e73c687d47253c56ed06b6629f"
-msgstr "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
+#| msgid "Window (C)"
+msgctxt "text"
+msgid "Window (C)"
+msgstr "Fenêtre (C)"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:196(None)
-#, fuzzy
-#| msgid "@@image: 'media/glade_ui.png'; md5=baea74fe213bc12ea934f64f6977215a"
-msgid "@@image: 'media/02_jsgrid_04.png'; md5=eeaead27cee2851877fc3cfe66177f07"
-msgstr "@@image: 'media/glade_ui.png'; md5=baea74fe213bc12ea934f64f6977215a"
+#. (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 ""
+"Une fenêtre de niveau supérieur qui peut contenir d'autres éléments "
+"graphiques"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:205(None)
-#, fuzzy
-#| msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
-msgid "@@image: 'media/02_jsgrid_05.png'; md5=a3ad12f432d5977fc1f66302ad5b7498"
-msgstr "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+#. (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 "Fenêtre"
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:216(None)
-#, fuzzy
-#| msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
-msgid "@@image: 'media/02_jsgrid_06.png'; md5=450e48dbf6b8f5ce1c208e4812e1714b"
-msgstr "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+# Bruno : bug : pas d'espace entre Application et Window
+#. (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 ""
+"Une GtkApplication minimale. Utilisez <link xref=\"GtkApplicationWindow.c"
+"\">ApplicationWindow</link> si vous avez besoin de la prise en charge de "
+"GMenu."
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:226(None)
-#, fuzzy
-#| msgid ""
-#| "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
-msgid "@@image: 'media/02_jsgrid_07.png'; md5=0b304d70728903fbb2601d55bf00fdb9"
-msgstr "@@image: 'media/grid_simple.png'; md5=c806f2e69b30373d4d2e08b41d6cc1f6"
+#. (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 ""
 
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/02_welcome_to_the_grid.js.page:248(None)
+#. (itstool) path: info/title
+#: C/window.js.page:8
 #, fuzzy
-#| msgid "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
-msgid "@@image: 'media/02_jsgrid_08.png'; md5=78890beb47bd11360154b8ca4d50d1ff"
-msgstr "@@image: 'media/grid.png'; md5=27d45da115401127456a3b854dcfc5be"
+#| msgid "Window (JavaScript)"
+msgctxt "text"
+msgid "Window (JavaScript)"
+msgstr "Fenêtre (JavaScript)"
 
-#: C/02_welcome_to_the_grid.js.page:19(desc)
-msgid "Learn how to lay out UI components, like Images and Labels."
-msgstr ""
+#. (itstool) path: info/desc
+#: C/window.js.page:18
+msgid "A basic window which can contain other widgets"
+msgstr "Une fenêtre élémentaire qui peut contenir d'autres éléments graphiques"
 
-#: C/02_welcome_to_the_grid.js.page:22(title)
-msgid "2. Welcome to the Grid"
-msgstr ""
+#. (itstool) path: td/p
+#: C/window.js.page:26
+msgid "A minimal GtkApplication"
+msgstr "Une GtkApplication minimale"
 
-#: C/02_welcome_to_the_grid.js.page:24(p)
+#. (itstool) path: td/p
+#: C/window.js.page:29
 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."
+"Use <link xref=\"GtkApplicationWindow.js\">ApplicationWindow</link> if you "
+"need GMenu support."
 msgstr ""
+"Utilisez <link xref=\"GtkApplicationWindow.js\">ApplicationWindow</link> si "
+"vous avez besoin de la prise en charge de GMenu."
 
-#: C/02_welcome_to_the_grid.js.page:25(p)
+#. (itstool) path: page/code
+#: C/window.js.page:33
+#, no-wrap
 msgid ""
-"Have you taken <link xref=\"hellognome.js\">the first tutorial in this "
-"series</link> already? You'll want to do so before continuing."
+"\n"
+"#!/usr/bin/gjs\n"
+"\n"
+"const Gio = imports.gi.Gio;\n"
+"const GLib = imports.gi.GLib;\n"
+"const Gtk = imports.gi.Gtk;\n"
+"const Lang = imports.lang;\n"
+"\n"
+"const Application = new Lang.Class ({\n"
+"    Name: 'Application',\n"
+"\n"
+"    //create the application\n"
+"    _init: function () {\n"
+"        this.application = new Gtk.Application ({\n"
+"            application_id: 'org.example.myapp',\n"
+"            flags: Gio.ApplicationFlags.FLAGS_NONE\n"
+"        });\n"
+"\n"
+"       this.application.connect('activate', Lang.bind(this, this._onActivate));\n"
+"    },\n"
+"\n"
+"    //callback function for 'activate' signal\n"
+"    _onActivate: function () {\n"
+"\n"
+"        MyWindow = new Gtk.Window({type: Gtk.WindowType.TOPLEVEL});\n"
+"        MyWindow.title = \"Welcome to GNOME\";\n"
+"\n"
+"       /* Here are a few ways we can customize our window.\n"
+"       Try uncommenting them or changing their values! */\n"
+"        //MyWindow.set_default_size (400,200);\n"
+"        //MyWindow.set_has_resize_grip (false);\n"
+"        //MyWindow.set_opacity (0.5);\n"
+"        //MyWindow.maximize ();\n"
+"\n"
+"        //show the window and all child widgets (none in this case)\n"
+"        MyWindow.show_all();\n"
+"        this.application.add_window(MyWindow);\n"
+"    }\n"
+"});\n"
+"\n"
+"//run the application\n"
+"let app = new Application ();\n"
+"app.application.run (ARGV);\n"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:31(title)
-msgid "Going native"
-msgstr ""
+#. (itstool) path: page/p
+#: C/window.js.page:35
+msgid "In this example we used the following:"
+msgstr "Dans cet exemple, les éléments suivants sont utilisés :"
 
-#: C/02_welcome_to_the_grid.js.page:33(p)
+#. (itstool) path: item/p
+#: C/window.js.page:40
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/Gtk.Window.html";
+"\">Gtk.Window</link>"
 msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
+
+#. (itstool) path: info/title
+#: C/window.py.page:8
+#, fuzzy
+#| msgid "Window (Python)"
+msgctxt "text"
+msgid "Window (Python)"
+msgstr "Window (Python)"
+
+#. (itstool) path: td/p
+#: C/window.py.page:34
+#, fuzzy
+#| msgid "A minimal Gtk+ Application: a window with a title."
+msgid "A minimal GTK+ Application: a window with a title."
+msgstr "Une application Gtk+ minimale : une fenêtre avec un titre."
 
-#: C/02_welcome_to_the_grid.js.page:34(p)
+#. (itstool) path: td/p
+#: C/window.py.page:37
+#, fuzzy
+#| msgid ""
+#| "Use <link xref=\"GtkApplicationWindow.py\">Application Window</link> if "
+#| "you need GMenu support."
 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+."
+"Use <link xref=\"GtkApplicationWindow.py\"/> if you need <link xref=\"gmenu."
+"py\"/> support."
 msgstr ""
+"Utilisez <link xref=\"GtkApplicationWindow.py\">Application Window</link> si "
+"vous avez besoin de la prise en charge de GMenu."
 
-#: C/02_welcome_to_the_grid.js.page:35(p)
+#. (itstool) path: section/code
+#: C/window.py.page:47
+#, no-wrap
 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."
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:39(title)
+#. (itstool) path: section/title
+#: C/window.py.page:52
+msgid "Useful methods for a Window widget"
+msgstr "Méthodes utiles pour un élément graphique fenêtre"
+
+#. (itstool) path: info/title
+#: C/window.vala.page:8
 #, fuzzy
-#| msgid "Setting up our image actors"
-msgid "Setting up our application"
-msgstr "Mise en place de nos acteurs image"
+#| msgid "Window (Vala)"
+msgctxt "text"
+msgid "Window (Vala)"
+msgstr "Fenêtre (Vala)"
+
+#. (itstool) path: td/p
+#: C/window.vala.page:26
+msgid "The simplest Gtk.Application"
+msgstr "La plus simple des applications Gtk.Application"
 
-#: C/02_welcome_to_the_grid.js.page:41(p)
+#. (itstool) path: td/p
+#: C/window.vala.page:29
 msgid ""
-"Before we dig out any widgets from the Gtk+ toolbox, we first need to write "
-"the basic boilerplate code that our application requires."
+"Use <link xref=\"GtkApplicationWindow.vala\">Application Window</link> if "
+"you need GMenu support."
 msgstr ""
+"Utilisez <link xref=\"GtkApplicationWindow.vala\">Application Window</link> "
+"si vous avez besoin de la prise en charge de GMenu."
 
-#: C/02_welcome_to_the_grid.js.page:48(p)
+#. (itstool) path: page/code
+#: C/window.vala.page:33
+#, no-wrap
 msgid ""
-"This part always goes at the start of your code. Depending on what you'll be "
-"doing with it, you may want to declare more imports here. What we're writing "
-"today is pretty basic, so these are all we need; Gtk for the widgets, and "
-"Lang so we can use Lang.bind to connect our application's activate and "
-"startup signals to the requisite functions."
+"/* This is the application. */\n"
+"public class Application : Gtk.Application {\n"
+"\n"
+"\t/* Constructor */\n"
+"\tpublic Application () {\n"
+"\t\tObject (application_id: \"org.example.window\");\n"
+"\t}\n"
+"\n"
+"\t/* Override the 'activate' signal of GLib.Application,\n"
+"\t * which is inherited by Gtk.Application. */\n"
+"\tpublic override void activate () {\n"
+"\n"
+"\t\tvar window = new Gtk.Window ();\n"
+"\t\twindow.title = \"Welcome to GNOME\";\n"
+"\n"
+"\t\t/* The following 3 lines are included here to introduce\n"
+"\t\t * you to ways you can adjust the toplevel window to suit\n"
+"\t\t * your needs.  Uncomment them to see what they do.\n"
+"\t\t */\n"
+"\n"
+"\t\t//window.border_width = 10;\n"
+"\t\t//window.set_default_size (350, 70);\n"
+"\t\t//window.window_position = Gtk.WindowPosition.CENTER;\n"
+"\n"
+"\t\t/* Add the window to this application. */\n"
+"\t\tthis.add_window (window);\n"
+"\n"
+"\t\t/* Show the window. */\n"
+"\t\twindow.show ();\n"
+"\t}\n"
+"}\n"
+"\n"
+"/* The main function creates the application and runs it.*/\n"
+"int main (string[] args) {\n"
+"\tvar app = new Application ();\n"
+"\treturn app.run (args);\n"
+"}\n"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:49(p)
-msgid "Speaking of which:"
+#. (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 ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/02_welcome_to_the_grid.js.page:73(p)
+#. (itstool) path: item/p
+#: C/window.vala.page:41
 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."
+"The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.html";
+"\">Gtk.WindowPosition</link>"
 msgstr ""
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/02_welcome_to_the_grid.js.page:74(p)
+#. (itstool) path: item/p
+#: C/window.vala.page:43
 msgid ""
-"This part, again, is pretty much copy-and-paste, but you always want to give "
-"your application a unique name."
+"The method <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"set_default_size.html\">set_default_size</link>"
 msgstr ""
+"La méthode <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"set_default_size.html\">set_default_size</link>"
 
-#: C/02_welcome_to_the_grid.js.page:87(p)
+#. (itstool) path: item/p
+#: C/window.vala.page:45
+#, fuzzy
+#| msgid ""
+#| "The widget <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.html";
+#| "\">Gtk.Window</link>"
 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."
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Container.border_width.html";
+"\">border_width</link>"
 msgstr ""
+"L'élément graphique <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.";
+"html\">Gtk.Window</link>"
 
-#: C/02_welcome_to_the_grid.js.page:91(title)
+#. (itstool) path: item/p
+#: C/window.vala.page:47
 #, fuzzy
-#| msgid "Reacting to the clicks"
-msgid "Reaching into the Gtk+ toolbox"
-msgstr "Réaction aux clics"
-
-#: C/02_welcome_to_the_grid.js.page:92(p)
+#| msgid ""
+#| "The enum <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.WindowPosition.";
+#| "html\">Gtk.WindowPosition</link>"
 msgid ""
-"What widgets should we use? Well, let's say we want to write an application "
-"that looks like this:"
+"<link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.Window.window_position.html";
+"\">window_position</link>"
 msgstr ""
+"L'énumération <link href=\"http://www.valadoc.org/gtk+-3.0/Gtk.";
+"WindowPosition.html\">Gtk.WindowPosition</link>"
 
-#: C/02_welcome_to_the_grid.js.page:96(p)
-msgid ""
-"We're going to need, at the very least, a picture and a text label to go "
-"with it. Let's start with the picture:"
+#. (itstool) path: credit/name
+#: C/custom-gsource.c.page:11
+#, fuzzy
+#| msgid "Philip Chimento"
+msgid "Philip Withnall"
+msgstr "Philip Chimento"
+
+#. (itstool) path: credit/years
+#: C/custom-gsource.c.page:13
+msgid "2015"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:102(p)
-msgid ""
-"You can download the image file used in this example <link href=\"https://";
-"live.gnome.org/TarynFox?action=AttachFile&amp;do=get&amp;target=gnome-image."
-"png\">here.</link> Be sure to put it in the same directory as the code "
-"you're writing."
+#. (itstool) path: info/desc
+#: C/custom-gsource.c.page:18
+msgid "Tutorial for writing a custom <code>GSource</code> implementation"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:108(p)
-msgid ""
-"That code adds in the label beneath. You can see how we create widgets, "
-"here; each one is a part of Gtk, and we can give it properties that "
-"customize how it behaves. In this case, we set the Image's file property to "
-"be the filename of the picture we want, and the Label's label property to be "
-"the sentence that we want beneath the picture."
+#. (itstool) path: page/title
+#: C/custom-gsource.c.page:23
+msgid "Custom GSources"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:109(p)
-msgid ""
-"Yes, it sounds redundant for a Label to have a label property, but it's not. "
-"Other widgets that contain text have a label property, so it's "
-"<em>consistent</em> for the Label widget to have one too."
+#. (itstool) path: synopsis/title
+#: C/custom-gsource.c.page:26
+msgid "Summary"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:110(p)
+#. (itstool) path: synopsis/p
+#: C/custom-gsource.c.page:28
 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."
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:111(p)
-msgid ""
-"How do we get around that? By making that one widget a container widget, "
-"which can hold more than one widget and organize them inside it. Behold: The "
-"Grid."
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:37
+msgid "What is <code>GSource</code>?"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:117(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:39
 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."
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:124(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:46
 msgid ""
-"This code looks awfully complicated, but it's not. Here's what those numbers "
-"mean:"
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:126(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:52
 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."
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:127(p)
-msgid ""
-"The <em>second</em> number is what top-to-botton position to put a given "
-"widget in, starting from 0. The Label goes beneath the Image, so we give the "
-"Image a 0 and the Label a 1 here."
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:61
+msgid "A Message Queue Source"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:128(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:63
 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."
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:145(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:69
 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."
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:146(p)
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:78
 #, fuzzy
-#| msgid ""
-#| "To run this application, first save it as helloWorld.js. Then open "
-#| "Terminal, go to the folder where your application is stored and run"
+#| msgid "Event Structures"
+msgid "Structure"
+msgstr "Event Structures"
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:80
 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"
+"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 ""
-"Pour lancer cette application, enregistrez-la d'abord sous le nom helloWorld."
-"js, puis ouvrez Terminal, allez dans le dossier où l'application est "
-"enregistrée et lancez"
 
-#: C/02_welcome_to_the_grid.js.page:147(screen)
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:86
 #, no-wrap
-msgid " <output style=\"prompt\">$ </output>gjs welcome_to_the_grid.js "
-msgstr ""
-
-#: C/02_welcome_to_the_grid.js.page:151(p)
 msgid ""
-"There we go! But wait. That doesn't look right. Why is the Label crammed up "
-"next to the Image like that? That doesn't look as nice, and it makes it "
-"harder to read. What can we do about this?"
+"\n"
+"typedef struct {\n"
+"  GSource         parent;\n"
+"  GAsyncQueue    *queue;  /* owned */\n"
+"  GDestroyNotify  destroy_message;\n"
+"} MessageQueueSource;"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:155(title)
-#, fuzzy
-#| msgid "Creating the TreeView"
-msgid "Tweaking the Grid"
-msgstr "Création de la TreeView"
-
-#: C/02_welcome_to_the_grid.js.page:157(p)
-msgid ""
-"One thing we can do, is we can give the Label a margin_top property when we "
-"create it. This works sort of like setting a margin for an HTML element "
-"using inline CSS styling."
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:95
+msgid "Prepare Function"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:165(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:97
 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:"
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:168(p)
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:104
+#, no-wrap
 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:"
+"\n"
+"return (g_async_queue_length (message_queue_source-&gt;queue) &gt; 0);"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:175(p)
-msgid ""
-"That makes it so that there are always 20 pixels of space in between each "
-"horizontal row."
-msgstr ""
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:109
+#, fuzzy
+#| msgid "CheckButton"
+msgid "Check Function"
+msgstr "CheckButton"
 
-#: C/02_welcome_to_the_grid.js.page:176(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:111
 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!"
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:180(title)
-msgid "Adding more widgets"
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:120
+msgid "Dispatch Function"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:182(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:122
 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:"
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:194(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:133
 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."
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:195(p)
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:141
+#, no-wrap
 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:"
+"\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 ""
 
-#: C/02_welcome_to_the_grid.js.page:198(p)
-msgid "There are two things you should take note of, here."
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:169
+msgid "Callback Functions"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:200(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:171
 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."
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:201(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:178
 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."
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:204(p)
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:184
+#, no-wrap
 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:"
+"\n"
+"g_source_set_callback (source, callback_func,\n"
+"                       g_object_ref (object_to_strong_ref),\n"
+"                       (GDestroyNotify) g_object_unref);"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:207(p)
-msgid "Second, we can set the Grid's column_homogenous property to true."
+#. (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 ""
 
-#: C/02_welcome_to_the_grid.js.page:215(p)
-#, fuzzy
-#| msgid "Weatherapp.js file looks like this:"
-msgid "That makes it look something like this:"
-msgstr "Le fichier weatherapp.js ressemble à ceci :"
-
-#: C/02_welcome_to_the_grid.js.page:218(p)
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:197
+#, no-wrap
 msgid ""
-"And third, we can set the Grid's column_spacing property, the same way we "
-"set its row_spacing."
+"\n"
+"g_source_set_closure (source,\n"
+"                      g_cclosure_new_object (callback_func,\n"
+"                                             object_to_weak_ref));"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:225(p)
-#, fuzzy
-#| msgid "Weatherapp.js file looks like this:"
-msgid "That makes it look like this:"
-msgstr "Le fichier weatherapp.js ressemble à ceci :"
-
-#: C/02_welcome_to_the_grid.js.page:230(title)
-#, fuzzy
-#| msgid "Loading the images"
-msgid "Using stock images"
-msgstr "Chargement des images"
-
-#: C/02_welcome_to_the_grid.js.page:232(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:202
 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:"
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:240(p)
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:207
+#, no-wrap
 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.)"
+"\n"
+"g_source_set_dummy_callback (source);"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:247(p)
-msgid "That gives us this, when we run it:"
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:212
+msgid "Constructor"
 msgstr ""
 
-#: C/02_welcome_to_the_grid.js.page:250(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:214
 msgid ""
-"That's what the stock \"About\" icon looks like. You can see a list of all "
-"the stock items starting with gtk-about in <link href=\"http://developer.";
-"gnome.org/gtk/2.24/gtk-Stock-Items.html#GTK-STOCK-ABOUT:CAPS\">GNOME's "
-"developer documentation.</link> It was written for C programmers, but you "
-"don't need to know C to use it; just look at the part in quotation marks, "
-"like \"gtk-about\", and copy that part to use the icon next to it."
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:251(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:222
 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."
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:257(p)
+#. (itstool) path: section/code
+#: C/custom-gsource.c.page:230
+#, no-wrap
 msgid ""
-"Before we go on to the next tutorial, let's try something a little different:"
+"\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 ""
 
-#: C/02_welcome_to_the_grid.js.page:269(p)
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:270
+#, fuzzy
+#| msgid "Complete code sample"
+msgid "Complete Example"
+msgstr "Exemple complet de code"
+
+#. (itstool) path: listing/title
+#: C/custom-gsource.c.page:273
+#, fuzzy
+#| msgid "Complete code sample"
+msgid "Complete Example Code"
+msgstr "Exemple complet de code"
+
+#. (itstool) path: listing/code
+#: C/custom-gsource.c.page:275
+#, no-wrap
 msgid ""
-"That's right, we turned the Label into a Button just by changing the name! "
-"If you run the application and click on it, though, you'll find that it "
-"doesn't do anything. How do we make our Button do something? That's what "
-"we'll find out, in <link xref=\"getting_the_signal.js\">our next tutorial.</"
-"link>"
+"/**\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 ""
 
-#: C/02_welcome_to_the_grid.js.page:270(p)
+#. (itstool) path: section/title
+#: C/custom-gsource.c.page:282
+#, fuzzy
+#| msgid "Furthermore:"
+msgid "Further Examples"
+msgstr "Furthermore:"
+
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:284
 msgid ""
-"If you like, feel free to spend some time experimenting with Grids, Labels, "
-"and Images, including stock images."
+"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 ""
 
-#: C/02_welcome_to_the_grid.js.page:271(p)
+#. (itstool) path: section/p
+#: C/custom-gsource.c.page:293
 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."
+"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 ""
 
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
-#: C/index.page:0(None)
-msgid "translator-credits"
-msgstr ""
-"Luc Rebert, <traduc rebert name>, 2011\n"
-"Alain Lojewski, <allomervan gmail com>, 2011-2012\n"
-"Luc Pionchon <pionchon luc gmail com>, 2011\n"
-"Bruno Brouard <annoa b gmail com>, 2011-12"
+#~ msgid "tiffany antopolski gmail com"
+#~ msgstr "tiffany antopolski gmail com"
+
+#~ msgid "Gtk.Application"
+#~ msgstr "Gtk.Application"
+
+#~ msgid "border_width"
+#~ msgstr "border_width"
+
+#~ msgid "window_position"
+#~ msgstr "window_position"
+
+#~ msgid "mmcasetti gmail com"
+#~ msgstr "mmcasetti gmail com"
+
+#~ msgid ""
+#~ "<code>window = Gtk.Window(application=self, title=\"Welcome to GNOME\")</"
+#~ "code> sets the title as well, without the need for the line <code>window."
+#~ "set_title(\"Welcome to GNOME\")</code>. For a general discussion of this, "
+#~ "see <link xref=\"properties.py\">here</link>."
+#~ msgstr ""
+#~ "Le code <code>window = Gtk.Window(application=self, title=\"Welcome to "
+#~ "GNOME\")</code> définit aussi le titre, sans avoir besoin de la ligne "
+#~ "<code>window.set_title(\"Welcome to GNOME\")</code>. Pour de plus amples "
+#~ "informations, voyez <link xref=\"properties.py\">ici</link>."
+
+#~ msgid "GtkApplication"
+#~ msgstr "GtkApplication"
+
+#~ msgid "GtkWindow"
+#~ msgstr "GtkWindow"
+
+#~ msgid "jewelfox fursona net"
+#~ msgstr "jewelfox fursona net"
+
+#~ msgid "Gtk.Window"
+#~ msgstr "Gtk.Window"
+
+#~ msgid "ihmis suski gmail com"
+#~ msgstr "ihmis suski gmail com"
+
+#~ msgid "Creating function geoNames"
+#~ msgstr "Création de la fonction geoNames"
+
+#~ msgid "Methods for geoNames"
+#~ msgstr "Méthodes pour geoNames"
+
+#~ msgid "Autotools"
+#~ msgstr "Autotools"
+
+#~ msgid "Connecting signals to button and entry.\"&gt;"
+#~ msgstr "Connexion des signaux au bouton et champ de saisie"
+
+#~ msgid "weatherapp.js"
+#~ msgstr "weatherapp.js"
+
+#~ msgid "$"
+#~ msgstr "$"
+
+#~ msgid "GJS_PATH=`pwd` gjs weatherapp.js"
+#~ msgstr "GJS_PATH=`pwd` gjs weatherapp.js"
+
+#~ msgid "Beginner's Tutorial (Python)"
+#~ msgstr "Tutoriels pour les débutants (Python)"
+
+#~ msgid "0 Beginner's Tutorial"
+#~ msgstr "0 Tutoriels pour les débutants"
+
+#~ msgid "Basic buttons"
+#~ msgstr "Boutons élémentaires"
+
+#~ msgid "Entry widgets (with a detour on basic scrolling)"
+#~ msgstr ""
+#~ "Éléments graphiques de saisie (avec un détour sur les bases du défilement)"
+
+#~ msgid "Selectors (a recap)"
+#~ msgstr "Sélecteurs (récapitulation)"
+
+#~ msgid "More containers"
+#~ msgstr "Davantage de conteneurs"
+
+#~ msgid "More scrolling"
+#~ msgstr "Davantage sur le défilement"
+
+#~ msgid "\"scrollbar.py\""
+#~ msgstr "\"scrollbar.py\""
+
+#~ msgid "\"widget.py\""
+#~ msgstr "\"widget.py\""
+
+#~ msgid "Some theory to help you"
+#~ msgstr "Un peu de théorie pour vous aider"
+
+#~ msgid "mdhillca gmail com"
+#~ msgstr "mdhillca gmail com"
+
+#~ msgid ""
+#~ "The TreeView widget is designed around a <em>Model/View/Controller</em> "
+#~ "design. For more information, and for a list of useful methods for "
+#~ "TreeView and the interface TreeModel, see <link xref=\"model-view-"
+#~ "controller.py\">here</link>."
+#~ msgstr ""
+#~ "L'élément graphique TreeView est articulé autour d'un concept <em>Modèle/"
+#~ "Vue/Contrôleur</em>. Pour de plus amples informations et pour consulter "
+#~ "une liste de méthodes utiles à l'utilisation de TreeView et de "
+#~ "l'interface TreeModel, rendez-vous <link xref=\"model-view-controller.py"
+#~ "\">ici</link>."
+
+#~ msgid "GtkTreeView"
+#~ msgstr "GtkTreeView"
+
+#~ msgid "GtkTreeModel"
+#~ msgstr "GtkTreeModel"
+
+#~ msgid "GtkTreeStore"
+#~ msgstr "GtkTreeStore"
+
+#~ msgid "GtkCellRendererText"
+#~ msgstr "GtkCellRendererText"
+
+#~ msgid "GtkTreeViewColumn"
+#~ msgstr "GtkTreeViewColumn"
+
+#~ msgid "Gtk.TreeView"
+#~ msgstr "Gtk.TreeView"
+
+#~ msgid "Gtk.ListStore"
+#~ msgstr "Gtk.ListStore"
+
+#~ msgid "Gtk.TreeSelection"
+#~ msgstr "Gtk.TreeSelection"
+
+#~ msgid "GtkListStore"
+#~ msgstr "GtkListStore"
+
+#~ msgid "pygobject - Python bindings for GObject Introspection"
+#~ msgstr "pygobject - Liaisons Python pour l'introspection GObject"
+
+#~ msgid "Fonts"
+#~ msgstr "Polices"
+
+#~ msgid "Gtk.ApplicationWindow"
+#~ msgstr "Gtk.ApplicationWindow"
+
+#~ msgid "Gtk.CellRendererText"
+#~ msgstr "Gtk.CellRendererText"
+
+#~ msgid "Gtk.TreeIter"
+#~ msgstr "Gtk.TreeIter"
+
+#~ msgid "Gtk.TreeViewColumn"
+#~ msgstr "Gtk.TreeViewColumn"
+
+#~ msgid "GtkCellRendererToggle"
+#~ msgstr "GtkCellRendererToggle"
+
+#~ msgid ""
+#~ "For buttons and callbacks functions, see <link xref=\"signals-callbacks.py"
+#~ "\">here</link>"
+#~ msgstr ""
+#~ "Pour les boutons et les fonctions de rappel, voyez <link xref=\"signals-"
+#~ "callbacks.py\">ici</link>"
+
+#~ msgid "@@image: 'media/tooltip.png'; md5=6950da5f4444aa941ecc2f0fc5951d52"
+#~ msgstr "@@image: 'media/tooltip.png'; md5=6950da5f4444aa941ecc2f0fc5951d52"
+
+#~ msgid "GtkTooltip"
+#~ msgstr "GtkTooltip"
+
+#~ msgid "GtkToolbar"
+#~ msgstr "GtkToolbar"
+
+#~ msgid "Stock Items"
+#~ msgstr "Éléments de la collection"
+
+#~ msgid "Screenshot of Glade ui"
+#~ msgstr "Capture d'écran de l'interface utilisateur de Glade"
+
+#~ msgid "Screenshot of toolbar icon in Glade ui"
+#~ msgstr ""
+#~ "Capture d'écran de l'icône de la barre d'outils dans l'interface "
+#~ "utilisateur de Glade"
+
+#~ msgid "Screenshot of General tab"
+#~ msgstr "Capture d'écran de l'onglet Général"
+
+#~ msgid "Screenshot of Common tab"
+#~ msgstr "Capture d'écran de l'onglet Commun"
+
+#~ msgid "Setting the visible property to No"
+#~ msgstr "Définition de la propriété « Visible » à « Non »"
+
+#~ msgid "Gtk.Toolbar"
+#~ msgstr "Gtk.Toolbar"
+
+#~ msgid "Gtk.Toolbutton"
+#~ msgstr "Gtk.Toolbutton"
+
+#~ msgid "Gtk.Stock"
+#~ msgstr "Gtk.Stock"
+
+#~ msgid "sebp k-d-w org"
+#~ msgstr "sebp k-d-w org"
+
+#~ msgid "GtkGrid"
+#~ msgstr "GtkGrid"
+
+#~ msgid "GtkBuilder"
+#~ msgstr "GtkBuilder"
+
+#~ msgid "The Python Gtk+ 3 Tutorial - Glade and Gtk.Builder"
+#~ msgstr "Tutoriel Gtk+ 3 Python - Glade et Gtk.Builder"
+
+#~ msgid "GtkToolButton"
+#~ msgstr "GtkToolButton"
+
+#~ msgid "GtkToolItem"
+#~ msgstr "GtkToolItem"
+
+#~ msgid "GtkActionable"
+#~ msgstr "GtkActionable"
+
+#~ msgid "Gtk.ToolButton"
+#~ msgstr "Gtk.ToolButton"
+
+#~ msgid "Gtk Stock items"
+#~ msgstr "Éléments de la collection Gtk"
+
+#~ msgid "Gdk.WindowState"
+#~ msgstr "Gdk.WindowState"
+
+#~ msgid "Gtk.ToggleButton"
+#~ msgstr "Gtk.ToggleButton"
+
+#~ msgid ""
+#~ "For an explanation of signals and callback functions, see <link xref="
+#~ "\"signals-callbacks.py\">this page</link>."
+#~ msgstr ""
+#~ "Pour de plus amples informations sur les signaux et fonctions de rappel, "
+#~ "consultez <link xref=\"signals-callbacks.py\">cette page</link>."
+
+#~ msgid "GtkToggleButton"
+#~ msgstr "GtkToggleButton"
+
+#~ msgid "GtkSpinner"
+#~ msgstr "GtkSpinner"
+
+#~ msgid "Gtk.Grid"
+#~ msgstr "Gtk.Grid"
+
+#~ msgid "Gtk.Spinner"
+#~ msgstr "Gtk.Spinner"
+
+#~ msgid "monicakochofar gmail com"
+#~ msgstr "monicakochofar gmail com"
+
+#~ msgid "GtkTogglebutton"
+#~ msgstr "GtkTogglebutton"
+
+#~ msgid "Gtk.TextBuffer"
+#~ msgstr "Gtk.TextBuffer"
+
+#~ msgid "Gtk.TextView"
+#~ msgstr "Gtk.TextView"
+
+#~ msgid "Gtk.ScrolledWindow"
+#~ msgstr "Gtk.ScrolledWindow"
+
+#~ msgid "Gtk.WrapMode"
+#~ msgstr "Gtk.WrapMode"
+
+#~ msgid "Gtk.PolicyType"
+#~ msgstr "Gtk.PolicyType"
+
+#~ msgid "GtkTextView"
+#~ msgstr "GtkTextView"
+
+#~ msgid "GtkTextBuffer"
+#~ msgstr "GtkTextBuffer"
+
+#~ msgid "GtkTextTag"
+#~ msgstr "GtkTextTag"
+
+#~ msgid "GtkScrolledWindow"
+#~ msgstr "GtkScrolledWindow"
+
+#~ msgid "Standard Enumerations"
+#~ msgstr "Énumérations standards"
+
+#~ msgid "Gtk.Button"
+#~ msgstr "Gtk.Button"
+
+#~ msgid "Gtk.Label"
+#~ msgstr "Gtk.Label"
+
+#~ msgid "Gtk.RadioButton"
+#~ msgstr "Gtk.RadioButton"
+
+#~ msgid "GtkContainer"
+#~ msgstr "GtkContainer"
+
+#~ msgid "Gtk.Switch"
+#~ msgstr "Gtk.Switch"
+
+#~ msgid ""
+#~ "For a discussion on signals and callback functions, see <link xref="
+#~ "\"signals-callbacks.py\">this page</link>."
+#~ msgstr ""
+#~ "Pour obtenir des informations sur les signaux et fonctions de rappel, "
+#~ "consultez <link xref=\"signals-callbacks.py\">cette page</link>."
+
+#~ msgid "GtkSwitch"
+#~ msgstr "GtkSwitch"
+
+#~ msgid "GtkLabel"
+#~ msgstr "GtkLabel"
+
+#~ msgid "GSimpleAction"
+#~ msgstr "GSimpleAction"
+
+#~ msgid "Gtk.Image"
+#~ msgstr "Gtk.Image"
+
+#~ msgid "Definitions"
+#~ msgstr "Définition"
+
+#~ msgid ""
+#~ "Conceptionally, a <em>string</em> is a list of <em>characters</em> such "
+#~ "as 'A', 'B', 'C' or 'È'. Characters are abstract representations and "
+#~ "their meaning depends on the language and context they are used in. The "
+#~ "<em>Unicode standard</em> describes how characters are represented by "
+#~ "<em>code points</em>. For example the characters above are represented "
+#~ "with the code points U+0041, U+0042, U+0043, and U+00C9, respectively. "
+#~ "Basically, code points are numbers in the range from 0 to 0x10FFFF."
+#~ msgstr ""
+#~ "Par principe, une <em>chaîne</em> est composée de <em>caractères</em> "
+#~ "comme « A », « B », « C » ou « È ». Les caractères sont des "
+#~ "représentations abstraites et leur signification dépend de la langue et "
+#~ "du contexte dans lesquels ils sont utilisés. Le <em>standard Unicode</em> "
+#~ "décrit comment les caractères sont représentés par des <em>points de "
+#~ "code</em>. Par exemple, les caractères ci-dessus sont représentés "
+#~ "respectivement par les points de code U+0041, U+0042, U+0043 et U+00C9. "
+#~ "Basiquement, les points de code sont des nombres compris entre 0 et "
+#~ "0x10FFFF."
+
+#~ msgid ""
+#~ "The representation of a string as a list of code points is abstract. In "
+#~ "order to convert this abstract representation into a sequence of bytes "
+#~ "the Unicode string must be <em>encoded</em>. The simplest from of "
+#~ "encoding is ASCII and is performed as follows:"
+#~ msgstr ""
+#~ "La représentation d'une chaîne comme une liste de points de code est "
+#~ "abstraite. Afin de convertir cette représentation abstraite en une "
+#~ "séquence d'octets, la chaîne Unicode doit être <em>codée</em>. La méthode "
+#~ "de codage la plus simple est l'ASCII et se présente ainsi :"
+
+#~ msgid ""
+#~ "If the code point is strictly less than 128, each byte is the same as the "
+#~ "value of the code point."
+#~ msgstr ""
+#~ "Si le point de code est strictement inférieur à 128, chaque octet est "
+#~ "identique à la valeur du point de code."
+
+#~ msgid ""
+#~ "If the code point is 128 or greater, the Unicode string can’t be "
+#~ "represented in this encoding. (Python raises a <sys>UnicodeEncodeError</"
+#~ "sys> exception in this case.)"
+#~ msgstr ""
+#~ "Si le point de code est égal ou supérieur à 128, la chaîne Unicode ne "
+#~ "peut pas être codée de cette façon (Python retourne une exception "
+#~ "<sys>UnicodeEncodeError</sys> dans ce cas)."
+
+#~ msgid ""
+#~ "Although ASCII encoding is simple to apply it can only encode for 128 "
+#~ "different characters which is hardly enough. One of the most commonly "
+#~ "used encodings that addresses this problem is UTF-8 (it can handle any "
+#~ "Unicode code point). UTF stands for “Unicode Transformation Format”, and "
+#~ "the ‘8’ means that 8-bit numbers are used in the encoding."
+#~ msgstr ""
+#~ "Bien que le codage en ASCII soit facile d'utilisation, il ne peut coder "
+#~ "que128 caractères différents, ce qui est largement insuffisant. Pour "
+#~ "contourner ce problème, une des méthodes de codage les plus utilisées est "
+#~ "UTF-8 (elle prend en charge n'importe quel point de code Unicode). UTF "
+#~ "signifie « Unicode Transformation Format » et le « 8 » signifie que des "
+#~ "nombres à 8 bits sont utilisés dans le codage."
+
+#~ msgid "How To Deal With Strings - The Python GTK+ 3 Tutorial"
+#~ msgstr "Travailler avec les chaînes - Le tutoriel Python GTK+ 3"
+
+#~ msgid "Gtk.Statusbar"
+#~ msgstr "Gtk.Statusbar"
+
+#~ msgid "GtkStatusbar"
+#~ msgstr "GtkStatusbar"
+
+#~ msgid "Gdk - Key Values"
+#~ msgstr "Gdk - Key Values"
+
+#~ msgid "Gtk.Frame"
+#~ msgstr "Gtk.Frame"
+
+#~ msgid "Gtk.Paned"
+#~ msgstr "Gtk.Paned"
+
+#~ msgid "GtkStatusBar"
+#~ msgstr "GtkStatusBar"
+
+#~ msgid "String Utility Functions"
+#~ msgstr "Fonctions de chaînes utilitaires"
+
+#~ msgid "Gtk.Widget"
+#~ msgstr "Gtk.Widget"
+
+#~ msgid "Gdk.keyval_name"
+#~ msgstr "Gdk.keyval_name"
+
+#~ msgid "Key Values"
+#~ msgstr "Valeurs des touches"
+
+#~ msgid "GObject"
+#~ msgstr "GObject"
+
+#~ msgid "Gtk.SpinButton"
+#~ msgstr "Gtk.SpinButton"
+
+#~ msgid ""
+#~ "For an explanation of signals and callback functions, see <link xref="
+#~ "\"signals-callbacks.py\">this page</link>. An example is the <code>"
+#~ "\"value-changed\"</code> signal, emitted when the value of the spinbutton "
+#~ "changes."
+#~ msgstr ""
+#~ "Pour de plus amples informations sur les signaux et les fonctions de "
+#~ "rappel, consultez <link xref=\"signals-callbacks.py\">cette page</link>. "
+#~ "Un exemple est le signal <code>\"value-changed\"</code>, émis quand la "
+#~ "valeur du BoutonDactivité change."
+
+#~ msgid "GtkSpinButton"
+#~ msgstr "GtkSpinButton"
+
+#~ msgid "GtkAdjustment"
+#~ msgstr "GtkAdjustment"
+
+#~ msgid "Gtk.Adjustment"
+#~ msgstr "Gtk.Adjustment"
+
+#~ msgid "GtkSeparator"
+#~ msgstr "GtkSeparator"
+
+#~ msgid "GtkImage"
+#~ msgstr "GtkImage"
+
+#~ msgid "Gtk.Scale"
+#~ msgstr "Gtk.Scale"
+
+#~ msgid "Gtk.PositionType"
+#~ msgstr "Gtk.PositionType"
+
+#~ msgid "Gtk.Orientation"
+#~ msgstr "Gtk.Orientation"
+
+#~ msgid ""
+#~ "For an explanation of signals and callback functions, see <link xref="
+#~ "\"signals-callbacks.py\">this page</link>. An example is the <code>"
+#~ "\"value-changed\"</code> signal, emitted when the value of the scale "
+#~ "changes."
+#~ msgstr ""
+#~ "Pour de plus amples informations sur les signaux et les fonctions de "
+#~ "rappel, consultez <link xref=\"signals-callbacks.py\">cette page</link>. "
+#~ "Un exemple est le signal <code>\"value-changed\"</code> qui est émis "
+#~ "quand la valeur de l'échelle est modifiée."
+
+#~ msgid "GtkScale"
+#~ msgstr "GtkScale"
+
+#~ msgid "GtkRange"
+#~ msgstr "GtkRange"
+
+#~ msgid "gnome-doc-list gnome org"
+#~ msgstr "gnome-doc-list gnome org"
+
+#~ msgid "jhs gnome org"
+#~ msgstr "jhs gnome org"
+
+#~ msgid ""
+#~ "For a general discussion of this, see <link xref=\"properties.py\">here</"
+#~ "link>."
+#~ msgstr ""
+#~ "Pour de plus amples informations sur cela, voyez <link xref=\"properties."
+#~ "py\">ici</link>."
+
+#~ msgid "GtkRadioButton"
+#~ msgstr "GtkRadioButton"
+
+#~ msgid "This is equivalent to:"
+#~ msgstr "Ce qui est équivalent à :"
+
+#~ msgid "Gtk.ProgressBar"
+#~ msgstr "Gtk.ProgressBar"
+
+#~ msgid "GLib.Timeout"
+#~ msgstr "GLib.Timeout"
+
+#~ msgid "GtkProgressBar"
+#~ msgstr "GtkProgressBar"
+
+#~ msgid "GLib - The Main Event Loop"
+#~ msgstr "GLib - La boucle de l'événement principal"
+
+#~ msgid "GLib"
+#~ msgstr "GLib"
+
+#~ msgid "G_Timeout"
+#~ msgstr "G_Timeout"
+
+#~ msgid "chrisk openismus com"
+#~ msgstr "chrisk openismus com"
+
+#~ msgid "Line 7: We'll look at this function in a later section."
+#~ msgstr ""
+#~ "Ligne 7 : nous regarderons cette fonction dans une section ultérieure."
+
+#~ msgid ""
+#~ "Line 9: This adds our <code>ClutterActor</code> to a <code>GSList</code> "
+#~ "so that we can later iterate over the <code>ClutterActor</code>s."
+#~ msgstr ""
+#~ "Ligne 9 : cela ajoute notre <code>ClutterActor</code> à une <code>GSList</"
+#~ "code> afin que nous puissions plus tard itérer sur les "
+#~ "<code>ClutterActor</code>."
+
+#~ msgid ""
+#~ "Interesting to note is that we want to prepend the <code>ClutterActor</"
+#~ "code>s rather than append so that we avoid traversing the list upon each "
+#~ "insertion. You will often see <code>g_slist_prepend</code> followed by "
+#~ "<code>g_slist_reverse</code> because it faster than inserting many "
+#~ "objects at the end of the list."
+#~ msgstr ""
+#~ "Il est intéressant de noter que nous ajoutons les <code>ClutterActor</"
+#~ "code> en tête de liste plutôt qu'en fin de liste afin d'éviter d'avoir à "
+#~ "parcourir la liste à chaque insertion. Vous verrez souvent "
+#~ "<code>g_slist_prepend</code> suivi de <code>g_slist_reverse</code> car "
+#~ "c'est plus rapide que d'insérer beaucoup d'objets à la fin de la liste."
+
+#~ msgid ""
+#~ "Line 9: This line of code runs a custom function, "
+#~ "<code>foreach_set_focus_state</code>, for each element in our "
+#~ "<code>actor_list</code>, passing it the address to the <code>is_focused</"
+#~ "code> flag. We'll see the definition of the "
+#~ "<code>foreach_set_focus_state</code> function in the next section."
+#~ msgstr ""
+#~ "Ligne 9 : cette ligne de code exécute une fonction personnalisée "
+#~ "<code>foreach_set_focus_state</code>, pour chaque élément de notre "
+#~ "<code>actor_list</code>, en lui transmettant l'adresse du drapeau "
+#~ "<code>is_focused</code>. Nous verrons la définition de la fonction "
+#~ "<code>foreach_set_focus_state</code> dans la prochaine section."
+
+#~ msgid "The address of the <code>ClutterActor</code> to animate"
+#~ msgstr "L'adresse du <code>ClutterActor</code> à animer"
+
+#~ msgid ""
+#~ "The animation mode to use. Here we use <code>CLUTTER_LINEAR</code> so "
+#~ "that we have a constant speed for animation."
+#~ msgstr ""
+#~ "Le mode d'animation à utiliser. Ici nous utilisons <code>CLUTTER_LINEAR</"
+#~ "code> pour avoir une vitesse d'animation constante."
+
+#~ msgid ""
+#~ "The duration of the animation in milliseconds. I've chosen 500 ms for "
+#~ "this example."
+#~ msgstr ""
+#~ "La durée de l'animation en millisecondes. J'ai choisi 500 ms pour cet "
+#~ "exemple."
+
+#~ msgid ""
+#~ "The remaining arguments are property/value pairs. Here we want to set the "
+#~ "<code>x</code> value to the starting <code>x</code> value this "
+#~ "<code>ClutterActor</code> was at before being brought into focus."
+#~ msgstr ""
+#~ "Les arguments restants sont des paires propriété/valeur. Ici nous voulons "
+#~ "définir la valeur <code>x</code> à la valeur <code>x</code> initiale, où "
+#~ "ce <code>ClutterActor</code> était avant de posséder le focus."
+
+#~ msgid ""
+#~ "The last argument must always be <code>NULL</code> to indicate that there "
+#~ "are no more properties to be set."
+#~ msgstr ""
+#~ "Le dernier argument doit toujours être <code>NULL</code> pour indiquer "
+#~ "qu'il n'y a plus de propriétés à définir."
+
+#~ msgid ""
+#~ "The <code>depth</code> property needs a little more explaining. We need "
+#~ "to raise the focused image so that it doesn't slide behind other "
+#~ "<code>ClutterActor</code>s. In this section we are returning it to the "
+#~ "same depth as the others on the wall."
+#~ msgstr ""
+#~ "La propriété <code>depth</code> nécessite un peu plus d'explications. "
+#~ "Nous avons besoin de mettre au premier plan l'image qui possède le focus "
+#~ "afin qu'elle ne glisse pas derrière d'autres <code>ClutterActor</code>. "
+#~ "Dans cette section, nous réajustons sa propriété à la même altitude que "
+#~ "les autres images sur le mur."
+
+#~ msgid ""
+#~ "Depth also determines which <code>ClutterActor</code>s receive events. A "
+#~ "<code>ClutterActor</code> with a higher depth value receives the click "
+#~ "events and can choose whether the event gets sent to <code>ClutterActor</"
+#~ "code>s under it. We'll see how that works in a few steps."
+#~ msgstr ""
+#~ "« Depth » détermine aussi quels <code>ClutterActor</code> reçoivent les "
+#~ "événements. Un <code>ClutterActor</code> avec une altitude plus grande "
+#~ "reçoit les événements de clic et peut choisir si l'événement est transmis "
+#~ "au <code>ClutterActor</code> en dessous de lui. Nous verrons comment cela "
+#~ "fonctionne un peu plus loin."
+
+#~ msgid ""
+#~ "Lines 27‒33: This is similar to the above block of code. Notice that we "
+#~ "are setting the the depth to raise it above the other images."
+#~ msgstr ""
+#~ "Ligne 27-33 : similaire au bloc de code ci-dessus. Notez que nous "
+#~ "paramétrons l'altitude afin de placer l'acteur devant les autres images."
+
+#~ msgid ""
+#~ "The following is the convenience function passed to "
+#~ "<code>g_slist_foreach</code>."
+#~ msgstr ""
+#~ "Ce qui suit est la fonction bien commode transmise à "
+#~ "<code>g_slist_foreach</code>."
+
+#~ msgid ""
+#~ "Lines 2‒5: The signature of this function requires two <code>gpointer</"
+#~ "code>s. The first is a pointer to the <code>ClutterActor</code> that our "
+#~ "<code>GSList</code> holds and the other is the <code>is_focused</code> "
+#~ "flag that we've passed in the previous section. We want to cast these and "
+#~ "store them for easy use."
+#~ msgstr ""
+#~ "Ligne 2-5 : la signature de cette fonction nécessite deux <code>gpointer</"
+#~ "code>. Le premier est un pointeur vers le <code>ClutterActor</code> que "
+#~ "notre <code>GSList</code> contient et l'autre est le drapeau "
+#~ "<code>is_focused</code> que nous avons transmis dans la section "
+#~ "précédente. Nous allons en garder une trace et les enregistrer pour "
+#~ "pouvoir les utiliser facilement."
+
+#~ msgid ""
+#~ "Line 7: Depending on which boolean value is passed in, the "
+#~ "<code>ClutterActor</code> will be set to respond to events or not."
+#~ msgstr ""
+#~ "Ligne 7 : en fonction de la valeur booléenne transmise, le "
+#~ "<code>ClutterActor</code> est paramétré pour répondre aux événements ou "
+#~ "pas."
+
+#, fuzzy
+#~| msgid "@@image: 'media/window.png'; md5=eb0cde3530978619c25bddfaeb453345"
+#~ msgid "@@image: 'media/paned.png'; md5=01e36d8a51ee18313616d63d2e15d993"
+#~ msgstr "@@image: 'media/window.png'; md5=eb0cde3530978619c25bddfaeb453345"
+
+#, fuzzy
+#~| msgid "Gtk.Paned"
+#~ msgid "GtkPaned"
+#~ msgstr "Gtk.Paned"
+
+#~ msgid "GtkComboBox"
+#~ msgstr "GtkComboBox"
+
+#~ msgid "GtkCellRenderer"
+#~ msgstr "GtkCellRenderer"
+
+#~ msgid "The Python Gtk+ 3 Tutorial - Tree and List Widgets"
+#~ msgstr ""
+#~ "Le tutoriel Python Gtk+ 3 - éléments graphiques arborescents et listes"
+
+#~ msgid "The Python Gtk+ 3 Tutorial - CellRenderers"
+#~ msgstr "Le tutoriel Python Gtk+ 3 - Générateurs de rendu"
+
+#~ msgid "The Python Gtk+ 3 Tutorial - ComboBox"
+#~ msgstr "Le tutoriel Python Gtk+ 3 - Boîte combinée"
+
+#~ msgid "Gtk.MessageDialog"
+#~ msgstr "Gtk.MessageDialog"
+
+#~ msgid "Gtk.DialogFlags"
+#~ msgstr "Gtk.DialogFlags"
+
+#~ msgid "Gtk.MessageType"
+#~ msgstr "Gtk.MessageType"
+
+#~ msgid "Gtk.ButtonsType"
+#~ msgstr "Gtk.ButtonsType"
+
+#~ msgid "GtkMessageDialog"
+#~ msgstr "GtkMessageDialog"
+
+#~ msgid "GtkDialog"
+#~ msgstr "GtkDialog"
+
+#~ msgid "GActionMap"
+#~ msgstr "GActionMap"
+
+#~ msgid "List of button types"
+#~ msgstr "Liste de types de boutons"
+
+#~ msgid "List of message types"
+#~ msgstr "Liste de types de messages"
+
+#, fuzzy
+#~| msgid "GtkApplication"
+#~ msgid "GApplication"
+#~ msgstr "GtkApplication"
+
+#~ msgid "shaunm gnome org"
+#~ msgstr "shaunm gnome org"
+
+#~ msgid "\"UTF-8\""
+#~ msgstr "« UTF-8 »"
+
+#~ msgid "NULL"
+#~ msgstr "NULL"
+
+#~ msgid "shaunm"
+#~ msgstr "shaunm"
+
+#~ msgid "FIXME: Is this true? Does query_selector take CSS, CSSish, or what?"
+#~ msgstr ""
+#~ "FIXME : est-ce vrai ? est-ce que « query_selector » prend en charge le "
+#~ "CSS, le CSSish, ou quoi ?"
+
+#~ msgid ""
+#~ "Not passing the GError**, but we should give it a quick mention and link "
+#~ "to somewhere that explains how GError-handling works."
+#~ msgstr ""
+#~ "Not passing the GError**, but we should give it a quick mention and link "
+#~ "to somewhere that explains how GError-handling works."
+
+#~ msgid "g_base64_encode has bad args"
+#~ msgstr "g_base64_encode has bad args"
+
+#~ msgid "Link to method to get HTML from DOM and to GIO APIs."
+#~ msgstr ""
+#~ "Lien vers une méthode pour obtenir de l'HTML de DOM vers les API GIO."
+
+#~ msgid "Link to strftime or something"
+#~ msgstr "Lien vers « strftime » où autre"
+
+#~ msgid ""
+#~ "@@image: 'media/menubutton.png'; md5=1feb7b836a522c3007079d4420621d9d"
+#~ msgstr ""
+#~ "@@image: 'media/menubutton.png'; md5=1feb7b836a522c3007079d4420621d9d"
+
+#~ msgid "azzurroverde gmail com"
+#~ msgstr "azzurroverde gmail com"
+
+#~ msgid "Glib.ActionEntry"
+#~ msgstr "Glib.ActionEntry"
+
+#~ msgid "Gtk.Builder"
+#~ msgstr "Gtk.Builder"
+
+#~ msgid "dgsiegel gnome org"
+#~ msgstr "dgsiegel gnome org"
+
+#~ msgid "Gtk.LinkButton"
+#~ msgstr "Gtk.LinkButton"
+
+#~ msgid "GtkLinkButton"
+#~ msgstr "GtkLinkButton"
+
+#~ msgid ""
+#~ "<code>label = Gtk.Label(label=\"Hello GNOME!\")</code> could also be used "
+#~ "create a label and set the text directly. For a general discussion of "
+#~ "this, see <link xref=\"properties.py\">here</link>."
+#~ msgstr ""
+#~ "La fonction <code>label = Gtk.Label(label=\"Hello GNOME!\")</code> "
+#~ "pourrait aussi être utilisée pour créer une étiquette et y définir le "
+#~ "texte directement. Pour de plus amples informations sur cela, voyez <link "
+#~ "xref=\"properties.py\">ici</link>."
+
+#~ msgid "philip chimento gmail com"
+#~ msgstr "philip chimento gmail com"
+
+#~ msgid "1 Image Viewer"
+#~ msgstr "1 Visionneur d'images"
+
+#~ msgid "jwendell gnome org"
+#~ msgstr "jwendell gnome org"
+
+#~ msgid "GtkApplicationWindow"
+#~ msgstr "GtkApplicationWindow"
+
+#, fuzzy
+#~| msgid ""
+#~| "To set a stock icon as image, you can use <code>set_from_stock(stock_id, "
+#~| "size)</code> where <code>stock_id</code> is a stock icon such as "
+#~| "<code>Gtk.STOCK_ABOUT</code> (more can be found at <link href=\"http://";
+#~| "developer.gnome.org/gtk3/3.4/gtk3-Stock-Items\">Stock Items</link>, with "
+#~| "the caveat that they should be modified as above) and <code>size</code> "
+#~| "is a stock icon size to be chosen from <code>Gtk.IconSize.INVALID, Gtk."
+#~| "IconSize.MENU, Gtk.IconSize.SMALL_TOOLBAR, Gtk.IconSize.LARGE_TOOLBAR, "
+#~| "Gtk.IconSize.BUTTON, Gtk.IconSize.DND, Gtk.IconSize.DIALOG</code>."
+#~ msgid ""
+#~ "To set a stock icon as image, you can use <code>set_from_stock(stock_id, "
+#~ "size)</code> where <code>stock_id</code> is a stock icon such as "
+#~ "<code>Gtk.STOCK_ABOUT</code> (more can be found at <link href=\"http://";
+#~ "developer.gnome.org/gtk3/unstable/gtk3-Stock-Items\">Stock Items</link>, "
+#~ "with the caveat that they should be modified as above) and <code>size</"
+#~ "code> is a stock icon size to be chosen from <code>Gtk.IconSize.INVALID, "
+#~ "Gtk.IconSize.MENU, Gtk.IconSize.SMALL_TOOLBAR, Gtk.IconSize."
+#~ "LARGE_TOOLBAR, Gtk.IconSize.BUTTON, Gtk.IconSize.DND, Gtk.IconSize."
+#~ "DIALOG</code>."
+#~ msgstr ""
+#~ "Pour définir une icône de la collection comme image, utilisez "
+#~ "<code>set_from_stock(stock_id, taille)</code>, où <code>stock_id</code> "
+#~ "est une icône de la collection <code>Gtk.STOCK_ABOUT</code> (vous en "
+#~ "trouverez d'autres dans <link href=\"http://developer.gnome.org/gtk3/3.4/";
+#~ "gtk3-Stock-Items\">Éléments de la collection</link>, à ceci près qu'elles "
+#~ "doivent être modifiées comme ci-dessus) et où <code>taille</code> est une "
+#~ "taille d'icône de la collection à choisir parmi <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>."
+
+#~ msgid ""
+#~ "You can also use <code>set_from_icon_name(icon_name, size)</code>, where "
+#~ "<code>icon_name</code> is a stock icon name such as <code>\"gtk-about\"</"
+#~ "code> (more can be found as above) and <code>size</code> is as above."
+#~ msgstr ""
+#~ "Vous pouvez aussi utiliser la méthode <code>set_from_icon_name(icon_name, "
+#~ "taille)</code>, où <code>icon_name</code> est une icône de la collection "
+#~ "<code>\"gtk-about\"</code> (il y en a d'autres à l'emplacement ci-dessus) "
+#~ "et <code>taille</code> comme ci-dessus."
+
+#, fuzzy
+#~| msgid "helloWorld.js"
+#~ msgid "gjs helloWorld.js"
+#~ msgstr "helloWorld.js"
+
+#, fuzzy
+#~| msgid "chmod +x helloWorld.js"
+#~ msgid "chmod +x helloWorld"
+#~ msgstr "chmod +x helloWorld.js"
+
+#~ msgid "chmod +x autogen.sh"
+#~ msgstr "chmod +x autogen.sh"
+
+#~ msgid "2 Guitar Tuner"
+#~ msgstr "2 Accordeur de guitare"
+
+#~ msgid "GJS_PATH=`pwd` gjs guitarTuner.js"
+#~ msgstr "GJS_PATH=`pwd` gjs guitarTuner.js"
+
+#~ msgid "GtkButton"
+#~ msgstr "GtkButton"
+
+#~ msgid "desrt desrt ca"
+#~ msgstr "desrt desrt ca"
+
+#~ msgid ""
+#~ "This program will not compile with the quit action connected until <link "
+#~ "href=\"https://bugzilla.gnome.org/show_bug.cgi?id=674090\";>Bug #674090</"
+#~ "link> is fixed. Therefore, the problematic line has been commented out."
+#~ msgstr ""
+#~ "Ce programme ne se compilera pas avec l'action « quitter » connectée, "
+#~ "tant que le <link href=\"https://bugzilla.gnome.org/show_bug.cgi?";
+#~ "id=674090\">Bug #674090</link> ne sera pas résolu. En conséquence, la "
+#~ "ligne posant problème a été mise en commentaire."
+
+#~ msgid "Menu"
+#~ msgstr "Menu"
+
+#~ msgid "append"
+#~ msgstr "append"
+
+#~ msgid "SimpleAction"
+#~ msgstr "SimpleAction"
+
+#~ msgid "add_action"
+#~ msgstr "add_action"
+
+#~ msgid "GVariantType"
+#~ msgstr "GVariantType"
+
+#~ msgid "GVariant"
+#~ msgstr "GVariant"
+
+#~ msgid "Automatic installation"
+#~ msgstr "Installation automatique"
+
+#~ msgid ""
+#~ "On an up-to-date distribution you should be able to simply install the "
+#~ "required packages by clicking on <link href=\"media/gnome-devtools.catalog"
+#~ "\">Install now</link>."
+#~ msgstr ""
+#~ "Avec une distribution à jour, vous devriez pouvoir installer les paquets "
+#~ "nécessaires tout simplement en cliquant sur <link href=\"media/gnome-"
+#~ "devtools.catalog\">Installer maintenant</link>."
+
+#~ msgid "Ubuntu"
+#~ msgstr "Ubuntu"
+
+#~ msgid "Fedora"
+#~ msgstr "Fedora"
+
+#~ msgid "OpenSuSE"
+#~ msgstr "OpenSuSE"
+
+#~ msgid "Others"
+#~ msgstr "Autres"
+
+#~ msgid "GtkFontChooserWidget"
+#~ msgstr "Élément graphique GtkFontChooser"
+
+#~ msgid "FileChooser"
+#~ msgstr "FileChooser"
+
+#~ msgid "GLib.ActionEntry"
+#~ msgstr "GLib.ActionEntry"
+
+#, fuzzy
+#~| msgid "FileChooserDialog"
+#~ msgid "GtkFileChooserDialog"
+#~ msgstr "Boîte de dialogue FileChooser"
+
+#, fuzzy
+#~| msgid "FileChooser"
+#~ msgid "GtkFileChooser"
+#~ msgstr "FileChooser"
+
+#~ msgid "Gtk.Entry"
+#~ msgstr "Gtk.Entry"
+
+#~ msgid "GtkEntry"
+#~ msgstr "GtkEntry"
+
+#~ msgid "Gtk.Dialog"
+#~ msgstr "Gtk.Dialog"
+
+#~ msgid "Gtk.Dialog.with_buttons"
+#~ msgstr "Gtk.Dialog.with_buttons"
+
+#~ msgid "get_content_area"
+#~ msgstr "get_content_area"
+
+#~ msgid "GtkCellRendererPixbuf"
+#~ msgstr "GtkCellRendererPixbuf"
+
+#~ msgid "Gtk.ComboBox"
+#~ msgstr "Gtk.ComboBox"
+
+#~ msgid "set_attributes"
+#~ msgstr "set_attributes"
+
+#~ msgid "GtkCellLayout"
+#~ msgstr "GtkCellLayout"
+
+#, fuzzy
+#~| msgid "GtkCellRendererPixbuf"
+#~ msgid "Gtk.CellRendererPixbuf"
+#~ msgstr "GtkCellRendererPixbuf"
+
+#~ msgid "Gtk.ComboBoxText"
+#~ msgstr "Gtk.ComboBoxText"
+
+#~ msgid "Gtk.ColorButton"
+#~ msgstr "Gtk.ColorButton"
+
+#~ msgid "Gdk.RGBA"
+#~ msgstr "Gdk.RGBA"
+
+#~ msgid "GtkColorButton"
+#~ msgstr "GtkColorButton"
+
+#~ msgid "GtkColorChooser"
+#~ msgstr "GtkColorChooser"
+
+#~ msgid "RGBA Colors"
+#~ msgstr "Couleurs RVBA"
+
+#~ msgid "Gtk.CheckButton"
+#~ msgstr "Gtk.CheckButton"
+
+#~ msgid ""
+#~ "We could also create the CheckButton with <code>button = Gtk.CheckButton."
+#~ "new_with_label(\"Show Title\")</code>."
+#~ msgstr ""
+#~ "Nous aurions pu aussi créer la CaseAcocher avec <code>button = Gtk."
+#~ "CheckButton.new_with_label(\"Show Title\")</code>."
+
+#~ msgid "GtkCheckButton"
+#~ msgstr "GtkCheckButton"
+
+#~ msgid "tiffany antpoolski gmail com"
+#~ msgstr "tiffany antpoolski gmail com"
+
+#, fuzzy
+#~| msgid "GtkButton"
+#~ msgid "GtkButtonBox"
+#~ msgstr "GtkButton"
+
+#, fuzzy
+#~| msgid "GtkButton"
+#~ msgid "GtkBox"
+#~ msgstr "GtkButton"
+
+#~ msgid ""
+#~ "<code>button = Gtk.Button(label=\"Click me\")</code> could also be used "
+#~ "create a button and set the text directly. For a general discussion of "
+#~ "this, see <link xref=\"properties.py\">here</link>."
+#~ msgstr ""
+#~ "La méthode <code>button = Gtk.Button(label=« Cliquez moi »)</code> "
+#~ "pourrait aussi servir à créer un bouton et définir le texte directement. "
+#~ "Pour de plus amples informations sur cette fonction, rendez-vous <link "
+#~ "xref=\"properties.py\">ici</link>."
+
+#~ msgid "Unicode Manipulation"
+#~ msgstr "Manipulation Unicode"
+
+#~ msgid "tiffany antopolski com"
+#~ msgstr "tiffany antopolski com"
+
+#, fuzzy
+#~| msgid "0 Beginner's Tutorials"
+#~ msgid "Beginner Tutorials (Vala)"
+#~ msgstr "Tutoriels pour les débutants zéro"
+
+#~ msgid "0 Beginner's Tutorials"
+#~ msgstr "Tutoriels pour les débutants zéro"
+
+#~ msgid "The Vala Tutorial"
+#~ msgstr "Le tutoriel Vala"
+
+#~ msgid "Sample Vala code"
+#~ msgstr "Exemple de code Vala"
+
+#~ msgid "0 Beginner's tutorials and samples"
+#~ msgstr "Tutoriels pour les débutants zéro et exemples"
+
+#, fuzzy
+#~| msgid "0 Beginner's Tutorials"
+#~ msgid "Beginner's Tutorials (C)"
+#~ msgstr "Tutoriels pour les débutants zéro"
+
+#~ msgid "set_default_size"
+#~ msgstr "set_default_size"
+
+#~ msgid "GtkAboutDialog"
+#~ msgstr "GtkAboutDialog"
 
+#~ msgid "Gtk.AboutDialog"
+#~ msgstr "Gtk.AboutDialog"


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