Compare commits

...

25 commits
0.11.1 ... main

Author SHA1 Message Date
Philip Withnall 7c615a46b9 Merge branch 'hide-private-structs' into 'main'
build: Hide private structs from generated GIR files

See merge request pwithnall/malcontent!163
2023-12-20 11:04:46 +00:00
Philip Withnall 8ca426f631 build: Hide private structs from generated GIR files
Otherwise the fields in `MctAppFilter` become visible to introspected
languages, which was not the intention.

Spotted in
https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/65.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2023-12-20 11:02:43 +00:00
Philip Withnall de7a645548 Merge branch 'sathieu-main-patch-63945' into 'main'
Add AppInfo support to malcontent-client check-app-filter

See merge request pwithnall/malcontent!157
2023-12-07 10:10:53 +00:00
Mathieu Parent cdaa32ae4e Add AppInfo support to malcontent-client check-app-filter 2023-12-07 10:10:53 +00:00
Philip Withnall a7e6f0e973 Merge branch 'fix-appdata' into 'main'
data: Update appdata

See merge request pwithnall/malcontent!162
2023-11-21 09:42:49 +00:00
Sabri Ünal 6c561cd93c data: Update appdata
- Update the donation URL.
- Add the cvs-browser URL.

These URLs are visible on Flathub and GNOME Software.

For more information: https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-url"
2023-11-20 04:18:08 +03:00
Philip Withnall 4508c2ca1d Merge branch 'l10n-sv' into 'main'
Update Swedish translation

See merge request pwithnall/malcontent!161
2023-11-13 12:04:01 +00:00
Anders Jonsson 8d7b560795 Update Swedish translation 2023-11-11 14:11:07 +01:00
Philip Withnall 5bb3c24b08 Merge branch 'main' into 'main'
update ru.po

See merge request pwithnall/malcontent!160
2023-11-01 15:08:46 +00:00
Ser82-png 086b0ede78 update ru.po 2023-10-29 01:04:15 +10:00
Philip Withnall b3e6666fe3 Merge branch 'cs-update' into 'main'
Update Czech translation

See merge request pwithnall/malcontent!159
2023-10-24 10:04:15 +00:00
AsciiWolf c11596e3da Update Czech translation 2023-10-23 23:04:48 +02:00
Philip Withnall c764487abf Merge branch '53-carousel-focus' into 'main'
ui: Add explicit focus outline to carousel items

Closes #53

See merge request pwithnall/malcontent!156
2023-10-13 13:58:45 +00:00
Philip Withnall 51bd3a668d ui: Add explicit focus outline to carousel items
Since they’re custom widgets, they need custom CSS to define a focus
outline, and can’t rely on GTK providing it for them.

Ideally we’d be using the same `$focus_border_color` as GTK does, and
adjusting it for dark and high-contrast themes, but GTK doesn’t export
that colour so we have to work around it.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>

Fixes: #53
2023-10-13 14:51:25 +01:00
Philip Withnall cbad81565e Merge branch '31-app-list-search' into 'main'
restrict-applications-dialog: Add support for searching the app list

Closes #31

See merge request pwithnall/malcontent!155
2023-10-13 12:31:20 +00:00
Philip Withnall 73d8343a3e restrict-applications-dialog: Add support for searching the app list
This is a type-ahead search which filters the app list by app name.

It’s always visible because search is a very obvious interaction the
user might want to do to find an app in the app list. That’s why
`GtkSearchBar` is not being used here.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>

Fixes: #31
2023-10-13 13:24:37 +01:00
Philip Withnall 69253a2b2c build: Post-release version bump
We’re about to add new API, so bump the version number in preparation.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2023-10-13 11:34:29 +01:00
Philip Withnall 4a1cc8a830 user-controls: Fix a minor string leak
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2023-10-13 11:32:13 +01:00
Philip Withnall a58c660dca restrict-applications-selector: Add more spacing around placeholder label
This makes it look nicer.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2023-10-13 11:25:48 +01:00
Philip Withnall 13c8a88e17 restrict-applications-selector: Fix display of placeholder
The `GtkListBox` already correctly works out when to show/hide the
placeholder; we don’t need to do that ourselves. It actually breaks
things if we hide the placeholder, since `GtkListBox` then doesn’t
re-show it.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2023-10-13 11:24:50 +01:00
Philip Withnall 537d4bf791 restrict-applications-selector: Move GListStore to UI file
This simplifies the code a little and will allow binding to it in an
upcoming commit.

It introduces no functional changes.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>

Helps: #31
2023-10-13 11:23:31 +01:00
Philip Withnall d4951a333f Merge branch '56-string-tweak' into 'main'
user-controls: Tweak a string to improve understandability

Closes #56

See merge request pwithnall/malcontent!154
2023-10-12 13:39:46 +00:00
Philip Withnall f763d71cd2 user-controls: Tweak a string to improve understandability
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>

Fixes: #56
2023-10-12 11:48:30 +01:00
Philip Withnall 2f67afec78 Merge branch 'update_pt_BR' into 'main'
Update pt_BR translation

See merge request pwithnall/malcontent!153
2023-07-20 12:33:22 +00:00
Matheus Polkorny b4c6e9d8ef Update pt_BR translation 2023-07-07 23:34:31 +00:00
18 changed files with 413 additions and 311 deletions

View file

@ -55,11 +55,18 @@ struct _MctRestrictApplicationsDialog
MctRestrictApplicationsSelector *selector; MctRestrictApplicationsSelector *selector;
AdwPreferencesGroup *group; AdwPreferencesGroup *group;
GtkSearchEntry *search_entry;
MctAppFilter *app_filter; /* (owned) (not nullable) */ MctAppFilter *app_filter; /* (owned) (not nullable) */
gchar *user_display_name; /* (owned) (nullable) */ gchar *user_display_name; /* (owned) (nullable) */
}; };
static void search_entry_stop_search_cb (GtkSearchEntry *search_entry,
gpointer user_data);
static gboolean focus_search_cb (GtkWidget *widget,
GVariant *arguments,
gpointer user_data);
G_DEFINE_TYPE (MctRestrictApplicationsDialog, mct_restrict_applications_dialog, ADW_TYPE_PREFERENCES_WINDOW) G_DEFINE_TYPE (MctRestrictApplicationsDialog, mct_restrict_applications_dialog, ADW_TYPE_PREFERENCES_WINDOW)
typedef enum typedef enum
@ -140,6 +147,19 @@ mct_restrict_applications_dialog_dispose (GObject *object)
G_OBJECT_CLASS (mct_restrict_applications_dialog_parent_class)->dispose (object); G_OBJECT_CLASS (mct_restrict_applications_dialog_parent_class)->dispose (object);
} }
static void
mct_restrict_applications_dialog_map (GtkWidget *widget)
{
MctRestrictApplicationsDialog *self = (MctRestrictApplicationsDialog *)widget;
GTK_WIDGET_CLASS (mct_restrict_applications_dialog_parent_class)->map (widget);
/* Clear and focus the search entry, in case the dialogue is being shown for
* a second time. */
gtk_editable_set_text (GTK_EDITABLE (self->search_entry), "");
gtk_widget_grab_focus (GTK_WIDGET (self->search_entry));
}
static void static void
mct_restrict_applications_dialog_class_init (MctRestrictApplicationsDialogClass *klass) mct_restrict_applications_dialog_class_init (MctRestrictApplicationsDialogClass *klass)
{ {
@ -151,6 +171,8 @@ mct_restrict_applications_dialog_class_init (MctRestrictApplicationsDialogClass
object_class->set_property = mct_restrict_applications_dialog_set_property; object_class->set_property = mct_restrict_applications_dialog_set_property;
object_class->dispose = mct_restrict_applications_dialog_dispose; object_class->dispose = mct_restrict_applications_dialog_dispose;
widget_class->map = mct_restrict_applications_dialog_map;
/** /**
* MctRestrictApplicationsDialog:app-filter: (not nullable) * MctRestrictApplicationsDialog:app-filter: (not nullable)
* *
@ -197,6 +219,15 @@ mct_restrict_applications_dialog_class_init (MctRestrictApplicationsDialogClass
gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, selector); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, selector);
gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, group); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, group);
gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, search_entry);
gtk_widget_class_bind_template_callback (widget_class, search_entry_stop_search_cb);
gtk_widget_class_add_binding (widget_class,
GDK_KEY_f, GDK_CONTROL_MASK,
focus_search_cb,
NULL);
} }
static void static void
@ -206,6 +237,8 @@ mct_restrict_applications_dialog_init (MctRestrictApplicationsDialog *self)
g_type_ensure (MCT_TYPE_RESTRICT_APPLICATIONS_SELECTOR); g_type_ensure (MCT_TYPE_RESTRICT_APPLICATIONS_SELECTOR);
gtk_widget_init_template (GTK_WIDGET (self)); gtk_widget_init_template (GTK_WIDGET (self));
gtk_search_entry_set_key_capture_widget (self->search_entry, GTK_WIDGET (self));
} }
static void static void
@ -225,6 +258,25 @@ update_description (MctRestrictApplicationsDialog *self)
adw_preferences_group_set_description (self->group, description); adw_preferences_group_set_description (self->group, description);
} }
static void
search_entry_stop_search_cb (GtkSearchEntry *search_entry,
gpointer user_data)
{
/* Clear the search text as the search filtering is bound to that. */
gtk_editable_set_text (GTK_EDITABLE (search_entry), "");
}
static gboolean
focus_search_cb (GtkWidget *widget,
GVariant *arguments,
gpointer user_data)
{
MctRestrictApplicationsDialog *self = MCT_RESTRICT_APPLICATIONS_DIALOG (widget);
gtk_widget_grab_focus (GTK_WIDGET (self->search_entry));
return TRUE;
}
/** /**
* mct_restrict_applications_dialog_new: * mct_restrict_applications_dialog_new:
* @app_filter: (transfer none): the initial app filter configuration to show * @app_filter: (transfer none): the initial app filter configuration to show

View file

@ -14,7 +14,21 @@
<!-- Translated dynamically: --> <!-- Translated dynamically: -->
<property name="description">Restrict {username} from using the following installed applications.</property> <property name="description">Restrict {username} from using the following installed applications.</property>
<child> <child>
<object class="MctRestrictApplicationsSelector" id="selector" /> <object class="GtkBox">
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkSearchEntry" id="search_entry">
<property name="placeholder-text" translatable="yes">Search for applications…</property>
<signal name="stop-search" handler="search_entry_stop_search_cb" />
</object>
</child>
<child>
<object class="MctRestrictApplicationsSelector" id="selector">
<property name="search" bind-source="search_entry" bind-property="text" />
</object>
</child>
</object>
</child> </child>
</object> </object>
</child> </child>

View file

@ -41,6 +41,7 @@ static void app_info_changed_cb (GAppInfoMonitor *monitor,
static void reload_apps (MctRestrictApplicationsSelector *self); static void reload_apps (MctRestrictApplicationsSelector *self);
static GtkWidget *create_row_for_app_cb (gpointer item, static GtkWidget *create_row_for_app_cb (gpointer item,
gpointer user_data); gpointer user_data);
static char *app_info_dup_name (GAppInfo *app_info);
/** /**
* MctRestrictApplicationsSelector: * MctRestrictApplicationsSelector:
@ -54,6 +55,11 @@ static GtkWidget *create_row_for_app_cb (gpointer item,
* #MctAppFilterBuilder using * #MctAppFilterBuilder using
* mct_restrict_applications_selector_build_app_filter(). * mct_restrict_applications_selector_build_app_filter().
* *
* Search terms may be applied using #MctRestrictApplicationsSelector:search.
* These will filter the list of displayed apps so that only ones matching the
* search terms (by name, using UTF-8 normalisation and casefolding) will be
* displayed.
*
* Since: 0.5.0 * Since: 0.5.0
*/ */
struct _MctRestrictApplicationsSelector struct _MctRestrictApplicationsSelector
@ -61,10 +67,11 @@ struct _MctRestrictApplicationsSelector
GtkBox parent_instance; GtkBox parent_instance;
GtkListBox *listbox; GtkListBox *listbox;
GtkLabel *placeholder;
GList *cached_apps; /* (nullable) (owned) (element-type GAppInfo) */ GList *cached_apps; /* (nullable) (owned) (element-type GAppInfo) */
GListStore *apps; /* (owned) */ GListStore *apps;
GtkFilterListModel *filtered_apps;
GtkStringFilter *search_filter;
GAppInfoMonitor *app_info_monitor; /* (owned) */ GAppInfoMonitor *app_info_monitor; /* (owned) */
gulong app_info_monitor_changed_id; gulong app_info_monitor_changed_id;
GHashTable *blocklisted_apps; /* (owned) (element-type GAppInfo) */ GHashTable *blocklisted_apps; /* (owned) (element-type GAppInfo) */
@ -75,6 +82,8 @@ struct _MctRestrictApplicationsSelector
FlatpakInstallation *user_installation; /* (owned) */ FlatpakInstallation *user_installation; /* (owned) */
GtkCssProvider *css_provider; /* (owned) */ GtkCssProvider *css_provider; /* (owned) */
gchar *search; /* (nullable) (owned) */
}; };
G_DEFINE_TYPE (MctRestrictApplicationsSelector, mct_restrict_applications_selector, GTK_TYPE_BOX) G_DEFINE_TYPE (MctRestrictApplicationsSelector, mct_restrict_applications_selector, GTK_TYPE_BOX)
@ -82,9 +91,10 @@ G_DEFINE_TYPE (MctRestrictApplicationsSelector, mct_restrict_applications_select
typedef enum typedef enum
{ {
PROP_APP_FILTER = 1, PROP_APP_FILTER = 1,
PROP_SEARCH,
} MctRestrictApplicationsSelectorProperty; } MctRestrictApplicationsSelectorProperty;
static GParamSpec *properties[PROP_APP_FILTER + 1]; static GParamSpec *properties[PROP_SEARCH + 1];
enum { enum {
SIGNAL_CHANGED, SIGNAL_CHANGED,
@ -125,6 +135,9 @@ mct_restrict_applications_selector_get_property (GObject *object,
case PROP_APP_FILTER: case PROP_APP_FILTER:
g_value_set_boxed (value, self->app_filter); g_value_set_boxed (value, self->app_filter);
break; break;
case PROP_SEARCH:
g_value_set_string (value, self->search);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -144,6 +157,9 @@ mct_restrict_applications_selector_set_property (GObject *object,
case PROP_APP_FILTER: case PROP_APP_FILTER:
mct_restrict_applications_selector_set_app_filter (self, g_value_get_boxed (value)); mct_restrict_applications_selector_set_app_filter (self, g_value_get_boxed (value));
break; break;
case PROP_SEARCH:
mct_restrict_applications_selector_set_search (self, g_value_get_string (value));
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -156,7 +172,6 @@ mct_restrict_applications_selector_dispose (GObject *object)
MctRestrictApplicationsSelector *self = (MctRestrictApplicationsSelector *)object; MctRestrictApplicationsSelector *self = (MctRestrictApplicationsSelector *)object;
g_clear_pointer (&self->blocklisted_apps, g_hash_table_unref); g_clear_pointer (&self->blocklisted_apps, g_hash_table_unref);
g_clear_object (&self->apps);
g_clear_list (&self->cached_apps, g_object_unref); g_clear_list (&self->cached_apps, g_object_unref);
if (self->app_info_monitor != NULL && self->app_info_monitor_changed_id != 0) if (self->app_info_monitor != NULL && self->app_info_monitor_changed_id != 0)
@ -169,6 +184,7 @@ mct_restrict_applications_selector_dispose (GObject *object)
g_clear_object (&self->system_installation); g_clear_object (&self->system_installation);
g_clear_object (&self->user_installation); g_clear_object (&self->user_installation);
g_clear_object (&self->css_provider); g_clear_object (&self->css_provider);
g_clear_pointer (&self->search, g_free);
G_OBJECT_CLASS (mct_restrict_applications_selector_parent_class)->dispose (object); G_OBJECT_CLASS (mct_restrict_applications_selector_parent_class)->dispose (object);
} }
@ -203,6 +219,23 @@ mct_restrict_applications_selector_class_init (MctRestrictApplicationsSelectorCl
G_PARAM_STATIC_STRINGS | G_PARAM_STATIC_STRINGS |
G_PARAM_EXPLICIT_NOTIFY); G_PARAM_EXPLICIT_NOTIFY);
/**
* MctRestrictApplicationsSelector:search: (nullable)
*
* Search terms to filter the displayed list of apps by, or %NULL to not
* filter the search.
*
* Since: 0.12.0
*/
properties[PROP_SEARCH] =
g_param_spec_string ("search",
"Search",
"Search terms to filter the displayed list of apps by.",
NULL,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS |
G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_properties (object_class, G_N_ELEMENTS (properties), properties); g_object_class_install_properties (object_class, G_N_ELEMENTS (properties), properties);
/** /**
@ -224,34 +257,30 @@ mct_restrict_applications_selector_class_init (MctRestrictApplicationsSelectorCl
gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/MalcontentUi/ui/restrict-applications-selector.ui"); gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/MalcontentUi/ui/restrict-applications-selector.ui");
gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, listbox); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, listbox);
gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, placeholder); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, apps);
gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, filtered_apps);
gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, search_filter);
gtk_widget_class_bind_template_callback (widget_class, app_info_dup_name);
} }
static void static void
mct_restrict_applications_selector_init (MctRestrictApplicationsSelector *self) mct_restrict_applications_selector_init (MctRestrictApplicationsSelector *self)
{ {
guint n_apps;
gtk_widget_init_template (GTK_WIDGET (self)); gtk_widget_init_template (GTK_WIDGET (self));
self->apps = g_list_store_new (G_TYPE_APP_INFO);
self->cached_apps = NULL;
self->app_info_monitor = g_app_info_monitor_get (); self->app_info_monitor = g_app_info_monitor_get ();
self->app_info_monitor_changed_id = self->app_info_monitor_changed_id =
g_signal_connect (self->app_info_monitor, "changed", g_signal_connect (self->app_info_monitor, "changed",
(GCallback) app_info_changed_cb, self); (GCallback) app_info_changed_cb, self);
gtk_list_box_bind_model (self->listbox, gtk_list_box_bind_model (self->listbox,
G_LIST_MODEL (self->apps), G_LIST_MODEL (self->filtered_apps),
create_row_for_app_cb, create_row_for_app_cb,
self, self,
NULL); NULL);
/* Hide placeholder if not empty */
n_apps = g_list_model_get_n_items (G_LIST_MODEL (self->apps));
gtk_widget_set_visible (GTK_WIDGET (self->placeholder), n_apps != 0);
self->blocklisted_apps = g_hash_table_new_full (g_direct_hash, self->blocklisted_apps = g_hash_table_new_full (g_direct_hash,
g_direct_equal, g_direct_equal,
g_object_unref, g_object_unref,
@ -368,6 +397,12 @@ create_row_for_app_cb (gpointer item,
return row; return row;
} }
static char *
app_info_dup_name (GAppInfo *app_info)
{
return g_strdup (g_app_info_get_name (app_info));
}
static gint static gint
compare_app_info_cb (gconstpointer a, compare_app_info_cb (gconstpointer a,
gconstpointer b, gconstpointer b,
@ -776,7 +811,7 @@ mct_restrict_applications_selector_set_app_filter (MctRestrictApplicationsSelect
self->app_filter = mct_app_filter_ref (app_filter); self->app_filter = mct_app_filter_ref (app_filter);
/* Update the status of each app row. */ /* Update the status of each app row. */
n_apps = g_list_model_get_n_items (G_LIST_MODEL (self->apps)); n_apps = g_list_model_get_n_items (G_LIST_MODEL (self->filtered_apps));
for (guint i = 0; i < n_apps; i++) for (guint i = 0; i < n_apps; i++)
{ {
@ -795,3 +830,50 @@ mct_restrict_applications_selector_set_app_filter (MctRestrictApplicationsSelect
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_APP_FILTER]); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_APP_FILTER]);
} }
/**
* mct_restrict_applications_selector_get_search:
* @self: an #MctRestrictApplicationsSelector
*
* Get the value of #MctRestrictApplicationsSelector:search.
*
* Returns: current search terms, or %NULL if no search filtering is active
* Since: 0.12.0
*/
const gchar *
mct_restrict_applications_selector_get_search (MctRestrictApplicationsSelector *self)
{
g_return_val_if_fail (MCT_IS_RESTRICT_APPLICATIONS_SELECTOR (self), NULL);
return self->search;
}
/**
* mct_restrict_applications_selector_set_search:
* @self: an #MctRestrictApplicationsSelector
* @search: (nullable): search terms, or %NULL to not filter the app list
*
* Set the value of #MctRestrictApplicationsSelector:search, or clear it to
* %NULL.
*
* Since: 0.12.0
*/
void
mct_restrict_applications_selector_set_search (MctRestrictApplicationsSelector *self,
const gchar *search)
{
g_return_if_fail (MCT_IS_RESTRICT_APPLICATIONS_SELECTOR (self));
/* Squash empty search terms down to nothing. */
if (search != NULL && *search == '\0')
search = NULL;
if (g_strcmp0 (search, self->search) == 0)
return;
g_clear_pointer (&self->search, g_free);
self->search = g_strdup (search);
gtk_string_filter_set_search (self->search_filter, self->search);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SEARCH]);
}

View file

@ -41,4 +41,8 @@ void mct_restrict_applications_selector_set_app_filter (MctRestrictAppl
void mct_restrict_applications_selector_build_app_filter (MctRestrictApplicationsSelector *self, void mct_restrict_applications_selector_build_app_filter (MctRestrictApplicationsSelector *self,
MctAppFilterBuilder *builder); MctAppFilterBuilder *builder);
const gchar *mct_restrict_applications_selector_get_search (MctRestrictApplicationsSelector *self);
void mct_restrict_applications_selector_set_search (MctRestrictApplicationsSelector *self,
const gchar *search);
G_END_DECLS G_END_DECLS

View file

@ -9,8 +9,10 @@
<property name="selection-mode">none</property> <property name="selection-mode">none</property>
<child type="placeholder"> <child type="placeholder">
<object class="GtkLabel" id="placeholder"> <object class="GtkLabel">
<property name="label" translatable="yes">No applications found to restrict.</property> <property name="label" translatable="yes">No applications found to restrict.</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
</object> </object>
</child> </child>
@ -20,4 +22,19 @@
</object> </object>
</child> </child>
</template> </template>
<object class="GListStore" id="apps">
<property name="item-type">GAppInfo</property>
</object>
<object class="GtkFilterListModel" id="filtered_apps">
<property name="model">apps</property>
<property name="filter">search_filter</property>
</object>
<object class="GtkStringFilter" id="search_filter">
<property name="expression">
<closure type="gchararray" function="app_info_dup_name" />
</property>
</object>
</interface> </interface>

View file

@ -702,6 +702,7 @@ mct_user_controls_finalize (GObject *object)
g_clear_object (&self->user); g_clear_object (&self->user);
g_clear_pointer (&self->user_locale, g_free); g_clear_pointer (&self->user_locale, g_free);
g_clear_pointer (&self->user_display_name, g_free); g_clear_pointer (&self->user_display_name, g_free);
g_clear_pointer (&self->description, g_free);
if (self->permission != NULL && self->permission_allowed_id != 0) if (self->permission != NULL && self->permission_allowed_id != 0)
{ {

View file

@ -99,7 +99,7 @@
<property name="title" translatable="yes">Application _Suitability</property> <property name="title" translatable="yes">Application _Suitability</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="activatable_widget">oars_button</property> <property name="activatable_widget">oars_button</property>
<property name="subtitle" translatable="yes">Restricts browsing or installation of applications to applications suitable for certain ages or above.</property> <property name="subtitle" translatable="yes">Restricts the browsing or installation of applications unsuitable for this age or younger.</property>
<property name="subtitle_lines">0</property> <property name="subtitle_lines">0</property>
<property name="focusable">False</property> <property name="focusable">False</property>
<child> <child>

View file

@ -48,6 +48,7 @@ typedef enum
struct _MctAppFilter struct _MctAppFilter
{ {
/*< private >*/
gint ref_count; gint ref_count;
uid_t user_id; uid_t user_id;

View file

@ -66,7 +66,7 @@ pkgconfig.generate(libmalcontent,
) )
libmalcontent_gir = gnome.generate_gir(libmalcontent, libmalcontent_gir = gnome.generate_gir(libmalcontent,
sources: libmalcontent_sources + libmalcontent_headers + libmalcontent_private_headers + enums, sources: libmalcontent_sources + libmalcontent_headers + enums,
nsversion: libmalcontent_api_version, nsversion: libmalcontent_api_version,
namespace: 'Malcontent', namespace: 'Malcontent',
symbol_prefix: 'mct_', symbol_prefix: 'mct_',

View file

@ -50,6 +50,7 @@ typedef enum
struct _MctSessionLimits struct _MctSessionLimits
{ {
/*< private >*/
gint ref_count; gint ref_count;
uid_t user_id; uid_t user_id;

View file

@ -297,6 +297,7 @@ def command_check_app_filter(user, arg, quiet=False, interactive=True):
# when passing flatpak IDs as argument # when passing flatpak IDs as argument
is_maybe_content_type = not is_maybe_flatpak_id and is_valid_content_type(arg) is_maybe_content_type = not is_maybe_flatpak_id and is_valid_content_type(arg)
is_maybe_path = os.path.exists(arg) is_maybe_path = os.path.exists(arg)
is_maybe_desktop_file = arg.endswith('.desktop')
recognised_types = sum([is_maybe_flatpak_id, is_maybe_flatpak_ref, recognised_types = sum([is_maybe_flatpak_id, is_maybe_flatpak_ref,
is_maybe_content_type, is_maybe_path]) is_maybe_content_type, is_maybe_path])
@ -320,6 +321,11 @@ def command_check_app_filter(user, arg, quiet=False, interactive=True):
# Content type # Content type
is_allowed = app_filter.is_content_type_allowed(arg) is_allowed = app_filter.is_content_type_allowed(arg)
noun = 'Content type' noun = 'Content type'
elif is_maybe_path and is_maybe_desktop_file
path = os.path.abspath(arg)
app_info = Gio.DesktopAppInfo.new_from_filename(path)
is_allowed = app_filter.is_appinfo_allowed(app_info)
noun = 'Desktop file'
elif is_maybe_path: elif is_maybe_path:
path = os.path.abspath(arg) path = os.path.abspath(arg)
is_allowed = app_filter.is_path_allowed(path) is_allowed = app_filter.is_path_allowed(path)

View file

@ -28,3 +28,12 @@ carousel-item {
border: none; border: none;
color: @theme_fg_color; color: @theme_fg_color;
} }
carousel-item:focus:focus-visible avatar {
/* this should actually be $focus_border_color from
* gtk/theme/Default/_colors.scss, but we have to simplify the theming slightly */
outline-color: @theme_selected_bg_color;
outline-offset: -2px;
outline-width: 2px;
outline-style: solid;
}

View file

@ -31,7 +31,8 @@
<launchable type="desktop-id">org.freedesktop.MalcontentControl.desktop</launchable> <launchable type="desktop-id">org.freedesktop.MalcontentControl.desktop</launchable>
<url type="homepage">https://gitlab.freedesktop.org/pwithnall/malcontent</url> <url type="homepage">https://gitlab.freedesktop.org/pwithnall/malcontent</url>
<url type="bugtracker">https://gitlab.freedesktop.org/pwithnall/malcontent/issues</url> <url type="bugtracker">https://gitlab.freedesktop.org/pwithnall/malcontent/issues</url>
<url type="donation">http://www.gnome.org/friends/</url> <url type="donation">https://www.gnome.org/donate/</url>
<url type="vcs-browser">https://gitlab.freedesktop.org/pwithnall/malcontent</url>
<url type="translate">https://wiki.gnome.org/TranslationProject/LocalisationGuide</url> <url type="translate">https://wiki.gnome.org/TranslationProject/LocalisationGuide</url>
<update_contact>philip_at_tecnocode.co.uk</update_contact> <update_contact>philip_at_tecnocode.co.uk</update_contact>
<compulsory_for_desktop>GNOME</compulsory_for_desktop> <compulsory_for_desktop>GNOME</compulsory_for_desktop>

View file

@ -1,5 +1,5 @@
project('malcontent', 'c', project('malcontent', 'c',
version : '0.11.1', version : '0.12.0',
meson_version : '>= 0.59.0', meson_version : '>= 0.59.0',
license: ['LGPL-2.1-or-later', 'GPL-2.0-or-later'], license: ['LGPL-2.1-or-later', 'GPL-2.0-or-later'],
default_options : [ default_options : [

162
po/cs.po
View file

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: malcontent\n" "Project-Id-Version: malcontent\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n" "issues\n"
"POT-Creation-Date: 2021-09-18 12:41+0000\n" "POT-Creation-Date: 2023-10-13 16:18+0000\n"
"PO-Revision-Date: 2021-10-02 00:36+0200\n" "PO-Revision-Date: 2023-10-23 23:04+0200\n"
"Last-Translator: Daniel Rusek <mail@asciiwolf.com>\n" "Last-Translator: Daniel Rusek <mail@asciiwolf.com>\n"
"Language-Team: none\n" "Language-Team: none\n"
"Language: cs\n" "Language: cs\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Poedit 3.0\n" "X-Generator: Poedit 3.4\n"
#: accounts-service/com.endlessm.ParentalControls.policy.in:4 #: accounts-service/com.endlessm.ParentalControls.policy.in:4
msgid "Change your own app filter" msgid "Change your own app filter"
@ -164,78 +164,36 @@ msgstr "Limit sezení pro uživatele %u má nerozpoznaný typ %u"
msgid "Session limit for user %u has invalid daily schedule %u%u" msgid "Session limit for user %u has invalid daily schedule %u%u"
msgstr "Limit sezení pro uživatele %u má neplatný denní rozvrh %u%u" msgstr "Limit sezení pro uživatele %u má neplatný denní rozvrh %u%u"
#. TRANSLATORS: This is the formatting of English and localized name
#. of the rating e.g. "Adults Only (solo adultos)"
#: libmalcontent-ui/gs-content-rating.c:75
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
#: libmalcontent-ui/gs-content-rating.c:209
msgid "General"
msgstr "Obecné"
#: libmalcontent-ui/gs-content-rating.c:218
msgid "ALL"
msgstr "VŠECHNY"
#: libmalcontent-ui/gs-content-rating.c:222
#: libmalcontent-ui/gs-content-rating.c:485
msgid "Adults Only"
msgstr "pouze dospělé"
#: libmalcontent-ui/gs-content-rating.c:224
#: libmalcontent-ui/gs-content-rating.c:484
msgid "Mature"
msgstr "plnoleté"
#: libmalcontent-ui/gs-content-rating.c:226
#: libmalcontent-ui/gs-content-rating.c:483
msgid "Teen"
msgstr "mládež"
#: libmalcontent-ui/gs-content-rating.c:228
#: libmalcontent-ui/gs-content-rating.c:482
msgid "Everyone 10+"
msgstr "všechny 10+"
#: libmalcontent-ui/gs-content-rating.c:230
#: libmalcontent-ui/gs-content-rating.c:481
msgid "Everyone"
msgstr "všechny"
#: libmalcontent-ui/gs-content-rating.c:232
#: libmalcontent-ui/gs-content-rating.c:480
msgid "Early Childhood"
msgstr "malé děti"
#. Translators: the placeholder is a users full name #. Translators: the placeholder is a users full name
#: libmalcontent-ui/restrict-applications-dialog.c:222 #: libmalcontent-ui/restrict-applications-dialog.c:256
#, c-format #, c-format
msgid "Restrict %s from using the following installed applications." msgid "Restrict %s from using the following installed applications."
msgstr "Omezit uživateli %s použití následujících nainstalovaných aplikací." msgstr "Omezit uživateli %s použití následujících nainstalovaných aplikací."
#: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:6
#: libmalcontent-ui/restrict-applications-dialog.ui:12
msgid "Restrict Applications" msgid "Restrict Applications"
msgstr "Omezit aplikace" msgstr "Omezit aplikace"
#: libmalcontent-ui/restrict-applications-selector.ui:24 #: libmalcontent-ui/restrict-applications-dialog.ui:22
msgid "Search for applications…"
msgstr "Hledat aplikace…"
#: libmalcontent-ui/restrict-applications-selector.ui:13
msgid "No applications found to restrict." msgid "No applications found to restrict."
msgstr "Nenalezeny žádné aplikace k omezení." msgstr "Nenalezeny žádné aplikace k omezení."
#. Translators: this is the full name for an unknown user account. #. Translators: this is the full name for an unknown user account.
#: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209
msgid "unknown" msgid "unknown"
msgstr "neznámé" msgstr "neznámé"
#: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 #: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388
#: libmalcontent-ui/user-controls.c:669 #: libmalcontent-ui/user-controls.c:641
msgid "All Ages" msgid "All Ages"
msgstr "libovolný věk" msgstr "libovolný věk"
#. Translators: The placeholder is a users display name. #. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:477 #: libmalcontent-ui/user-controls.c:470
#, c-format #, c-format
msgid "" msgid ""
"Prevents %s from running web browsers. Limited web content may still be " "Prevents %s from running web browsers. Limited web content may still be "
@ -245,48 +203,48 @@ msgstr ""
"obsah může být stále dostupný v jiných aplikacích." "obsah může být stále dostupný v jiných aplikacích."
#. Translators: The placeholder is a users display name. #. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:482 #: libmalcontent-ui/user-controls.c:475
#, c-format #, c-format
msgid "Prevents specified applications from being used by %s." msgid "Prevents specified applications from being used by %s."
msgstr "Zabraňuje v používání určených aplikací uživatelem %s." msgstr "Zabraňuje v používání určených aplikací uživatelem %s."
#. Translators: The placeholder is a users display name. #. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:487 #: libmalcontent-ui/user-controls.c:480
#, c-format #, c-format
msgid "Prevents %s from installing applications." msgid "Prevents %s from installing applications."
msgstr "Zabraňuje uživateli %s v instalaci aplikací." msgstr "Zabraňuje uživateli %s v instalaci aplikací."
#: libmalcontent-ui/user-controls.ui:16 #: libmalcontent-ui/user-controls.ui:25
msgid "Application Usage Restrictions" msgid "Application Usage Restrictions"
msgstr "Omezení použití aplikací" msgstr "Omezení použití aplikací"
#: libmalcontent-ui/user-controls.ui:67 #: libmalcontent-ui/user-controls.ui:28
msgid "Restrict _Web Browsers" msgid "Restrict _Web Browsers"
msgstr "Omezit _webové prohlížeče" msgstr "Omezit _webové prohlížeče"
#: libmalcontent-ui/user-controls.ui:151 #: libmalcontent-ui/user-controls.ui:51
msgid "_Restrict Applications" msgid "_Restrict Applications"
msgstr "Omezit _aplikace" msgstr "Omezit _aplikace"
#: libmalcontent-ui/user-controls.ui:230 #: libmalcontent-ui/user-controls.ui:73
msgid "Software Installation Restrictions" msgid "Software Installation Restrictions"
msgstr "Omezení instalace softwaru" msgstr "Omezení instalace softwaru"
#: libmalcontent-ui/user-controls.ui:280 #: libmalcontent-ui/user-controls.ui:77
msgid "Restrict Application _Installation" msgid "Restrict Application _Installation"
msgstr "Omezit _instalaci aplikací" msgstr "Omezit _instalaci aplikací"
#: libmalcontent-ui/user-controls.ui:365 #: libmalcontent-ui/user-controls.ui:99
msgid "Application _Suitability" msgid "Application _Suitability"
msgstr "Vhodno_st aplikací" msgstr "Vhodno_st aplikací"
#: libmalcontent-ui/user-controls.ui:387 #: libmalcontent-ui/user-controls.ui:102
msgid "" msgid ""
"Restricts browsing or installation of applications to applications suitable " "Restricts the browsing or installation of applications unsuitable for this "
"for certain ages or above." "age or younger."
msgstr "" msgstr ""
"Omezí prohlížení nebo instalaci aplikací na aplikace vhodné pro určitý věk " "Omezí prohlížení nebo instalaci aplikací nevhodných pro tento věk nebo "
"nebo výše." "mladší."
#. Translators: This documents the --user command line option to malcontent-control: #. Translators: This documents the --user command line option to malcontent-control:
#: malcontent-control/application.c:102 #: malcontent-control/application.c:102
@ -298,44 +256,44 @@ msgstr "Uživatel ke zvolení v UI"
msgid "USERNAME" msgid "USERNAME"
msgstr "UŽIVATEL" msgstr "UŽIVATEL"
#: malcontent-control/application.c:115 #: malcontent-control/application.c:116
msgid "— view and edit parental controls" msgid "— view and edit parental controls"
msgstr "— zobrazit a upravit rodičovskou kontrolu" msgstr "— zobrazit a upravit rodičovskou kontrolu"
#. Translators: This is the title of the main window #. Translators: This is the title of the main window
#. Translators: the name of the application as it appears in a software center #. Translators: the name of the application as it appears in a software center
#: malcontent-control/application.c:122 malcontent-control/main.ui:12 #: malcontent-control/application.c:123 malcontent-control/main.ui:17
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3
msgid "Parental Controls" msgid "Parental Controls"
msgstr "Rodičovská kontrola" msgstr "Rodičovská kontrola"
#: malcontent-control/application.c:308 #: malcontent-control/application.c:309
msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgid "Copyright © 2019, 2020 Endless Mobile, Inc."
msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc."
#. Translators: this should be "translated" to the #. Translators: this should be "translated" to the
#. names of people who have translated Malcontent into #. names of people who have translated Malcontent into
#. this language, one per line. #. this language, one per line.
#: malcontent-control/application.c:313 #: malcontent-control/application.c:314
msgid "translator-credits" msgid "translator-credits"
msgstr "Daniel Rusek <mail@asciiwolf.com>" msgstr "Daniel Rusek <mail@asciiwolf.com>"
#. Translators: "Malcontent" is the brand name of this #. Translators: "Malcontent" is the brand name of this
#. project, so should not be translated. #. project, so should not be translated.
#: malcontent-control/application.c:319 #: malcontent-control/application.c:320
msgid "Malcontent Website" msgid "Malcontent Website"
msgstr "Webové stránky" msgstr "Webové stránky"
#: malcontent-control/application.c:337 #: malcontent-control/application.c:341
msgid "The help contents could not be displayed" msgid "The help contents could not be displayed"
msgstr "Obsah nápovědy nemohl být zobrazen" msgstr "Obsah nápovědy nemohl být zobrazen"
#: malcontent-control/application.c:374 #: malcontent-control/application.c:388
msgid "Failed to load user data from the system" msgid "Failed to load user data from the system"
msgstr "Selhalo načtení uživatelských dat ze systému" msgstr "Selhalo načtení uživatelských dat ze systému"
#: malcontent-control/application.c:376 #: malcontent-control/application.c:390
msgid "Please make sure that the AccountsService is installed and enabled." msgid "Please make sure that the AccountsService is installed and enabled."
msgstr "Ověřte prosím, že je AccountsService nainstalováno a povoleno." msgstr "Ověřte prosím, že je AccountsService nainstalováno a povoleno."
@ -348,7 +306,7 @@ msgstr "Ověřte prosím, že je AccountsService nainstalováno a povoleno."
#. * further! #. * further!
#. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new
#. #.
#: malcontent-control/application.c:407 #: malcontent-control/application.c:421
#, c-format #, c-format
msgid "" msgid ""
"Its recommended that restrictions are set as part of an ongoing " "Its recommended that restrictions are set as part of an ongoing "
@ -359,29 +317,29 @@ msgstr ""
"konverzace s %s. <a href='https://www.jaknainternet.cz/page/1201/ochrana-" "konverzace s %s. <a href='https://www.jaknainternet.cz/page/1201/ochrana-"
"deti-na-internetu/'>Přečtěte si návod</a> na to, co je třeba vzít v úvahu." "deti-na-internetu/'>Přečtěte si návod</a> na to, co je třeba vzít v úvahu."
#: malcontent-control/carousel.ui:48 #: malcontent-control/carousel.ui:38
msgid "Previous Page" msgid "Previous Page"
msgstr "Předchozí stránka" msgstr "Předchozí stránka"
#: malcontent-control/carousel.ui:74 #: malcontent-control/carousel.ui:57
msgid "Next Page" msgid "Next Page"
msgstr "Následující stránka" msgstr "Následující stránka"
#: malcontent-control/main.ui:115 #: malcontent-control/main.ui:87
msgid "Permission Required" msgid "Permission Required"
msgstr "Vyžadováno oprávnění" msgstr "Vyžadováno oprávnění"
#: malcontent-control/main.ui:129 #: malcontent-control/main.ui:88
msgid "" msgid ""
"Permission is required to view and change user parental controls settings." "Permission is required to view and change user parental controls settings."
msgstr "" msgstr ""
"Pro zobrazení a změnu rodičovské kontroly uživatele je nutné oprávnění." "Pro zobrazení a změnu rodičovské kontroly uživatele je nutné oprávnění."
#: malcontent-control/main.ui:184 #: malcontent-control/main.ui:110
msgid "No Standard User Accounts" msgid "No Standard User Accounts"
msgstr "Žádný běžný uživatelský účet" msgstr "Žádný běžný uživatelský účet"
#: malcontent-control/main.ui:199 #: malcontent-control/main.ui:111
msgid "" msgid ""
"Parental controls can only be applied to standard user\n" "Parental controls can only be applied to standard user\n"
"accounts. These can be created in the user settings." "accounts. These can be created in the user settings."
@ -389,19 +347,19 @@ msgstr ""
"Rodičovská kontrola může být aplikována pouze na standardní uživatelské\n" "Rodičovská kontrola může být aplikována pouze na standardní uživatelské\n"
"účty. Ty mohou být vytvořeny v nastavení uživatelů." "účty. Ty mohou být vytvořeny v nastavení uživatelů."
#: malcontent-control/main.ui:212 #: malcontent-control/main.ui:115
msgid "_User Settings" msgid "_User Settings"
msgstr "Nastavení _uživatelů" msgstr "Nastavení _uživatelů"
#: malcontent-control/main.ui:242 #: malcontent-control/main.ui:138
msgid "Loading…" msgid "Loading…"
msgstr "Načítá se…" msgstr "Načítá se…"
#: malcontent-control/main.ui:305 #: malcontent-control/main.ui:171
msgid "_Help" msgid "_Help"
msgstr "_Nápověda" msgstr "_Nápověda"
#: malcontent-control/main.ui:309 #: malcontent-control/main.ui:175
msgid "_About Parental Controls" msgid "_About Parental Controls"
msgstr "O _aplikaci Rodičovská kontrola" msgstr "O _aplikaci Rodičovská kontrola"
@ -426,7 +384,7 @@ msgstr ""
msgid "Main window" msgid "Main window"
msgstr "Hlavní okno" msgstr "Hlavní okno"
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:38 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39
msgid "The GNOME Project" msgid "The GNOME Project"
msgstr "Projekt GNOME" msgstr "Projekt GNOME"
@ -474,6 +432,34 @@ msgstr "Uživatel %s nemá žádný zbývající čas"
msgid "Error setting time limit on login session: %s" msgid "Error setting time limit on login session: %s"
msgstr "Chyba při nastavení časového limitu na přihlašovací sezení: %s" msgstr "Chyba při nastavení časového limitu na přihlašovací sezení: %s"
#, c-format
#~ msgid "%s (%s)"
#~ msgstr "%s (%s)"
#~ msgid "General"
#~ msgstr "Obecné"
#~ msgid "ALL"
#~ msgstr "VŠECHNY"
#~ msgid "Adults Only"
#~ msgstr "pouze dospělé"
#~ msgid "Mature"
#~ msgstr "plnoleté"
#~ msgid "Teen"
#~ msgstr "mládež"
#~ msgid "Everyone 10+"
#~ msgstr "všechny 10+"
#~ msgid "Everyone"
#~ msgstr "všechny"
#~ msgid "Early Childhood"
#~ msgstr "malé děti"
#~ msgid "No cartoon violence" #~ msgid "No cartoon violence"
#~ msgstr "Žádné kreslené násilí" #~ msgstr "Žádné kreslené násilí"

View file

@ -404,10 +404,18 @@ msgstr ""
msgid "Create _Child User" msgid "Create _Child User"
msgstr "_Criar usuário filho" msgstr "_Criar usuário filho"
#: malcontent-control/main.ui:182
msgid "No Standard User Accounts"
msgstr "Não há conta de usuário padrão"
#: malcontent-control/main.ui:202 #: malcontent-control/main.ui:202
msgid "Loading…" msgid "Loading…"
msgstr "Carregando…" msgstr "Carregando…"
#: malcontent-control/main.ui:210
msgid "_User Settings"
msgstr "Configurações do _Usuário"
#: malcontent-control/main.ui:265 #: malcontent-control/main.ui:265
msgid "_Help" msgid "_Help"
msgstr "Aj_uda" msgstr "Aj_uda"

160
po/ru.po
View file

@ -8,17 +8,17 @@ msgstr ""
"Project-Id-Version: malcontent\n" "Project-Id-Version: malcontent\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n" "issues\n"
"POT-Creation-Date: 2022-06-04 15:25+0000\n" "POT-Creation-Date: 2023-10-13 16:18+0000\n"
"PO-Revision-Date: 2022-06-19 20:05+1000\n" "PO-Revision-Date: 2023-10-29 01:03+1000\n"
"Last-Translator: Ser82-png <asvmail.as@gmail.com>\n" "Last-Translator: Ser82-png <asvmail.as@gmail.com>\n"
"Language-Team: none\n" "Language-Team: none\n"
"Language: ru\n" "Language: ru\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 2.3\n" "X-Generator: Poedit 3.0.1\n"
#: accounts-service/com.endlessm.ParentalControls.policy.in:4 #: accounts-service/com.endlessm.ParentalControls.policy.in:4
msgid "Change your own app filter" msgid "Change your own app filter"
@ -177,78 +177,36 @@ msgstr ""
"Ограничение сеанса для пользователя %u имеет недопустимое ежедневное " "Ограничение сеанса для пользователя %u имеет недопустимое ежедневное "
"расписание %u%u" "расписание %u%u"
#. TRANSLATORS: This is the formatting of English and localized name
#. of the rating e.g. "Adults Only (solo adultos)"
#: libmalcontent-ui/gs-content-rating.c:75
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
#: libmalcontent-ui/gs-content-rating.c:209
msgid "General"
msgstr "Общие"
#: libmalcontent-ui/gs-content-rating.c:218
msgid "ALL"
msgstr "ВСЕ"
#: libmalcontent-ui/gs-content-rating.c:222
#: libmalcontent-ui/gs-content-rating.c:485
msgid "Adults Only"
msgstr "Только для взрослых"
#: libmalcontent-ui/gs-content-rating.c:224
#: libmalcontent-ui/gs-content-rating.c:484
msgid "Mature"
msgstr "Для повзрослевшых"
#: libmalcontent-ui/gs-content-rating.c:226
#: libmalcontent-ui/gs-content-rating.c:483
msgid "Teen"
msgstr "Для подростков"
#: libmalcontent-ui/gs-content-rating.c:228
#: libmalcontent-ui/gs-content-rating.c:482
msgid "Everyone 10+"
msgstr "Для всех старше 10"
#: libmalcontent-ui/gs-content-rating.c:230
#: libmalcontent-ui/gs-content-rating.c:481
msgid "Everyone"
msgstr "Для всех"
#: libmalcontent-ui/gs-content-rating.c:232
#: libmalcontent-ui/gs-content-rating.c:480
msgid "Early Childhood"
msgstr "Для маленьких"
#. Translators: the placeholder is a users full name #. Translators: the placeholder is a users full name
#: libmalcontent-ui/restrict-applications-dialog.c:222 #: libmalcontent-ui/restrict-applications-dialog.c:256
#, c-format #, c-format
msgid "Restrict %s from using the following installed applications." msgid "Restrict %s from using the following installed applications."
msgstr "Запретить %s использовать следующие установленные приложения." msgstr "Запретить %s использовать следующие установленные приложения."
#: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:6
#: libmalcontent-ui/restrict-applications-dialog.ui:12
msgid "Restrict Applications" msgid "Restrict Applications"
msgstr "Ограничение доступа к приложениям" msgstr "Ограничение доступа к приложениям"
#: libmalcontent-ui/restrict-applications-selector.ui:24 #: libmalcontent-ui/restrict-applications-dialog.ui:22
msgid "Search for applications…"
msgstr "Поиск приложений…"
#: libmalcontent-ui/restrict-applications-selector.ui:13
msgid "No applications found to restrict." msgid "No applications found to restrict."
msgstr "Не найдено приложений, доступ к которым ограничен." msgstr "Не найдено приложений, доступ к которым ограничен."
#. Translators: this is the full name for an unknown user account. #. Translators: this is the full name for an unknown user account.
#: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209
msgid "unknown" msgid "unknown"
msgstr "неизвестный" msgstr "неизвестный"
#: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 #: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388
#: libmalcontent-ui/user-controls.c:669 #: libmalcontent-ui/user-controls.c:641
msgid "All Ages" msgid "All Ages"
msgstr "Все возрастные группы" msgstr "Все возрастные группы"
#. Translators: The placeholder is a users display name. #. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:477 #: libmalcontent-ui/user-controls.c:470
#, c-format #, c-format
msgid "" msgid ""
"Prevents %s from running web browsers. Limited web content may still be " "Prevents %s from running web browsers. Limited web content may still be "
@ -258,48 +216,48 @@ msgstr ""
"доступен в других приложениях." "доступен в других приложениях."
#. Translators: The placeholder is a users display name. #. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:482 #: libmalcontent-ui/user-controls.c:475
#, c-format #, c-format
msgid "Prevents specified applications from being used by %s." msgid "Prevents specified applications from being used by %s."
msgstr "Запретить %s использование указанных приложений." msgstr "Запретить %s использование указанных приложений."
#. Translators: The placeholder is a users display name. #. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:487 #: libmalcontent-ui/user-controls.c:480
#, c-format #, c-format
msgid "Prevents %s from installing applications." msgid "Prevents %s from installing applications."
msgstr "Запретить %s устанавливать приложения." msgstr "Запретить %s устанавливать приложения."
#: libmalcontent-ui/user-controls.ui:16 #: libmalcontent-ui/user-controls.ui:25
msgid "Application Usage Restrictions" msgid "Application Usage Restrictions"
msgstr "Ограничения на использование приложений" msgstr "Ограничения на использование приложений"
#: libmalcontent-ui/user-controls.ui:68 #: libmalcontent-ui/user-controls.ui:28
msgid "Restrict _Web Browsers" msgid "Restrict _Web Browsers"
msgstr "Ограничить доступ к _Веб-браузерам" msgstr "Ограничить доступ к _Веб-браузерам"
#: libmalcontent-ui/user-controls.ui:152 #: libmalcontent-ui/user-controls.ui:51
msgid "_Restrict Applications" msgid "_Restrict Applications"
msgstr "_Ограничить доступ к приложениям" msgstr "_Ограничить доступ к приложениям"
#: libmalcontent-ui/user-controls.ui:231 #: libmalcontent-ui/user-controls.ui:73
msgid "Software Installation Restrictions" msgid "Software Installation Restrictions"
msgstr "Ограничения на установку программного обеспечения" msgstr "Ограничения на установку программного обеспечения"
#: libmalcontent-ui/user-controls.ui:282 #: libmalcontent-ui/user-controls.ui:77
msgid "Restrict Application _Installation" msgid "Restrict Application _Installation"
msgstr "Ограничить _установку приложений" msgstr "Ограничить _установку приложений"
#: libmalcontent-ui/user-controls.ui:367 #: libmalcontent-ui/user-controls.ui:99
msgid "Application _Suitability" msgid "Application _Suitability"
msgstr "_Пригодность приложений" msgstr "_Пригодность приложений"
#: libmalcontent-ui/user-controls.ui:389 #: libmalcontent-ui/user-controls.ui:102
msgid "" msgid ""
"Restricts browsing or installation of applications to applications suitable " "Restricts the browsing or installation of applications unsuitable for this "
"for certain ages or above." "age or younger."
msgstr "" msgstr ""
"Ограничить просмотр или установку приложений в соответствии с распределением " "Ограничить просмотр или установку приложений неподходящих для этой "
"доступности по возрастным группам." "возрастной группы."
#. Translators: This documents the --user command line option to malcontent-control: #. Translators: This documents the --user command line option to malcontent-control:
#: malcontent-control/application.c:102 #: malcontent-control/application.c:102
@ -317,7 +275,7 @@ msgstr "— просмотр и редактирование родительс
#. Translators: This is the title of the main window #. Translators: This is the title of the main window
#. Translators: the name of the application as it appears in a software center #. Translators: the name of the application as it appears in a software center
#: malcontent-control/application.c:123 malcontent-control/main.ui:12 #: malcontent-control/application.c:123 malcontent-control/main.ui:17
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3
msgid "Parental Controls" msgid "Parental Controls"
@ -332,7 +290,7 @@ msgstr "Copyright © 2019, 2020 Endless Mobile, Inc."
#. this language, one per line. #. this language, one per line.
#: malcontent-control/application.c:314 #: malcontent-control/application.c:314
msgid "translator-credits" msgid "translator-credits"
msgstr "Ser82-png <asvmail.as@gmail.com>, 2022" msgstr "Ser82-png <asvmail.as@gmail.com>, 2022-2023"
#. Translators: "Malcontent" is the brand name of this #. Translators: "Malcontent" is the brand name of this
#. project, so should not be translated. #. project, so should not be translated.
@ -340,15 +298,15 @@ msgstr "Ser82-png <asvmail.as@gmail.com>, 2022"
msgid "Malcontent Website" msgid "Malcontent Website"
msgstr "Веб-сайт Malcontent" msgstr "Веб-сайт Malcontent"
#: malcontent-control/application.c:338 #: malcontent-control/application.c:341
msgid "The help contents could not be displayed" msgid "The help contents could not be displayed"
msgstr "Содержание справки не может быть отображено" msgstr "Содержание справки не может быть отображено"
#: malcontent-control/application.c:375 #: malcontent-control/application.c:388
msgid "Failed to load user data from the system" msgid "Failed to load user data from the system"
msgstr "Не удалось загрузить пользовательские данные из системы" msgstr "Не удалось загрузить пользовательские данные из системы"
#: malcontent-control/application.c:377 #: malcontent-control/application.c:390
msgid "Please make sure that the AccountsService is installed and enabled." msgid "Please make sure that the AccountsService is installed and enabled."
msgstr "Убедитесь, что служба AccountsService установлена и включена." msgstr "Убедитесь, что служба AccountsService установлена и включена."
@ -361,7 +319,7 @@ msgstr "Убедитесь, что служба AccountsService установл
#. * further! #. * further!
#. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new
#. #.
#: malcontent-control/application.c:408 #: malcontent-control/application.c:421
#, c-format #, c-format
msgid "" msgid ""
"Its recommended that restrictions are set as part of an ongoing " "Its recommended that restrictions are set as part of an ongoing "
@ -372,30 +330,30 @@ msgstr ""
"href='https://www.commonsensemedia.org/privacy-and-internet-" "href='https://www.commonsensemedia.org/privacy-and-internet-"
"safety'>Ознакомьтесь с инструкцией</a> о том, что нужно учитывать." "safety'>Ознакомьтесь с инструкцией</a> о том, что нужно учитывать."
#: malcontent-control/carousel.ui:48 #: malcontent-control/carousel.ui:38
msgid "Previous Page" msgid "Previous Page"
msgstr "Предыдущая страница" msgstr "Предыдущая страница"
#: malcontent-control/carousel.ui:74 #: malcontent-control/carousel.ui:57
msgid "Next Page" msgid "Next Page"
msgstr "Следующая страница" msgstr "Следующая страница"
#: malcontent-control/main.ui:115 #: malcontent-control/main.ui:87
msgid "Permission Required" msgid "Permission Required"
msgstr "Требуется разрешение" msgstr "Требуется разрешение"
#: malcontent-control/main.ui:129 #: malcontent-control/main.ui:88
msgid "" msgid ""
"Permission is required to view and change user parental controls settings." "Permission is required to view and change user parental controls settings."
msgstr "" msgstr ""
"Требуется разрешение для просмотра и изменения настроек родительского " "Требуется разрешение для просмотра и изменения настроек родительского "
"контроля пользователя." "контроля пользователя."
#: malcontent-control/main.ui:184 #: malcontent-control/main.ui:110
msgid "No Standard User Accounts" msgid "No Standard User Accounts"
msgstr "Нет обычных учётных записей пользователей" msgstr "Нет обычных учётных записей пользователей"
#: malcontent-control/main.ui:199 #: malcontent-control/main.ui:111
msgid "" msgid ""
"Parental controls can only be applied to standard user\n" "Parental controls can only be applied to standard user\n"
"accounts. These can be created in the user settings." "accounts. These can be created in the user settings."
@ -403,19 +361,19 @@ msgstr ""
"Родительский контроль может быть применен только к обычным учётным\n" "Родительский контроль может быть применен только к обычным учётным\n"
"записям пользователей. Такие записи можно создать в настройках пользователя." "записям пользователей. Такие записи можно создать в настройках пользователя."
#: malcontent-control/main.ui:212 #: malcontent-control/main.ui:115
msgid "_User Settings" msgid "_User Settings"
msgstr "Настройки _пользователя" msgstr "Настройки _пользователя"
#: malcontent-control/main.ui:242 #: malcontent-control/main.ui:138
msgid "Loading…" msgid "Loading…"
msgstr "Загрузка…" msgstr "Загрузка…"
#: malcontent-control/main.ui:305 #: malcontent-control/main.ui:171
msgid "_Help" msgid "_Help"
msgstr "_Справка" msgstr "_Справка"
#: malcontent-control/main.ui:309 #: malcontent-control/main.ui:175
msgid "_About Parental Controls" msgid "_About Parental Controls"
msgstr "_О родительском контроле" msgstr "_О родительском контроле"
@ -454,7 +412,7 @@ msgid ""
"usage;usage limit;kid;child;" "usage;usage limit;kid;child;"
msgstr "" msgstr ""
"parental controls;screen time;app restrictions;web browser restrictions;oars;" "parental controls;screen time;app restrictions;web browser restrictions;oars;"
"usage;usage limit;kid;child;родительский контроль;ребенок;" "usage;usage limit;kid;child;родительский контроль;ребенок;ограничение;"
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9
msgid "Manage parental controls" msgid "Manage parental controls"
@ -494,6 +452,34 @@ msgstr "У пользователя «%s» не осталось времени"
msgid "Error setting time limit on login session: %s" msgid "Error setting time limit on login session: %s"
msgstr "Ошибка установки ограничения времени на сеанс входа в систему: %s" msgstr "Ошибка установки ограничения времени на сеанс входа в систему: %s"
#, c-format
#~ msgid "%s (%s)"
#~ msgstr "%s (%s)"
#~ msgid "General"
#~ msgstr "Общие"
#~ msgid "ALL"
#~ msgstr "ВСЕ"
#~ msgid "Adults Only"
#~ msgstr "Только для взрослых"
#~ msgid "Mature"
#~ msgstr "Для повзрослевшых"
#~ msgid "Teen"
#~ msgstr "Для подростков"
#~ msgid "Everyone 10+"
#~ msgstr "Для всех старше 10"
#~ msgid "Everyone"
#~ msgstr "Для всех"
#~ msgid "Early Childhood"
#~ msgstr "Для маленьких"
#~ msgid "No cartoon violence" #~ msgid "No cartoon violence"
#~ msgstr "Отсутствуют сцены мультипликационного насилия" #~ msgstr "Отсутствуют сцены мультипликационного насилия"

164
po/sv.po
View file

@ -1,16 +1,16 @@
# Swedish translations for malcontent package. # Swedish translations for malcontent package.
# Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # Copyright © 2020-2023 malcontent's COPYRIGHT HOLDER
# This file is distributed under the same license as the malcontent package. # This file is distributed under the same license as the malcontent package.
# Automatically generated, 2020. # Automatically generated, 2020.
# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2020. # Anders Jonsson <anders.jonsson@norsjovallen.se>, 2020, 2023.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: malcontent\n" "Project-Id-Version: malcontent\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n" "issues\n"
"POT-Creation-Date: 2020-12-09 03:28+0000\n" "POT-Creation-Date: 2023-10-13 16:18+0000\n"
"PO-Revision-Date: 2020-12-17 18:28+0100\n" "PO-Revision-Date: 2023-10-20 21:11+0200\n"
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n" "Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n" "Language: sv\n"
@ -18,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.4.2\n" "X-Generator: Poedit 3.4\n"
#: accounts-service/com.endlessm.ParentalControls.policy.in:4 #: accounts-service/com.endlessm.ParentalControls.policy.in:4
msgid "Change your own app filter" msgid "Change your own app filter"
@ -165,79 +165,36 @@ msgstr "Sessionsgräns för användare %u har en okänd typ ”%u”"
msgid "Session limit for user %u has invalid daily schedule %u%u" msgid "Session limit for user %u has invalid daily schedule %u%u"
msgstr "Sessionsgräns för användare %u har ett ogiltigt dagsschema %u%u" msgstr "Sessionsgräns för användare %u har ett ogiltigt dagsschema %u%u"
#. TRANSLATORS: This is the formatting of English and localized name
#. of the rating e.g. "Adults Only (solo adultos)"
#: libmalcontent-ui/gs-content-rating.c:75
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
# Alla åldrar i MDA-systemet
#: libmalcontent-ui/gs-content-rating.c:209
msgid "General"
msgstr "Alla"
#: libmalcontent-ui/gs-content-rating.c:218
msgid "ALL"
msgstr "ALLA"
#: libmalcontent-ui/gs-content-rating.c:222
#: libmalcontent-ui/gs-content-rating.c:485
msgid "Adults Only"
msgstr "Endast för vuxna"
#: libmalcontent-ui/gs-content-rating.c:224
#: libmalcontent-ui/gs-content-rating.c:484
msgid "Mature"
msgstr "Mogen"
#: libmalcontent-ui/gs-content-rating.c:226
#: libmalcontent-ui/gs-content-rating.c:483
msgid "Teen"
msgstr "Tonåring"
#: libmalcontent-ui/gs-content-rating.c:228
#: libmalcontent-ui/gs-content-rating.c:482
msgid "Everyone 10+"
msgstr "Alla över 10 år"
#: libmalcontent-ui/gs-content-rating.c:230
#: libmalcontent-ui/gs-content-rating.c:481
msgid "Everyone"
msgstr "Alla"
#: libmalcontent-ui/gs-content-rating.c:232
#: libmalcontent-ui/gs-content-rating.c:480
msgid "Early Childhood"
msgstr "Tidig barndom"
#. Translators: the placeholder is a users full name #. Translators: the placeholder is a users full name
#: libmalcontent-ui/restrict-applications-dialog.c:222 #: libmalcontent-ui/restrict-applications-dialog.c:256
#, c-format #, c-format
msgid "Restrict %s from using the following installed applications." msgid "Restrict %s from using the following installed applications."
msgstr "Begränsa %s från att använda följande installerade program." msgstr "Begränsa %s från att använda följande installerade program."
#: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:6
#: libmalcontent-ui/restrict-applications-dialog.ui:12
msgid "Restrict Applications" msgid "Restrict Applications"
msgstr "Begränsa program" msgstr "Begränsa program"
#: libmalcontent-ui/restrict-applications-selector.ui:24 #: libmalcontent-ui/restrict-applications-dialog.ui:22
msgid "Search for applications…"
msgstr "Sök efter program…"
#: libmalcontent-ui/restrict-applications-selector.ui:13
msgid "No applications found to restrict." msgid "No applications found to restrict."
msgstr "Inga program att begränsa hittades." msgstr "Inga program att begränsa hittades."
#. Translators: this is the full name for an unknown user account. #. Translators: this is the full name for an unknown user account.
#: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209
msgid "unknown" msgid "unknown"
msgstr "okänd" msgstr "okänd"
#: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 #: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388
#: libmalcontent-ui/user-controls.c:669 #: libmalcontent-ui/user-controls.c:641
msgid "All Ages" msgid "All Ages"
msgstr "Alla åldrar" msgstr "Alla åldrar"
#. Translators: The placeholder is a users display name. #. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:477 #: libmalcontent-ui/user-controls.c:470
#, c-format #, c-format
msgid "" msgid ""
"Prevents %s from running web browsers. Limited web content may still be " "Prevents %s from running web browsers. Limited web content may still be "
@ -247,48 +204,48 @@ msgstr ""
"fortfarande finnas tillgängligt i andra program." "fortfarande finnas tillgängligt i andra program."
#. Translators: The placeholder is a users display name. #. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:482 #: libmalcontent-ui/user-controls.c:475
#, c-format #, c-format
msgid "Prevents specified applications from being used by %s." msgid "Prevents specified applications from being used by %s."
msgstr "Förhindrar angivna program från att användas av %s." msgstr "Förhindrar angivna program från att användas av %s."
#. Translators: The placeholder is a users display name. #. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:487 #: libmalcontent-ui/user-controls.c:480
#, c-format #, c-format
msgid "Prevents %s from installing applications." msgid "Prevents %s from installing applications."
msgstr "Förhindrar %s från att installera program." msgstr "Förhindrar %s från att installera program."
#: libmalcontent-ui/user-controls.ui:16 #: libmalcontent-ui/user-controls.ui:25
msgid "Application Usage Restrictions" msgid "Application Usage Restrictions"
msgstr "Begränsningar av programanvändning" msgstr "Begränsningar av programanvändning"
#: libmalcontent-ui/user-controls.ui:67 #: libmalcontent-ui/user-controls.ui:28
msgid "Restrict _Web Browsers" msgid "Restrict _Web Browsers"
msgstr "Begränsa _webbläsare" msgstr "Begränsa _webbläsare"
#: libmalcontent-ui/user-controls.ui:151 #: libmalcontent-ui/user-controls.ui:51
msgid "_Restrict Applications" msgid "_Restrict Applications"
msgstr "_Begränsa program" msgstr "_Begränsa program"
#: libmalcontent-ui/user-controls.ui:230 #: libmalcontent-ui/user-controls.ui:73
msgid "Software Installation Restrictions" msgid "Software Installation Restrictions"
msgstr "Begränsningar av programvaruinstallation" msgstr "Begränsningar av programvaruinstallation"
#: libmalcontent-ui/user-controls.ui:280 #: libmalcontent-ui/user-controls.ui:77
msgid "Restrict Application _Installation" msgid "Restrict Application _Installation"
msgstr "Begränsa _installation av program" msgstr "Begränsa _installation av program"
#: libmalcontent-ui/user-controls.ui:365 #: libmalcontent-ui/user-controls.ui:99
msgid "Application _Suitability" msgid "Application _Suitability"
msgstr "_Lämplighet för program" msgstr "_Lämplighet för program"
#: libmalcontent-ui/user-controls.ui:387 #: libmalcontent-ui/user-controls.ui:102
msgid "" msgid ""
"Restricts browsing or installation of applications to applications suitable " "Restricts the browsing or installation of applications unsuitable for this "
"for certain ages or above." "age or younger."
msgstr "" msgstr ""
"Begränsar bläddring bland eller installation av program till program som är " "Begränsar bläddring bland eller installation av program som är olämpliga för "
"lämpliga för vissa åldrar och uppåt." "denna ålder och yngre."
#. Translators: This documents the --user command line option to malcontent-control: #. Translators: This documents the --user command line option to malcontent-control:
#: malcontent-control/application.c:102 #: malcontent-control/application.c:102
@ -300,44 +257,44 @@ msgstr "Användare att välja i användargränssnittet"
msgid "USERNAME" msgid "USERNAME"
msgstr "ANVÄNDARNAMN" msgstr "ANVÄNDARNAMN"
#: malcontent-control/application.c:115 #: malcontent-control/application.c:116
msgid "— view and edit parental controls" msgid "— view and edit parental controls"
msgstr "— visa och redigera föräldrakontroller" msgstr "— visa och redigera föräldrakontroller"
#. Translators: This is the title of the main window #. Translators: This is the title of the main window
#. Translators: the name of the application as it appears in a software center #. Translators: the name of the application as it appears in a software center
#: malcontent-control/application.c:122 malcontent-control/main.ui:12 #: malcontent-control/application.c:123 malcontent-control/main.ui:17
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3
msgid "Parental Controls" msgid "Parental Controls"
msgstr "Föräldrakontroller" msgstr "Föräldrakontroller"
#: malcontent-control/application.c:308 #: malcontent-control/application.c:309
msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgid "Copyright © 2019, 2020 Endless Mobile, Inc."
msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc."
#. Translators: this should be "translated" to the #. Translators: this should be "translated" to the
#. names of people who have translated Malcontent into #. names of people who have translated Malcontent into
#. this language, one per line. #. this language, one per line.
#: malcontent-control/application.c:313 #: malcontent-control/application.c:314
msgid "translator-credits" msgid "translator-credits"
msgstr "Anders Jonsson <anders.jonsson@norsjovallen.se>" msgstr "Anders Jonsson <anders.jonsson@norsjovallen.se>"
#. Translators: "Malcontent" is the brand name of this #. Translators: "Malcontent" is the brand name of this
#. project, so should not be translated. #. project, so should not be translated.
#: malcontent-control/application.c:319 #: malcontent-control/application.c:320
msgid "Malcontent Website" msgid "Malcontent Website"
msgstr "Webbplats för Malcontent" msgstr "Webbplats för Malcontent"
#: malcontent-control/application.c:337 #: malcontent-control/application.c:341
msgid "The help contents could not be displayed" msgid "The help contents could not be displayed"
msgstr "Hjälpinnehållet kunde inte visas" msgstr "Hjälpinnehållet kunde inte visas"
#: malcontent-control/application.c:374 #: malcontent-control/application.c:388
msgid "Failed to load user data from the system" msgid "Failed to load user data from the system"
msgstr "Misslyckades med att läsa in användardata från systemet" msgstr "Misslyckades med att läsa in användardata från systemet"
#: malcontent-control/application.c:376 #: malcontent-control/application.c:390
msgid "Please make sure that the AccountsService is installed and enabled." msgid "Please make sure that the AccountsService is installed and enabled."
msgstr "Försäkra dig om att AccountsService är installerat och aktiverat." msgstr "Försäkra dig om att AccountsService är installerat och aktiverat."
@ -350,7 +307,7 @@ msgstr "Försäkra dig om att AccountsService är installerat och aktiverat."
#. * further! #. * further!
#. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new
#. #.
#: malcontent-control/application.c:407 #: malcontent-control/application.c:421
#, c-format #, c-format
msgid "" msgid ""
"Its recommended that restrictions are set as part of an ongoing " "Its recommended that restrictions are set as part of an ongoing "
@ -362,30 +319,30 @@ msgstr ""
"internet-safety'>Du kan läsa denna guide</a> (på engelska) om vad som finns " "internet-safety'>Du kan läsa denna guide</a> (på engelska) om vad som finns "
"att ta i beaktande." "att ta i beaktande."
#: malcontent-control/carousel.ui:48 #: malcontent-control/carousel.ui:38
msgid "Previous Page" msgid "Previous Page"
msgstr "Föregående sida" msgstr "Föregående sida"
#: malcontent-control/carousel.ui:74 #: malcontent-control/carousel.ui:57
msgid "Next Page" msgid "Next Page"
msgstr "Nästa sida" msgstr "Nästa sida"
#: malcontent-control/main.ui:115 #: malcontent-control/main.ui:87
msgid "Permission Required" msgid "Permission Required"
msgstr "Behörighet krävs" msgstr "Behörighet krävs"
#: malcontent-control/main.ui:129 #: malcontent-control/main.ui:88
msgid "" msgid ""
"Permission is required to view and change user parental controls settings." "Permission is required to view and change user parental controls settings."
msgstr "" msgstr ""
"Behörighet krävs för att visa och ändra inställningar för föräldrakontroll " "Behörighet krävs för att visa och ändra inställningar för föräldrakontroll "
"för användare." "för användare."
#: malcontent-control/main.ui:182 #: malcontent-control/main.ui:110
msgid "No Standard User Accounts" msgid "No Standard User Accounts"
msgstr "Inga standardanvändarkonton" msgstr "Inga standardanvändarkonton"
#: malcontent-control/main.ui:197 #: malcontent-control/main.ui:111
msgid "" msgid ""
"Parental controls can only be applied to standard user\n" "Parental controls can only be applied to standard user\n"
"accounts. These can be created in the user settings." "accounts. These can be created in the user settings."
@ -394,19 +351,19 @@ msgstr ""
"standardanvändarkonton. Dessa kan skapas i\n" "standardanvändarkonton. Dessa kan skapas i\n"
"användarinställningarna." "användarinställningarna."
#: malcontent-control/main.ui:210 #: malcontent-control/main.ui:115
msgid "_User Settings" msgid "_User Settings"
msgstr "_Användarinställningar" msgstr "_Användarinställningar"
#: malcontent-control/main.ui:238 #: malcontent-control/main.ui:138
msgid "Loading…" msgid "Loading…"
msgstr "Läser in…" msgstr "Läser in…"
#: malcontent-control/main.ui:301 #: malcontent-control/main.ui:171
msgid "_Help" msgid "_Help"
msgstr "_Hjälp" msgstr "_Hjälp"
#: malcontent-control/main.ui:305 #: malcontent-control/main.ui:175
msgid "_About Parental Controls" msgid "_About Parental Controls"
msgstr "_Om Föräldrakontroller" msgstr "_Om Föräldrakontroller"
@ -431,12 +388,12 @@ msgstr ""
msgid "Main window" msgid "Main window"
msgstr "Huvudfönster" msgstr "Huvudfönster"
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:38 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39
msgid "The GNOME Project" msgid "The GNOME Project"
msgstr "GNOME-projektet" msgstr "GNOME-projektet"
#. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon!
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14
msgid "" msgid ""
"parental controls;screen time;app restrictions;web browser restrictions;oars;" "parental controls;screen time;app restrictions;web browser restrictions;oars;"
"usage;usage limit;kid;child;" "usage;usage limit;kid;child;"
@ -478,26 +435,3 @@ msgstr "Användaren ”%s” har ingen återstående tid"
#, c-format #, c-format
msgid "Error setting time limit on login session: %s" msgid "Error setting time limit on login session: %s"
msgstr "Fel vid inställning av tidsgräns på inloggningssession: %s" msgstr "Fel vid inställning av tidsgräns på inloggningssession: %s"
#~ msgid "Not allowed to query session limits data for user %u"
#~ msgstr "Ej tillåtet att efterfråga sessionsgränsdata för användare %u"
#~ msgid "Applications installed by %s will not appear for other users."
#~ msgstr "Program installerade av %s kommer inte visas för andra användare."
# Systeminstallation ej tillåtet, användaren kan bara installera åt sig själv
#~ msgid "Restrict Application Installation for _Others"
#~ msgstr "Begränsa installation av program åt _andra"
#~ msgid "No Child Users Configured"
#~ msgstr "Inga barnanvändare konfigurerade"
#~ msgid ""
#~ "No child users are currently set up on the system. Create one before "
#~ "setting up their parental controls."
#~ msgstr ""
#~ "Inga barnanvändare har konfigurerats på systemet. Skapa en innan du "
#~ "konfigurerar deras föräldrakontroller."
#~ msgid "Create _Child User"
#~ msgstr "Skapa _barnanvändare"