[dconf-editor] Translators comments.



commit e9ca994150514308accecd0d2c408634cb11d9da
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date:   Fri Dec 28 11:27:41 2018 +0100

    Translators comments.

 editor/about-list.vala             |  15 +++--
 editor/adaptative-pathbar.vala     |   4 +-
 editor/adaptative-window.vala      |   6 +-
 editor/base-headerbar.vala         |   8 ++-
 editor/bookmarks-list.vala         |   5 +-
 editor/bookmarks.vala              |   4 ++
 editor/browser-headerbar.vala      |   4 +-
 editor/browser-view.vala           |  16 +++--
 editor/browser-window.vala         |   1 +
 editor/dconf-editor.vala           |  33 +++++++++-
 editor/dconf-headerbar.vala        |  24 +++++++-
 editor/dconf-model.vala            |   1 +
 editor/dconf-window.vala           |  27 ++++++++-
 editor/delayed-setting-view.vala   | 121 +++++++++++++++++++++++--------------
 editor/key-editor-child.vala       |  11 +++-
 editor/key-list-box-row.vala       |   2 +
 editor/model-utils.vala            |   3 +-
 editor/modifications-list.vala     |   5 +-
 editor/modifications-revealer.vala |  35 ++++++++---
 editor/registry-info.vala          |  35 +++++++++--
 editor/registry-list.vala          |  11 ++--
 editor/registry-search.vala        |   1 +
 editor/registry-view.vala          |   1 +
 editor/setting-object.vala         |  16 ++++-
 24 files changed, 290 insertions(+), 99 deletions(-)
---
diff --git a/editor/about-list.vala b/editor/about-list.vala
index ec04bd6..4c519cd 100644
--- a/editor/about-list.vala
+++ b/editor/about-list.vala
@@ -26,8 +26,8 @@ private class AboutList : OverlayedList
         main_list_box.selection_mode = SelectionMode.NONE;
         get_style_context ().add_class ("about-list");
 
-        first_mode_name = _("About");
-        second_mode_name = _("Credits");
+        /* Translators: on really small windows, the about dialog is replaced by an in-window view; here are 
the two buttons that have the same role as the stack switcher in the usual about dialog */
+        first_mode_name = _("About"); second_mode_name = _("Credits");
         change_editability (true);
 
         show_apropos (ref main_list_store);
@@ -91,9 +91,11 @@ private class AboutList : OverlayedList
                                                                      AboutDialogInfos.website_label));
         main_list_store.append (new AboutListItem.from_label        (AboutDialogInfos.copyright, 
"small-label"));
 
-        if (AboutDialogInfos.license_type != License.GPL_3_0)
-            assert_not_reached ();  // TODO support all licenses type
-        main_list_store.append (new AboutListItem.from_link         
("https://www.gnu.org/licenses/gpl-3.0.html";, _("GNU General Public License\nversion 3 or later")));    // 
TODO better
+        if (AboutDialogInfos.license_type != License.GPL_3_0)   // TODO support all licenses type
+            assert_not_reached ();
+
+        /* Translators: on really small windows, the about dialog is replaced by an in-window view; here is 
the label of the link to the GPL license; TODO better text, as in the usual about dialog */
+        main_list_store.append (new AboutListItem.from_link         
("https://www.gnu.org/licenses/gpl-3.0.html";, _("GNU General Public License\nversion 3 or later")));
 
         program.grab_focus ();
     }
@@ -115,8 +117,11 @@ private class AboutList : OverlayedList
                 authors += "\n";
             position++;
         }
+        /* Translators: on really small windows, the about dialog is replaced by an in-window view; here is 
the header of the programmers names */
         main_list_store.append (new AboutListItem.with_title        (authors, _("Creators")));
 
+
+        /* Translators: on really small windows, the about dialog is replaced by an in-window view; here is 
the header of the translators names */
         main_list_store.append (new AboutListItem.with_title        (AboutDialogInfos.translator_credits, 
_("Translators")));
 
         program.grab_focus ();
diff --git a/editor/adaptative-pathbar.vala b/editor/adaptative-pathbar.vala
index 07472b5..77e9e6e 100644
--- a/editor/adaptative-pathbar.vala
+++ b/editor/adaptative-pathbar.vala
@@ -212,6 +212,8 @@ private interface Pathbar
     /* called from inside the pathbar, by ShortPathbar and LargePathbarItem (so cannot make "protected") */
     internal static void add_copy_path_entry (ref GLib.Menu section)
     {
-        section.append (_("Copy current path"), "base.copy-alt"); // or "app.copy(\"" + 
get_action_target_value ().get_string () + "\")"
+        /* Translators: menu entry of the pathbar menu */
+        section.append (_("Copy current path"), "base.copy-alt");
+        // or "app.copy(\"" + get_action_target_value ().get_string () + "\")"
     }
 }
diff --git a/editor/adaptative-window.vala b/editor/adaptative-window.vala
index 01315fd..1d37ae1 100644
--- a/editor/adaptative-window.vala
+++ b/editor/adaptative-window.vala
@@ -145,15 +145,15 @@ private abstract class NightTimeAwareHeaderBar : HeaderBar
     private static inline void append_night_mode_entry (bool dark_theme, bool auto_night, ref GLib.Menu 
section)
     {
         if (dark_theme)
-            /* Translators: there are three related actions: "use", "reuse" and "pause" */
+            /* Translators: there are three related actions: "use", "reuse" and "pause"; displayed in the 
hamburger menu at night */
             section.append (_("Pause night mode"), "app.set-use-night-mode(false)");
 
         else if (auto_night)
-            /* Translators: there are three related actions: "use", "reuse" and "pause" */
+            /* Translators: there are three related actions: "use", "reuse" and "pause"; displayed in the 
hamburger menu at night */
             section.append (_("Reuse night mode"), "app.set-use-night-mode(true)");
 
         else
-            /* Translators: there are three related actions: "use", "reuse" and "pause" */
+            /* Translators: there are three related actions: "use", "reuse" and "pause"; displayed in the 
hamburger menu at night */
             section.append (_("Use night mode"), "app.set-use-night-mode(true)");
     }
 }
diff --git a/editor/base-headerbar.vala b/editor/base-headerbar.vala
index d13af39..b0cf1b0 100644
--- a/editor/base-headerbar.vala
+++ b/editor/base-headerbar.vala
@@ -101,7 +101,9 @@ private class BaseHeaderBar : NightTimeAwareHeaderBar, AdaptativeWidget
 
     private static inline void append_or_not_keyboard_shortcuts_entry (bool has_keyboard_shortcuts, ref 
GLib.Menu section)
     {
-        if (has_keyboard_shortcuts)    // FIXME is used also for hiding keyboard shortcuts in small window
+        // FIXME is used also for hiding keyboard shortcuts in small window
+        if (has_keyboard_shortcuts)
+            /* Translators: usual menu entry of the hamburger menu*/
             section.append (_("Keyboard Shortcuts"), "win.show-help-overlay");
     }
 
@@ -257,7 +259,9 @@ private class BaseHeaderBar : NightTimeAwareHeaderBar, AdaptativeWidget
 
         _this.set_default_widgets_states (/* show go_back_button      */ true,
                                           /* show ltr_left_separator  */ false,
-                                          /* title_label text or null */ _("About"),
+                                          /* title_label text or null */
+                                          /* Translators: on really small windows, the about dialog is 
replaced by an in-window view; here is the name of the view, displayed in the headerbar */
+                                                                         _("About"),
                                           /* show info_button         */ false,
                                           /* show ltr_right_separator */ false,
                                           /* show quit_button_stack   */ true);
diff --git a/editor/bookmarks-list.vala b/editor/bookmarks-list.vala
index c6ed5fc..9bcf12a 100644
--- a/editor/bookmarks-list.vala
+++ b/editor/bookmarks-list.vala
@@ -28,11 +28,12 @@ private class BookmarksList : OverlayedList
     construct
     {
         placeholder_icon = "starred-symbolic";
+        /* Translators: placeholder text of the bookmarks list, displayed when the user has no bookmarks */
         placeholder_text = _("Bookmarks will\nbe added here");
         add_placeholder ();
 
-        first_mode_name = _("Use");
-        second_mode_name = _("Edit");
+        /* Translators: labels of the two buttons of the bookmarks list, to switch between using the 
bookmarks and editing the list */
+        first_mode_name = _("Use"); second_mode_name = _("Edit");
     }
 
     internal BookmarksList (bool needs_shadows, bool big_placeholder, string edit_mode_action_prefix, string 
schema_path)
diff --git a/editor/bookmarks.vala b/editor/bookmarks.vala
index 683607a..b8b5b3c 100644
--- a/editor/bookmarks.vala
+++ b/editor/bookmarks.vala
@@ -392,8 +392,12 @@ private class Bookmarks : MenuButton
     * * Bookmarks management
     \*/
 
+    /* Translators: label of the switch in the bookmarks popover, when searching */
     private const string bookmark_this_search_text = _("Bookmark this Search");
+
+    /* Translators: label of the switch in the bookmarks popover, when browsing */
     private const string bookmark_this_location_text = _("Bookmark this Location");
+
     private static void update_switch_label (ViewType old_type, ViewType new_type, ref Label switch_label)
     {
         if (new_type == ViewType.SEARCH && old_type != ViewType.SEARCH)
diff --git a/editor/browser-headerbar.vala b/editor/browser-headerbar.vala
index 22b1904..9fb4c9a 100644
--- a/editor/browser-headerbar.vala
+++ b/editor/browser-headerbar.vala
@@ -188,7 +188,9 @@ private abstract class BrowserHeaderBar : BaseHeaderBar, AdaptativeWidget
 
         real_this.set_default_widgets_states (/* show go_back_button      */ true,
                                               /* show ltr_left_separator  */ false,
-                                              /* title_label text or null */ _("Properties"),
+                                              /* title_label text or null */
+                                              /* Translators: on really small windows, name of the view when 
showing a folder properties, displayed in the headerbar */
+                                                                             _("Properties"),
                                               /* show info_button         */ false,
                                               /* show ltr_right_separator */ false,
                                               /* show quit_button_stack   */ true);
diff --git a/editor/browser-view.vala b/editor/browser-view.vala
index ce89edb..2c046f6 100644
--- a/editor/browser-view.vala
+++ b/editor/browser-view.vala
@@ -80,12 +80,16 @@ private class BrowserView : BaseView, AdaptativeWidget
         install_action_entries ();
 
         info_bar = new BrowserInfoBar ();
-        info_bar.add_label ("soft-reload-folder", _("Sort preferences have changed. Do you want to refresh 
the view?"),
-                                                  _("Refresh"), "bro.refresh-folder");
-        info_bar.add_label ("hard-reload-folder", _("This folder content has changed. Do you want to reload 
the view?"),
-                                                  _("Reload"), "browser.reload-folder");
-        info_bar.add_label ("hard-reload-object", _("This key’s properties have changed. Do you want to 
reload the view?"),
-                                                  _("Reload"), "browser.reload-object");   // TODO also for 
key removing?
+        /* Translators: text and button of an infobar to sort again the keys list ("refresh" only, no 
"reload") */
+        info_bar.add_label ("soft-reload-folder", _("Sort preferences have changed. Do you want to refresh 
the view?"), _("Refresh"), "bro.refresh-folder");
+
+        /* Translators: text of an infobar to reload the keys list because of a new key (for example) */
+        info_bar.add_label ("hard-reload-folder", _("This folder content has changed. Do you want to reload 
the view?"), _("Reload"), "browser.reload-folder");
+
+        /* Translators: text of an infobar to reload the key properties because something has changed */
+        info_bar.add_label ("hard-reload-object", _("This key’s properties have changed. Do you want to 
reload the view?"), _("Reload"), "browser.reload-object");
+        // TODO use the same for key removing?
+
         info_bar.show ();
         main_grid.add (info_bar);
 
diff --git a/editor/browser-window.vala b/editor/browser-window.vala
index 50c7c83..1e6453c 100644
--- a/editor/browser-window.vala
+++ b/editor/browser-window.vala
@@ -681,6 +681,7 @@ private abstract class BrowserWindow : BaseWindow
         {
             if (_this.mouse_back_button == _this.mouse_forward_button)
             {
+                /* Translators: command-line message, when the user uses the backward/forward buttons of the 
mouse */
                 warning (_("The same mouse button is set for going backward and forward. Doing nothing."));
                 return false;
             }
diff --git a/editor/dconf-editor.vala b/editor/dconf-editor.vala
index ffced5f..2af9dca 100644
--- a/editor/dconf-editor.vala
+++ b/editor/dconf-editor.vala
@@ -17,6 +17,9 @@
 
 private class ConfigurationEditor : Gtk.Application
 {
+    /* Translators: application name, as used in the window manager, the window title, the about dialog... */
+    internal const string PROGRAM_NAME = _("dconf Editor");
+
     internal static string [,] internal_mappings = {
             {"ca.desrt.dconf-editor.Bookmarks",
                 "/ca/desrt/dconf-editor/"},
@@ -140,9 +143,13 @@ private class ConfigurationEditor : Gtk.Application
 
     private const OptionEntry [] option_entries =
     {
+        /* Translators: command-line option description, see 'dconf-editor --help' */
         { "version", 'v', 0, OptionArg.NONE, null, N_("Print release version and exit"), null },
+
+        /* Translators: command-line option description, see 'dconf-editor --help' */
         { "list-relocatable-schemas", 0, 0, OptionArg.NONE, null, N_("Print relocatable schemas and exit"), 
null },
 
+        /* Translators: command-line option description, see 'dconf-editor --help'; the option removes the 
initial "use at your own risks" dialog */
         { "I-understand-that-changing-options-can-break-applications", 0, 0, OptionArg.NONE, ref 
disable_warning, N_("Do not show initial warning"), null },
 
         { OPTION_REMAINING, 0, 0, OptionArg.STRING_ARRAY, ref remaining, "args", null },
@@ -180,28 +187,34 @@ private class ConfigurationEditor : Gtk.Application
         Object (application_id: "ca.desrt.dconf-editor", flags: 
ApplicationFlags.HANDLES_COMMAND_LINE|ApplicationFlags.HANDLES_OPEN);
 
         set_option_context_parameter_string ("[ PATH | [FIXED_SCHEMA|RELOC_SCHEMA:PATH] [KEY] ]");
-        /* Translators: try to put that string in 80 characters or less, if possible. */
+        /* Translators: command-line argument description, see 'dconf-editor --help'; try to put that string 
in 80 characters or less, if possible. */
         set_option_context_summary (_("Graphical interface for editing other applications settings.") + 
"\n\n" + _("Uses the gsettings API of the glib library, and other ways."));
 
+        /* Translators: command-line header description, see 'dconf-editor --help' */
         set_option_context_description (_("Arguments description:") +
+/* FIXME: PATH can only be a folder path if describing a relocatable schema */
 "\n  PATH" +
+/* Translators: command-line argument description, see 'dconf-editor --help' */
 "\n    " + _("a folder path or a key path") +
 "\n    " + _("example: “/org/gnome/” or “/ca/desrt/dconf-editor/Demo/boolean”") +
 
 "\n  FIXED_SCHEMA" +
+/* Translators: command-line argument description, see 'dconf-editor --help' */
 "\n    " + _("the name of a schema with fixed path") +
 "\n    " + _("example: “ca.desrt.dconf-editor.Settings”") +
 
 "\n  RELOC_SCHEMA" +
-/* Translators: no need to put your translation of "relocatable" between quotation marks, that's done in 
English to highlight why the option is called "RELOC_SCHEMA" */
+/* Translators: command-line argument description, see 'dconf-editor --help'; no need to put your 
translation of "relocatable" between quotation marks, that's done in English to highlight why the option is 
called "RELOC_SCHEMA" */
 "\n    " + _("the name of a “relocatable” schema, without fixed path") +
 "\n    " + _("see list with the “--list-relocatable-schemas” option") +
 
 "\n  MAPPING" +
+/* Translators: command-line argument description, see 'dconf-editor --help' */
 "\n    " + _("the path where to map the relocatable schema") +
 "\n    " + _("example: “ca.desrt.dconf-editor.Bookmarks:/ca/desrt/dconf-editor/”") +
 
 "\n  KEY" +
+/* Translators: command-line argument description, see 'dconf-editor --help' */
 "\n    " + _("the name of a key from the schema") +
 "\n    " + _("example: “bookmarks”") +
 "\n");
@@ -258,29 +271,35 @@ private class ConfigurationEditor : Gtk.Application
 
             if (known_schemas_installed.length > 0)
             {
+                /* Translators: command-line text, if --list-relocatable-schemas is given; introduces a list 
of schemas ids */
                 stdout.printf (_("Known schemas installed:") + "\n");
                 foreach (string schema_id in known_schemas_installed)
                     stdout.printf (@"  $schema_id\n");
             }
             else
+                /* Translators: command-line text, if --list-relocatable-schemas is given */
                 stdout.printf (_("No known schemas installed.") + "\n");
             stdout.printf ("\n");
             if (known_schemas_skipped.length > 0)
             {
+                /* Translators: command-line text, if --list-relocatable-schemas is given; introduces a list 
of schemas ids */
                 stdout.printf (_("Known schemas skipped:") + "\n");
                 foreach (string schema_id in known_schemas_skipped)
                     stdout.printf (@"  $schema_id\n");
             }
             else
+                /* Translators: command-line text, if --list-relocatable-schemas is given */
                 stdout.printf (_("No known schemas skipped.") + "\n");
             stdout.printf ("\n");
             if (unknown_schemas.length > 0)
             {
+                /* Translators: command-line text, if --list-relocatable-schemas is given; introduces a list 
of schemas ids */
                 stdout.printf (_("Unknown schemas:") + "\n");
                 foreach (string schema_id in unknown_schemas)
                     stdout.printf (@"  $schema_id\n");
             }
             else
+                /* Translators: command-line text, if --list-relocatable-schemas is given */
                 stdout.printf (_("No unknown schemas.") + "\n");
             return Posix.EXIT_SUCCESS;
         }
@@ -291,7 +310,7 @@ private class ConfigurationEditor : Gtk.Application
     {
         base.startup ();
 
-        Environment.set_application_name (_("dconf Editor"));
+        Environment.set_application_name (PROGRAM_NAME);
         Gtk.Window.set_default_icon_name ("ca.desrt.dconf-editor");
 
         add_action_entries (action_entries, this);
@@ -409,6 +428,7 @@ private class ConfigurationEditor : Gtk.Application
         Gtk.Window? test_window = get_active_window ();
         if (test_window != null)
         {
+            /* Translators: command-line error message, when the user requests a specific path while there 
is already a window opened */
             commands.print (_("Only one window can be opened for now.\n"));
             ((!) test_window).present ();
             return Posix.EXIT_FAILURE;
@@ -428,6 +448,7 @@ private class ConfigurationEditor : Gtk.Application
 
         if (args.length > 2)
         {
+            /* Translators: command-line error message, try 'dconf-editor a b c d' */
             commands.print (_("Cannot understand: too many arguments.\n"));
             simple_activation ();
             return Posix.EXIT_FAILURE;
@@ -441,6 +462,7 @@ private class ConfigurationEditor : Gtk.Application
             Gtk.Window window = get_new_window (null, arg0, null);
             if (args.length == 2)
             {
+                /* Translators: command-line error message, try 'dconf-editor / a' */
                 commands.print (_("Cannot understand second argument in this context.\n"));
                 window.present ();
                 return Posix.EXIT_FAILURE;
@@ -461,6 +483,7 @@ private class ConfigurationEditor : Gtk.Application
                 return failure_space (commands);
             if ("/" in (!) key_name)
             {
+                /* Translators: command-line error message, try 'dconf-editor org.example /' */
                 commands.print (_("Cannot understand: slash character in second argument.\n"));
                 simple_activation ();
                 return Posix.EXIT_FAILURE;
@@ -475,6 +498,7 @@ private class ConfigurationEditor : Gtk.Application
             path = test_format [1];
             if (!((!) path).has_prefix ("/") || !((!) path).has_suffix ("/"))
             {
+                /* Translators: command-line error message, try 'dconf-editor org.example:a' */
                 commands.print (_("Schema path should start and end with a “/”.\n"));
                 simple_activation ();
                 return Posix.EXIT_FAILURE;
@@ -490,6 +514,7 @@ private class ConfigurationEditor : Gtk.Application
 
     private int failure_double_slash (ApplicationCommandLine commands)
     {
+        /* Translators: command-line error message, try 'dconf-editor //' */
         commands.print (_("Cannot understand: given path contains “//”.\n"));
         simple_activation ();
         return Posix.EXIT_FAILURE;
@@ -497,6 +522,7 @@ private class ConfigurationEditor : Gtk.Application
 
     private int failure_space (ApplicationCommandLine commands)
     {
+        /* Translators: command-line error message, try 'dconf-editor "org example" a' */
         commands.print (_("Cannot understand: space character in argument.\n"));
         simple_activation ();
         return Posix.EXIT_FAILURE;
@@ -522,6 +548,7 @@ private class ConfigurationEditor : Gtk.Application
     * * Copy action
     \*/
 
+    /* Translators: notification header, try ctrl-c while in the keys list */
     private Notification notification = new Notification (_("Copied to clipboard"));
     private uint notification_number = 0;
 
diff --git a/editor/dconf-headerbar.vala b/editor/dconf-headerbar.vala
index f0028de..7063ee1 100644
--- a/editor/dconf-headerbar.vala
+++ b/editor/dconf-headerbar.vala
@@ -53,6 +53,7 @@ private class DConfHeaderBar : BrowserHeaderBar, AdaptativeWidget
 
     internal static DConfHeaderBar (NightLightMonitor _night_light_monitor)
     {
+        /* Translators: usual menu entry of the hamburger menu */
         Object (night_light_monitor: _night_light_monitor, about_action_label: _("About Dconf Editor"));
     }
 
@@ -177,7 +178,9 @@ private class DConfHeaderBar : BrowserHeaderBar, AdaptativeWidget
 
         _this.set_default_widgets_states (/* show go_back_button      */ true,
                                           /* show ltr_left_separator  */ false,
-                                          /* title_label text or null */ _("Bookmarks"),
+                                          /* title_label text or null */
+                                          /* Translators: on really small windows, the bookmarks popover is 
replaced by an in-window view; here is the name of the view, displayed in the headerbar */
+                                                                         _("Bookmarks"),
                                           /* show info_button         */ false,
                                           /* show ltr_right_separator */ false,
                                           /* show quit_button_stack   */ true);
@@ -250,7 +253,10 @@ private class DConfHeaderBar : BrowserHeaderBar, AdaptativeWidget
     private static void construct_changes_pending_menu (out GLib.Menu changes_pending_menu)
     {
         changes_pending_menu = new GLib.Menu ();
+        /* Translators: when in delayed mode, on a small window, entry of the "three-dots menu" that appears 
when showing the pending changes list (if there is pending changes) */
         changes_pending_menu.append (_("Apply all"), "ui.apply-delayed-settings");
+
+        /* Translators: when in delayed mode, on a small window, entry of the "three-dots menu" that appears 
when showing the pending changes list (if there is pending changes) */
         changes_pending_menu.append (_("Dismiss all"), "ui.dismiss-delayed-settings");
         changes_pending_menu.freeze ();
     }
@@ -258,6 +264,7 @@ private class DConfHeaderBar : BrowserHeaderBar, AdaptativeWidget
     private static void construct_quit_delayed_mode_menu (out GLib.Menu quit_delayed_mode_menu)
     {
         quit_delayed_mode_menu = new GLib.Menu ();
+        /* Translators: when in delayed mode, on a small window, entry of the "three-dots menu" that appears 
when showing the pending changes list (if there is no pending changes) */
         quit_delayed_mode_menu.append (_("Quit mode"), "ui.dismiss-delayed-settings");
         quit_delayed_mode_menu.freeze ();
     }
@@ -343,14 +350,18 @@ private class DConfHeaderBar : BrowserHeaderBar, AdaptativeWidget
         GLib.Menu section = new GLib.Menu ();
 
         if (bookmarks_mode_on)
-            section.append (_("Hide bookmarks"), "ui.empty");    // button hidden in current design
+            /* Translators: hamburger menu entry on small windows (not used in current design) */
+            section.append (_("Hide bookmarks"), "ui.empty");
         else
         {
             if (is_in_bookmarks)
+                /* Translators: hamburger menu entry on small windows, to unbookmark the currently browsed 
path */
                 section.append (_("Unbookmark"), "headerbar.unbookmark-current");
             else
+                /* Translators: hamburger menu entry on small windows, to bookmark the currently browsed 
path */
                 section.append (_("Bookmark"), "headerbar.bookmark-current");
 
+            /* Translators: hamburger menu entry on small windows, to show the bookmarks list */
             section.append (_("Show bookmarks"), "ui.show-in-window-bookmarks");
         }
         section.freeze ();
@@ -364,11 +375,16 @@ private class DConfHeaderBar : BrowserHeaderBar, AdaptativeWidget
 
         GLib.Menu section = new GLib.Menu ();
         if (!delay_mode)
+            /* Translators: hamburger menu entry, to enter in a special mode called "delay mode" where 
changes are not applied until validation */
             section.append (_("Enter delay mode"), "ui.enter-delay-mode");
         if (is_folder_view)
         {
             Variant variant = new Variant.string (current_path);
+
+            /* Translators: hamburger menu entry that appears when browsing a folder path, to set to their 
default value all currently visible keys, not including keys in subfolders */
             section.append (_("Reset visible keys"), "ui.reset-visible(" + variant.print (false) + ")");
+
+            /* Translators: hamburger menu entry that appears when browsing a folder path, to set to their 
default value all currently visible keys, and all keys in subfolders */
             section.append (_("Reset view recursively"), "ui.reset-recursive(" + variant.print (false) + 
")");
         }
         section.freeze ();
@@ -409,7 +425,9 @@ private class DConfHeaderBar : BrowserHeaderBar, AdaptativeWidget
 
         real_this.set_default_widgets_states (/* show go_back_button      */ true,
                                               /* show ltr_left_separator  */ false,
-                                              /* title_label text or null */ _("Pending"),
+                                              /* title_label text or null */
+                                            /* Translators: on really small windows, the bottom bar that 
appears in "delay mode" or when there're pending changes is replaced by an in-window view; here is the name 
of the view, displayed in the headerbar */
+                                                                             _("Pending"),
                                               /* show info_button         */ false,
                                               /* show ltr_right_separator */ false,
                                               /* show quit_button_stack   */ false);
diff --git a/editor/dconf-model.vala b/editor/dconf-model.vala
index 4904d37..b07d5b7 100644
--- a/editor/dconf-model.vala
+++ b/editor/dconf-model.vala
@@ -941,6 +941,7 @@ private abstract class SettingsModelCore : Object
     {
         Variant? key_value = get_dconf_key_value_or_null (key_path, client);
         if (key_value == null)
+            /* Translators: text copied when the users request a copy while an erased key is selected; the 
%s is the key path */
             return _("%s (key erased)").printf (key_path);
         else
             return key_path + " " + ((!) key_value).print (false);
diff --git a/editor/dconf-window.vala b/editor/dconf-window.vala
index baa0423..397add6 100644
--- a/editor/dconf-window.vala
+++ b/editor/dconf-window.vala
@@ -113,7 +113,7 @@ private class DConfWindow : BrowserWindow
 
         Object (nta_headerbar               : (NightTimeAwareHeaderBar) _headerbar,
                 base_view                   : (BaseView) _main_view,
-                window_title                : _("dconf Editor"),
+                window_title                : ConfigurationEditor.PROGRAM_NAME,
                 specific_css_class_or_empty : "dconf-editor");
 
         model = _model;
@@ -185,6 +185,7 @@ private class DConfWindow : BrowserWindow
         {
             if (first_path == null)
             {
+                /* Translators: command-line startup warning, try 'dconf-editor 
ca.desrt.dconf-editor.Demo.Relocatable' */
                 warning (_("Schema is relocatable, a path is needed."));
                 if (restore_view)
                     first_path = settings_saved_view;
@@ -197,6 +198,7 @@ private class DConfWindow : BrowserWindow
                 RelocatableSchemasEnabledMappings enabled_mappings_flags = 
(RelocatableSchemasEnabledMappings) settings.get_flags ("relocatable-schemas-enabled-mappings");
                 if (!(RelocatableSchemasEnabledMappings.STARTUP in enabled_mappings_flags))
                 {
+                    /* Translators: command-line startup warning */
                     warning (_("Startup mappings are disabled."));
                     first_path = "/";
                 }
@@ -211,6 +213,7 @@ private class DConfWindow : BrowserWindow
                 assert_not_reached (); // TODO warning?
             else if (first_path != null && first_path != schema_path)
             {
+                /* Translators: command-line startup warning, try 'dconf-editor 
ca.desrt.dconf-editor.Settings:/org/gnome/dconf-editor/' */
                 warning (_("Schema is not installed on given path."));
                 if (restore_view)
                     first_path = settings_saved_view;
@@ -226,6 +229,7 @@ private class DConfWindow : BrowserWindow
         else
         {
             if ((!) schema != "")
+                /* Translators: command-line startup warning, try 'dconf-editor org.example.nothing'; the %s 
is the schema id */
                 warning (_("Unknown schema “%s”.").printf ((!) schema));
             if (restore_view)
                 first_path = settings_saved_view;
@@ -329,12 +333,18 @@ private class DConfWindow : BrowserWindow
 
     private void show_initial_warning ()
     {
+        /* Translators: initial "use at your own risk" dialog, the welcoming text */
         Gtk.MessageDialog dialog = new MessageDialog (this, DialogFlags.MODAL, MessageType.INFO, 
ButtonsType.NONE, _("Thanks for using Dconf Editor for editing your settings!"));
+
+        /* Translators: initial "use at your own risk" dialog, the warning text */
         dialog.format_secondary_text (_("Don’t forget that some options may break applications, so be 
careful."));
+
+        /* Translators: initial "use at your own risk" dialog, the button label */
         dialog.add_buttons (_("I’ll be careful."), ResponseType.ACCEPT);
 
         // TODO don't show box if the user explicitely said she wanted to see the dialog next time?
         Box box = (Box) dialog.get_message_area ();
+        /* Translators: initial "use at your own risk" dialog, the checkbox label */
         CheckButton checkbutton = new CheckButton.with_label (_("Show this dialog next time."));
         checkbutton.visible = true;
         checkbutton.active = true;
@@ -1041,6 +1051,7 @@ private class DConfWindow : BrowserWindow
     {
         string full_name = ((!) path_variant).get_string ();
 
+        /* Translators: notification text, when the requested folder has been removed; the %s is the folder 
path */
         show_notification (_("Folder “%s” is now empty.").printf (full_name));
     }
 
@@ -1051,16 +1062,19 @@ private class DConfWindow : BrowserWindow
         uint16 unused;  // GAction parameter type switch is a little touchy, see pathbar.vala
         ((!) path_variant).@get ("(sq)", out full_name, out unused);
 
+        /* Translators: notification text, when the requested key has been removed; the %s is the key path */
         show_notification (_("Key “%s” has been deleted.").printf (full_name));
     }
 
     private void cannot_find_key (string full_name)
     {
+        /* Translators: notification text at startup, use 'dconf-editor /org/example/test'; the %s is the 
key path */
         show_notification (_("Cannot find key “%s”.").printf (full_name));
     }
 
     private void cannot_find_folder (string full_name)
     {
+        /* Translators: notification text at startup, use 'dconf-editor /org/example/empty/'; the %s is the 
folder path */
         show_notification (_("There’s nothing in requested folder “%s”.").printf (full_name));
     }
 }
@@ -1068,16 +1082,23 @@ private class DConfWindow : BrowserWindow
 namespace AboutDialogInfos
 {
     // strings
-    internal const string program_name = _("dconf Editor");
+
+    internal const string program_name = ConfigurationEditor.PROGRAM_NAME;
     internal const string version = Config.VERSION;
+
+    /* Translators: about dialog text */
     internal const string comments = _("A graphical viewer and editor of applications’ internal settings.");
+
+    /* Translators: about dialog text */
     internal const string copyright = _("Copyright \xc2\xa9 2010-2014 – Canonical Ltd\nCopyright \xc2\xa9 
2015-2018 – Arnaud Bonatti\nCopyright \xc2\xa9 2017-2018 – Davi da Silva Böger");
-    /* Translators: This string should be replaced by a text crediting yourselves and your translation team, 
or should be left empty. Do not translate literally! */
+
+    /* Translators: about dialog text; this string should be replaced by a text crediting yourselves and 
your translation team, or should be left empty. Do not translate literally! */
     internal const string translator_credits = _("translator-credits");
 
     // various
     internal const string logo_icon_name = "ca.desrt.dconf-editor";
     internal const string website = "https://wiki.gnome.org/Apps/DconfEditor";;
+    /* Translators: about dialog text; label of the website link */
     internal const string website_label = _("Page on GNOME wiki");
     internal const string [] authors = { "Robert Ancell", "Arnaud Bonatti" };
     internal const License license_type = License.GPL_3_0; /* means "version 3.0 or later" */
diff --git a/editor/delayed-setting-view.vala b/editor/delayed-setting-view.vala
index 9421682..add6852 100644
--- a/editor/delayed-setting-view.vala
+++ b/editor/delayed-setting-view.vala
@@ -40,13 +40,25 @@ private class DelayedSettingView : OverlayedListRow
         if (cool_default_value == null)
         {
             // at row creation, key is never ghost
-            update_dconf_key_current_value (key_value);
-            update_dconf_key_planned_value (cool_planned_value);
+            _update_dconf_key_current_value (key_value,
+                                         ref key_value_label,
+                                         ref key_value_default);
+
+            _update_dconf_key_planned_value (cool_planned_value,
+                                         ref planned_value_label,
+                                         ref planned_value_default);
         }
         else
         {
-            update_gsettings_key_current_value (key_value, has_schema_and_is_default);
-            update_gsettings_key_planned_value (cool_planned_value, (!) cool_default_value);
+            _update_gsettings_key_current_value (key_value,
+                                                 has_schema_and_is_default,
+                                             ref key_value_label,
+                                             ref key_value_default);
+
+            _update_gsettings_key_planned_value (cool_planned_value,
+                                                 (!) cool_default_value,
+                                             ref planned_value_label,
+                                             ref planned_value_default);
         }
     }
 
@@ -57,69 +69,86 @@ private class DelayedSettingView : OverlayedListRow
     }
 
     /*\
-    * * "Updating" planned value
+    * * "updating" planned value
     \*/
 
-    private void update_gsettings_key_planned_value (string? cool_planned_value, string cool_default_value)
+    private static inline void _update_gsettings_key_planned_value (string? cool_planned_value,
+                                                                    string  cool_default_value,
+                                                                ref Label   planned_value_label,
+                                                                ref Label   planned_value_default)
     {
-        if (cool_planned_value == null)
-        {
-            planned_value_label.label = cool_default_value;
-            planned_value_default.label = _("Default value");
-            planned_value_default.visible = true;
-        }
-        else
-        {
-            planned_value_label.label = (!) cool_planned_value;
-            planned_value_default.visible = false;
-        }
+        bool is_default = cool_planned_value == null;
+        planned_value_label.label = is_default ? cool_default_value : (!) cool_planned_value;
+        update_value_default_label (is_default, ref planned_value_default);
     }
 
-    private void update_dconf_key_planned_value (string? cool_planned_value)
+    private static inline void _update_dconf_key_planned_value (string? cool_planned_value,
+                                                            ref Label   planned_value_label,
+                                                            ref Label   planned_value_default)
     {
         if (cool_planned_value == null)
-        {
-            planned_value_label.visible = false;
-            planned_value_default.label = _("Key erased.");
-            planned_value_default.visible = true;
-        }
+            update_labels_dconf_key_erased (ref planned_value_label, ref planned_value_default);
         else
-        {
-            planned_value_label.label = (!) cool_planned_value;
-            planned_value_label.visible = true;
-            planned_value_default.visible = false;
-        }
+            update_labels_dconf_key_values ((!) cool_planned_value,
+                                            ref planned_value_label, ref planned_value_default);
     }
 
     /*\
-    * * Updating current value
+    * * updating current value
     \*/
 
     internal void update_gsettings_key_current_value (Variant key_value, bool is_default)
+    {
+        _update_gsettings_key_current_value (key_value, is_default, ref key_value_label, ref 
key_value_default);
+    }
+    private static void _update_gsettings_key_current_value (Variant key_value,
+                                                             bool    is_default,
+                                                         ref Label   key_value_label,
+                                                         ref Label   key_value_default)
     {
         key_value_label.label = Key.cool_text_value_from_variant (key_value);
-        if (is_default)
-        {
-            key_value_default.label = _("Default value");
-            key_value_default.visible = true;
-        }
-        else
-            key_value_default.visible = false;
+        update_value_default_label (is_default, ref key_value_default);
     }
 
     internal void update_dconf_key_current_value (Variant? key_value_or_null)
+    {
+        _update_dconf_key_current_value (key_value_or_null, ref key_value_label, ref key_value_default);
+    }
+    private static void _update_dconf_key_current_value (Variant? key_value_or_null,
+                                                     ref Label    key_value_label,
+                                                     ref Label    key_value_default)
     {
         if (key_value_or_null == null)
-        {
-            key_value_label.visible = false;
-            key_value_default.label = _("Key erased");
-            key_value_default.visible = true;
-        }
+            update_labels_dconf_key_erased (ref key_value_label, ref key_value_default);
         else
-        {
-            key_value_default.visible = false;
-            key_value_label.label = Key.cool_text_value_from_variant ((!) key_value_or_null);
-            key_value_label.visible = true;
-        }
+            update_labels_dconf_key_values (Key.cool_text_value_from_variant ((!) key_value_or_null),
+                                            ref key_value_label, ref key_value_default);
+    }
+
+    /*\
+    * * common utilities
+    \*/
+
+    private static void update_labels_dconf_key_erased (ref Label value_label, ref Label value_default)
+    {
+        value_label.visible = false;
+        /* Translators: displayed in the list of pending changes (could be an in-window panel, or in the 
popover of the bottom bar); for dconf keys */
+        value_default.label = _("Key erased");
+        value_default.visible = true;
+    }
+
+    private static void update_labels_dconf_key_values (string key_value, ref Label value_label, ref Label 
value_default)
+    {
+        value_default.visible = false;
+        value_label.label = key_value;  // TODO move Key.cool_text_value_from_variant here?
+        value_label.visible = true;
+    }
+
+    private static void update_value_default_label (bool is_default, ref Label value_default)
+    {
+        if (is_default)
+            /* Translators: displayed in the list of pending changes (could be an in-window panel, or in the 
popover of the bottom bar); for gsettings keys */
+            value_default.label = _("Default value");
+        value_default.visible = is_default;
     }
 }
diff --git a/editor/key-editor-child.vala b/editor/key-editor-child.vala
index 8a5b8fa..c45a817 100644
--- a/editor/key-editor-child.vala
+++ b/editor/key-editor-child.vala
@@ -26,8 +26,12 @@ private interface KeyEditorChild : Widget
 
     internal abstract void reload (Variant gvariant);
 
+    /* Translators: tooltip text of the entry's icon when editing the value of a double or a 64-bit (signed 
or unsigned) key, if the key only allows a range of values and the written value is out of range */
     protected const string out_of_range_text = _("Given value is out of range.");
 
+    /* Translators: tooltip text of the entry's icon (if using an entry) or text displayed under the text 
view (if using a text view) when editing the value of a key, if the written text cannot be parsed regarding 
to the key's value type */
+    protected const string invalid_value_text = _("This value is invalid for the key type.");
+
     /*\
     * * for entries and textviews
     \*/
@@ -372,6 +376,7 @@ private class KeyEditorChildNumberDouble : KeyEditorChildNumberCustom
         if (range_error)
             set_icon_tooltip_text (EntryIconPosition.SECONDARY, out_of_range_text);
         else
+            /* Translators: tooltip text of the entry's icon when editing the value of a double key, if the 
written value cannot be parsed */
             set_icon_tooltip_text (EntryIconPosition.SECONDARY, _("Failed to parse as double."));
     }
 
@@ -440,6 +445,7 @@ private class KeyEditorChildNumberInt64 : KeyEditorChildNumberCustom
         if (range_error)
             set_icon_tooltip_text (EntryIconPosition.SECONDARY, out_of_range_text);
         else
+            /* Translators: tooltip text of the entry's icon when editing the value of a signed 64-bit key, 
if the written value cannot be parsed */
             set_icon_tooltip_text (EntryIconPosition.SECONDARY, _("Failed to parse as 64-bit integer."));
     }
 
@@ -508,6 +514,7 @@ private class KeyEditorChildNumberUint64 : KeyEditorChildNumberCustom
         if (range_error)
             set_icon_tooltip_text (EntryIconPosition.SECONDARY, out_of_range_text);
         else
+            /* Translators: tooltip text of the entry's icon when editing the value of an unsigned 64-bit 
key, if the written value cannot be parsed */
             set_icon_tooltip_text (EntryIconPosition.SECONDARY, _("Failed to parse as unsigned 64-bit 
integer."));
     }
 
@@ -790,7 +797,7 @@ private class KeyEditorChildArray : Grid, KeyEditorChild
         error_icon.visible = true;
         error_bar.pack_start (error_icon);
 
-        Label error_label = new Label (_("This value is invalid for the key type."));
+        Label error_label = new Label (invalid_value_text);
         error_label.visible = true;
         error_label.wrap = true;
         error_bar.pack_start (error_label);
@@ -885,7 +892,7 @@ private class KeyEditorChildDefault : Entry, KeyEditorChild
         this.visible = true;
         this.hexpand = true;
         this.secondary_icon_activatable = false;
-        this.set_icon_tooltip_text (EntryIconPosition.SECONDARY, _("This value is invalid for the key 
type."));
+        this.set_icon_tooltip_text (EntryIconPosition.SECONDARY, invalid_value_text);
 
         this.is_string = type_string == "s" || type_string == "o" || type_string == "g";
         this.text = is_string ? initial_value.get_string () : initial_value.print (false);
diff --git a/editor/key-list-box-row.vala b/editor/key-list-box-row.vala
index 6f0256b..83f6132 100644
--- a/editor/key-list-box-row.vala
+++ b/editor/key-list-box-row.vala
@@ -114,6 +114,7 @@ private class ReturnListBoxRow : ClickableListBoxRow
     internal ReturnListBoxRow (string _full_name, uint16 _context_id)
     {
         Object (full_name: _full_name, context_id: _context_id, search_result_mode: true);
+        /* Translators: first item of the keys list displayed during a search, the %s is a folder path 
usually */
         folder_name_label.set_text (_("Go to “%s”").printf (_full_name));
     }
 }
@@ -140,6 +141,7 @@ private class ConfigListBoxRow : ClickableListBoxRow
     internal ConfigListBoxRow (string name, string path)
     {
         Object (full_name: path, context_id: ModelUtils.folder_context_id, search_result_mode: false);
+        /* Translators: first item of the keys list displayed during browsing, the %s is the current folder 
name */
         folder_name_label.set_text (_("Show “%s” folder properties").printf (name));
     }
 }
diff --git a/editor/model-utils.vala b/editor/model-utils.vala
index ba6776d..944240d 100644
--- a/editor/model-utils.vala
+++ b/editor/model-utils.vala
@@ -226,7 +226,8 @@ namespace ModelUtils
 
     private static string key_to_untranslated_description (string type, bool capitalized)
     {
-        switch (type)   // TODO byte, bytestring, bytestring array
+        // FIXME D-Bus things
+        switch (type)   // TODO bytestring, bytestring array, better for byte, dict-entry?, dictionary?, 
vardict?
         {
             case "b":       return capitalized ? "Boolean"      : "boolean";
             case "s":       return capitalized ? "String"       : "string";
diff --git a/editor/modifications-list.vala b/editor/modifications-list.vala
index 2bb0413..d647384 100644
--- a/editor/modifications-list.vala
+++ b/editor/modifications-list.vala
@@ -24,11 +24,12 @@ private class ModificationsList : OverlayedList
         get_style_context ().add_class ("delayed-list");
 
         placeholder_icon = "document-open-recent-symbolic";
+        /* Translators: placeholder text of the list of pending modifications, displayed when the user is in 
delayed mode but has no pending modifications */
         placeholder_text = _("Delayed mode is on\nbut\nno pending changes");
         add_placeholder ();
 
-        first_mode_name = _("Rule all");
-        second_mode_name = _("Select");
+        /* Translators: labels of the two buttons of the list of pending modifications, to switch between 
applying changes to the whole list and selecting some items for more advanced things (not displayed 
currently, but this change is wanted) */
+        first_mode_name = _("Rule all"); second_mode_name = _("Select");
 
         main_list_box.set_header_func (delayed_setting_row_update_header);
     }
diff --git a/editor/modifications-revealer.vala b/editor/modifications-revealer.vala
index 752800e..2dd749a 100644
--- a/editor/modifications-revealer.vala
+++ b/editor/modifications-revealer.vala
@@ -132,7 +132,9 @@ private class ModificationsRevealer : Revealer, AdaptativeWidget
     private void warn_if_no_planned_changes ()
     {
         if (modifications_handler.dconf_changes_count == 0 && modifications_handler.gsettings_changes_count 
== 0)
+            /* Translators: displayed in the bottom bar in normal sized windows, when the user tries to 
reset keys from/for a folder that has nothing to reset */
             label.set_text (_("Nothing to reset."));
+            // FIXME appears twice
     }
 
     /*\
@@ -293,6 +295,7 @@ private class ModificationsRevealer : Revealer, AdaptativeWidget
             if (total_changes_count == 0)
             {
                 apply_button.sensitive = false;
+                /* Translators: displayed in the bottom bar in normal sized windows, when the user edits a 
key and enters in the entry or text view a value that cannot be parsed to the correct data type */
                 label.set_text (_("The value is invalid."));
             }
             else if (total_changes_count != 1)
@@ -300,11 +303,13 @@ private class ModificationsRevealer : Revealer, AdaptativeWidget
             else if (modifications_handler.behaviour == Behaviour.ALWAYS_CONFIRM_EXPLICIT)
             {
                 apply_button.sensitive = true;
+                /* Translators: displayed in the bottom bar in normal sized windows, when the user edits a 
key (with the "always confirm explicit" behaviour) */
                 label.set_text (_("The change will be dismissed if you quit this view without applying."));
             }
             else if (modifications_handler.behaviour == Behaviour.ALWAYS_CONFIRM_IMPLICIT || 
modifications_handler.behaviour == Behaviour.SAFE)
             {
                 apply_button.sensitive = true;
+                /* Translators: displayed in the bottom bar in normal sized windows, when the user edits a 
key (with default "always confirm implicit" behaviour notably) */
                 label.set_text (_("The change will be applied on such request or if you quit this view."));
             }
             else
@@ -314,7 +319,9 @@ private class ModificationsRevealer : Revealer, AdaptativeWidget
         else // if (mode == Mode.DELAYED)
         {
             if (total_changes_count == 0)
+                /* Translators: displayed in the bottom bar in normal sized windows, when the user tries to 
reset keys from/for a folder that has nothing to reset */
                 label.set_text (_("Nothing to reset."));
+                // FIXME appears twice
             apply_button.sensitive = total_changes_count > 0;
             label.set_text (get_text (modifications_handler.dconf_changes_count, 
modifications_handler.gsettings_changes_count));
             set_reveal_child (true);
@@ -326,20 +333,28 @@ private class ModificationsRevealer : Revealer, AdaptativeWidget
         if (dconf == 0)
         {
             if (gsettings == 0)
+            /* Translators: Text displayed in the bottom bar; displayed if there are no pending changes, to 
document what is the "delay mode". */
                 return _("Changes will be delayed until you request it.");
-            /* Translators: "gsettings" is a technical term, notably a shell command, so you probably should 
not translate it. */
+
+            /* Translators: Text displayed in the bottom bar; "gsettings" is a technical term, notably a 
shell command, so you probably should not translate it. */
             return ngettext ("One gsettings operation delayed.", "%u gsettings operations delayed.", 
gsettings).printf (gsettings);
         }
         if (gsettings == 0)
-            /* Translators: "dconf" is a technical term, notably a shell command, so you probably should not 
translate it. */
+            /* Translators: Text displayed in the bottom bar; "dconf" is a technical term, notably a shell 
command, so you probably should not translate it. */
             return ngettext ("One dconf operation delayed.", "%u dconf operations delayed.", dconf).printf 
(dconf);
-            /* Translators: Beginning of a sentence like "One gsettings operation and 2 dconf operations 
delayed.", you could duplicate "delayed" if needed, as it refers to both the gsettings and dconf operations 
(at least one of each).
-                            Also, "gsettings" is a technical term, notably a shell command, so you probably 
should not translate it. */
-        return _("%s%s").printf (ngettext ("One gsettings operation", "%u gsettings operations", 
gsettings).printf (gsettings),
-            /* Translators: Second part (and end) of a sentence like "One gsettings operation and 2 dconf 
operations delayed.", so:
-                             * the space before the "and" is probably wanted, and
-                             * the "delayed" refers to both the gsettings and dconf operations (at least one 
of each).
-                            Also, "dconf" is a technical term, notably a shell command, so you probably 
should not translate it. */
-                                 ngettext (" and one dconf operation delayed.", " and %u dconf operations 
delayed.", dconf).printf (dconf));
+
+         /* Translators: Text displayed in the bottom bar. Hacky: I split a sentence like "One gsettings 
operation and 2 dconf operations delayed." in two parts, before the "and"; there is at least one gsettings 
operation and one dconf operation. So, you can either keep "%s%s" like that, and have the second part of the 
translation starting with a space (if that makes sense in your language), or you might use "%s %s" here. */
+        return _("%s%s").printf (
+
+         /* Translators: Text displayed in the bottom bar; beginning of a sentence like "One gsettings 
operation and 2 dconf operations delayed.", you could duplicate "delayed" if needed, as it refers to both the 
gsettings and dconf operations (at least one of each).
+            Also, "gsettings" is a technical term, notably a shell command, so you probably should not 
translate it. */
+            ngettext ("One gsettings operation", "%u gsettings operations", gsettings).printf (gsettings),
+
+         /* Translators: Text displayed in the bottom bar; second part (and end) of a sentence like "One 
gsettings operation and 2 dconf operations delayed.", so:
+             * the space before the "and" is probably wanted, if you keeped the "%s%s" translation as-is, and
+             * the "delayed" refers to both the gsettings and dconf operations (at least one of each).
+            Also, "dconf" is a technical term, notably a shell command, so you probably should not translate 
it. */
+            ngettext (" and one dconf operation delayed.", " and %u dconf operations delayed.", 
dconf).printf (dconf)
+        );
     }
 }
diff --git a/editor/registry-info.vala b/editor/registry-info.vala
index 9eead2c..1e752da 100644
--- a/editor/registry-info.vala
+++ b/editor/registry-info.vala
@@ -81,6 +81,7 @@ private class RegistryInfo : Grid, BrowsableView
             string folder_name;
             if (!properties.lookup (PropertyQuery.KEY_NAME,             "s",    out folder_name))
                 assert_not_reached ();
+            /* Translators: field description when displaying folder properties; name of the folder */
             add_row_from_label (_("Name"),                                          folder_name);
 
             conflicting_key_warning_revealer.set_reveal_child (false);
@@ -139,16 +140,21 @@ private class RegistryInfo : Grid, BrowsableView
 
         if (!properties.lookup (PropertyQuery.FIXED_SCHEMA,             "b",    out tmp_bool))
             tmp_bool = false;
+        /* Translators: field description when displaying key properties; the key can be defined by a schema 
or by the dconf engine */
         add_row_from_label (_("Defined by"),                                        get_defined_by 
(has_schema, tmp_bool));
 
         if (properties.lookup (PropertyQuery.SCHEMA_ID,                 "s",    out tmp_string))
+            /* Translators: field description when displaying key properties; the schema id (if the key is 
defined by a schema) */
             add_row_from_label (_("Schema"),                                        tmp_string);
 
         add_separator ();
         if (properties.lookup (PropertyQuery.SUMMARY,                   "s",    out tmp_string))
         {
             tmp_bool = tmp_string == "";
+            /* Translators: field description when displaying key properties; a summary describing the key 
use*/
             add_row_from_label (_("Summary"),
+
+            /* Translators: field content when displaying key properties; if the key does not have a summary 
describing its use*/
                                 tmp_bool ?                                          _("No summary provided")
                                          :                                          tmp_string,
                                 tmp_bool);
@@ -156,12 +162,15 @@ private class RegistryInfo : Grid, BrowsableView
         if (properties.lookup (PropertyQuery.DESCRIPTION,               "s",    out tmp_string))
         {
             tmp_bool = tmp_string == "";
+            /* Translators: field description when displaying key properties; a description describing 
deeply the key use*/
             add_row_from_label (_("Description"),
+
+            /* Translators: field content when displaying key properties; if the key does not have a 
description describing deeply its use*/
                                 tmp_bool ?                                          _("No description 
provided")
                                          :                                          tmp_string,
                                 tmp_bool);
         }
-        /* Translators: as in datatype (integer, boolean, string, etc.) */
+        /* Translators: field description when displaying key properties; the datatype of the key (integer, 
boolean, string, etc.) */
         add_row_from_label (_("Type"),                                              
ModelUtils.key_to_description (type_code, true));
 
         bool range_type_is_range = false;
@@ -174,7 +183,11 @@ private class RegistryInfo : Grid, BrowsableView
              || type_code == "x" || type_code == "t")   // signed and unsigned 64 bits
             {
                 range_type_is_range = ((RangeType) range_type) == RangeType.RANGE;
-                add_row_from_label (_("Forced range"),                              range_type_is_range ? 
_("Yes") : _("No"));
+                /* Translators: field description when displaying key properties; if the numeral key has a 
minimum or a maximum set */
+                add_row_from_label (_("Forced range"),
+
+                /* Translators: field content when displaying key properties; "yes" if the key has a range 
set, "no" if not */
+                                                                                    range_type_is_range ? 
_("Yes") : _("No"));
             }
         }
 
@@ -182,8 +195,10 @@ private class RegistryInfo : Grid, BrowsableView
         string tmp = "";
         tmp_string = "";
         if (properties.lookup (PropertyQuery.MINIMUM,                   "s",    out tmp_string))
+            /* Translators: field description when displaying key properties; the minimum value a numeral 
key can take */
             add_row_from_label (_("Minimum"),                                       tmp_string);
         if (properties.lookup (PropertyQuery.MAXIMUM,                   "s",    out tmp       ))
+            /* Translators: field description when displaying key properties; the maximum value a numeral 
key can take */
             add_row_from_label (_("Maximum"),                                       tmp       );
         if (tmp != "" && tmp == tmp_string)
             minimum_is_maximum = true;
@@ -195,10 +210,14 @@ private class RegistryInfo : Grid, BrowsableView
             assert_not_reached ();
 
         if (properties.lookup (PropertyQuery.DEFAULT_VALUE,             "s",    out tmp_string))
+            /* Translators: field description when displaying key properties; the default value of the key 
(defined if it has a schema) */
             add_row_from_label (_("Default"),                                       tmp_string);
+        else if (has_schema)
+            assert_not_reached ();
 
         if ( /* has_schema && */ key_conflict == KeyConflict.HARD)
         {
+            /* Translators: field content when displaying key properties; displayed instead of the value, in 
case of conflicting keys */
             current_value_label = new Label (_("There are conflicting definitions of this key, getting value 
would be either problematic or meaningless."));
             current_value_label.get_style_context ().add_class ("italic-label");
         }
@@ -219,6 +238,7 @@ private class RegistryInfo : Grid, BrowsableView
         current_value_label.wrap_mode = Pango.WrapMode.WORD_CHAR;
         current_value_label.hexpand = true;
         current_value_label.show ();
+        /* Translators: field description when displaying key properties; the current value of the key */
         add_row_from_widget (_("Current value"), current_value_label);
 
         add_separator ();
@@ -323,6 +343,7 @@ private class RegistryInfo : Grid, BrowsableView
             custom_value_switch.halign = Align.START;
             custom_value_switch.hexpand = true;
             custom_value_switch.show ();
+            /* Translators: field description when displaying key properties; the field content is a switch 
widget that allows using or not the default value of the key, as provided by its schema */
             add_switch_row (_("Use default value"), custom_value_switch);
 
             custom_value_switch.bind_property ("active", key_editor_child, "sensitive", 
BindingFlags.SYNC_CREATE | BindingFlags.INVERT_BOOLEAN);
@@ -341,6 +362,7 @@ private class RegistryInfo : Grid, BrowsableView
 
         ulong child_activated_handler = key_editor_child.child_activated.connect (() => 
modifications_handler.apply_delayed_settings ());  // TODO "only" used for string-based and spin widgets
         revealer_reload_2_handler = modifications_handler.leave_delay_mode.connect ((_modifications_handler) 
=> on_revealer_reload_2 (_modifications_handler, key_editor_child, value_has_changed_handler, full_name, 
context_id, has_schema));
+        /* Translators: field description when displaying key properties; the field content is a widget that 
allows setting the value of the key (depending of its type, an entry, a switch, etc.) */
         add_row_from_widget (_("Custom value"), key_editor_child, type_code, minimum_is_maximum);
 
         key_editor_child.destroy.connect (() => {
@@ -385,6 +407,7 @@ private class RegistryInfo : Grid, BrowsableView
     private static string get_current_value_text (Variant? key_value)
     {
         if (key_value == null)
+            /* Translators: field content when displaying key properties; the field description is "Current 
value", and as the default value of the key is written near, there's just this text displayed if the key uses 
its default value */
             return _("Default value");
         return Key.cool_text_value_from_variant ((!) key_value);
     }
@@ -529,24 +552,27 @@ private class RegistryInfo : Grid, BrowsableView
         {
             if (minimum_is_maximum)
                 return null;
+            /* Translators: annotation under the entry that allows customizing a key, when displaying key 
properties; for keys of type "double" */
             return warning_label (_("Use a dot as decimal mark and no thousands separator. You can use the 
X.Ye+Z notation."));
         }
 
         if ("v" in type)
+            /* Translators: annotation under the entry that allows customizing a key, when displaying key 
properties; for keys of type "variant" (or of a type composed with a variant) */
             return warning_label (_("Variants content should be surrounded by XML brackets (‘<’ and ‘>’). 
See https://developer.gnome.org/glib/stable/gvariant-text.html for complete documentation."));
 
         /* the "<flags>" special type is not concerned but has an 's' and a 'g' in it; "s", "g" and "o" 
types have a specific UI */
         if (type != "<flags>" && ((type != "s" && "s" in type) || (type != "g" && "g" in type)) || (type != 
"o" && "o" in type))
         {
             if ("m" in type)
-                /* Translators: neither the "nothing" keyword nor the "m" type should be translated; a 
"maybe type" is a type of variant that is nullable. */
+                /* Translators: annotation under the entry that allows customizing a key, when displaying 
key properties; for keys of a type composed with a "maybe type" and with a string type (or similar); neither 
the "nothing" keyword nor the "m" type should be translated; a "maybe type" is a type of variant that is 
nullable. */
                 return warning_label (_("Use the keyword “nothing” to set a maybe type (beginning with “m”) 
to its empty value. Strings, signatures and object paths should be surrounded by quotation marks."));
             else
+                /* Translators: annotation under the entry that allows customizing a key, when displaying 
key properties; for keys of a type composed with a string type (or similar) */
                 return warning_label (_("Strings, signatures and object paths should be surrounded by 
quotation marks."));
         }
         /* the "mb" type has a specific UI; the "<enum>" special type is not concerned but has an 'm' in it 
*/
         else if (type != "mb" && type != "<enum>" && "m" in type)
-            /* Translators: neither the "nothing" keyword nor the "m" type should be translated; a "maybe 
type" is a type of variant that is nullable. */
+            /* Translators: annotation under the entry that allows customizing a key, when displaying key 
properties; for keys of a type composed with a "maybe type"; neither the "nothing" keyword nor the "m" type 
should be translated; a "maybe type" is a type of variant that is nullable. */
             return warning_label (_("Use the keyword “nothing” to set a maybe type (beginning with “m”) to 
its empty value."));
         return null;
     }
@@ -585,6 +611,7 @@ private class RegistryInfo : Grid, BrowsableView
         if (key_value_or_null == null)
         {
             current_value_label.get_style_context ().add_class ("italic-label");
+            /* Translators: field content when displaying key properties; the field description is "Current 
value", this text displayed if the key, not defined by a schema, has been erased (and so has no value 
anymore) */
             current_value_label.set_text (_("Key erased."));
         }
         else
diff --git a/editor/registry-list.vala b/editor/registry-list.vala
index 644f04c..79a967a 100644
--- a/editor/registry-list.vala
+++ b/editor/registry-list.vala
@@ -644,19 +644,22 @@ private abstract class RegistryList : Grid, BrowsableView, AdaptativeWidget
 
     private static void get_type_or_value (string type_string, string key_value_text, out string 
key_type_label, out bool key_type_italic)
     {
-        if (type_string == "b" || type_string == "mb" || type_string == "y" || type_string == "h" || 
type_string == "g" || type_string == "d" || type_string == "n" || type_string == "q" || type_string == "i" || 
type_string == "u")
+        // all these types have a value garantied to be displayable in a limited (and not too long) number 
of chars; there is also the empty tuple, but "type “()”" looks even better than "empty tuple"
+        if (type_string == "b" || type_string == "mb" || type_string == "y" || type_string == "h" || 
type_string == "d" || type_string == "n" || type_string == "q" || type_string == "i" || type_string == "u")
         {
             key_type_label = key_value_text;
             key_type_italic = false;
         }
         else
         {
-            key_type_label = ModelUtils.key_to_description (type_string, false);
+            string label = ModelUtils.key_to_description (type_string, false);
             if ((type_string != "<enum>")
              && (type_string != "<flags>")
-             && (key_type_label == type_string || key_type_label.length > 12))
+             && (label == type_string || label.length > 12))
                 /* Translators: displayed on small windows; indicates the data type of the key (the %s is 
the variant type code) */
-                key_type_label = _("type “%s”").printf (type_string);
+                label = _("type “%s”").printf (type_string);
+
+            key_type_label = label;
             key_type_italic = true;
         }
     }
diff --git a/editor/registry-search.vala b/editor/registry-search.vala
index a223a66..a5a2f5d 100644
--- a/editor/registry-search.vala
+++ b/editor/registry-search.vala
@@ -22,6 +22,7 @@ private class RegistrySearch : RegistryList
     private string [] bookmarks;
     private SortingOptions sorting_options;
 
+    /* Translators: placeholder text of the search list when there's no search results (not used in current 
design) */
     [CCode (notify = false)] public override string placeholder_label { protected get { return _("No 
matches"); }}
 
     construct
diff --git a/editor/registry-view.vala b/editor/registry-view.vala
index e481b27..31cf1cd 100644
--- a/editor/registry-view.vala
+++ b/editor/registry-view.vala
@@ -19,6 +19,7 @@ using Gtk;
 
 private class RegistryView : RegistryList
 {
+    /* Translators: placeholder text of the keys list when there's nothing to display in a path (not used in 
current design) */
     [CCode (notify = false)] public override string placeholder_label { protected get { return _("No keys in 
this path"); }}
 
     construct
diff --git a/editor/setting-object.vala b/editor/setting-object.vala
index 4dab657..c2d7bc0 100644
--- a/editor/setting-object.vala
+++ b/editor/setting-object.vala
@@ -169,18 +169,27 @@ private abstract class Key : SettingObject
         if (capitalized)
         {
             if (nullable_boolean == true)
+                /* Translators: the boolean "true" value; capitalized (if that makes sense) */
                 return _("True");
+
             if (nullable_boolean == false)
+                /* Translators: the boolean "false" value; capitalized (if that makes sense) */
                 return _("False");
+
+            /* Translators: "nothing" value of a nullable key; capitalized (if that makes sense); "nothing" 
here is a keyword, but you do not need to show it in your translation, that will be done with the 
non-capitalized version of the word */
             return _("Nothing");
         }
         else
         {
             if (nullable_boolean == true)
+                /* Translators: the boolean "true" value; non capitalized (if that makes sense) */
                 return _("true");
+
             if (nullable_boolean == false)
+                /* Translators: the boolean "false" value; non capitalized (if that makes sense) */
                 return _("false");
-            /* Translators: "nothing" here is a keyword that should appear for consistence; please translate 
as "yourtranslation (nothing)" */
+
+            /* Translators: "nothing" value of a nullable key; non capitalized (if that makes sense); 
"nothing" here is a keyword that should appear for consistence, so please translate as "yourtranslation 
(nothing)" */
             return _("nothing");
         }
     }
@@ -390,8 +399,13 @@ private class GSettingsKey : Key
 private string get_defined_by (bool has_schema, bool fixed_schema = false)
 {
     if (fixed_schema)
+        /* Translators: field content when displaying key properties; the field description is "Defined by", 
this text is displayed if the key is defined by a schema, and if this schema has a fixed path (it is not 
relocatable) */
         return _("Schema with path");
+
     if (has_schema)
+        /* Translators: field content when displaying key properties; the field description is "Defined by", 
this text is displayed if the key is defined by a schema, and if this schema is relocatable (it has not a 
fixed path) */
         return _("Relocatable schema");
+
+    /* Translators: field content when displaying key properties; the field description is "Defined by", 
this text is displayed if the key is not defined by a schema (the value is given by dconf but cannot be used 
by the GSettings functions) */
     return _("DConf backend");
 }


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